diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 176ebb3..937e9b3 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -6,7 +6,7 @@ on: # Runs on pushes targeting the `main` branch. Change this to `master` if you're # using the `master` branch as the default branch. push: - branches: [deploy] + branches: [deploy, v2] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: @@ -41,7 +41,7 @@ jobs: - name: Setup Pages uses: actions/configure-pages@v3 - name: Install dependencies - run: npm ci # or pnpm install / yarn install + run: npm i # or pnpm install / yarn install - name: Build with VitePress run: npm run docs:build # or pnpm docs:build / yarn docs:build - name: Upload artifact diff --git a/.gitignore b/.gitignore index 321d0ce..ae0a0f8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,11 @@ +.github/ node_modules .DS_STORE deploy/ dist/ -run.sh \ No newline at end of file +.env +abc.ts +.vitepress/cache +docs/.vitepress/cache/ +coverage/ +todo.md \ No newline at end of file diff --git a/.npmignore b/.npmignore index 87b291d..a947c96 100644 --- a/.npmignore +++ b/.npmignore @@ -1,8 +1,16 @@ +api-docs/ docs/ -settings/ test/ src/ -nodemon.json -CNAME -index.html -index.md \ No newline at end of file +test/ +vite.config.ts +examples/ +coverage/ +tsconfig.json +build_tricks +abc.ts +bin/ +coverage/ +todo.md +.github +.vscode \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..25fa621 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "typescript.tsdk": "node_modules/typescript/lib" +} diff --git a/CNAME b/CNAME deleted file mode 100644 index 3cfa6be..0000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -speedybot.js.org \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index a337f74..0000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,19 +0,0 @@ -## Help take out the 🗑 - -- [ ] better cli - -- [ ] docs, links & resources - -- [ ] Zero-config deployment - -- [ ] Bulletproof version of: $ npx @vue/cli ui - -- [ ] Dream: $ npx cli chat_config_and_handlers.ts ## boots server - -- [ ] Intent matching or language models: send to DialogFlow, Lex, GPT3, etc - -- [ ] 3rd-party integration-- airtable/smartsheet/ittt/email/etc - -- [ ] Slim down dependencies - -- [ ] examples: "Swellbot"-- call surf/weather api, "icecream"-- save state on server, show graphs of icecream orders, etc \ No newline at end of file diff --git a/LICENSE b/LICENSE index 0ff345d..50ec736 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2021 Victor Algaze +Copyright (c) 2024 Victor Algaze Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 24ec99f..3dace45 100644 --- a/README.md +++ b/README.md @@ -1,467 +1,128 @@ -## Speedybot +# SpeedyBot 2.0 -``` -tl:dr; The speedy & easy way to launch a bot -``` - -[![sb](https://i.imgur.com/VQoXfHn.gif)](https://share.descript.com/view/ds3UA1kUb9z) - ---- - -**Note:** To jump right in, go here: **[quickstart.md](https://github.com/valgaze/speedybot/blob/master/quickstart.md)** - -## What's Speedybot? - -Speedybot is a tool to take you from zero to a user-valuable bot as quickly as possible w/ a **buttery-smooth developer experience.** Think of it as a *"helper"* library that extends the marvelous **[Node WebEx Bot Framework](https://github.com/WebexSamples/webex-node-bot-framework)** and makes it **fast and easy** for you to create sophisticated conversation agents. In short, Speedybot lets you focus on the stuff that actually matters-- content and powerful integrations. - -## Features - -🌟 Collect + validate user input-- and reprompt if validation fails (more info **[here](#prompt)**) - -🌟 "SpeedyCard" to easily create rich interactive **["Adaptive Cards"](https://developer.webex.com/docs/api/guides/cards)** (more info **[here](#speedycard)**) - -🌟 Access encrypted file uploads + attachments (more info **[here](#upload-a-file)**) - -🌟 Integrate with 3rd-party services - -🌟 Response variation + templating - -🌟 Automatic "help" generation +

+ + + + + + + + + +

-🌟 Persist data between conversation runs ("globally" and scoped to an individual user) + -🌟 Zero configuration to get up and running (defaults to websockets for webhooks-- no nGrok or tunneling) +tl;dr: SpeedyBot helps you efficiently design, deploy, and secure rich conversation systems -🌟 Lots of quality-of-life and convenience features +## Setup -🌟 Full sample applications-- just add your token and boot up (more info **[here](#sample-applications)**) - - -## How to use - -The best way to see speedybot in action is to jump right in, see here for batteries-included starter: https://github.com/valgaze/speedybot-starter - -## Video instructions - -- 101: https://share.descript.com/view/ds3UA1kUb9z - -- Webhooks/3rd-party integrations: https://share.descript.com/view/bnyupJvNJcx - -You can also use the **[CLI Tool "speedyhelper"](#cli)** - -```sh -npx speedyhelper setup +``` +npm install speedybot ``` -## Special keywords - -There are a few "special" keywords you can use to "listen" to special events: - -- *<@submit>*: Handler that will run anytime data is submitted from an **[Adaptive Card](https://developer.webex.com/docs/api/guides/cards)** - -- *<@nomatch>*: Handler that will run if there are no handlers which will match the input - -- *<@catchall>*: Handler that will run on **every** message received (in a real agent you probably will not write hard-coded handlers and instead use this handler to dispatch user messages to natural language processing services like **[DialogFlow](https://cloud.google.com/dialogflow)** or **[Lex](https://aws.amazon.com/lex/)**) - -- *<@fileupload>*: Handler that will fire on **every** file-upload or file-attachment sent to the bot +## Speedy & Easy -- *<@help>*: There is a built-in help handler by default (it will print out all of your custom handler's helpTexts from settings/handlers.ts), but use this keyword if you want to roll your own help +- SpeedyBot offers a buttery-smooth developer experience to keep you building your bots rather than scouring the docs. It's written in typescript + built-in type hints with autocomplete, has zero external dependencies, supports ESM + CommonJS, provides lots of other DX goodness that makes building bots a breeze like local development with live-reload (see **[here for details](https://github.com/valgaze/speedybot/tree/deploy/examples/speedybot-local-server)**). -- *<@spawn>*: Gets called whenever a user adds your bot to a new space-- there are some caveats, however, to its behavior, so if you think you'll need this, see **[here](https://github.com/WebexSamples/webex-node-bot-framework/blob/master/README.md#spawn)**, **[here](https://developer.webex.com/blog/a-deeper-dive-into-the-webex-bot-framework-for-node-js)** or the **[resources page](https://github.com/valgaze/speedybot/blob/master/docs/resources.md)** for all the details +- SpeedyBot shrinks away all the complexity and makes it a breeze to handle user input regardless of the source/modality-- text, file uploads, form submission from SpeedyCards, etc -- *<@despawn>*: Opposite of spawn, see **[here](https://github.com/WebexSamples/webex-node-bot-framework/#despawn)** for details +- SpeedyBot seamlessly operates across diverse severless/container-less platforms (Lambda/Deno/Workers/etc) as well as conventional fixed servers and even within CI/CD scripts. As long you've got internet connectivity, SpeedyBot functions seamlessly +## SpeedyBot basics -## CLI +You can see fleshed-out examples at **[https://speedybot.js.org/examples/](https://speedybot.js.org/examples/)** and see how SpeedyBot has you covered for crafting bots that can do it all-- securely integrate w/ LLMs + content management systems, **[process file-uploads](https://speedybot.js.org/patterns.md#handle-file-uploads)**, **[segment content based on user data + behavior](https://speedybot.js.org/patterns.md#restrict-emails)**, create + manage **[SpeedyCards](https://speedybot.js.org/speedycard)**, ask for a user's location in a privacy-respecting way and lots more. -| **Command** |**Description** | -| :-------------------------: | :-------------------------------------------------------------------------------------------------- | -| `npx speedyhelper setup` | scaffold a starter speedybot project (requires git) | -| `npx speedyhelper setup -t aaa-bbb-ccc-ddd` | scaffold a speedybot project using the value after setup as the token| -| `npx speedyhelper help` | show basic CLI help info | -| `npx speedyhelper web -q` | Kick off a web-based chat interface (use -q flag to interactively add token + roomId) | -| `npx speedyhelper sendmsg` | Send a message to a room using bot access token | -| `npx speedyhelper tunnel -p 8000` | Start an nGrok tunnel, defaults to port 8000| +### Auto-binding +As a convenience, SpeedyBot's "magic" $ parameter will auto-bind to the incoming message and give you access to all kinds of useful features +```js +const Bot = new SpeedyBot(); -
(Global install using npm/yarn) +// You get an incoming messsage +Bot.addStep(async ($) => { + await $.send("Hello the originating person/room"); + await $.reply("Reply to the originating person/room"); -Rather than using **[npx](https://docs.npmjs.com/cli/v7/commands/npx)**, you can perform a global install which install speedyhelper to your path + // The same as the following + await Bot.sendTo($.author.email, "my message"); -```sh -npm i -g speedyhelper + const parentMessageID = $.id; + await Bot.replyTo(parentMessageID, $.author.email, "my great reply message"); -yarn global add speedyhelper + return $.next; +}); ``` -Make sure all worked well by opening a new terminal and entering: +There's also a lot more you can do -```sh -speedyhelper help -``` + -
+## SpeedyCards -# Some Demos +SpeedyCards make it (yep) speedy and easy to build **[Adaptive Cards](https://adaptivecards.io)** where you can easily collect structured data from users and add colors, "chips", formatting and other visual embellishments. -## Prompt + -ex. When the user says 'prompt', the agent will continue asking the user for a number whose digits sum to 6 (can quit by saying ```$exit```) + -![sb](https://raw.githubusercontent.com/valgaze/speedybot/master/docs/assets/prompt_demo.gif) +## LLM Token Streaming -```ts -import { $ } from 'speedybot' - -// $(bot).prompt has 3 components -// - (1) retry (list of message to provide feedback or encourage the user to modify their) -// - (2) success (handler when validation passes, the final parameter is the value) -// - (3) validate (function that accepts the user-provided value as a parameter) - -export default [ - { - keyword: 'prompt', - async handler(bot) { - - const $bot = $(bot) - await bot.say('Sending you a prompt...') - $bot.prompt('Enter a number whose digits that add up to 6 (ex 51, 60, 33, 501, etc)', { - retry: [`Sorry, doesn't add up to 6`, - `Whoops that value doesn't work try again`, - `That value doesn't work`, - `Whoops, that input is not valid. You can type '$exit' to abandon this` - ], - async success(bot, trigger, answer) { - bot.say('You did it!!! Good job! <3 <3') - bot.say(answer) - - // Ex. Submit data to a 3rd-party service/integration - const res = await $bot.post('https://jsonplaceholder.typicode.com/posts', { data: { title: 'my special value that adds to 6', userValue: answer } }) - $(bot).sendSnippet(res.data, 'Posted response to https://jsonplaceholder.typicode.com/posts') - }, - validate(val=0) { - // Make sure digits add to 6 - const sum = String(val).split('') - .map(Number) - .reduce(function (prev, next) { - return prev + next; - }, 0) - if (sum === 6) { - return true - } else { - return false - } - } - }) - }, - helpText: 'A handler which will ask the user for a number whose digits sum to 6' - } -] -``` +SpeedyBot makes it speedy & easy to build serverless bots for the LLM era. See the **[LLM steam example](https://speedybot.js.org/examples/llm-stream)** -## SpeedyCard + -ex. Tell the bot "sendcard" to get a card, type into the card & tap submit, catch submission using *<@submit>* and echo back to user +## SpeedyBot "listener" -![sb](https://raw.githubusercontent.com/valgaze/speedybot/master/docs/assets/send_card.gif) +You can use SpeedyBot to only send messages + cards and nothing more. But if you have data on those cards you want to capture or if you want to provide an automated conversation experience SpeedyBot takes of all the hassle. -```ts -import { SpeedyCard } from 'speedybot' -export default [{ - keyword: '<@submit>', - handler(bot, trigger) { - bot.say(`Submission received! You sent us ${JSON.stringify(trigger.attachmentAction.inputs)}`) - }, - helpText: 'Special handler that fires when data is submitted' - }, - { - keyword: 'sendcard', - handler(bot, trigger) { - bot.say('One card on the way...') - // Adapative Card: https://developer.webex.com/docs/api/guides/cards - const myCard = new SpeedyCard().setTitle('System is 👍') - .setSubtitle('If you see this card, everything is working') - .setImage('https://raw.githubusercontent.com/valgaze/speedybot/master/docs/assets/chocolate_chip_cookies.png') - .setInput(`What's on your mind?`) - .setUrl('https://www.youtube.com/watch?v=3GwjfUFyY6M', 'Take a moment to celebrate') - .setTable([[`Bot's Date`, new Date().toDateString()], ["Bot's Uptime", `${String(process.uptime())}s`]]) - .setData({mySpecialData: {a:1, b:2}}) - bot.sendCard(myCard.render(), 'Your client does not currently support Adaptive Cards') - }, - helpText: 'Sends an Adaptive Card with an input field to the user' - } -] -``` - -## Suggestion Chips - -![sb](https://raw.githubusercontent.com/valgaze/speedybot/master/docs/assets/chip_tap_persist.gif) +Ex. Here is a minimal handler that will echo back information if a user transmits data via text, file, and adaptive card. Write "show card" to display a card. You can chain multiple addSteps if you need to, but in this era you probably don't need/want to be doing much logic in code. -Suggestion "chips" are a shortcut to trigger other handlers as if the user uttered it themselves-- useful for quizzing or providing suggestions of what to say next - -ex. When the user enters the text 'chips' or 'chip', they can select an item and trigger another handler +See full example applications here: **[https://speedybot.js.org/examples](https://speedybot.js.org/examples)** ```ts -import { $, BotInst, Trigger} from 'speedybot' - -// $(bot).prompt has 3 components -// - (1) retry (list of message to provide feedback or encourage the user to modify their) -// - (2) success (handler when validation passes, the final parameter is the value) -// - (3) validate (function that accepts the user-provided value as a parameter) - -export default [ - { - keyword: ['chips', 'chip'], - async handler(bot) { - const $bot = $(bot) - await bot.say('Here are some chips...') - - const specialChip = { - label: 'my special chip', - handler(bot: BotInst) { - bot.say('You tapped the special chip!') - } - } - $bot.sendChips(['hey', specialChip, 'ping', { label:`Say the phrase 'pong'`, keyword: 'pong' }], 'Tap an item below') - }, - helpText: 'Show suggestion chips' - }, - { - keyword: ['hi', 'hey', 'yo', 'whatsup'], - handler(bot, trigger) { - const reply = `Heya how's it going ${trigger.person.displayName}?` - bot.say(reply) - }, - helpText: 'Basic greeting handler' - }, - { - keyword: ['ping', 'pong'], - handler(bot, trigger) { - const normalized = trigger.text.toLowerCase() - if (normalized === 'ping') { - bot.say('pong') - } else { - bot.say('ping') - } - }, - helpText: 'The ping/pong handler' +import { SpeedyBot } from "speedybot"; + +const Bot = new SpeedyBot(); +Bot.addStep(async ($) => { + // handle text + if ($.text) { + await $.send(`You said "${$.text}`); + + if ($.text.toLowerCase() === "showcard") { + const card = $.card() + .addTitle("Capture data") + .addTextarea("Submit data") + .addPickerDropdown(["option 1", "option 2", "option 3", "option 4"]); + await $.send(card); } -] -``` - -## Upload a file - -ex. When the user uploads a spreadsheet file (*.xlsx), the agent will take the file-data, transform it into an html file, display the HTML file and generate a downloadable file for the user - -![sb](https://raw.githubusercontent.com/valgaze/speedybot-superpowers/master/docs/assets/speedybot_xlsx.gif -) - -```ts - -// See <@fileupload> handler here: https://github.com/valgaze/speedybot-superpowers/blob/master/settings/handlers.ts#L77 - + } + + // file handler + if ($.file) { + const { name, extension, contentType } = $.file; + await $.send( + `You uploaded "${name}", a *.${extension} file [${contentType}]` + ); + // Fetch raw bytes (which you can pass onto other systems) + // const TheData = await $.file.getData(); // do something w/ the contents/bytes + } + + // form/card submissions + if ($.data) { + const dataSnippet = $.buildDataSnippet($.data); + await $.send(`This data was submitted:`); + await $.send(dataSnippet); + } + + return $.next; +}); + +export default Bot; ``` +## 🐍 Speedybot-Python -## Adding a new chat handler - -With Speedybot, all you need to worry about is the **[settings directory](https://github.com/valgaze/speedybot-starter/tree/master/settings)** directory with two files: - -**1. config.json:** This is where you'll put your bot access token and the "tunnel" (or webhost) where your bot is reachable from webhooks - -**2. handlers.ts:** A list of "handlers" that respond to keywords - -Example handler: - -A handler has 3 components: - -- Keyword: a string, regex, or list of strings or regex's that will match against the user's input (or a **[Special Keyword](#special-keywords)**) - -- Handler: A function that takes a ```bot``` and ```trigger``` - -- helpText: A decription of what the handler does (used by the default <@help> handler to tell users what your bot can do) - -```js -{ - keyword: ['hello', 'hey', 'yo', 'watsup', 'hola'], - handler(bot, trigger) { - // bot: https://github.com/WebexSamples/webex-node-bot-framework#bot - // trigger: https://github.com/WebexSamples/webex-node-bot-framework#trigger - const reply = `Heya how's it going ${trigger.person.displayName}?` - bot.say(reply) - }, - helpText: `**hello** A handler that greets the user` -} -``` - -## $uperpowers - -Speedybot can also give your bot $uperpowers-- **[see here for details on $uperpowers](https://github.com/valgaze/speedybot/blob/master/docs/superpowers.md)** - -
$uperpowers sample - -```ts -import { $ } from 'speedybot' - -export default { - keyword: ['$', '$uperpowers', '$uperpower', '$superpower'], - async handler(bot, trigger) { - // ## 0) Wrap the bot object in $ to give it $uperpowers, ex $(bot) - const $bot = $(bot) - - // "counters" (scoped to user) - const counter = $bot.get - const counterRef = await $bot.getCounter('myCounter') // Defaults to 0 if does not exist - $bot.log('current counter value', counterRef) - - await $bot.increaseCounter('myCounter') // 1 - const counterMsg = `This handler has been run ${counterRef} times` - bot.say(counterMsg) - - - // Provide some space - await $bot.clearScreen() - - // ## 1) Contexts: set, remove, and list - // Contexts persist between "turns" of chat - // Note: contexts can optionally store data - // If you just need to stash information attached to a user, see "$(bot).saveData" below - await $bot.saveContext('mycontext1') - await $bot.saveContext('mycontext2', { data: new Date().toISOString()}) - - const mycontext2 = await $bot.getContext('mycontext2') - $bot.log('# mycontext2', mycontext2) // { data: '2021-11-05T05:03:58.755Z'} - - // Contexts: list active contexts - const allContexts = await $bot.getAllContexts() // ['mycontext1', 'mycontext2'] - bot.say(`Contexts: ${JSON.stringify(allContexts)}`) - - // Contexts: check if context is active - const isActive = await $bot.contextActive('mycontext1') - $bot.log(`mycontext1 is active, ${isActive}`) // 'mycontext1 is active, true' - - // Contexts: remove context - await $bot.deleteContext('mycontext1') - - const isStillActive = await $bot.contextActive('mycontext1') - $bot.log(`mycontext1 is active, ${isStillActive}`) // 'mycontext1 is active, false' - - // ## 2) Helpers to add variation and rich content - - // sendRandom: Sends a random string from a list - $bot.sendRandom(['Hey!','Hello!!','Hiya!']) - - // sendTemplate: like sendRandom but replace $[variable_name] with a value - const utterances = ['Hey how are you $[name]?', `$[name]! How's it going?`, '$[name]'] - const template = { name: 'Joey'} - $bot.sendTemplate(utterances, template) - - // sendURL: Sends a URL in a clickable card - $bot.sendURL('https://www.youtube.com/watch?v=3GwjfUFyY6M', 'Go Celebrate') - - // snippet: Generate a snippet that will render data in markdown-friendly format - const JSONData = {a: 1, b:2, c:3, d:4} - - $bot.sendSnippet(JSONData, `**Here's some JSON, you'll love it**`) // send to room - - // Snippet to a specifc room or specific email - // const snippet = $bot.snippet(JSONData) - // $bot.send({markdown: snippet, roomId:trigger.message.roomId, text: 'Your client does not render markdown :('}) // send to a specific room - // $bot.send({markdown: snippet, toPersonEmail:'joe@joe.com', text: 'Your client does not render markdown :('}) // send to a specific person - - // ## 3) Conversation "chips" - - // Set all chips to disappear after tap (defaults to false) - $bot.setChipsConfig({disappearOnTap: true}) - - // Send chip with custom handler - const customChip = { - label: 'custom chip', - handler(bot:BotInst, trigger: Trigger) { - $bot.sendSnippet(trigger, `**The 'custom chip' was tapped** `) - $bot.$trigger('chips', trigger) // re-render chips - } - } - - // Add optional title to chips - $bot.sendChips(['hey', 'ping', 'pong', '$', {label:`Trigger the 'hey' handler`, keyword: 'hey'}, customChip], 'These chips will disappear on tap') - - - // ## 4) Save data between conversation "runs" (scoped to user, async) - - interface SpecialUserData { - specialValue: string; - userId: String; - } - const specialData:SpecialUserData = { - specialValue: Math.random().toString(36).slice(2), - userId: trigger.personId, - } - - // Save the data - await $bot.saveData('userData', specialData) - - // Retrieve the data (returns null if does not exist) - const dataRes = await $bot.getData('userData') - - if (dataRes) { - // These are now "typed" - const theValue = dataRes.specialValue - const id = dataRes.userId - $bot.log(`Your specal value was ${theValue} and your id is ${id}`) - - // destroy data - $bot.deleteData('userData') - } - - // ## 4a) Stash "global" values between runs (don't use a lot, short snippets like counters or other data) - // Note: not persistent storage if using default storage provider - const globalVal = $bot.globalGet('myKey') - - if (!globalVal) { - $bot.globalSave('myKey', { dateAdded: new Date().toISOString() }) - } - - - // ## 5) Integrate with 3rd-parties: $bot.get, $bot.post, etc - - // ex. get external data - // Opts are axios request config (for bearer tokens, proxies, unique config, etc) - const res = await $bot.get('https://randomuser.me/api/') - bot.say({markdown: $bot.snippet(res.data)}) - - // ## 6) Files & attachments - - // Send a local file - // Provide a path/filename, will be attached to message - // $bot.sendFile(__dirname, 'assets', 'speedybot.pdf') - - // Send a publically accessible URL file - // Supported filetypes: ['doc', 'docx' , 'xls', 'xlsx', 'ppt', 'pptx', 'pdf', 'jpg', 'jpeg', 'bmp', 'gif', 'png'] - $bot.sendDataFromUrl('https://drive.google.com/uc?export=download&id=1VI4I4pYVVdMnB6YOQuSejVcrSwN0cotd') - - // // experimental (fileystem write): send arbitrary JSON back as a file - // $bot.sendDataAsFile(JSON.stringify({a:1,b:2}), '.json') - - // For an example involving parse'able spreadsheets (.xlsx), see here: https://github.com/valgaze/speedybot-superpowers - }, - helpText: 'A demo of $uperpowers' -} -``` -
- -## Sample Applications - -| Item | Remarks | Video | -| --- | --- | --- | -| **[Speedybot-starter](https://github.com/valgaze/speedybot-starter)** | "Batteries-included" starter application with few external dependencies-- use this to start | **[https://share.descript.com/view/ds3UA1kUb9z](https://share.descript.com/view/ds3UA1kUb9z)** | -| **[Speedybot-$uperpowers](https://github.com/valgaze/speedybot-superpowers)** | Application using $uperpowers with suggestion "chips", response variation, and capability to upload a spreadsheet *.xlsx and convert to an htm | **[https://share.descript.com/view/sBU3pk5L8Js](https://share.descript.com/view/sBU3pk5L8Js)** | -| **[Speedybot-serverless](https://github.com/valgaze/speedybot-serverless-experiment)** | [EXPERIMENTAL/REDUCED FUNCTIONALITY] Proof-of-concept for stateless/serverless chat agent (ex lambda function) | // | - - -## Credits/Attribution - -- Cookie image courtesy of Daniel Lopez: https://unsplash.com/photos/aT7CE57EZL8 & https://unsplash.com/@soydanielwolf - -- Robot icon (not included in this repo) created by Freepik - Flaticon, https://www.flaticon.com/free-icons/robot +If you want to build bots with Python rather than Typescript, you can check out [🐍Speedybot-Python🐍](https://pypi.org/project/speedybot) diff --git a/bin/cli.js b/bin/cli.js new file mode 100755 index 0000000..b2d9b59 --- /dev/null +++ b/bin/cli.js @@ -0,0 +1,15 @@ +#!/usr/bin/env node + +const { execSync } = require("child_process"); + +try { + execSync( + "npx -y create-speedybot@latest " + process.argv.slice(2).join(" "), + { + stdio: "inherit", + } + ); +} catch (error) { + console.error("Error running create-speedybot:", error.message); + process.exit(1); +} diff --git a/build_tricks/README.md b/build_tricks/README.md new file mode 100644 index 0000000..5fc9341 --- /dev/null +++ b/build_tricks/README.md @@ -0,0 +1,5 @@ +https://www.sensedeep.com/blog/posts/2021/how-to-create-single-source-npm-module.html + +SpeedyBot needs maximum flexibility, should never be fiddly or annoying to deal with + +Might break out into separate libs at some point (speedybot-commonjs) & build automation/rules it'll always be published together diff --git a/build_tricks/patch_dist.sh b/build_tricks/patch_dist.sh new file mode 100644 index 0000000..1fb71ba --- /dev/null +++ b/build_tricks/patch_dist.sh @@ -0,0 +1,15 @@ +# All praise to this excellent writeup: https://www.sensedeep.com/blog/posts/2021/how-to-create-single-source-npm-module.html + +## Set cwd to root + +cat >dist/cjs/package.json <dist/mjs/package.json < { - const hit = cache[str]; - return hit || (cache[str] = fn(str)); - }; -} -var hyphenateRE = /\B([A-Z])/g; -var hyphenate = cacheStringFunction( - (str) => str.replace(hyphenateRE, "-$1").toLowerCase() -); -var camelizeRE = /-(\w)/g; -var camelize = cacheStringFunction((str) => { - return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : ""); -}); -function identity(arg) { - return arg; -} - -// node_modules/@vueuse/core/index.mjs -var defaultWindow = isClient ? window : void 0; -var defaultDocument = isClient ? window.document : void 0; -var defaultNavigator = isClient ? window.navigator : void 0; -var defaultLocation = isClient ? window.location : void 0; -function useMounted() { - const isMounted = ref(false); - if (getCurrentInstance()) { - onMounted(() => { - isMounted.value = true; - }); - } - return isMounted; -} -function useSupported(callback) { - const isMounted = useMounted(); - return computed(() => { - isMounted.value; - return Boolean(callback()); - }); -} -function useMediaQuery(query, options = {}) { - const { window: window2 = defaultWindow } = options; - const isSupported = useSupported(() => window2 && "matchMedia" in window2 && typeof window2.matchMedia === "function"); - let mediaQuery; - const matches = ref(false); - const handler = (event) => { - matches.value = event.matches; - }; - const cleanup = () => { - if (!mediaQuery) - return; - if ("removeEventListener" in mediaQuery) - mediaQuery.removeEventListener("change", handler); - else - mediaQuery.removeListener(handler); - }; - const stopWatch = watchEffect(() => { - if (!isSupported.value) - return; - cleanup(); - mediaQuery = window2.matchMedia(toValue(query)); - if ("addEventListener" in mediaQuery) - mediaQuery.addEventListener("change", handler); - else - mediaQuery.addListener(handler); - matches.value = mediaQuery.matches; - }); - tryOnScopeDispose(() => { - stopWatch(); - cleanup(); - mediaQuery = void 0; - }); - return matches; -} -var _global = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; -var globalKey = "__vueuse_ssr_handlers__"; -var handlers = getHandlers(); -function getHandlers() { - if (!(globalKey in _global)) - _global[globalKey] = _global[globalKey] || {}; - return _global[globalKey]; -} -var defaultState = { - x: 0, - y: 0, - pointerId: 0, - pressure: 0, - tiltX: 0, - tiltY: 0, - width: 0, - height: 0, - twist: 0, - pointerType: null -}; -var keys = Object.keys(defaultState); -var DEFAULT_UNITS = [ - { max: 6e4, value: 1e3, name: "second" }, - { max: 276e4, value: 6e4, name: "minute" }, - { max: 72e6, value: 36e5, name: "hour" }, - { max: 5184e5, value: 864e5, name: "day" }, - { max: 24192e5, value: 6048e5, name: "week" }, - { max: 28512e6, value: 2592e6, name: "month" }, - { max: Number.POSITIVE_INFINITY, value: 31536e6, name: "year" } -]; -var _TransitionPresets = { - easeInSine: [0.12, 0, 0.39, 0], - easeOutSine: [0.61, 1, 0.88, 1], - easeInOutSine: [0.37, 0, 0.63, 1], - easeInQuad: [0.11, 0, 0.5, 0], - easeOutQuad: [0.5, 1, 0.89, 1], - easeInOutQuad: [0.45, 0, 0.55, 1], - easeInCubic: [0.32, 0, 0.67, 0], - easeOutCubic: [0.33, 1, 0.68, 1], - easeInOutCubic: [0.65, 0, 0.35, 1], - easeInQuart: [0.5, 0, 0.75, 0], - easeOutQuart: [0.25, 1, 0.5, 1], - easeInOutQuart: [0.76, 0, 0.24, 1], - easeInQuint: [0.64, 0, 0.78, 0], - easeOutQuint: [0.22, 1, 0.36, 1], - easeInOutQuint: [0.83, 0, 0.17, 1], - easeInExpo: [0.7, 0, 0.84, 0], - easeOutExpo: [0.16, 1, 0.3, 1], - easeInOutExpo: [0.87, 0, 0.13, 1], - easeInCirc: [0.55, 0, 1, 0.45], - easeOutCirc: [0, 0.55, 0.45, 1], - easeInOutCirc: [0.85, 0, 0.15, 1], - easeInBack: [0.36, 0, 0.66, -0.56], - easeOutBack: [0.34, 1.56, 0.64, 1], - easeInOutBack: [0.68, -0.6, 0.32, 1.6] -}; -var TransitionPresets = Object.assign({}, { linear: identity }, _TransitionPresets); - -// node_modules/vitepress/dist/client/shared.js -var inBrowser = typeof document !== "undefined"; - -// node_modules/vitepress/dist/client/theme-default/support/utils.js -import { withBase } from "vitepress"; - -// node_modules/vitepress/dist/client/theme-default/composables/data.js -import { useData as useData$ } from "vitepress"; -var useData = useData$; - -// node_modules/vitepress/dist/client/theme-default/support/utils.js -function ensureStartingSlash(path) { - return /^\//.test(path) ? path : `/${path}`; -} - -// node_modules/vitepress/dist/client/theme-default/support/sidebar.js -function getSidebar(_sidebar, path) { - if (Array.isArray(_sidebar)) - return addBase(_sidebar); - if (_sidebar == null) - return []; - path = ensureStartingSlash(path); - const dir = Object.keys(_sidebar).sort((a, b) => { - return b.split("/").length - a.split("/").length; - }).find((dir2) => { - return path.startsWith(ensureStartingSlash(dir2)); - }); - const sidebar = dir ? _sidebar[dir] : []; - return Array.isArray(sidebar) ? addBase(sidebar) : addBase(sidebar.items, sidebar.base); -} -function getSidebarGroups(sidebar) { - const groups = []; - let lastGroupIndex = 0; - for (const index in sidebar) { - const item = sidebar[index]; - if (item.items) { - lastGroupIndex = groups.push(item); - continue; - } - if (!groups[lastGroupIndex]) { - groups.push({ items: [] }); - } - groups[lastGroupIndex].items.push(item); - } - return groups; -} -function addBase(items, _base) { - return [...items].map((_item) => { - const item = { ..._item }; - const base = item.base || _base; - if (base && item.link) - item.link = base + item.link; - if (item.items) - item.items = addBase(item.items, base); - return item; - }); -} - -// node_modules/vitepress/dist/client/theme-default/composables/sidebar.js -function useSidebar() { - const { frontmatter, page, theme: theme2 } = useData(); - const is960 = useMediaQuery("(min-width: 960px)"); - const isOpen = ref(false); - const sidebar = computed(() => { - const sidebarConfig = theme2.value.sidebar; - const relativePath = page.value.relativePath; - return sidebarConfig ? getSidebar(sidebarConfig, relativePath) : []; - }); - const hasSidebar = computed(() => { - return frontmatter.value.sidebar !== false && sidebar.value.length > 0 && frontmatter.value.layout !== "home"; - }); - const leftAside = computed(() => { - if (hasAside) - return frontmatter.value.aside == null ? theme2.value.aside === "left" : frontmatter.value.aside === "left"; - return false; - }); - const hasAside = computed(() => { - if (frontmatter.value.layout === "home") - return false; - if (frontmatter.value.aside != null) - return !!frontmatter.value.aside; - return theme2.value.aside !== false; - }); - const isSidebarEnabled = computed(() => hasSidebar.value && is960.value); - const sidebarGroups = computed(() => { - return hasSidebar.value ? getSidebarGroups(sidebar.value) : []; - }); - function open() { - isOpen.value = true; - } - function close() { - isOpen.value = false; - } - function toggle() { - isOpen.value ? close() : open(); - } - return { - isOpen, - sidebar, - sidebarGroups, - hasSidebar, - hasAside, - leftAside, - isSidebarEnabled, - open, - close, - toggle - }; -} -var hashRef = ref(inBrowser ? location.hash : ""); -if (inBrowser) { - window.addEventListener("hashchange", () => { - hashRef.value = location.hash; - }); -} - -// node_modules/vitepress/dist/client/theme-default/without-fonts.js -var theme = { - Layout, - enhanceApp: ({ app }) => { - app.component("Badge", VPBadge); - } -}; -var without_fonts_default = theme; -export { - default5 as VPDocAsideSponsors, - default3 as VPHomeFeatures, - default2 as VPHomeHero, - default4 as VPHomeSponsors, - default9 as VPTeamMembers, - default6 as VPTeamPage, - default8 as VPTeamPageSection, - default7 as VPTeamPageTitle, - without_fonts_default as default, - useSidebar -}; -//# sourceMappingURL=@theme_index.js.map diff --git a/docs/.vitepress/cache/deps/@theme_index.js.map b/docs/.vitepress/cache/deps/@theme_index.js.map deleted file mode 100644 index 21c6882..0000000 --- a/docs/.vitepress/cache/deps/@theme_index.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../../../node_modules/vitepress/dist/client/theme-default/index.js", "../../../../node_modules/vitepress/dist/client/theme-default/without-fonts.js", "../../../../node_modules/@vueuse/shared/index.mjs", "../../../../node_modules/@vueuse/core/index.mjs", "../../../../node_modules/vitepress/dist/client/shared.js", "../../../../node_modules/vitepress/dist/client/theme-default/support/utils.js", "../../../../node_modules/vitepress/dist/client/theme-default/composables/data.js", "../../../../node_modules/vitepress/dist/client/theme-default/support/sidebar.js", "../../../../node_modules/vitepress/dist/client/theme-default/composables/sidebar.js"], - "sourcesContent": ["import './styles/fonts.css';\nexport * from './without-fonts';\nexport { default as default } from './without-fonts';\n", "import './styles/vars.css';\nimport './styles/base.css';\nimport './styles/utils.css';\nimport './styles/components/custom-block.css';\nimport './styles/components/vp-code.css';\nimport './styles/components/vp-code-group.css';\nimport './styles/components/vp-doc.css';\nimport './styles/components/vp-sponsor.css';\nimport VPBadge from './components/VPBadge.vue';\nimport Layout from './Layout.vue';\n// Note: if we add more optional components here, i.e. components that are not\n// used in the theme by default unless the user imports them, make sure to update\n// the `lazyDefaultThemeComponentsRE` regex in src/node/build/bundle.ts.\nexport { default as VPHomeHero } from './components/VPHomeHero.vue';\nexport { default as VPHomeFeatures } from './components/VPHomeFeatures.vue';\nexport { default as VPHomeSponsors } from './components/VPHomeSponsors.vue';\nexport { default as VPDocAsideSponsors } from './components/VPDocAsideSponsors.vue';\nexport { default as VPTeamPage } from './components/VPTeamPage.vue';\nexport { default as VPTeamPageTitle } from './components/VPTeamPageTitle.vue';\nexport { default as VPTeamPageSection } from './components/VPTeamPageSection.vue';\nexport { default as VPTeamMembers } from './components/VPTeamMembers.vue';\nexport { useSidebar } from './composables/sidebar';\nconst theme = {\n Layout,\n enhanceApp: ({ app }) => {\n app.component('Badge', VPBadge);\n }\n};\nexport default theme;\n", "import { shallowRef, watchEffect, readonly, ref, watch, customRef, getCurrentScope, onScopeDispose, effectScope, provide, inject, isVue3, version, isRef, unref, computed, reactive, toRefs as toRefs$1, toRef as toRef$1, isVue2, set as set$1, getCurrentInstance, onBeforeMount, nextTick, onBeforeUnmount, onMounted, onUnmounted, isReactive } from 'vue-demi';\n\nvar __defProp$b = Object.defineProperty;\nvar __defProps$8 = Object.defineProperties;\nvar __getOwnPropDescs$8 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$d = Object.getOwnPropertySymbols;\nvar __hasOwnProp$d = Object.prototype.hasOwnProperty;\nvar __propIsEnum$d = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$b = (obj, key, value) => key in obj ? __defProp$b(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$b = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$d.call(b, prop))\n __defNormalProp$b(a, prop, b[prop]);\n if (__getOwnPropSymbols$d)\n for (var prop of __getOwnPropSymbols$d(b)) {\n if (__propIsEnum$d.call(b, prop))\n __defNormalProp$b(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$8 = (a, b) => __defProps$8(a, __getOwnPropDescs$8(b));\nfunction computedEager(fn, options) {\n var _a;\n const result = shallowRef();\n watchEffect(() => {\n result.value = fn();\n }, __spreadProps$8(__spreadValues$b({}, options), {\n flush: (_a = options == null ? void 0 : options.flush) != null ? _a : \"sync\"\n }));\n return readonly(result);\n}\n\nfunction computedWithControl(source, fn) {\n let v = void 0;\n let track;\n let trigger;\n const dirty = ref(true);\n const update = () => {\n dirty.value = true;\n trigger();\n };\n watch(source, update, { flush: \"sync\" });\n const get = typeof fn === \"function\" ? fn : fn.get;\n const set = typeof fn === \"function\" ? void 0 : fn.set;\n const result = customRef((_track, _trigger) => {\n track = _track;\n trigger = _trigger;\n return {\n get() {\n if (dirty.value) {\n v = get();\n dirty.value = false;\n }\n track();\n return v;\n },\n set(v2) {\n set == null ? void 0 : set(v2);\n }\n };\n });\n if (Object.isExtensible(result))\n result.trigger = update;\n return result;\n}\n\nfunction tryOnScopeDispose(fn) {\n if (getCurrentScope()) {\n onScopeDispose(fn);\n return true;\n }\n return false;\n}\n\nfunction createEventHook() {\n const fns = /* @__PURE__ */ new Set();\n const off = (fn) => {\n fns.delete(fn);\n };\n const on = (fn) => {\n fns.add(fn);\n const offFn = () => off(fn);\n tryOnScopeDispose(offFn);\n return {\n off: offFn\n };\n };\n const trigger = (param) => {\n return Promise.all(Array.from(fns).map((fn) => fn(param)));\n };\n return {\n on,\n off,\n trigger\n };\n}\n\nfunction createGlobalState(stateFactory) {\n let initialized = false;\n let state;\n const scope = effectScope(true);\n return (...args) => {\n if (!initialized) {\n state = scope.run(() => stateFactory(...args));\n initialized = true;\n }\n return state;\n };\n}\n\nfunction createInjectionState(composable) {\n const key = Symbol(\"InjectionState\");\n const useProvidingState = (...args) => {\n const state = composable(...args);\n provide(key, state);\n return state;\n };\n const useInjectedState = () => inject(key);\n return [useProvidingState, useInjectedState];\n}\n\nfunction createSharedComposable(composable) {\n let subscribers = 0;\n let state;\n let scope;\n const dispose = () => {\n subscribers -= 1;\n if (scope && subscribers <= 0) {\n scope.stop();\n state = void 0;\n scope = void 0;\n }\n };\n return (...args) => {\n subscribers += 1;\n if (!state) {\n scope = effectScope(true);\n state = scope.run(() => composable(...args));\n }\n tryOnScopeDispose(dispose);\n return state;\n };\n}\n\nfunction extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) {\n if (!isVue3 && !version.startsWith(\"2.7.\")) {\n if (process.env.NODE_ENV !== \"production\")\n throw new Error(\"[VueUse] extendRef only works in Vue 2.7 or above.\");\n return;\n }\n for (const [key, value] of Object.entries(extend)) {\n if (key === \"value\")\n continue;\n if (isRef(value) && unwrap) {\n Object.defineProperty(ref, key, {\n get() {\n return value.value;\n },\n set(v) {\n value.value = v;\n },\n enumerable\n });\n } else {\n Object.defineProperty(ref, key, { value, enumerable });\n }\n }\n return ref;\n}\n\nfunction get(obj, key) {\n if (key == null)\n return unref(obj);\n return unref(obj)[key];\n}\n\nfunction isDefined(v) {\n return unref(v) != null;\n}\n\nvar __defProp$a = Object.defineProperty;\nvar __getOwnPropSymbols$c = Object.getOwnPropertySymbols;\nvar __hasOwnProp$c = Object.prototype.hasOwnProperty;\nvar __propIsEnum$c = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$a = (obj, key, value) => key in obj ? __defProp$a(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$a = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$c.call(b, prop))\n __defNormalProp$a(a, prop, b[prop]);\n if (__getOwnPropSymbols$c)\n for (var prop of __getOwnPropSymbols$c(b)) {\n if (__propIsEnum$c.call(b, prop))\n __defNormalProp$a(a, prop, b[prop]);\n }\n return a;\n};\nfunction makeDestructurable(obj, arr) {\n if (typeof Symbol !== \"undefined\") {\n const clone = __spreadValues$a({}, obj);\n Object.defineProperty(clone, Symbol.iterator, {\n enumerable: false,\n value() {\n let index = 0;\n return {\n next: () => ({\n value: arr[index++],\n done: index > arr.length\n })\n };\n }\n });\n return clone;\n } else {\n return Object.assign([...arr], obj);\n }\n}\n\nfunction toValue(r) {\n return typeof r === \"function\" ? r() : unref(r);\n}\nconst resolveUnref = toValue;\n\nfunction reactify(fn, options) {\n const unrefFn = (options == null ? void 0 : options.computedGetter) === false ? unref : toValue;\n return function(...args) {\n return computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n };\n}\n\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n let keys = [];\n let options;\n if (Array.isArray(optionsOrKeys)) {\n keys = optionsOrKeys;\n } else {\n options = optionsOrKeys;\n const { includeOwnProperties = true } = optionsOrKeys;\n keys.push(...Object.keys(obj));\n if (includeOwnProperties)\n keys.push(...Object.getOwnPropertyNames(obj));\n }\n return Object.fromEntries(\n keys.map((key) => {\n const value = obj[key];\n return [\n key,\n typeof value === \"function\" ? reactify(value.bind(obj), options) : value\n ];\n })\n );\n}\n\nfunction toReactive(objectRef) {\n if (!isRef(objectRef))\n return reactive(objectRef);\n const proxy = new Proxy({}, {\n get(_, p, receiver) {\n return unref(Reflect.get(objectRef.value, p, receiver));\n },\n set(_, p, value) {\n if (isRef(objectRef.value[p]) && !isRef(value))\n objectRef.value[p].value = value;\n else\n objectRef.value[p] = value;\n return true;\n },\n deleteProperty(_, p) {\n return Reflect.deleteProperty(objectRef.value, p);\n },\n has(_, p) {\n return Reflect.has(objectRef.value, p);\n },\n ownKeys() {\n return Object.keys(objectRef.value);\n },\n getOwnPropertyDescriptor() {\n return {\n enumerable: true,\n configurable: true\n };\n }\n });\n return reactive(proxy);\n}\n\nfunction reactiveComputed(fn) {\n return toReactive(computed(fn));\n}\n\nfunction reactiveOmit(obj, ...keys) {\n const flatKeys = keys.flat();\n const predicate = flatKeys[0];\n return reactiveComputed(\n () => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => !predicate(toValue(v), k))) : Object.fromEntries(Object.entries(toRefs$1(obj)).filter((e) => !flatKeys.includes(e[0])))\n );\n}\n\nconst isClient = typeof window !== \"undefined\";\nconst isDef = (val) => typeof val !== \"undefined\";\nconst notNullish = (val) => val != null;\nconst assert = (condition, ...infos) => {\n if (!condition)\n console.warn(...infos);\n};\nconst toString = Object.prototype.toString;\nconst isObject = (val) => toString.call(val) === \"[object Object]\";\nconst now = () => Date.now();\nconst timestamp = () => +Date.now();\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst noop = () => {\n};\nconst rand = (min, max) => {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);\nconst isIOS = /* @__PURE__ */ getIsIOS();\nfunction getIsIOS() {\n var _a;\n return isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && /* @__PURE__ */ /iP(ad|hone|od)/.test(window.navigator.userAgent);\n}\n\nfunction createFilterWrapper(filter, fn) {\n function wrapper(...args) {\n return new Promise((resolve, reject) => {\n Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })).then(resolve).catch(reject);\n });\n }\n return wrapper;\n}\nconst bypassFilter = (invoke) => {\n return invoke();\n};\nfunction debounceFilter(ms, options = {}) {\n let timer;\n let maxTimer;\n let lastRejector = noop;\n const _clearTimeout = (timer2) => {\n clearTimeout(timer2);\n lastRejector();\n lastRejector = noop;\n };\n const filter = (invoke) => {\n const duration = toValue(ms);\n const maxDuration = toValue(options.maxWait);\n if (timer)\n _clearTimeout(timer);\n if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n if (maxTimer) {\n _clearTimeout(maxTimer);\n maxTimer = null;\n }\n return Promise.resolve(invoke());\n }\n return new Promise((resolve, reject) => {\n lastRejector = options.rejectOnCancel ? reject : resolve;\n if (maxDuration && !maxTimer) {\n maxTimer = setTimeout(() => {\n if (timer)\n _clearTimeout(timer);\n maxTimer = null;\n resolve(invoke());\n }, maxDuration);\n }\n timer = setTimeout(() => {\n if (maxTimer)\n _clearTimeout(maxTimer);\n maxTimer = null;\n resolve(invoke());\n }, duration);\n });\n };\n return filter;\n}\nfunction throttleFilter(ms, trailing = true, leading = true, rejectOnCancel = false) {\n let lastExec = 0;\n let timer;\n let isLeading = true;\n let lastRejector = noop;\n let lastValue;\n const clear = () => {\n if (timer) {\n clearTimeout(timer);\n timer = void 0;\n lastRejector();\n lastRejector = noop;\n }\n };\n const filter = (_invoke) => {\n const duration = toValue(ms);\n const elapsed = Date.now() - lastExec;\n const invoke = () => {\n return lastValue = _invoke();\n };\n clear();\n if (duration <= 0) {\n lastExec = Date.now();\n return invoke();\n }\n if (elapsed > duration && (leading || !isLeading)) {\n lastExec = Date.now();\n invoke();\n } else if (trailing) {\n lastValue = new Promise((resolve, reject) => {\n lastRejector = rejectOnCancel ? reject : resolve;\n timer = setTimeout(() => {\n lastExec = Date.now();\n isLeading = true;\n resolve(invoke());\n clear();\n }, Math.max(0, duration - elapsed));\n });\n }\n if (!leading && !timer)\n timer = setTimeout(() => isLeading = true, duration);\n isLeading = false;\n return lastValue;\n };\n return filter;\n}\nfunction pausableFilter(extendFilter = bypassFilter) {\n const isActive = ref(true);\n function pause() {\n isActive.value = false;\n }\n function resume() {\n isActive.value = true;\n }\n const eventFilter = (...args) => {\n if (isActive.value)\n extendFilter(...args);\n };\n return { isActive: readonly(isActive), pause, resume, eventFilter };\n}\n\nconst directiveHooks = {\n mounted: isVue3 ? \"mounted\" : \"inserted\",\n updated: isVue3 ? \"updated\" : \"componentUpdated\",\n unmounted: isVue3 ? \"unmounted\" : \"unbind\"\n};\n\nfunction cacheStringFunction(fn) {\n const cache = /* @__PURE__ */ Object.create(null);\n return (str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n}\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction(\n (str) => str.replace(hyphenateRE, \"-$1\").toLowerCase()\n);\nconst camelizeRE = /-(\\w)/g;\nconst camelize = cacheStringFunction((str) => {\n return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n});\n\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n return new Promise((resolve, reject) => {\n if (throwOnTimeout)\n setTimeout(() => reject(reason), ms);\n else\n setTimeout(resolve, ms);\n });\n}\nfunction identity(arg) {\n return arg;\n}\nfunction createSingletonPromise(fn) {\n let _promise;\n function wrapper() {\n if (!_promise)\n _promise = fn();\n return _promise;\n }\n wrapper.reset = async () => {\n const _prev = _promise;\n _promise = void 0;\n if (_prev)\n await _prev;\n };\n return wrapper;\n}\nfunction invoke(fn) {\n return fn();\n}\nfunction containsProp(obj, ...props) {\n return props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n var _a;\n if (typeof target === \"number\")\n return target + delta;\n const value = ((_a = target.match(/^-?[0-9]+\\.?[0-9]*/)) == null ? void 0 : _a[0]) || \"\";\n const unit = target.slice(value.length);\n const result = Number.parseFloat(value) + delta;\n if (Number.isNaN(result))\n return target;\n return result + unit;\n}\nfunction objectPick(obj, keys, omitUndefined = false) {\n return keys.reduce((n, k) => {\n if (k in obj) {\n if (!omitUndefined || obj[k] !== void 0)\n n[k] = obj[k];\n }\n return n;\n }, {});\n}\nfunction objectOmit(obj, keys, omitUndefined = false) {\n return Object.fromEntries(Object.entries(obj).filter(([key, value]) => {\n return (!omitUndefined || value !== void 0) && !keys.includes(key);\n }));\n}\nfunction objectEntries(obj) {\n return Object.entries(obj);\n}\n\nfunction toRef(...args) {\n if (args.length !== 1)\n return toRef$1(...args);\n const r = args[0];\n return typeof r === \"function\" ? readonly(customRef(() => ({ get: r, set: noop }))) : ref(r);\n}\nconst resolveRef = toRef;\n\nfunction reactivePick(obj, ...keys) {\n const flatKeys = keys.flat();\n const predicate = flatKeys[0];\n return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => predicate(toValue(v), k))) : Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)])));\n}\n\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n return customRef((track, trigger) => {\n let value = defaultValue;\n let timer;\n const resetAfter = () => setTimeout(() => {\n value = defaultValue;\n trigger();\n }, toValue(afterMs));\n tryOnScopeDispose(() => {\n clearTimeout(timer);\n });\n return {\n get() {\n track();\n return value;\n },\n set(newValue) {\n value = newValue;\n trigger();\n clearTimeout(timer);\n timer = resetAfter();\n }\n };\n });\n}\n\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n return createFilterWrapper(\n debounceFilter(ms, options),\n fn\n );\n}\n\nfunction refDebounced(value, ms = 200, options = {}) {\n const debounced = ref(value.value);\n const updater = useDebounceFn(() => {\n debounced.value = value.value;\n }, ms, options);\n watch(value, () => updater());\n return debounced;\n}\n\nfunction refDefault(source, defaultValue) {\n return computed({\n get() {\n var _a;\n return (_a = source.value) != null ? _a : defaultValue;\n },\n set(value) {\n source.value = value;\n }\n });\n}\n\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {\n return createFilterWrapper(\n throttleFilter(ms, trailing, leading, rejectOnCancel),\n fn\n );\n}\n\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n if (delay <= 0)\n return value;\n const throttled = ref(value.value);\n const updater = useThrottleFn(() => {\n throttled.value = value.value;\n }, delay, trailing, leading);\n watch(value, () => updater());\n return throttled;\n}\n\nfunction refWithControl(initial, options = {}) {\n let source = initial;\n let track;\n let trigger;\n const ref = customRef((_track, _trigger) => {\n track = _track;\n trigger = _trigger;\n return {\n get() {\n return get();\n },\n set(v) {\n set(v);\n }\n };\n });\n function get(tracking = true) {\n if (tracking)\n track();\n return source;\n }\n function set(value, triggering = true) {\n var _a, _b;\n if (value === source)\n return;\n const old = source;\n if (((_a = options.onBeforeChange) == null ? void 0 : _a.call(options, value, old)) === false)\n return;\n source = value;\n (_b = options.onChanged) == null ? void 0 : _b.call(options, value, old);\n if (triggering)\n trigger();\n }\n const untrackedGet = () => get(false);\n const silentSet = (v) => set(v, false);\n const peek = () => get(false);\n const lay = (v) => set(v, false);\n return extendRef(\n ref,\n {\n get,\n set,\n untrackedGet,\n silentSet,\n peek,\n lay\n },\n { enumerable: true }\n );\n}\nconst controlledRef = refWithControl;\n\nfunction set(...args) {\n if (args.length === 2) {\n const [ref, value] = args;\n ref.value = value;\n }\n if (args.length === 3) {\n if (isVue2) {\n set$1(...args);\n } else {\n const [target, key, value] = args;\n target[key] = value;\n }\n }\n}\n\nfunction syncRef(left, right, options = {}) {\n var _a, _b;\n const {\n flush = \"sync\",\n deep = false,\n immediate = true,\n direction = \"both\",\n transform = {}\n } = options;\n let watchLeft;\n let watchRight;\n const transformLTR = (_a = transform.ltr) != null ? _a : (v) => v;\n const transformRTL = (_b = transform.rtl) != null ? _b : (v) => v;\n if (direction === \"both\" || direction === \"ltr\") {\n watchLeft = watch(\n left,\n (newValue) => right.value = transformLTR(newValue),\n { flush, deep, immediate }\n );\n }\n if (direction === \"both\" || direction === \"rtl\") {\n watchRight = watch(\n right,\n (newValue) => left.value = transformRTL(newValue),\n { flush, deep, immediate }\n );\n }\n return () => {\n watchLeft == null ? void 0 : watchLeft();\n watchRight == null ? void 0 : watchRight();\n };\n}\n\nfunction syncRefs(source, targets, options = {}) {\n const {\n flush = \"sync\",\n deep = false,\n immediate = true\n } = options;\n if (!Array.isArray(targets))\n targets = [targets];\n return watch(\n source,\n (newValue) => targets.forEach((target) => target.value = newValue),\n { flush, deep, immediate }\n );\n}\n\nvar __defProp$9 = Object.defineProperty;\nvar __defProps$7 = Object.defineProperties;\nvar __getOwnPropDescs$7 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$b = Object.getOwnPropertySymbols;\nvar __hasOwnProp$b = Object.prototype.hasOwnProperty;\nvar __propIsEnum$b = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$9 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$b.call(b, prop))\n __defNormalProp$9(a, prop, b[prop]);\n if (__getOwnPropSymbols$b)\n for (var prop of __getOwnPropSymbols$b(b)) {\n if (__propIsEnum$b.call(b, prop))\n __defNormalProp$9(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$7 = (a, b) => __defProps$7(a, __getOwnPropDescs$7(b));\nfunction toRefs(objectRef, options = {}) {\n if (!isRef(objectRef))\n return toRefs$1(objectRef);\n const result = Array.isArray(objectRef.value) ? Array.from({ length: objectRef.value.length }) : {};\n for (const key in objectRef.value) {\n result[key] = customRef(() => ({\n get() {\n return objectRef.value[key];\n },\n set(v) {\n var _a;\n const replaceRef = (_a = toValue(options.replaceRef)) != null ? _a : true;\n if (replaceRef) {\n if (Array.isArray(objectRef.value)) {\n const copy = [...objectRef.value];\n copy[key] = v;\n objectRef.value = copy;\n } else {\n const newObject = __spreadProps$7(__spreadValues$9({}, objectRef.value), { [key]: v });\n Object.setPrototypeOf(newObject, Object.getPrototypeOf(objectRef.value));\n objectRef.value = newObject;\n }\n } else {\n objectRef.value[key] = v;\n }\n }\n }));\n }\n return result;\n}\n\nfunction tryOnBeforeMount(fn, sync = true) {\n if (getCurrentInstance())\n onBeforeMount(fn);\n else if (sync)\n fn();\n else\n nextTick(fn);\n}\n\nfunction tryOnBeforeUnmount(fn) {\n if (getCurrentInstance())\n onBeforeUnmount(fn);\n}\n\nfunction tryOnMounted(fn, sync = true) {\n if (getCurrentInstance())\n onMounted(fn);\n else if (sync)\n fn();\n else\n nextTick(fn);\n}\n\nfunction tryOnUnmounted(fn) {\n if (getCurrentInstance())\n onUnmounted(fn);\n}\n\nfunction createUntil(r, isNot = false) {\n function toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n let stop = null;\n const watcher = new Promise((resolve) => {\n stop = watch(\n r,\n (v) => {\n if (condition(v) !== isNot) {\n stop == null ? void 0 : stop();\n resolve(v);\n }\n },\n {\n flush,\n deep,\n immediate: true\n }\n );\n });\n const promises = [watcher];\n if (timeout != null) {\n promises.push(\n promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => stop == null ? void 0 : stop())\n );\n }\n return Promise.race(promises);\n }\n function toBe(value, options) {\n if (!isRef(value))\n return toMatch((v) => v === value, options);\n const { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options != null ? options : {};\n let stop = null;\n const watcher = new Promise((resolve) => {\n stop = watch(\n [r, value],\n ([v1, v2]) => {\n if (isNot !== (v1 === v2)) {\n stop == null ? void 0 : stop();\n resolve(v1);\n }\n },\n {\n flush,\n deep,\n immediate: true\n }\n );\n });\n const promises = [watcher];\n if (timeout != null) {\n promises.push(\n promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => {\n stop == null ? void 0 : stop();\n return toValue(r);\n })\n );\n }\n return Promise.race(promises);\n }\n function toBeTruthy(options) {\n return toMatch((v) => Boolean(v), options);\n }\n function toBeNull(options) {\n return toBe(null, options);\n }\n function toBeUndefined(options) {\n return toBe(void 0, options);\n }\n function toBeNaN(options) {\n return toMatch(Number.isNaN, options);\n }\n function toContains(value, options) {\n return toMatch((v) => {\n const array = Array.from(v);\n return array.includes(value) || array.includes(toValue(value));\n }, options);\n }\n function changed(options) {\n return changedTimes(1, options);\n }\n function changedTimes(n = 1, options) {\n let count = -1;\n return toMatch(() => {\n count += 1;\n return count >= n;\n }, options);\n }\n if (Array.isArray(toValue(r))) {\n const instance = {\n toMatch,\n toContains,\n changed,\n changedTimes,\n get not() {\n return createUntil(r, !isNot);\n }\n };\n return instance;\n } else {\n const instance = {\n toMatch,\n toBe,\n toBeTruthy,\n toBeNull,\n toBeNaN,\n toBeUndefined,\n changed,\n changedTimes,\n get not() {\n return createUntil(r, !isNot);\n }\n };\n return instance;\n }\n}\nfunction until(r) {\n return createUntil(r);\n}\n\nfunction defaultComparator(value, othVal) {\n return value === othVal;\n}\nfunction useArrayDifference(...args) {\n var _a;\n const list = args[0];\n const values = args[1];\n let compareFn = (_a = args[2]) != null ? _a : defaultComparator;\n if (typeof compareFn === \"string\") {\n const key = compareFn;\n compareFn = (value, othVal) => value[key] === othVal[key];\n }\n return computed(() => toValue(list).filter((x) => toValue(values).findIndex((y) => compareFn(x, y)) === -1));\n}\n\nfunction useArrayEvery(list, fn) {\n return computed(() => toValue(list).every((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction useArrayFilter(list, fn) {\n return computed(() => toValue(list).map((i) => toValue(i)).filter(fn));\n}\n\nfunction useArrayFind(list, fn) {\n return computed(\n () => toValue(\n toValue(list).find((element, index, array) => fn(toValue(element), index, array))\n )\n );\n}\n\nfunction useArrayFindIndex(list, fn) {\n return computed(() => toValue(list).findIndex((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction findLast(arr, cb) {\n let index = arr.length;\n while (index-- > 0) {\n if (cb(arr[index], index, arr))\n return arr[index];\n }\n return void 0;\n}\nfunction useArrayFindLast(list, fn) {\n return computed(\n () => toValue(\n !Array.prototype.findLast ? findLast(toValue(list), (element, index, array) => fn(toValue(element), index, array)) : toValue(list).findLast((element, index, array) => fn(toValue(element), index, array))\n )\n );\n}\n\nfunction isArrayIncludesOptions(obj) {\n return isObject(obj) && containsProp(obj, \"formIndex\", \"comparator\");\n}\nfunction useArrayIncludes(...args) {\n var _a;\n const list = args[0];\n const value = args[1];\n let comparator = args[2];\n let formIndex = 0;\n if (isArrayIncludesOptions(comparator)) {\n formIndex = (_a = comparator.fromIndex) != null ? _a : 0;\n comparator = comparator.comparator;\n }\n if (typeof comparator === \"string\") {\n const key = comparator;\n comparator = (element, value2) => element[key] === toValue(value2);\n }\n comparator = comparator != null ? comparator : (element, value2) => element === toValue(value2);\n return computed(\n () => toValue(list).slice(formIndex).some(\n (element, index, array) => comparator(toValue(element), toValue(value), index, toValue(array))\n )\n );\n}\n\nfunction useArrayJoin(list, separator) {\n return computed(() => toValue(list).map((i) => toValue(i)).join(toValue(separator)));\n}\n\nfunction useArrayMap(list, fn) {\n return computed(() => toValue(list).map((i) => toValue(i)).map(fn));\n}\n\nfunction useArrayReduce(list, reducer, ...args) {\n const reduceCallback = (sum, value, index) => reducer(toValue(sum), toValue(value), index);\n return computed(() => {\n const resolved = toValue(list);\n return args.length ? resolved.reduce(reduceCallback, toValue(args[0])) : resolved.reduce(reduceCallback);\n });\n}\n\nfunction useArraySome(list, fn) {\n return computed(() => toValue(list).some((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction uniq(array) {\n return Array.from(new Set(array));\n}\nfunction uniqueElementsBy(array, fn) {\n return array.reduce((acc, v) => {\n if (!acc.some((x) => fn(v, x, array)))\n acc.push(v);\n return acc;\n }, []);\n}\nfunction useArrayUnique(list, compareFn) {\n return computed(() => {\n const resolvedList = toValue(list).map((element) => toValue(element));\n return compareFn ? uniqueElementsBy(resolvedList, compareFn) : uniq(resolvedList);\n });\n}\n\nfunction useCounter(initialValue = 0, options = {}) {\n let _initialValue = unref(initialValue);\n const count = ref(initialValue);\n const {\n max = Number.POSITIVE_INFINITY,\n min = Number.NEGATIVE_INFINITY\n } = options;\n const inc = (delta = 1) => count.value = Math.min(max, count.value + delta);\n const dec = (delta = 1) => count.value = Math.max(min, count.value - delta);\n const get = () => count.value;\n const set = (val) => count.value = Math.max(min, Math.min(max, val));\n const reset = (val = _initialValue) => {\n _initialValue = val;\n return set(val);\n };\n return { count, inc, dec, get, set, reset };\n}\n\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/;\nconst REGEX_FORMAT = /\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|SSS/g;\nfunction defaultMeridiem(hours, minutes, isLowercase, hasPeriod) {\n let m = hours < 12 ? \"AM\" : \"PM\";\n if (hasPeriod)\n m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n return isLowercase ? m.toLowerCase() : m;\n}\nfunction formatDate(date, formatStr, options = {}) {\n var _a;\n const years = date.getFullYear();\n const month = date.getMonth();\n const days = date.getDate();\n const hours = date.getHours();\n const minutes = date.getMinutes();\n const seconds = date.getSeconds();\n const milliseconds = date.getMilliseconds();\n const day = date.getDay();\n const meridiem = (_a = options.customMeridiem) != null ? _a : defaultMeridiem;\n const matches = {\n YY: () => String(years).slice(-2),\n YYYY: () => years,\n M: () => month + 1,\n MM: () => `${month + 1}`.padStart(2, \"0\"),\n MMM: () => date.toLocaleDateString(options.locales, { month: \"short\" }),\n MMMM: () => date.toLocaleDateString(options.locales, { month: \"long\" }),\n D: () => String(days),\n DD: () => `${days}`.padStart(2, \"0\"),\n H: () => String(hours),\n HH: () => `${hours}`.padStart(2, \"0\"),\n h: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n hh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n m: () => String(minutes),\n mm: () => `${minutes}`.padStart(2, \"0\"),\n s: () => String(seconds),\n ss: () => `${seconds}`.padStart(2, \"0\"),\n SSS: () => `${milliseconds}`.padStart(3, \"0\"),\n d: () => day,\n dd: () => date.toLocaleDateString(options.locales, { weekday: \"narrow\" }),\n ddd: () => date.toLocaleDateString(options.locales, { weekday: \"short\" }),\n dddd: () => date.toLocaleDateString(options.locales, { weekday: \"long\" }),\n A: () => meridiem(hours, minutes),\n AA: () => meridiem(hours, minutes, false, true),\n a: () => meridiem(hours, minutes, true),\n aa: () => meridiem(hours, minutes, true, true)\n };\n return formatStr.replace(REGEX_FORMAT, (match, $1) => {\n var _a2, _b;\n return (_b = $1 != null ? $1 : (_a2 = matches[match]) == null ? void 0 : _a2.call(matches)) != null ? _b : match;\n });\n}\nfunction normalizeDate(date) {\n if (date === null)\n return new Date(Number.NaN);\n if (date === void 0)\n return /* @__PURE__ */ new Date();\n if (date instanceof Date)\n return new Date(date);\n if (typeof date === \"string\" && !/Z$/i.test(date)) {\n const d = date.match(REGEX_PARSE);\n if (d) {\n const m = d[2] - 1 || 0;\n const ms = (d[7] || \"0\").substring(0, 3);\n return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n }\n }\n return new Date(date);\n}\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n return computed(() => formatDate(normalizeDate(toValue(date)), toValue(formatStr), options));\n}\n\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n const {\n immediate = true,\n immediateCallback = false\n } = options;\n let timer = null;\n const isActive = ref(false);\n function clean() {\n if (timer) {\n clearInterval(timer);\n timer = null;\n }\n }\n function pause() {\n isActive.value = false;\n clean();\n }\n function resume() {\n const intervalValue = toValue(interval);\n if (intervalValue <= 0)\n return;\n isActive.value = true;\n if (immediateCallback)\n cb();\n clean();\n timer = setInterval(cb, intervalValue);\n }\n if (immediate && isClient)\n resume();\n if (isRef(interval) || typeof interval === \"function\") {\n const stopWatch = watch(interval, () => {\n if (isActive.value && isClient)\n resume();\n });\n tryOnScopeDispose(stopWatch);\n }\n tryOnScopeDispose(pause);\n return {\n isActive,\n pause,\n resume\n };\n}\n\nvar __defProp$8 = Object.defineProperty;\nvar __getOwnPropSymbols$a = Object.getOwnPropertySymbols;\nvar __hasOwnProp$a = Object.prototype.hasOwnProperty;\nvar __propIsEnum$a = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$8 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$a.call(b, prop))\n __defNormalProp$8(a, prop, b[prop]);\n if (__getOwnPropSymbols$a)\n for (var prop of __getOwnPropSymbols$a(b)) {\n if (__propIsEnum$a.call(b, prop))\n __defNormalProp$8(a, prop, b[prop]);\n }\n return a;\n};\nfunction useInterval(interval = 1e3, options = {}) {\n const {\n controls: exposeControls = false,\n immediate = true,\n callback\n } = options;\n const counter = ref(0);\n const update = () => counter.value += 1;\n const reset = () => {\n counter.value = 0;\n };\n const controls = useIntervalFn(\n callback ? () => {\n update();\n callback(counter.value);\n } : update,\n interval,\n { immediate }\n );\n if (exposeControls) {\n return __spreadValues$8({\n counter,\n reset\n }, controls);\n } else {\n return counter;\n }\n}\n\nfunction useLastChanged(source, options = {}) {\n var _a;\n const ms = ref((_a = options.initialValue) != null ? _a : null);\n watch(\n source,\n () => ms.value = timestamp(),\n options\n );\n return ms;\n}\n\nfunction useTimeoutFn(cb, interval, options = {}) {\n const {\n immediate = true\n } = options;\n const isPending = ref(false);\n let timer = null;\n function clear() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n }\n function stop() {\n isPending.value = false;\n clear();\n }\n function start(...args) {\n clear();\n isPending.value = true;\n timer = setTimeout(() => {\n isPending.value = false;\n timer = null;\n cb(...args);\n }, toValue(interval));\n }\n if (immediate) {\n isPending.value = true;\n if (isClient)\n start();\n }\n tryOnScopeDispose(stop);\n return {\n isPending: readonly(isPending),\n start,\n stop\n };\n}\n\nvar __defProp$7 = Object.defineProperty;\nvar __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$9 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$9 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$7 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$9.call(b, prop))\n __defNormalProp$7(a, prop, b[prop]);\n if (__getOwnPropSymbols$9)\n for (var prop of __getOwnPropSymbols$9(b)) {\n if (__propIsEnum$9.call(b, prop))\n __defNormalProp$7(a, prop, b[prop]);\n }\n return a;\n};\nfunction useTimeout(interval = 1e3, options = {}) {\n const {\n controls: exposeControls = false,\n callback\n } = options;\n const controls = useTimeoutFn(\n callback != null ? callback : noop,\n interval,\n options\n );\n const ready = computed(() => !controls.isPending.value);\n if (exposeControls) {\n return __spreadValues$7({\n ready\n }, controls);\n } else {\n return ready;\n }\n}\n\nfunction useToNumber(value, options = {}) {\n const {\n method = \"parseFloat\",\n radix,\n nanToZero\n } = options;\n return computed(() => {\n let resolved = toValue(value);\n if (typeof resolved === \"string\")\n resolved = Number[method](resolved, radix);\n if (nanToZero && Number.isNaN(resolved))\n resolved = 0;\n return resolved;\n });\n}\n\nfunction useToString(value) {\n return computed(() => `${toValue(value)}`);\n}\n\nfunction useToggle(initialValue = false, options = {}) {\n const {\n truthyValue = true,\n falsyValue = false\n } = options;\n const valueIsRef = isRef(initialValue);\n const _value = ref(initialValue);\n function toggle(value) {\n if (arguments.length) {\n _value.value = value;\n return _value.value;\n } else {\n const truthy = toValue(truthyValue);\n _value.value = _value.value === truthy ? toValue(falsyValue) : truthy;\n return _value.value;\n }\n }\n if (valueIsRef)\n return toggle;\n else\n return [_value, toggle];\n}\n\nfunction watchArray(source, cb, options) {\n let oldList = (options == null ? void 0 : options.immediate) ? [] : [\n ...source instanceof Function ? source() : Array.isArray(source) ? source : toValue(source)\n ];\n return watch(source, (newList, _, onCleanup) => {\n const oldListRemains = Array.from({ length: oldList.length });\n const added = [];\n for (const obj of newList) {\n let found = false;\n for (let i = 0; i < oldList.length; i++) {\n if (!oldListRemains[i] && obj === oldList[i]) {\n oldListRemains[i] = true;\n found = true;\n break;\n }\n }\n if (!found)\n added.push(obj);\n }\n const removed = oldList.filter((_2, i) => !oldListRemains[i]);\n cb(newList, oldList, added, removed, onCleanup);\n oldList = [...newList];\n }, options);\n}\n\nvar __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$8 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$8 = Object.prototype.propertyIsEnumerable;\nvar __objRest$5 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$8.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$8)\n for (var prop of __getOwnPropSymbols$8(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$8.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction watchWithFilter(source, cb, options = {}) {\n const _a = options, {\n eventFilter = bypassFilter\n } = _a, watchOptions = __objRest$5(_a, [\n \"eventFilter\"\n ]);\n return watch(\n source,\n createFilterWrapper(\n eventFilter,\n cb\n ),\n watchOptions\n );\n}\n\nvar __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$7 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$7 = Object.prototype.propertyIsEnumerable;\nvar __objRest$4 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$7.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$7)\n for (var prop of __getOwnPropSymbols$7(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$7.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction watchAtMost(source, cb, options) {\n const _a = options, {\n count\n } = _a, watchOptions = __objRest$4(_a, [\n \"count\"\n ]);\n const current = ref(0);\n const stop = watchWithFilter(\n source,\n (...args) => {\n current.value += 1;\n if (current.value >= toValue(count))\n nextTick(() => stop());\n cb(...args);\n },\n watchOptions\n );\n return { count: current, stop };\n}\n\nvar __defProp$6 = Object.defineProperty;\nvar __defProps$6 = Object.defineProperties;\nvar __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$6 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$6 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$6 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$6.call(b, prop))\n __defNormalProp$6(a, prop, b[prop]);\n if (__getOwnPropSymbols$6)\n for (var prop of __getOwnPropSymbols$6(b)) {\n if (__propIsEnum$6.call(b, prop))\n __defNormalProp$6(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));\nvar __objRest$3 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$6.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$6)\n for (var prop of __getOwnPropSymbols$6(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$6.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction watchDebounced(source, cb, options = {}) {\n const _a = options, {\n debounce = 0,\n maxWait = void 0\n } = _a, watchOptions = __objRest$3(_a, [\n \"debounce\",\n \"maxWait\"\n ]);\n return watchWithFilter(\n source,\n cb,\n __spreadProps$6(__spreadValues$6({}, watchOptions), {\n eventFilter: debounceFilter(debounce, { maxWait })\n })\n );\n}\n\nvar __defProp$5 = Object.defineProperty;\nvar __defProps$5 = Object.defineProperties;\nvar __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$5 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$5 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$5 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$5.call(b, prop))\n __defNormalProp$5(a, prop, b[prop]);\n if (__getOwnPropSymbols$5)\n for (var prop of __getOwnPropSymbols$5(b)) {\n if (__propIsEnum$5.call(b, prop))\n __defNormalProp$5(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));\nfunction watchDeep(source, cb, options) {\n return watch(\n source,\n cb,\n __spreadProps$5(__spreadValues$5({}, options), {\n deep: true\n })\n );\n}\n\nvar __defProp$4 = Object.defineProperty;\nvar __defProps$4 = Object.defineProperties;\nvar __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$4 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$4 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$4 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$4.call(b, prop))\n __defNormalProp$4(a, prop, b[prop]);\n if (__getOwnPropSymbols$4)\n for (var prop of __getOwnPropSymbols$4(b)) {\n if (__propIsEnum$4.call(b, prop))\n __defNormalProp$4(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));\nvar __objRest$2 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$4.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$4)\n for (var prop of __getOwnPropSymbols$4(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$4.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction watchIgnorable(source, cb, options = {}) {\n const _a = options, {\n eventFilter = bypassFilter\n } = _a, watchOptions = __objRest$2(_a, [\n \"eventFilter\"\n ]);\n const filteredCb = createFilterWrapper(\n eventFilter,\n cb\n );\n let ignoreUpdates;\n let ignorePrevAsyncUpdates;\n let stop;\n if (watchOptions.flush === \"sync\") {\n const ignore = ref(false);\n ignorePrevAsyncUpdates = () => {\n };\n ignoreUpdates = (updater) => {\n ignore.value = true;\n updater();\n ignore.value = false;\n };\n stop = watch(\n source,\n (...args) => {\n if (!ignore.value)\n filteredCb(...args);\n },\n watchOptions\n );\n } else {\n const disposables = [];\n const ignoreCounter = ref(0);\n const syncCounter = ref(0);\n ignorePrevAsyncUpdates = () => {\n ignoreCounter.value = syncCounter.value;\n };\n disposables.push(\n watch(\n source,\n () => {\n syncCounter.value++;\n },\n __spreadProps$4(__spreadValues$4({}, watchOptions), { flush: \"sync\" })\n )\n );\n ignoreUpdates = (updater) => {\n const syncCounterPrev = syncCounter.value;\n updater();\n ignoreCounter.value += syncCounter.value - syncCounterPrev;\n };\n disposables.push(\n watch(\n source,\n (...args) => {\n const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value;\n ignoreCounter.value = 0;\n syncCounter.value = 0;\n if (ignore)\n return;\n filteredCb(...args);\n },\n watchOptions\n )\n );\n stop = () => {\n disposables.forEach((fn) => fn());\n };\n }\n return { stop, ignoreUpdates, ignorePrevAsyncUpdates };\n}\n\nvar __defProp$3 = Object.defineProperty;\nvar __defProps$3 = Object.defineProperties;\nvar __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$3 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$3 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$3 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$3.call(b, prop))\n __defNormalProp$3(a, prop, b[prop]);\n if (__getOwnPropSymbols$3)\n for (var prop of __getOwnPropSymbols$3(b)) {\n if (__propIsEnum$3.call(b, prop))\n __defNormalProp$3(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));\nfunction watchImmediate(source, cb, options) {\n return watch(\n source,\n cb,\n __spreadProps$3(__spreadValues$3({}, options), {\n immediate: true\n })\n );\n}\n\nfunction watchOnce(source, cb, options) {\n const stop = watch(source, (...args) => {\n nextTick(() => stop());\n return cb(...args);\n }, options);\n}\n\nvar __defProp$2 = Object.defineProperty;\nvar __defProps$2 = Object.defineProperties;\nvar __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$2 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$2 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$2 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$2.call(b, prop))\n __defNormalProp$2(a, prop, b[prop]);\n if (__getOwnPropSymbols$2)\n for (var prop of __getOwnPropSymbols$2(b)) {\n if (__propIsEnum$2.call(b, prop))\n __defNormalProp$2(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));\nvar __objRest$1 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$2.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$2)\n for (var prop of __getOwnPropSymbols$2(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$2.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction watchPausable(source, cb, options = {}) {\n const _a = options, {\n eventFilter: filter\n } = _a, watchOptions = __objRest$1(_a, [\n \"eventFilter\"\n ]);\n const { eventFilter, pause, resume, isActive } = pausableFilter(filter);\n const stop = watchWithFilter(\n source,\n cb,\n __spreadProps$2(__spreadValues$2({}, watchOptions), {\n eventFilter\n })\n );\n return { stop, pause, resume, isActive };\n}\n\nvar __defProp$1 = Object.defineProperty;\nvar __defProps$1 = Object.defineProperties;\nvar __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$1 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$1 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$1 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$1.call(b, prop))\n __defNormalProp$1(a, prop, b[prop]);\n if (__getOwnPropSymbols$1)\n for (var prop of __getOwnPropSymbols$1(b)) {\n if (__propIsEnum$1.call(b, prop))\n __defNormalProp$1(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$1.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$1)\n for (var prop of __getOwnPropSymbols$1(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$1.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction watchThrottled(source, cb, options = {}) {\n const _a = options, {\n throttle = 0,\n trailing = true,\n leading = true\n } = _a, watchOptions = __objRest(_a, [\n \"throttle\",\n \"trailing\",\n \"leading\"\n ]);\n return watchWithFilter(\n source,\n cb,\n __spreadProps$1(__spreadValues$1({}, watchOptions), {\n eventFilter: throttleFilter(throttle, trailing, leading)\n })\n );\n}\n\nvar __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nfunction watchTriggerable(source, cb, options = {}) {\n let cleanupFn;\n function onEffect() {\n if (!cleanupFn)\n return;\n const fn = cleanupFn;\n cleanupFn = void 0;\n fn();\n }\n function onCleanup(callback) {\n cleanupFn = callback;\n }\n const _cb = (value, oldValue) => {\n onEffect();\n return cb(value, oldValue, onCleanup);\n };\n const res = watchIgnorable(source, _cb, options);\n const { ignoreUpdates } = res;\n const trigger = () => {\n let res2;\n ignoreUpdates(() => {\n res2 = _cb(getWatchSources(source), getOldValue(source));\n });\n return res2;\n };\n return __spreadProps(__spreadValues({}, res), {\n trigger\n });\n}\nfunction getWatchSources(sources) {\n if (isReactive(sources))\n return sources;\n if (Array.isArray(sources))\n return sources.map((item) => toValue(item));\n return toValue(sources);\n}\nfunction getOldValue(source) {\n return Array.isArray(source) ? source.map(() => void 0) : void 0;\n}\n\nfunction whenever(source, cb, options) {\n return watch(\n source,\n (v, ov, onInvalidate) => {\n if (v)\n cb(v, ov, onInvalidate);\n },\n options\n );\n}\n\nexport { assert, refAutoReset as autoResetRef, bypassFilter, camelize, clamp, computedEager, computedWithControl, containsProp, computedWithControl as controlledComputed, controlledRef, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, reactify as createReactiveFn, createSharedComposable, createSingletonPromise, debounceFilter, refDebounced as debouncedRef, watchDebounced as debouncedWatch, directiveHooks, computedEager as eagerComputed, extendRef, formatDate, get, hasOwn, hyphenate, identity, watchIgnorable as ignorableWatch, increaseWithUnit, invoke, isClient, isDef, isDefined, isIOS, isObject, makeDestructurable, noop, normalizeDate, notNullish, now, objectEntries, objectOmit, objectPick, pausableFilter, watchPausable as pausableWatch, promiseTimeout, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refThrottled, refWithControl, resolveRef, resolveUnref, set, syncRef, syncRefs, throttleFilter, refThrottled as throttledRef, watchThrottled as throttledWatch, timestamp, toReactive, toRef, toRefs, toValue, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayDifference, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayFindLast, useArrayIncludes, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useArrayUnique, useCounter, useDateFormat, refDebounced as useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, refThrottled as useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchDeep, watchIgnorable, watchImmediate, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };\n", "import { noop, makeDestructurable, camelize, toValue, isClient, tryOnScopeDispose, isIOS, tryOnMounted, computedWithControl, isObject, objectOmit, promiseTimeout, until, increaseWithUnit, objectEntries, useTimeoutFn, pausableWatch, toRef, createEventHook, timestamp, pausableFilter, watchIgnorable, debounceFilter, createFilterWrapper, bypassFilter, createSingletonPromise, toRefs, useIntervalFn, notNullish, containsProp, hasOwn, throttleFilter, useDebounceFn, useThrottleFn, clamp, syncRef, objectPick, tryOnUnmounted, watchWithFilter, identity, isDef } from '@vueuse/shared';\nexport * from '@vueuse/shared';\nimport { isRef, ref, shallowRef, watchEffect, computed, inject, isVue3, version, defineComponent, h, TransitionGroup, shallowReactive, Fragment, watch, getCurrentInstance, customRef, onUpdated, onMounted, readonly, nextTick, reactive, markRaw, getCurrentScope, isVue2, set, del, isReadonly, onBeforeUpdate } from 'vue-demi';\n\nfunction computedAsync(evaluationCallback, initialState, optionsOrRef) {\n let options;\n if (isRef(optionsOrRef)) {\n options = {\n evaluating: optionsOrRef\n };\n } else {\n options = optionsOrRef || {};\n }\n const {\n lazy = false,\n evaluating = void 0,\n shallow = true,\n onError = noop\n } = options;\n const started = ref(!lazy);\n const current = shallow ? shallowRef(initialState) : ref(initialState);\n let counter = 0;\n watchEffect(async (onInvalidate) => {\n if (!started.value)\n return;\n counter++;\n const counterAtBeginning = counter;\n let hasFinished = false;\n if (evaluating) {\n Promise.resolve().then(() => {\n evaluating.value = true;\n });\n }\n try {\n const result = await evaluationCallback((cancelCallback) => {\n onInvalidate(() => {\n if (evaluating)\n evaluating.value = false;\n if (!hasFinished)\n cancelCallback();\n });\n });\n if (counterAtBeginning === counter)\n current.value = result;\n } catch (e) {\n onError(e);\n } finally {\n if (evaluating && counterAtBeginning === counter)\n evaluating.value = false;\n hasFinished = true;\n }\n });\n if (lazy) {\n return computed(() => {\n started.value = true;\n return current.value;\n });\n } else {\n return current;\n }\n}\n\nfunction computedInject(key, options, defaultSource, treatDefaultAsFactory) {\n let source = inject(key);\n if (defaultSource)\n source = inject(key, defaultSource);\n if (treatDefaultAsFactory)\n source = inject(key, defaultSource, treatDefaultAsFactory);\n if (typeof options === \"function\") {\n return computed((ctx) => options(source, ctx));\n } else {\n return computed({\n get: (ctx) => options.get(source, ctx),\n set: options.set\n });\n }\n}\n\nvar __defProp$q = Object.defineProperty;\nvar __defProps$d = Object.defineProperties;\nvar __getOwnPropDescs$d = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$t = Object.getOwnPropertySymbols;\nvar __hasOwnProp$t = Object.prototype.hasOwnProperty;\nvar __propIsEnum$t = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$q = (obj, key, value) => key in obj ? __defProp$q(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$q = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$t.call(b, prop))\n __defNormalProp$q(a, prop, b[prop]);\n if (__getOwnPropSymbols$t)\n for (var prop of __getOwnPropSymbols$t(b)) {\n if (__propIsEnum$t.call(b, prop))\n __defNormalProp$q(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$d = (a, b) => __defProps$d(a, __getOwnPropDescs$d(b));\nfunction createReusableTemplate(options = {}) {\n if (!isVue3 && !version.startsWith(\"2.7.\")) {\n if (process.env.NODE_ENV !== \"production\")\n throw new Error(\"[VueUse] createReusableTemplate only works in Vue 2.7 or above.\");\n return;\n }\n const {\n inheritAttrs = true\n } = options;\n const render = shallowRef();\n const define = /* #__PURE__ */ defineComponent({\n setup(_, { slots }) {\n return () => {\n render.value = slots.default;\n };\n }\n });\n const reuse = /* #__PURE__ */ defineComponent({\n inheritAttrs,\n setup(_, { attrs, slots }) {\n return () => {\n var _a;\n if (!render.value && process.env.NODE_ENV !== \"production\")\n throw new Error(\"[VueUse] Failed to find the definition of reusable template\");\n const vnode = (_a = render.value) == null ? void 0 : _a.call(render, __spreadProps$d(__spreadValues$q({}, keysToCamelKebabCase(attrs)), { $slots: slots }));\n return inheritAttrs && (vnode == null ? void 0 : vnode.length) === 1 ? vnode[0] : vnode;\n };\n }\n });\n return makeDestructurable(\n { define, reuse },\n [define, reuse]\n );\n}\nfunction keysToCamelKebabCase(obj) {\n const newObj = {};\n for (const key in obj)\n newObj[camelize(key)] = obj[key];\n return newObj;\n}\n\nfunction createTemplatePromise(options = {}) {\n if (!isVue3) {\n if (process.env.NODE_ENV !== \"production\")\n throw new Error(\"[VueUse] createTemplatePromise only works in Vue 3 or above.\");\n return;\n }\n let index = 0;\n const instances = ref([]);\n function create(...args) {\n const props = shallowReactive({\n key: index++,\n args,\n promise: void 0,\n resolve: () => {\n },\n reject: () => {\n },\n isResolving: false,\n options\n });\n instances.value.push(props);\n props.promise = new Promise((_resolve, _reject) => {\n props.resolve = (v) => {\n props.isResolving = true;\n return _resolve(v);\n };\n props.reject = _reject;\n }).finally(() => {\n props.promise = void 0;\n const index2 = instances.value.indexOf(props);\n if (index2 !== -1)\n instances.value.splice(index2, 1);\n });\n return props.promise;\n }\n function start(...args) {\n if (options.singleton && instances.value.length > 0)\n return instances.value[0].promise;\n return create(...args);\n }\n const component = /* #__PURE__ */ defineComponent((_, { slots }) => {\n const renderList = () => instances.value.map((props) => {\n var _a;\n return h(Fragment, { key: props.key }, (_a = slots.default) == null ? void 0 : _a.call(slots, props));\n });\n if (options.transition)\n return () => h(TransitionGroup, options.transition, renderList);\n return renderList;\n });\n component.start = start;\n return component;\n}\n\nfunction createUnrefFn(fn) {\n return function(...args) {\n return fn.apply(this, args.map((i) => toValue(i)));\n };\n}\n\nfunction unrefElement(elRef) {\n var _a;\n const plain = toValue(elRef);\n return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;\n}\n\nconst defaultWindow = isClient ? window : void 0;\nconst defaultDocument = isClient ? window.document : void 0;\nconst defaultNavigator = isClient ? window.navigator : void 0;\nconst defaultLocation = isClient ? window.location : void 0;\n\nfunction useEventListener(...args) {\n let target;\n let events;\n let listeners;\n let options;\n if (typeof args[0] === \"string\" || Array.isArray(args[0])) {\n [events, listeners, options] = args;\n target = defaultWindow;\n } else {\n [target, events, listeners, options] = args;\n }\n if (!target)\n return noop;\n if (!Array.isArray(events))\n events = [events];\n if (!Array.isArray(listeners))\n listeners = [listeners];\n const cleanups = [];\n const cleanup = () => {\n cleanups.forEach((fn) => fn());\n cleanups.length = 0;\n };\n const register = (el, event, listener, options2) => {\n el.addEventListener(event, listener, options2);\n return () => el.removeEventListener(event, listener, options2);\n };\n const stopWatch = watch(\n () => [unrefElement(target), toValue(options)],\n ([el, options2]) => {\n cleanup();\n if (!el)\n return;\n cleanups.push(\n ...events.flatMap((event) => {\n return listeners.map((listener) => register(el, event, listener, options2));\n })\n );\n },\n { immediate: true, flush: \"post\" }\n );\n const stop = () => {\n stopWatch();\n cleanup();\n };\n tryOnScopeDispose(stop);\n return stop;\n}\n\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n const { window = defaultWindow, ignore = [], capture = true, detectIframe = false } = options;\n if (!window)\n return;\n if (isIOS && !_iOSWorkaround) {\n _iOSWorkaround = true;\n Array.from(window.document.body.children).forEach((el) => el.addEventListener(\"click\", noop));\n window.document.documentElement.addEventListener(\"click\", noop);\n }\n let shouldListen = true;\n const shouldIgnore = (event) => {\n return ignore.some((target2) => {\n if (typeof target2 === \"string\") {\n return Array.from(window.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el));\n } else {\n const el = unrefElement(target2);\n return el && (event.target === el || event.composedPath().includes(el));\n }\n });\n };\n const listener = (event) => {\n const el = unrefElement(target);\n if (!el || el === event.target || event.composedPath().includes(el))\n return;\n if (event.detail === 0)\n shouldListen = !shouldIgnore(event);\n if (!shouldListen) {\n shouldListen = true;\n return;\n }\n handler(event);\n };\n const cleanup = [\n useEventListener(window, \"click\", listener, { passive: true, capture }),\n useEventListener(window, \"pointerdown\", (e) => {\n const el = unrefElement(target);\n if (el)\n shouldListen = !e.composedPath().includes(el) && !shouldIgnore(e);\n }, { passive: true }),\n detectIframe && useEventListener(window, \"blur\", (event) => {\n setTimeout(() => {\n var _a;\n const el = unrefElement(target);\n if (((_a = window.document.activeElement) == null ? void 0 : _a.tagName) === \"IFRAME\" && !(el == null ? void 0 : el.contains(window.document.activeElement)))\n handler(event);\n }, 0);\n })\n ].filter(Boolean);\n const stop = () => cleanup.forEach((fn) => fn());\n return stop;\n}\n\nvar __defProp$p = Object.defineProperty;\nvar __defProps$c = Object.defineProperties;\nvar __getOwnPropDescs$c = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$s = Object.getOwnPropertySymbols;\nvar __hasOwnProp$s = Object.prototype.hasOwnProperty;\nvar __propIsEnum$s = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$p = (obj, key, value) => key in obj ? __defProp$p(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$p = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$s.call(b, prop))\n __defNormalProp$p(a, prop, b[prop]);\n if (__getOwnPropSymbols$s)\n for (var prop of __getOwnPropSymbols$s(b)) {\n if (__propIsEnum$s.call(b, prop))\n __defNormalProp$p(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$c = (a, b) => __defProps$c(a, __getOwnPropDescs$c(b));\nfunction createKeyPredicate(keyFilter) {\n if (typeof keyFilter === \"function\")\n return keyFilter;\n else if (typeof keyFilter === \"string\")\n return (event) => event.key === keyFilter;\n else if (Array.isArray(keyFilter))\n return (event) => keyFilter.includes(event.key);\n return () => true;\n}\nfunction onKeyStroke(...args) {\n let key;\n let handler;\n let options = {};\n if (args.length === 3) {\n key = args[0];\n handler = args[1];\n options = args[2];\n } else if (args.length === 2) {\n if (typeof args[1] === \"object\") {\n key = true;\n handler = args[0];\n options = args[1];\n } else {\n key = args[0];\n handler = args[1];\n }\n } else {\n key = true;\n handler = args[0];\n }\n const {\n target = defaultWindow,\n eventName = \"keydown\",\n passive = false,\n dedupe = false\n } = options;\n const predicate = createKeyPredicate(key);\n const listener = (e) => {\n if (e.repeat && toValue(dedupe))\n return;\n if (predicate(e))\n handler(e);\n };\n return useEventListener(target, eventName, listener, passive);\n}\nfunction onKeyDown(key, handler, options = {}) {\n return onKeyStroke(key, handler, __spreadProps$c(__spreadValues$p({}, options), { eventName: \"keydown\" }));\n}\nfunction onKeyPressed(key, handler, options = {}) {\n return onKeyStroke(key, handler, __spreadProps$c(__spreadValues$p({}, options), { eventName: \"keypress\" }));\n}\nfunction onKeyUp(key, handler, options = {}) {\n return onKeyStroke(key, handler, __spreadProps$c(__spreadValues$p({}, options), { eventName: \"keyup\" }));\n}\n\nconst DEFAULT_DELAY = 500;\nfunction onLongPress(target, handler, options) {\n var _a, _b;\n const elementRef = computed(() => unrefElement(target));\n let timeout;\n function clear() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = void 0;\n }\n }\n function onDown(ev) {\n var _a2, _b2, _c, _d;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n clear();\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n timeout = setTimeout(\n () => handler(ev),\n (_d = options == null ? void 0 : options.delay) != null ? _d : DEFAULT_DELAY\n );\n }\n const listenerOptions = {\n capture: (_a = options == null ? void 0 : options.modifiers) == null ? void 0 : _a.capture,\n once: (_b = options == null ? void 0 : options.modifiers) == null ? void 0 : _b.once\n };\n useEventListener(elementRef, \"pointerdown\", onDown, listenerOptions);\n useEventListener(elementRef, [\"pointerup\", \"pointerleave\"], clear, listenerOptions);\n}\n\nfunction isFocusedElementEditable() {\n const { activeElement, body } = document;\n if (!activeElement)\n return false;\n if (activeElement === body)\n return false;\n switch (activeElement.tagName) {\n case \"INPUT\":\n case \"TEXTAREA\":\n return true;\n }\n return activeElement.hasAttribute(\"contenteditable\");\n}\nfunction isTypedCharValid({\n keyCode,\n metaKey,\n ctrlKey,\n altKey\n}) {\n if (metaKey || ctrlKey || altKey)\n return false;\n if (keyCode >= 48 && keyCode <= 57)\n return true;\n if (keyCode >= 65 && keyCode <= 90)\n return true;\n if (keyCode >= 97 && keyCode <= 122)\n return true;\n return false;\n}\nfunction onStartTyping(callback, options = {}) {\n const { document: document2 = defaultDocument } = options;\n const keydown = (event) => {\n !isFocusedElementEditable() && isTypedCharValid(event) && callback(event);\n };\n if (document2)\n useEventListener(document2, \"keydown\", keydown, { passive: true });\n}\n\nfunction templateRef(key, initialValue = null) {\n const instance = getCurrentInstance();\n let _trigger = () => {\n };\n const element = customRef((track, trigger) => {\n _trigger = trigger;\n return {\n get() {\n var _a, _b;\n track();\n return (_b = (_a = instance == null ? void 0 : instance.proxy) == null ? void 0 : _a.$refs[key]) != null ? _b : initialValue;\n },\n set() {\n }\n };\n });\n tryOnMounted(_trigger);\n onUpdated(_trigger);\n return element;\n}\n\nfunction useActiveElement(options = {}) {\n var _a;\n const {\n window = defaultWindow,\n deep = true\n } = options;\n const document = (_a = options.document) != null ? _a : window == null ? void 0 : window.document;\n const getDeepActiveElement = () => {\n var _a2;\n let element = document == null ? void 0 : document.activeElement;\n if (deep) {\n while (element == null ? void 0 : element.shadowRoot)\n element = (_a2 = element == null ? void 0 : element.shadowRoot) == null ? void 0 : _a2.activeElement;\n }\n return element;\n };\n const activeElement = computedWithControl(\n () => null,\n () => getDeepActiveElement()\n );\n if (window) {\n useEventListener(window, \"blur\", (event) => {\n if (event.relatedTarget !== null)\n return;\n activeElement.trigger();\n }, true);\n useEventListener(window, \"focus\", activeElement.trigger, true);\n }\n return activeElement;\n}\n\nfunction useMounted() {\n const isMounted = ref(false);\n if (getCurrentInstance()) {\n onMounted(() => {\n isMounted.value = true;\n });\n }\n return isMounted;\n}\n\nfunction useSupported(callback) {\n const isMounted = useMounted();\n return computed(() => {\n isMounted.value;\n return Boolean(callback());\n });\n}\n\nfunction useRafFn(fn, options = {}) {\n const {\n immediate = true,\n window = defaultWindow\n } = options;\n const isActive = ref(false);\n let previousFrameTimestamp = 0;\n let rafId = null;\n function loop(timestamp) {\n if (!isActive.value || !window)\n return;\n const delta = timestamp - (previousFrameTimestamp || timestamp);\n fn({ delta, timestamp });\n previousFrameTimestamp = timestamp;\n rafId = window.requestAnimationFrame(loop);\n }\n function resume() {\n if (!isActive.value && window) {\n isActive.value = true;\n rafId = window.requestAnimationFrame(loop);\n }\n }\n function pause() {\n isActive.value = false;\n if (rafId != null && window) {\n window.cancelAnimationFrame(rafId);\n rafId = null;\n }\n }\n if (immediate)\n resume();\n tryOnScopeDispose(pause);\n return {\n isActive: readonly(isActive),\n pause,\n resume\n };\n}\n\nfunction useAnimate(target, keyframes, options) {\n let config;\n let animateOptions;\n if (isObject(options)) {\n config = options;\n animateOptions = objectOmit(options, [\"window\", \"immediate\", \"commitStyles\", \"persist\", \"onReady\", \"onError\"]);\n } else {\n config = { duration: options };\n animateOptions = options;\n }\n const {\n window = defaultWindow,\n immediate = true,\n commitStyles,\n persist,\n playbackRate: _playbackRate = 1,\n onReady,\n onError = (e) => {\n console.error(e);\n }\n } = config;\n const isSupported = useSupported(() => window && HTMLElement && \"animate\" in HTMLElement.prototype);\n const animate = shallowRef(void 0);\n const store = shallowReactive({\n startTime: null,\n currentTime: null,\n timeline: null,\n playbackRate: _playbackRate,\n pending: false,\n playState: immediate ? \"idle\" : \"paused\",\n replaceState: \"active\"\n });\n const pending = computed(() => store.pending);\n const playState = computed(() => store.playState);\n const replaceState = computed(() => store.replaceState);\n const startTime = computed({\n get() {\n return store.startTime;\n },\n set(value) {\n store.startTime = value;\n if (animate.value)\n animate.value.startTime = value;\n }\n });\n const currentTime = computed({\n get() {\n return store.currentTime;\n },\n set(value) {\n store.currentTime = value;\n if (animate.value) {\n animate.value.currentTime = value;\n syncResume();\n }\n }\n });\n const timeline = computed({\n get() {\n return store.timeline;\n },\n set(value) {\n store.timeline = value;\n if (animate.value)\n animate.value.timeline = value;\n }\n });\n const playbackRate = computed({\n get() {\n return store.playbackRate;\n },\n set(value) {\n store.playbackRate = value;\n if (animate.value)\n animate.value.playbackRate = value;\n }\n });\n const play = () => {\n if (animate.value) {\n try {\n animate.value.play();\n syncResume();\n } catch (e) {\n syncPause();\n onError(e);\n }\n } else {\n update();\n }\n };\n const pause = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.pause();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n const reverse = () => {\n var _a;\n !animate.value && update();\n try {\n (_a = animate.value) == null ? void 0 : _a.reverse();\n syncResume();\n } catch (e) {\n syncPause();\n onError(e);\n }\n };\n const finish = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.finish();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n const cancel = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.cancel();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n watch(() => unrefElement(target), (el) => {\n el && update();\n });\n watch(() => keyframes, (value) => {\n !animate.value && update();\n if (!unrefElement(target) && animate.value) {\n animate.value.effect = new KeyframeEffect(\n unrefElement(target),\n toValue(value),\n animateOptions\n );\n }\n }, { deep: true });\n tryOnMounted(() => {\n nextTick(() => update(true));\n });\n tryOnScopeDispose(cancel);\n function update(init) {\n const el = unrefElement(target);\n if (!isSupported.value || !el)\n return;\n animate.value = el.animate(toValue(keyframes), animateOptions);\n if (commitStyles)\n animate.value.commitStyles();\n if (persist)\n animate.value.persist();\n if (_playbackRate !== 1)\n animate.value.playbackRate = _playbackRate;\n if (init && !immediate)\n animate.value.pause();\n else\n syncResume();\n onReady == null ? void 0 : onReady(animate.value);\n }\n useEventListener(animate, [\"cancel\", \"finish\", \"remove\"], syncPause);\n const { resume: resumeRef, pause: pauseRef } = useRafFn(() => {\n if (!animate.value)\n return;\n store.pending = animate.value.pending;\n store.playState = animate.value.playState;\n store.replaceState = animate.value.replaceState;\n store.startTime = animate.value.startTime;\n store.currentTime = animate.value.currentTime;\n store.timeline = animate.value.timeline;\n store.playbackRate = animate.value.playbackRate;\n }, { immediate: false });\n function syncResume() {\n if (isSupported.value)\n resumeRef();\n }\n function syncPause() {\n if (isSupported.value && window)\n window.requestAnimationFrame(pauseRef);\n }\n return {\n isSupported,\n animate,\n // actions\n play,\n pause,\n reverse,\n finish,\n cancel,\n // state\n pending,\n playState,\n replaceState,\n startTime,\n currentTime,\n timeline,\n playbackRate\n };\n}\n\nfunction useAsyncQueue(tasks, options = {}) {\n const {\n interrupt = true,\n onError = noop,\n onFinished = noop,\n signal\n } = options;\n const promiseState = {\n aborted: \"aborted\",\n fulfilled: \"fulfilled\",\n pending: \"pending\",\n rejected: \"rejected\"\n };\n const initialResult = Array.from(Array.from({ length: tasks.length }), () => ({ state: promiseState.pending, data: null }));\n const result = reactive(initialResult);\n const activeIndex = ref(-1);\n if (!tasks || tasks.length === 0) {\n onFinished();\n return {\n activeIndex,\n result\n };\n }\n function updateResult(state, res) {\n activeIndex.value++;\n result[activeIndex.value].data = res;\n result[activeIndex.value].state = state;\n }\n tasks.reduce((prev, curr) => {\n return prev.then((prevRes) => {\n var _a;\n if (signal == null ? void 0 : signal.aborted) {\n updateResult(promiseState.aborted, new Error(\"aborted\"));\n return;\n }\n if (((_a = result[activeIndex.value]) == null ? void 0 : _a.state) === promiseState.rejected && interrupt) {\n onFinished();\n return;\n }\n const done = curr(prevRes).then((currentRes) => {\n updateResult(promiseState.fulfilled, currentRes);\n activeIndex.value === tasks.length - 1 && onFinished();\n return currentRes;\n });\n if (!signal)\n return done;\n return Promise.race([done, whenAborted(signal)]);\n }).catch((e) => {\n if (signal == null ? void 0 : signal.aborted) {\n updateResult(promiseState.aborted, e);\n return e;\n }\n updateResult(promiseState.rejected, e);\n onError();\n return e;\n });\n }, Promise.resolve());\n return {\n activeIndex,\n result\n };\n}\nfunction whenAborted(signal) {\n return new Promise((resolve, reject) => {\n const error = new Error(\"aborted\");\n if (signal.aborted)\n reject(error);\n else\n signal.addEventListener(\"abort\", () => reject(error), { once: true });\n });\n}\n\nvar __defProp$o = Object.defineProperty;\nvar __defProps$b = Object.defineProperties;\nvar __getOwnPropDescs$b = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$r = Object.getOwnPropertySymbols;\nvar __hasOwnProp$r = Object.prototype.hasOwnProperty;\nvar __propIsEnum$r = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$o = (obj, key, value) => key in obj ? __defProp$o(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$o = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$r.call(b, prop))\n __defNormalProp$o(a, prop, b[prop]);\n if (__getOwnPropSymbols$r)\n for (var prop of __getOwnPropSymbols$r(b)) {\n if (__propIsEnum$r.call(b, prop))\n __defNormalProp$o(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$b = (a, b) => __defProps$b(a, __getOwnPropDescs$b(b));\nfunction useAsyncState(promise, initialState, options) {\n const {\n immediate = true,\n delay = 0,\n onError = noop,\n onSuccess = noop,\n resetOnExecute = true,\n shallow = true,\n throwError\n } = options != null ? options : {};\n const state = shallow ? shallowRef(initialState) : ref(initialState);\n const isReady = ref(false);\n const isLoading = ref(false);\n const error = shallowRef(void 0);\n async function execute(delay2 = 0, ...args) {\n if (resetOnExecute)\n state.value = initialState;\n error.value = void 0;\n isReady.value = false;\n isLoading.value = true;\n if (delay2 > 0)\n await promiseTimeout(delay2);\n const _promise = typeof promise === \"function\" ? promise(...args) : promise;\n try {\n const data = await _promise;\n state.value = data;\n isReady.value = true;\n onSuccess(data);\n } catch (e) {\n error.value = e;\n onError(e);\n if (throwError)\n throw e;\n } finally {\n isLoading.value = false;\n }\n return state.value;\n }\n if (immediate)\n execute(delay);\n const shell = {\n state,\n isReady,\n isLoading,\n error,\n execute\n };\n function waitUntilIsLoaded() {\n return new Promise((resolve, reject) => {\n until(isLoading).toBe(false).then(() => resolve(shell)).catch(reject);\n });\n }\n return __spreadProps$b(__spreadValues$o({}, shell), {\n then(onFulfilled, onRejected) {\n return waitUntilIsLoaded().then(onFulfilled, onRejected);\n }\n });\n}\n\nconst defaults = {\n array: (v) => JSON.stringify(v),\n object: (v) => JSON.stringify(v),\n set: (v) => JSON.stringify(Array.from(v)),\n map: (v) => JSON.stringify(Object.fromEntries(v)),\n null: () => \"\"\n};\nfunction getDefaultSerialization(target) {\n if (!target)\n return defaults.null;\n if (target instanceof Map)\n return defaults.map;\n else if (target instanceof Set)\n return defaults.set;\n else if (Array.isArray(target))\n return defaults.array;\n else\n return defaults.object;\n}\n\nfunction useBase64(target, options) {\n const base64 = ref(\"\");\n const promise = ref();\n function execute() {\n if (!isClient)\n return;\n promise.value = new Promise((resolve, reject) => {\n try {\n const _target = toValue(target);\n if (_target == null) {\n resolve(\"\");\n } else if (typeof _target === \"string\") {\n resolve(blobToBase64(new Blob([_target], { type: \"text/plain\" })));\n } else if (_target instanceof Blob) {\n resolve(blobToBase64(_target));\n } else if (_target instanceof ArrayBuffer) {\n resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))));\n } else if (_target instanceof HTMLCanvasElement) {\n resolve(_target.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n } else if (_target instanceof HTMLImageElement) {\n const img = _target.cloneNode(false);\n img.crossOrigin = \"Anonymous\";\n imgLoaded(img).then(() => {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n resolve(canvas.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n }).catch(reject);\n } else if (typeof _target === \"object\") {\n const _serializeFn = (options == null ? void 0 : options.serializer) || getDefaultSerialization(_target);\n const serialized = _serializeFn(_target);\n return resolve(blobToBase64(new Blob([serialized], { type: \"application/json\" })));\n } else {\n reject(new Error(\"target is unsupported types\"));\n }\n } catch (error) {\n reject(error);\n }\n });\n promise.value.then((res) => base64.value = res);\n return promise.value;\n }\n if (isRef(target) || typeof target === \"function\")\n watch(target, execute, { immediate: true });\n else\n execute();\n return {\n base64,\n promise,\n execute\n };\n}\nfunction imgLoaded(img) {\n return new Promise((resolve, reject) => {\n if (!img.complete) {\n img.onload = () => {\n resolve();\n };\n img.onerror = reject;\n } else {\n resolve();\n }\n });\n}\nfunction blobToBase64(blob) {\n return new Promise((resolve, reject) => {\n const fr = new FileReader();\n fr.onload = (e) => {\n resolve(e.target.result);\n };\n fr.onerror = reject;\n fr.readAsDataURL(blob);\n });\n}\n\nfunction useBattery({ navigator = defaultNavigator } = {}) {\n const events = [\"chargingchange\", \"chargingtimechange\", \"dischargingtimechange\", \"levelchange\"];\n const isSupported = useSupported(() => navigator && \"getBattery\" in navigator);\n const charging = ref(false);\n const chargingTime = ref(0);\n const dischargingTime = ref(0);\n const level = ref(1);\n let battery;\n function updateBatteryInfo() {\n charging.value = this.charging;\n chargingTime.value = this.chargingTime || 0;\n dischargingTime.value = this.dischargingTime || 0;\n level.value = this.level;\n }\n if (isSupported.value) {\n navigator.getBattery().then((_battery) => {\n battery = _battery;\n updateBatteryInfo.call(battery);\n useEventListener(battery, events, updateBatteryInfo, { passive: true });\n });\n }\n return {\n isSupported,\n charging,\n chargingTime,\n dischargingTime,\n level\n };\n}\n\nfunction useBluetooth(options) {\n let {\n acceptAllDevices = false\n } = options || {};\n const {\n filters = void 0,\n optionalServices = void 0,\n navigator = defaultNavigator\n } = options || {};\n const isSupported = useSupported(() => navigator && \"bluetooth\" in navigator);\n const device = shallowRef(void 0);\n const error = shallowRef(null);\n watch(device, () => {\n connectToBluetoothGATTServer();\n });\n async function requestDevice() {\n if (!isSupported.value)\n return;\n error.value = null;\n if (filters && filters.length > 0)\n acceptAllDevices = false;\n try {\n device.value = await (navigator == null ? void 0 : navigator.bluetooth.requestDevice({\n acceptAllDevices,\n filters,\n optionalServices\n }));\n } catch (err) {\n error.value = err;\n }\n }\n const server = ref();\n const isConnected = computed(() => {\n var _a;\n return ((_a = server.value) == null ? void 0 : _a.connected) || false;\n });\n async function connectToBluetoothGATTServer() {\n error.value = null;\n if (device.value && device.value.gatt) {\n device.value.addEventListener(\"gattserverdisconnected\", () => {\n });\n try {\n server.value = await device.value.gatt.connect();\n } catch (err) {\n error.value = err;\n }\n }\n }\n tryOnMounted(() => {\n var _a;\n if (device.value)\n (_a = device.value.gatt) == null ? void 0 : _a.connect();\n });\n tryOnScopeDispose(() => {\n var _a;\n if (device.value)\n (_a = device.value.gatt) == null ? void 0 : _a.disconnect();\n });\n return {\n isSupported,\n isConnected,\n // Device:\n device,\n requestDevice,\n // Server:\n server,\n // Errors:\n error\n };\n}\n\nfunction useMediaQuery(query, options = {}) {\n const { window = defaultWindow } = options;\n const isSupported = useSupported(() => window && \"matchMedia\" in window && typeof window.matchMedia === \"function\");\n let mediaQuery;\n const matches = ref(false);\n const handler = (event) => {\n matches.value = event.matches;\n };\n const cleanup = () => {\n if (!mediaQuery)\n return;\n if (\"removeEventListener\" in mediaQuery)\n mediaQuery.removeEventListener(\"change\", handler);\n else\n mediaQuery.removeListener(handler);\n };\n const stopWatch = watchEffect(() => {\n if (!isSupported.value)\n return;\n cleanup();\n mediaQuery = window.matchMedia(toValue(query));\n if (\"addEventListener\" in mediaQuery)\n mediaQuery.addEventListener(\"change\", handler);\n else\n mediaQuery.addListener(handler);\n matches.value = mediaQuery.matches;\n });\n tryOnScopeDispose(() => {\n stopWatch();\n cleanup();\n mediaQuery = void 0;\n });\n return matches;\n}\n\nconst breakpointsTailwind = {\n \"sm\": 640,\n \"md\": 768,\n \"lg\": 1024,\n \"xl\": 1280,\n \"2xl\": 1536\n};\nconst breakpointsBootstrapV5 = {\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1400\n};\nconst breakpointsVuetify = {\n xs: 600,\n sm: 960,\n md: 1264,\n lg: 1904\n};\nconst breakpointsAntDesign = {\n xs: 480,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1600\n};\nconst breakpointsQuasar = {\n xs: 600,\n sm: 1024,\n md: 1440,\n lg: 1920\n};\nconst breakpointsSematic = {\n mobileS: 320,\n mobileM: 375,\n mobileL: 425,\n tablet: 768,\n laptop: 1024,\n laptopL: 1440,\n desktop4K: 2560\n};\nconst breakpointsMasterCss = {\n \"3xs\": 360,\n \"2xs\": 480,\n \"xs\": 600,\n \"sm\": 768,\n \"md\": 1024,\n \"lg\": 1280,\n \"xl\": 1440,\n \"2xl\": 1600,\n \"3xl\": 1920,\n \"4xl\": 2560\n};\n\nfunction useBreakpoints(breakpoints, options = {}) {\n function getValue(k, delta) {\n let v = breakpoints[k];\n if (delta != null)\n v = increaseWithUnit(v, delta);\n if (typeof v === \"number\")\n v = `${v}px`;\n return v;\n }\n const { window = defaultWindow } = options;\n function match(query) {\n if (!window)\n return false;\n return window.matchMedia(query).matches;\n }\n const greaterOrEqual = (k) => {\n return useMediaQuery(`(min-width: ${getValue(k)})`, options);\n };\n const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\n Object.defineProperty(shortcuts, k, {\n get: () => greaterOrEqual(k),\n enumerable: true,\n configurable: true\n });\n return shortcuts;\n }, {});\n return Object.assign(shortcutMethods, {\n greater(k) {\n return useMediaQuery(`(min-width: ${getValue(k, 0.1)})`, options);\n },\n greaterOrEqual,\n smaller(k) {\n return useMediaQuery(`(max-width: ${getValue(k, -0.1)})`, options);\n },\n smallerOrEqual(k) {\n return useMediaQuery(`(max-width: ${getValue(k)})`, options);\n },\n between(a, b) {\n return useMediaQuery(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`, options);\n },\n isGreater(k) {\n return match(`(min-width: ${getValue(k, 0.1)})`);\n },\n isGreaterOrEqual(k) {\n return match(`(min-width: ${getValue(k)})`);\n },\n isSmaller(k) {\n return match(`(max-width: ${getValue(k, -0.1)})`);\n },\n isSmallerOrEqual(k) {\n return match(`(max-width: ${getValue(k)})`);\n },\n isInBetween(a, b) {\n return match(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`);\n },\n current() {\n const points = Object.keys(breakpoints).map((i) => [i, greaterOrEqual(i)]);\n return computed(() => points.filter(([, v]) => v.value).map(([k]) => k));\n }\n });\n}\n\nfunction useBroadcastChannel(options) {\n const {\n name,\n window = defaultWindow\n } = options;\n const isSupported = useSupported(() => window && \"BroadcastChannel\" in window);\n const isClosed = ref(false);\n const channel = ref();\n const data = ref();\n const error = shallowRef(null);\n const post = (data2) => {\n if (channel.value)\n channel.value.postMessage(data2);\n };\n const close = () => {\n if (channel.value)\n channel.value.close();\n isClosed.value = true;\n };\n if (isSupported.value) {\n tryOnMounted(() => {\n error.value = null;\n channel.value = new BroadcastChannel(name);\n channel.value.addEventListener(\"message\", (e) => {\n data.value = e.data;\n }, { passive: true });\n channel.value.addEventListener(\"messageerror\", (e) => {\n error.value = e;\n }, { passive: true });\n channel.value.addEventListener(\"close\", () => {\n isClosed.value = true;\n });\n });\n }\n tryOnScopeDispose(() => {\n close();\n });\n return {\n isSupported,\n channel,\n data,\n post,\n close,\n error,\n isClosed\n };\n}\n\nvar __defProp$n = Object.defineProperty;\nvar __getOwnPropSymbols$q = Object.getOwnPropertySymbols;\nvar __hasOwnProp$q = Object.prototype.hasOwnProperty;\nvar __propIsEnum$q = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$n = (obj, key, value) => key in obj ? __defProp$n(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$n = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$q.call(b, prop))\n __defNormalProp$n(a, prop, b[prop]);\n if (__getOwnPropSymbols$q)\n for (var prop of __getOwnPropSymbols$q(b)) {\n if (__propIsEnum$q.call(b, prop))\n __defNormalProp$n(a, prop, b[prop]);\n }\n return a;\n};\nconst WRITABLE_PROPERTIES = [\n \"hash\",\n \"host\",\n \"hostname\",\n \"href\",\n \"pathname\",\n \"port\",\n \"protocol\",\n \"search\"\n];\nfunction useBrowserLocation({ window = defaultWindow } = {}) {\n const refs = Object.fromEntries(\n WRITABLE_PROPERTIES.map((key) => [key, ref()])\n );\n for (const [key, ref2] of objectEntries(refs)) {\n watch(ref2, (value) => {\n if (!(window == null ? void 0 : window.location) || window.location[key] === value)\n return;\n window.location[key] = value;\n });\n }\n const buildState = (trigger) => {\n var _a;\n const { state: state2, length } = (window == null ? void 0 : window.history) || {};\n const { origin } = (window == null ? void 0 : window.location) || {};\n for (const key of WRITABLE_PROPERTIES)\n refs[key].value = (_a = window == null ? void 0 : window.location) == null ? void 0 : _a[key];\n return reactive(__spreadValues$n({\n trigger,\n state: state2,\n length,\n origin\n }, refs));\n };\n const state = ref(buildState(\"load\"));\n if (window) {\n useEventListener(window, \"popstate\", () => state.value = buildState(\"popstate\"), { passive: true });\n useEventListener(window, \"hashchange\", () => state.value = buildState(\"hashchange\"), { passive: true });\n }\n return state;\n}\n\nfunction useCached(refValue, comparator = (a, b) => a === b, watchOptions) {\n const cachedValue = ref(refValue.value);\n watch(() => refValue.value, (value) => {\n if (!comparator(value, cachedValue.value))\n cachedValue.value = value;\n }, watchOptions);\n return cachedValue;\n}\n\nfunction useClipboard(options = {}) {\n const {\n navigator = defaultNavigator,\n read = false,\n source,\n copiedDuring = 1500,\n legacy = false\n } = options;\n const isClipboardApiSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n const isSupported = computed(() => isClipboardApiSupported.value || legacy);\n const text = ref(\"\");\n const copied = ref(false);\n const timeout = useTimeoutFn(() => copied.value = false, copiedDuring);\n function updateText() {\n if (isClipboardApiSupported.value) {\n navigator.clipboard.readText().then((value) => {\n text.value = value;\n });\n } else {\n text.value = legacyRead();\n }\n }\n if (isSupported.value && read)\n useEventListener([\"copy\", \"cut\"], updateText);\n async function copy(value = toValue(source)) {\n if (isSupported.value && value != null) {\n if (isClipboardApiSupported.value)\n await navigator.clipboard.writeText(value);\n else\n legacyCopy(value);\n text.value = value;\n copied.value = true;\n timeout.start();\n }\n }\n function legacyCopy(value) {\n const ta = document.createElement(\"textarea\");\n ta.value = value != null ? value : \"\";\n ta.style.position = \"absolute\";\n ta.style.opacity = \"0\";\n document.body.appendChild(ta);\n ta.select();\n document.execCommand(\"copy\");\n ta.remove();\n }\n function legacyRead() {\n var _a, _b, _c;\n return (_c = (_b = (_a = document == null ? void 0 : document.getSelection) == null ? void 0 : _a.call(document)) == null ? void 0 : _b.toString()) != null ? _c : \"\";\n }\n return {\n isSupported,\n text,\n copied,\n copy\n };\n}\n\nvar __defProp$m = Object.defineProperty;\nvar __defProps$a = Object.defineProperties;\nvar __getOwnPropDescs$a = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$p = Object.getOwnPropertySymbols;\nvar __hasOwnProp$p = Object.prototype.hasOwnProperty;\nvar __propIsEnum$p = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$m = (obj, key, value) => key in obj ? __defProp$m(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$m = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$p.call(b, prop))\n __defNormalProp$m(a, prop, b[prop]);\n if (__getOwnPropSymbols$p)\n for (var prop of __getOwnPropSymbols$p(b)) {\n if (__propIsEnum$p.call(b, prop))\n __defNormalProp$m(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$a = (a, b) => __defProps$a(a, __getOwnPropDescs$a(b));\nfunction cloneFnJSON(source) {\n return JSON.parse(JSON.stringify(source));\n}\nfunction useCloned(source, options = {}) {\n const cloned = ref({});\n const {\n manual,\n clone = cloneFnJSON,\n // watch options\n deep = true,\n immediate = true\n } = options;\n function sync() {\n cloned.value = clone(toValue(source));\n }\n if (!manual && (isRef(source) || typeof source === \"function\")) {\n watch(source, sync, __spreadProps$a(__spreadValues$m({}, options), {\n deep,\n immediate\n }));\n } else {\n sync();\n }\n return { cloned, sync };\n}\n\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\nconst handlers = /* @__PURE__ */ getHandlers();\nfunction getHandlers() {\n if (!(globalKey in _global))\n _global[globalKey] = _global[globalKey] || {};\n return _global[globalKey];\n}\nfunction getSSRHandler(key, fallback) {\n return handlers[key] || fallback;\n}\nfunction setSSRHandler(key, fn) {\n handlers[key] = fn;\n}\n\nfunction guessSerializerType(rawInit) {\n return rawInit == null ? \"any\" : rawInit instanceof Set ? \"set\" : rawInit instanceof Map ? \"map\" : rawInit instanceof Date ? \"date\" : typeof rawInit === \"boolean\" ? \"boolean\" : typeof rawInit === \"string\" ? \"string\" : typeof rawInit === \"object\" ? \"object\" : !Number.isNaN(rawInit) ? \"number\" : \"any\";\n}\n\nvar __defProp$l = Object.defineProperty;\nvar __getOwnPropSymbols$o = Object.getOwnPropertySymbols;\nvar __hasOwnProp$o = Object.prototype.hasOwnProperty;\nvar __propIsEnum$o = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$l = (obj, key, value) => key in obj ? __defProp$l(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$l = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$o.call(b, prop))\n __defNormalProp$l(a, prop, b[prop]);\n if (__getOwnPropSymbols$o)\n for (var prop of __getOwnPropSymbols$o(b)) {\n if (__propIsEnum$o.call(b, prop))\n __defNormalProp$l(a, prop, b[prop]);\n }\n return a;\n};\nconst StorageSerializers = {\n boolean: {\n read: (v) => v === \"true\",\n write: (v) => String(v)\n },\n object: {\n read: (v) => JSON.parse(v),\n write: (v) => JSON.stringify(v)\n },\n number: {\n read: (v) => Number.parseFloat(v),\n write: (v) => String(v)\n },\n any: {\n read: (v) => v,\n write: (v) => String(v)\n },\n string: {\n read: (v) => v,\n write: (v) => String(v)\n },\n map: {\n read: (v) => new Map(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v.entries()))\n },\n set: {\n read: (v) => new Set(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v))\n },\n date: {\n read: (v) => new Date(v),\n write: (v) => v.toISOString()\n }\n};\nconst customStorageEventName = \"vueuse-storage\";\nfunction useStorage(key, defaults, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n mergeDefaults = false,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n }\n } = options;\n const data = (shallow ? shallowRef : ref)(defaults);\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorage\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n if (!storage)\n return data;\n const rawInit = toValue(defaults);\n const type = guessSerializerType(rawInit);\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n const { pause: pauseWatch, resume: resumeWatch } = pausableWatch(\n data,\n () => write(data.value),\n { flush, deep, eventFilter }\n );\n if (window && listenToStorageChanges) {\n useEventListener(window, \"storage\", update);\n useEventListener(window, customStorageEventName, updateFromCustomEvent);\n }\n update();\n return data;\n function write(v) {\n try {\n if (v == null) {\n storage.removeItem(key);\n } else {\n const serialized = serializer.write(v);\n const oldValue = storage.getItem(key);\n if (oldValue !== serialized) {\n storage.setItem(key, serialized);\n if (window) {\n window.dispatchEvent(new CustomEvent(customStorageEventName, {\n detail: {\n key,\n oldValue,\n newValue: serialized,\n storageArea: storage\n }\n }));\n }\n }\n }\n } catch (e) {\n onError(e);\n }\n }\n function read(event) {\n const rawValue = event ? event.newValue : storage.getItem(key);\n if (rawValue == null) {\n if (writeDefaults && rawInit !== null)\n storage.setItem(key, serializer.write(rawInit));\n return rawInit;\n } else if (!event && mergeDefaults) {\n const value = serializer.read(rawValue);\n if (typeof mergeDefaults === \"function\")\n return mergeDefaults(value, rawInit);\n else if (type === \"object\" && !Array.isArray(value))\n return __spreadValues$l(__spreadValues$l({}, rawInit), value);\n return value;\n } else if (typeof rawValue !== \"string\") {\n return rawValue;\n } else {\n return serializer.read(rawValue);\n }\n }\n function updateFromCustomEvent(event) {\n update(event.detail);\n }\n function update(event) {\n if (event && event.storageArea !== storage)\n return;\n if (event && event.key == null) {\n data.value = rawInit;\n return;\n }\n if (event && event.key !== key)\n return;\n pauseWatch();\n try {\n data.value = read(event);\n } catch (e) {\n onError(e);\n } finally {\n if (event)\n nextTick(resumeWatch);\n else\n resumeWatch();\n }\n }\n}\n\nfunction usePreferredDark(options) {\n return useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n\nvar __defProp$k = Object.defineProperty;\nvar __getOwnPropSymbols$n = Object.getOwnPropertySymbols;\nvar __hasOwnProp$n = Object.prototype.hasOwnProperty;\nvar __propIsEnum$n = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$k = (obj, key, value) => key in obj ? __defProp$k(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$k = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$n.call(b, prop))\n __defNormalProp$k(a, prop, b[prop]);\n if (__getOwnPropSymbols$n)\n for (var prop of __getOwnPropSymbols$n(b)) {\n if (__propIsEnum$n.call(b, prop))\n __defNormalProp$k(a, prop, b[prop]);\n }\n return a;\n};\nfunction useColorMode(options = {}) {\n const {\n selector = \"html\",\n attribute = \"class\",\n initialValue = \"auto\",\n window = defaultWindow,\n storage,\n storageKey = \"vueuse-color-scheme\",\n listenToStorageChanges = true,\n storageRef,\n emitAuto,\n disableTransition = true\n } = options;\n const modes = __spreadValues$k({\n auto: \"\",\n light: \"light\",\n dark: \"dark\"\n }, options.modes || {});\n const preferredDark = usePreferredDark({ window });\n const system = computed(() => preferredDark.value ? \"dark\" : \"light\");\n const store = storageRef || (storageKey == null ? toRef(initialValue) : useStorage(storageKey, initialValue, storage, { window, listenToStorageChanges }));\n const state = computed(\n () => store.value === \"auto\" ? system.value : store.value\n );\n const updateHTMLAttrs = getSSRHandler(\n \"updateHTMLAttrs\",\n (selector2, attribute2, value) => {\n const el = typeof selector2 === \"string\" ? window == null ? void 0 : window.document.querySelector(selector2) : unrefElement(selector2);\n if (!el)\n return;\n let style;\n if (disableTransition) {\n style = window.document.createElement(\"style\");\n const styleString = \"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\";\n style.appendChild(document.createTextNode(styleString));\n window.document.head.appendChild(style);\n }\n if (attribute2 === \"class\") {\n const current = value.split(/\\s/g);\n Object.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n if (current.includes(v))\n el.classList.add(v);\n else\n el.classList.remove(v);\n });\n } else {\n el.setAttribute(attribute2, value);\n }\n if (disableTransition) {\n window.getComputedStyle(style).opacity;\n document.head.removeChild(style);\n }\n }\n );\n function defaultOnChanged(mode) {\n var _a;\n updateHTMLAttrs(selector, attribute, (_a = modes[mode]) != null ? _a : mode);\n }\n function onChanged(mode) {\n if (options.onChanged)\n options.onChanged(mode, defaultOnChanged);\n else\n defaultOnChanged(mode);\n }\n watch(state, onChanged, { flush: \"post\", immediate: true });\n tryOnMounted(() => onChanged(state.value));\n const auto = computed({\n get() {\n return emitAuto ? store.value : state.value;\n },\n set(v) {\n store.value = v;\n }\n });\n try {\n return Object.assign(auto, { store, system, state });\n } catch (e) {\n return auto;\n }\n}\n\nfunction useConfirmDialog(revealed = ref(false)) {\n const confirmHook = createEventHook();\n const cancelHook = createEventHook();\n const revealHook = createEventHook();\n let _resolve = noop;\n const reveal = (data) => {\n revealHook.trigger(data);\n revealed.value = true;\n return new Promise((resolve) => {\n _resolve = resolve;\n });\n };\n const confirm = (data) => {\n revealed.value = false;\n confirmHook.trigger(data);\n _resolve({ data, isCanceled: false });\n };\n const cancel = (data) => {\n revealed.value = false;\n cancelHook.trigger(data);\n _resolve({ data, isCanceled: true });\n };\n return {\n isRevealed: computed(() => revealed.value),\n reveal,\n confirm,\n cancel,\n onReveal: revealHook.on,\n onConfirm: confirmHook.on,\n onCancel: cancelHook.on\n };\n}\n\nvar __getOwnPropSymbols$m = Object.getOwnPropertySymbols;\nvar __hasOwnProp$m = Object.prototype.hasOwnProperty;\nvar __propIsEnum$m = Object.prototype.propertyIsEnumerable;\nvar __objRest$3 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$m.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$m)\n for (var prop of __getOwnPropSymbols$m(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$m.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction useMutationObserver(target, callback, options = {}) {\n const _a = options, { window = defaultWindow } = _a, mutationOptions = __objRest$3(_a, [\"window\"]);\n let observer;\n const isSupported = useSupported(() => window && \"MutationObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = void 0;\n }\n };\n const stopWatch = watch(\n () => unrefElement(target),\n (el) => {\n cleanup();\n if (isSupported.value && window && el) {\n observer = new MutationObserver(callback);\n observer.observe(el, mutationOptions);\n }\n },\n { immediate: true }\n );\n const stop = () => {\n cleanup();\n stopWatch();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop\n };\n}\n\nfunction useCssVar(prop, target, options = {}) {\n const { window = defaultWindow, initialValue = \"\", observe = false } = options;\n const variable = ref(initialValue);\n const elRef = computed(() => {\n var _a;\n return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement);\n });\n function updateCssVar() {\n var _a;\n const key = toValue(prop);\n const el = toValue(elRef);\n if (el && window) {\n const value = (_a = window.getComputedStyle(el).getPropertyValue(key)) == null ? void 0 : _a.trim();\n variable.value = value || initialValue;\n }\n }\n if (observe) {\n useMutationObserver(elRef, updateCssVar, {\n attributeFilter: [\"style\", \"class\"],\n window\n });\n }\n watch(\n [elRef, () => toValue(prop)],\n updateCssVar,\n { immediate: true }\n );\n watch(\n variable,\n (val) => {\n var _a;\n if ((_a = elRef.value) == null ? void 0 : _a.style)\n elRef.value.style.setProperty(toValue(prop), val);\n }\n );\n return variable;\n}\n\nfunction useCurrentElement() {\n const vm = getCurrentInstance();\n const currentElement = computedWithControl(\n () => null,\n () => vm.proxy.$el\n );\n onUpdated(currentElement.trigger);\n onMounted(currentElement.trigger);\n return currentElement;\n}\n\nfunction useCycleList(list, options) {\n const state = shallowRef(getInitialValue());\n const listRef = toRef(list);\n const index = computed({\n get() {\n var _a;\n const targetList = listRef.value;\n let index2 = (options == null ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, targetList) : targetList.indexOf(state.value);\n if (index2 < 0)\n index2 = (_a = options == null ? void 0 : options.fallbackIndex) != null ? _a : 0;\n return index2;\n },\n set(v) {\n set(v);\n }\n });\n function set(i) {\n const targetList = listRef.value;\n const length = targetList.length;\n const index2 = (i % length + length) % length;\n const value = targetList[index2];\n state.value = value;\n return value;\n }\n function shift(delta = 1) {\n return set(index.value + delta);\n }\n function next(n = 1) {\n return shift(n);\n }\n function prev(n = 1) {\n return shift(-n);\n }\n function getInitialValue() {\n var _a, _b;\n return (_b = toValue((_a = options == null ? void 0 : options.initialValue) != null ? _a : toValue(list)[0])) != null ? _b : void 0;\n }\n watch(listRef, () => set(index.value));\n return {\n state,\n index,\n next,\n prev\n };\n}\n\nvar __defProp$j = Object.defineProperty;\nvar __defProps$9 = Object.defineProperties;\nvar __getOwnPropDescs$9 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$l = Object.getOwnPropertySymbols;\nvar __hasOwnProp$l = Object.prototype.hasOwnProperty;\nvar __propIsEnum$l = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$j = (obj, key, value) => key in obj ? __defProp$j(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$j = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$l.call(b, prop))\n __defNormalProp$j(a, prop, b[prop]);\n if (__getOwnPropSymbols$l)\n for (var prop of __getOwnPropSymbols$l(b)) {\n if (__propIsEnum$l.call(b, prop))\n __defNormalProp$j(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$9 = (a, b) => __defProps$9(a, __getOwnPropDescs$9(b));\nfunction useDark(options = {}) {\n const {\n valueDark = \"dark\",\n valueLight = \"\"\n } = options;\n const mode = useColorMode(__spreadProps$9(__spreadValues$j({}, options), {\n onChanged: (mode2, defaultHandler) => {\n var _a;\n if (options.onChanged)\n (_a = options.onChanged) == null ? void 0 : _a.call(options, mode2 === \"dark\", defaultHandler, mode2);\n else\n defaultHandler(mode2);\n },\n modes: {\n dark: valueDark,\n light: valueLight\n }\n }));\n const isDark = computed({\n get() {\n return mode.value === \"dark\";\n },\n set(v) {\n const modeVal = v ? \"dark\" : \"light\";\n if (mode.system.value === modeVal)\n mode.value = \"auto\";\n else\n mode.value = modeVal;\n }\n });\n return isDark;\n}\n\nfunction fnBypass(v) {\n return v;\n}\nfunction fnSetSource(source, value) {\n return source.value = value;\n}\nfunction defaultDump(clone) {\n return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction defaultParse(clone) {\n return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction useManualRefHistory(source, options = {}) {\n const {\n clone = false,\n dump = defaultDump(clone),\n parse = defaultParse(clone),\n setSource = fnSetSource\n } = options;\n function _createHistoryRecord() {\n return markRaw({\n snapshot: dump(source.value),\n timestamp: timestamp()\n });\n }\n const last = ref(_createHistoryRecord());\n const undoStack = ref([]);\n const redoStack = ref([]);\n const _setSource = (record) => {\n setSource(source, parse(record.snapshot));\n last.value = record;\n };\n const commit = () => {\n undoStack.value.unshift(last.value);\n last.value = _createHistoryRecord();\n if (options.capacity && undoStack.value.length > options.capacity)\n undoStack.value.splice(options.capacity, Number.POSITIVE_INFINITY);\n if (redoStack.value.length)\n redoStack.value.splice(0, redoStack.value.length);\n };\n const clear = () => {\n undoStack.value.splice(0, undoStack.value.length);\n redoStack.value.splice(0, redoStack.value.length);\n };\n const undo = () => {\n const state = undoStack.value.shift();\n if (state) {\n redoStack.value.unshift(last.value);\n _setSource(state);\n }\n };\n const redo = () => {\n const state = redoStack.value.shift();\n if (state) {\n undoStack.value.unshift(last.value);\n _setSource(state);\n }\n };\n const reset = () => {\n _setSource(last.value);\n };\n const history = computed(() => [last.value, ...undoStack.value]);\n const canUndo = computed(() => undoStack.value.length > 0);\n const canRedo = computed(() => redoStack.value.length > 0);\n return {\n source,\n undoStack,\n redoStack,\n last,\n history,\n canUndo,\n canRedo,\n clear,\n commit,\n reset,\n undo,\n redo\n };\n}\n\nvar __defProp$i = Object.defineProperty;\nvar __defProps$8 = Object.defineProperties;\nvar __getOwnPropDescs$8 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$k = Object.getOwnPropertySymbols;\nvar __hasOwnProp$k = Object.prototype.hasOwnProperty;\nvar __propIsEnum$k = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$i = (obj, key, value) => key in obj ? __defProp$i(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$i = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$k.call(b, prop))\n __defNormalProp$i(a, prop, b[prop]);\n if (__getOwnPropSymbols$k)\n for (var prop of __getOwnPropSymbols$k(b)) {\n if (__propIsEnum$k.call(b, prop))\n __defNormalProp$i(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$8 = (a, b) => __defProps$8(a, __getOwnPropDescs$8(b));\nfunction useRefHistory(source, options = {}) {\n const {\n deep = false,\n flush = \"pre\",\n eventFilter\n } = options;\n const {\n eventFilter: composedFilter,\n pause,\n resume: resumeTracking,\n isActive: isTracking\n } = pausableFilter(eventFilter);\n const {\n ignoreUpdates,\n ignorePrevAsyncUpdates,\n stop\n } = watchIgnorable(\n source,\n commit,\n { deep, flush, eventFilter: composedFilter }\n );\n function setSource(source2, value) {\n ignorePrevAsyncUpdates();\n ignoreUpdates(() => {\n source2.value = value;\n });\n }\n const manualHistory = useManualRefHistory(source, __spreadProps$8(__spreadValues$i({}, options), { clone: options.clone || deep, setSource }));\n const { clear, commit: manualCommit } = manualHistory;\n function commit() {\n ignorePrevAsyncUpdates();\n manualCommit();\n }\n function resume(commitNow) {\n resumeTracking();\n if (commitNow)\n commit();\n }\n function batch(fn) {\n let canceled = false;\n const cancel = () => canceled = true;\n ignoreUpdates(() => {\n fn(cancel);\n });\n if (!canceled)\n commit();\n }\n function dispose() {\n stop();\n clear();\n }\n return __spreadProps$8(__spreadValues$i({}, manualHistory), {\n isTracking,\n pause,\n resume,\n commit,\n batch,\n dispose\n });\n}\n\nvar __defProp$h = Object.defineProperty;\nvar __defProps$7 = Object.defineProperties;\nvar __getOwnPropDescs$7 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$j = Object.getOwnPropertySymbols;\nvar __hasOwnProp$j = Object.prototype.hasOwnProperty;\nvar __propIsEnum$j = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$h = (obj, key, value) => key in obj ? __defProp$h(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$h = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$j.call(b, prop))\n __defNormalProp$h(a, prop, b[prop]);\n if (__getOwnPropSymbols$j)\n for (var prop of __getOwnPropSymbols$j(b)) {\n if (__propIsEnum$j.call(b, prop))\n __defNormalProp$h(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$7 = (a, b) => __defProps$7(a, __getOwnPropDescs$7(b));\nfunction useDebouncedRefHistory(source, options = {}) {\n const filter = options.debounce ? debounceFilter(options.debounce) : void 0;\n const history = useRefHistory(source, __spreadProps$7(__spreadValues$h({}, options), { eventFilter: filter }));\n return __spreadValues$h({}, history);\n}\n\nfunction useDeviceMotion(options = {}) {\n const {\n window = defaultWindow,\n eventFilter = bypassFilter\n } = options;\n const acceleration = ref({ x: null, y: null, z: null });\n const rotationRate = ref({ alpha: null, beta: null, gamma: null });\n const interval = ref(0);\n const accelerationIncludingGravity = ref({\n x: null,\n y: null,\n z: null\n });\n if (window) {\n const onDeviceMotion = createFilterWrapper(\n eventFilter,\n (event) => {\n acceleration.value = event.acceleration;\n accelerationIncludingGravity.value = event.accelerationIncludingGravity;\n rotationRate.value = event.rotationRate;\n interval.value = event.interval;\n }\n );\n useEventListener(window, \"devicemotion\", onDeviceMotion);\n }\n return {\n acceleration,\n accelerationIncludingGravity,\n rotationRate,\n interval\n };\n}\n\nfunction useDeviceOrientation(options = {}) {\n const { window = defaultWindow } = options;\n const isSupported = useSupported(() => window && \"DeviceOrientationEvent\" in window);\n const isAbsolute = ref(false);\n const alpha = ref(null);\n const beta = ref(null);\n const gamma = ref(null);\n if (window && isSupported.value) {\n useEventListener(window, \"deviceorientation\", (event) => {\n isAbsolute.value = event.absolute;\n alpha.value = event.alpha;\n beta.value = event.beta;\n gamma.value = event.gamma;\n });\n }\n return {\n isSupported,\n isAbsolute,\n alpha,\n beta,\n gamma\n };\n}\n\nfunction useDevicePixelRatio({\n window = defaultWindow\n} = {}) {\n const pixelRatio = ref(1);\n if (window) {\n let observe = function() {\n pixelRatio.value = window.devicePixelRatio;\n cleanup();\n media = window.matchMedia(`(resolution: ${pixelRatio.value}dppx)`);\n media.addEventListener(\"change\", observe, { once: true });\n }, cleanup = function() {\n media == null ? void 0 : media.removeEventListener(\"change\", observe);\n };\n let media;\n observe();\n tryOnScopeDispose(cleanup);\n }\n return { pixelRatio };\n}\n\nfunction usePermission(permissionDesc, options = {}) {\n const {\n controls = false,\n navigator = defaultNavigator\n } = options;\n const isSupported = useSupported(() => navigator && \"permissions\" in navigator);\n let permissionStatus;\n const desc = typeof permissionDesc === \"string\" ? { name: permissionDesc } : permissionDesc;\n const state = ref();\n const onChange = () => {\n if (permissionStatus)\n state.value = permissionStatus.state;\n };\n const query = createSingletonPromise(async () => {\n if (!isSupported.value)\n return;\n if (!permissionStatus) {\n try {\n permissionStatus = await navigator.permissions.query(desc);\n useEventListener(permissionStatus, \"change\", onChange);\n onChange();\n } catch (e) {\n state.value = \"prompt\";\n }\n }\n return permissionStatus;\n });\n query();\n if (controls) {\n return {\n state,\n isSupported,\n query\n };\n } else {\n return state;\n }\n}\n\nfunction useDevicesList(options = {}) {\n const {\n navigator = defaultNavigator,\n requestPermissions = false,\n constraints = { audio: true, video: true },\n onUpdated\n } = options;\n const devices = ref([]);\n const videoInputs = computed(() => devices.value.filter((i) => i.kind === \"videoinput\"));\n const audioInputs = computed(() => devices.value.filter((i) => i.kind === \"audioinput\"));\n const audioOutputs = computed(() => devices.value.filter((i) => i.kind === \"audiooutput\"));\n const isSupported = useSupported(() => navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices);\n const permissionGranted = ref(false);\n let stream;\n async function update() {\n if (!isSupported.value)\n return;\n devices.value = await navigator.mediaDevices.enumerateDevices();\n onUpdated == null ? void 0 : onUpdated(devices.value);\n if (stream) {\n stream.getTracks().forEach((t) => t.stop());\n stream = null;\n }\n }\n async function ensurePermissions() {\n if (!isSupported.value)\n return false;\n if (permissionGranted.value)\n return true;\n const { state, query } = usePermission(\"camera\", { controls: true });\n await query();\n if (state.value !== \"granted\") {\n stream = await navigator.mediaDevices.getUserMedia(constraints);\n update();\n permissionGranted.value = true;\n } else {\n permissionGranted.value = true;\n }\n return permissionGranted.value;\n }\n if (isSupported.value) {\n if (requestPermissions)\n ensurePermissions();\n useEventListener(navigator.mediaDevices, \"devicechange\", update);\n update();\n }\n return {\n devices,\n ensurePermissions,\n permissionGranted,\n videoInputs,\n audioInputs,\n audioOutputs,\n isSupported\n };\n}\n\nfunction useDisplayMedia(options = {}) {\n var _a;\n const enabled = ref((_a = options.enabled) != null ? _a : false);\n const video = options.video;\n const audio = options.audio;\n const { navigator = defaultNavigator } = options;\n const isSupported = useSupported(() => {\n var _a2;\n return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getDisplayMedia;\n });\n const constraint = { audio, video };\n const stream = shallowRef();\n async function _start() {\n if (!isSupported.value || stream.value)\n return;\n stream.value = await navigator.mediaDevices.getDisplayMedia(constraint);\n return stream.value;\n }\n async function _stop() {\n var _a2;\n (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n stream.value = void 0;\n }\n function stop() {\n _stop();\n enabled.value = false;\n }\n async function start() {\n await _start();\n if (stream.value)\n enabled.value = true;\n return stream.value;\n }\n watch(\n enabled,\n (v) => {\n if (v)\n _start();\n else\n _stop();\n },\n { immediate: true }\n );\n return {\n isSupported,\n stream,\n start,\n stop,\n enabled\n };\n}\n\nfunction useDocumentVisibility({ document = defaultDocument } = {}) {\n if (!document)\n return ref(\"visible\");\n const visibility = ref(document.visibilityState);\n useEventListener(document, \"visibilitychange\", () => {\n visibility.value = document.visibilityState;\n });\n return visibility;\n}\n\nvar __defProp$g = Object.defineProperty;\nvar __defProps$6 = Object.defineProperties;\nvar __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$i = Object.getOwnPropertySymbols;\nvar __hasOwnProp$i = Object.prototype.hasOwnProperty;\nvar __propIsEnum$i = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$g = (obj, key, value) => key in obj ? __defProp$g(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$g = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$i.call(b, prop))\n __defNormalProp$g(a, prop, b[prop]);\n if (__getOwnPropSymbols$i)\n for (var prop of __getOwnPropSymbols$i(b)) {\n if (__propIsEnum$i.call(b, prop))\n __defNormalProp$g(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));\nfunction useDraggable(target, options = {}) {\n var _a, _b;\n const {\n pointerTypes,\n preventDefault,\n stopPropagation,\n exact,\n onMove,\n onEnd,\n onStart,\n initialValue,\n axis = \"both\",\n draggingElement = defaultWindow,\n handle: draggingHandle = target\n } = options;\n const position = ref(\n (_a = toValue(initialValue)) != null ? _a : { x: 0, y: 0 }\n );\n const pressedDelta = ref();\n const filterEvent = (e) => {\n if (pointerTypes)\n return pointerTypes.includes(e.pointerType);\n return true;\n };\n const handleEvent = (e) => {\n if (toValue(preventDefault))\n e.preventDefault();\n if (toValue(stopPropagation))\n e.stopPropagation();\n };\n const start = (e) => {\n if (!filterEvent(e))\n return;\n if (toValue(exact) && e.target !== toValue(target))\n return;\n const rect = toValue(target).getBoundingClientRect();\n const pos = {\n x: e.clientX - rect.left,\n y: e.clientY - rect.top\n };\n if ((onStart == null ? void 0 : onStart(pos, e)) === false)\n return;\n pressedDelta.value = pos;\n handleEvent(e);\n };\n const move = (e) => {\n if (!filterEvent(e))\n return;\n if (!pressedDelta.value)\n return;\n let { x, y } = position.value;\n if (axis === \"x\" || axis === \"both\")\n x = e.clientX - pressedDelta.value.x;\n if (axis === \"y\" || axis === \"both\")\n y = e.clientY - pressedDelta.value.y;\n position.value = {\n x,\n y\n };\n onMove == null ? void 0 : onMove(position.value, e);\n handleEvent(e);\n };\n const end = (e) => {\n if (!filterEvent(e))\n return;\n if (!pressedDelta.value)\n return;\n pressedDelta.value = void 0;\n onEnd == null ? void 0 : onEnd(position.value, e);\n handleEvent(e);\n };\n if (isClient) {\n const config = { capture: (_b = options.capture) != null ? _b : true };\n useEventListener(draggingHandle, \"pointerdown\", start, config);\n useEventListener(draggingElement, \"pointermove\", move, config);\n useEventListener(draggingElement, \"pointerup\", end, config);\n }\n return __spreadProps$6(__spreadValues$g({}, toRefs(position)), {\n position,\n isDragging: computed(() => !!pressedDelta.value),\n style: computed(\n () => `left:${position.value.x}px;top:${position.value.y}px;`\n )\n });\n}\n\nfunction useDropZone(target, options = {}) {\n const isOverDropZone = ref(false);\n const files = shallowRef(null);\n let counter = 0;\n if (isClient) {\n const _options = typeof options === \"function\" ? { onDrop: options } : options;\n const getFiles = (event) => {\n var _a, _b;\n const list = Array.from((_b = (_a = event.dataTransfer) == null ? void 0 : _a.files) != null ? _b : []);\n return files.value = list.length === 0 ? null : list;\n };\n useEventListener(target, \"dragenter\", (event) => {\n var _a;\n event.preventDefault();\n counter += 1;\n isOverDropZone.value = true;\n (_a = _options.onEnter) == null ? void 0 : _a.call(_options, getFiles(event), event);\n });\n useEventListener(target, \"dragover\", (event) => {\n var _a;\n event.preventDefault();\n (_a = _options.onOver) == null ? void 0 : _a.call(_options, getFiles(event), event);\n });\n useEventListener(target, \"dragleave\", (event) => {\n var _a;\n event.preventDefault();\n counter -= 1;\n if (counter === 0)\n isOverDropZone.value = false;\n (_a = _options.onLeave) == null ? void 0 : _a.call(_options, getFiles(event), event);\n });\n useEventListener(target, \"drop\", (event) => {\n var _a;\n event.preventDefault();\n counter = 0;\n isOverDropZone.value = false;\n (_a = _options.onDrop) == null ? void 0 : _a.call(_options, getFiles(event), event);\n });\n }\n return {\n files,\n isOverDropZone\n };\n}\n\nvar __getOwnPropSymbols$h = Object.getOwnPropertySymbols;\nvar __hasOwnProp$h = Object.prototype.hasOwnProperty;\nvar __propIsEnum$h = Object.prototype.propertyIsEnumerable;\nvar __objRest$2 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$h.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$h)\n for (var prop of __getOwnPropSymbols$h(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$h.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction useResizeObserver(target, callback, options = {}) {\n const _a = options, { window = defaultWindow } = _a, observerOptions = __objRest$2(_a, [\"window\"]);\n let observer;\n const isSupported = useSupported(() => window && \"ResizeObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = void 0;\n }\n };\n const targets = computed(\n () => Array.isArray(target) ? target.map((el) => unrefElement(el)) : [unrefElement(target)]\n );\n const stopWatch = watch(\n targets,\n (els) => {\n cleanup();\n if (isSupported.value && window) {\n observer = new ResizeObserver(callback);\n for (const _el of els)\n _el && observer.observe(_el, observerOptions);\n }\n },\n { immediate: true, flush: \"post\", deep: true }\n );\n const stop = () => {\n cleanup();\n stopWatch();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop\n };\n}\n\nfunction useElementBounding(target, options = {}) {\n const {\n reset = true,\n windowResize = true,\n windowScroll = true,\n immediate = true\n } = options;\n const height = ref(0);\n const bottom = ref(0);\n const left = ref(0);\n const right = ref(0);\n const top = ref(0);\n const width = ref(0);\n const x = ref(0);\n const y = ref(0);\n function update() {\n const el = unrefElement(target);\n if (!el) {\n if (reset) {\n height.value = 0;\n bottom.value = 0;\n left.value = 0;\n right.value = 0;\n top.value = 0;\n width.value = 0;\n x.value = 0;\n y.value = 0;\n }\n return;\n }\n const rect = el.getBoundingClientRect();\n height.value = rect.height;\n bottom.value = rect.bottom;\n left.value = rect.left;\n right.value = rect.right;\n top.value = rect.top;\n width.value = rect.width;\n x.value = rect.x;\n y.value = rect.y;\n }\n useResizeObserver(target, update);\n watch(() => unrefElement(target), (ele) => !ele && update());\n if (windowScroll)\n useEventListener(\"scroll\", update, { capture: true, passive: true });\n if (windowResize)\n useEventListener(\"resize\", update, { passive: true });\n tryOnMounted(() => {\n if (immediate)\n update();\n });\n return {\n height,\n bottom,\n left,\n right,\n top,\n width,\n x,\n y,\n update\n };\n}\n\nvar __defProp$f = Object.defineProperty;\nvar __getOwnPropSymbols$g = Object.getOwnPropertySymbols;\nvar __hasOwnProp$g = Object.prototype.hasOwnProperty;\nvar __propIsEnum$g = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$f = (obj, key, value) => key in obj ? __defProp$f(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$f = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$g.call(b, prop))\n __defNormalProp$f(a, prop, b[prop]);\n if (__getOwnPropSymbols$g)\n for (var prop of __getOwnPropSymbols$g(b)) {\n if (__propIsEnum$g.call(b, prop))\n __defNormalProp$f(a, prop, b[prop]);\n }\n return a;\n};\nfunction useElementByPoint(options) {\n const {\n x,\n y,\n document = defaultDocument,\n multiple,\n interval = \"requestAnimationFrame\",\n immediate = true\n } = options;\n const isSupported = useSupported(() => {\n if (toValue(multiple))\n return document && \"elementsFromPoint\" in document;\n return document && \"elementFromPoint\" in document;\n });\n const element = ref(null);\n const cb = () => {\n var _a, _b;\n element.value = toValue(multiple) ? (_a = document == null ? void 0 : document.elementsFromPoint(toValue(x), toValue(y))) != null ? _a : [] : (_b = document == null ? void 0 : document.elementFromPoint(toValue(x), toValue(y))) != null ? _b : null;\n };\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n return __spreadValues$f({\n isSupported,\n element\n }, controls);\n}\n\nfunction useElementHover(el, options = {}) {\n const {\n delayEnter = 0,\n delayLeave = 0,\n window = defaultWindow\n } = options;\n const isHovered = ref(false);\n let timer;\n const toggle = (entering) => {\n const delay = entering ? delayEnter : delayLeave;\n if (timer) {\n clearTimeout(timer);\n timer = void 0;\n }\n if (delay)\n timer = setTimeout(() => isHovered.value = entering, delay);\n else\n isHovered.value = entering;\n };\n if (!window)\n return isHovered;\n useEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n useEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n return isHovered;\n}\n\nfunction useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) {\n const { window = defaultWindow, box = \"content-box\" } = options;\n const isSVG = computed(() => {\n var _a, _b;\n return (_b = (_a = unrefElement(target)) == null ? void 0 : _a.namespaceURI) == null ? void 0 : _b.includes(\"svg\");\n });\n const width = ref(initialSize.width);\n const height = ref(initialSize.height);\n useResizeObserver(\n target,\n ([entry]) => {\n const boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n if (window && isSVG.value) {\n const $elem = unrefElement(target);\n if ($elem) {\n const styles = window.getComputedStyle($elem);\n width.value = Number.parseFloat(styles.width);\n height.value = Number.parseFloat(styles.height);\n }\n } else {\n if (boxSize) {\n const formatBoxSize = Array.isArray(boxSize) ? boxSize : [boxSize];\n width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n } else {\n width.value = entry.contentRect.width;\n height.value = entry.contentRect.height;\n }\n }\n },\n options\n );\n watch(\n () => unrefElement(target),\n (ele) => {\n width.value = ele ? initialSize.width : 0;\n height.value = ele ? initialSize.height : 0;\n }\n );\n return {\n width,\n height\n };\n}\n\nfunction useIntersectionObserver(target, callback, options = {}) {\n const {\n root,\n rootMargin = \"0px\",\n threshold = 0.1,\n window = defaultWindow,\n immediate = true\n } = options;\n const isSupported = useSupported(() => window && \"IntersectionObserver\" in window);\n const targets = computed(() => {\n const _target = toValue(target);\n return (Array.isArray(_target) ? _target : [_target]).map(unrefElement).filter(notNullish);\n });\n let cleanup = noop;\n const isActive = ref(immediate);\n const stopWatch = isSupported.value ? watch(\n () => [targets.value, unrefElement(root), isActive.value],\n ([targets2, root2]) => {\n cleanup();\n if (!isActive.value)\n return;\n if (!targets2.length)\n return;\n const observer = new IntersectionObserver(\n callback,\n {\n root: unrefElement(root2),\n rootMargin,\n threshold\n }\n );\n targets2.forEach((el) => el && observer.observe(el));\n cleanup = () => {\n observer.disconnect();\n cleanup = noop;\n };\n },\n { immediate, flush: \"post\" }\n ) : noop;\n const stop = () => {\n cleanup();\n stopWatch();\n isActive.value = false;\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n isActive,\n pause() {\n cleanup();\n isActive.value = false;\n },\n resume() {\n isActive.value = true;\n },\n stop\n };\n}\n\nfunction useElementVisibility(element, { window = defaultWindow, scrollTarget } = {}) {\n const elementIsVisible = ref(false);\n useIntersectionObserver(\n element,\n ([{ isIntersecting }]) => {\n elementIsVisible.value = isIntersecting;\n },\n {\n root: scrollTarget,\n window\n }\n );\n return elementIsVisible;\n}\n\nconst events = /* @__PURE__ */ new Map();\n\nfunction useEventBus(key) {\n const scope = getCurrentScope();\n function on(listener) {\n var _a;\n const listeners = events.get(key) || /* @__PURE__ */ new Set();\n listeners.add(listener);\n events.set(key, listeners);\n const _off = () => off(listener);\n (_a = scope == null ? void 0 : scope.cleanups) == null ? void 0 : _a.push(_off);\n return _off;\n }\n function once(listener) {\n function _listener(...args) {\n off(_listener);\n listener(...args);\n }\n return on(_listener);\n }\n function off(listener) {\n const listeners = events.get(key);\n if (!listeners)\n return;\n listeners.delete(listener);\n if (!listeners.size)\n reset();\n }\n function reset() {\n events.delete(key);\n }\n function emit(event, payload) {\n var _a;\n (_a = events.get(key)) == null ? void 0 : _a.forEach((v) => v(event, payload));\n }\n return { on, once, off, emit, reset };\n}\n\nfunction useEventSource(url, events = [], options = {}) {\n const event = ref(null);\n const data = ref(null);\n const status = ref(\"CONNECTING\");\n const eventSource = ref(null);\n const error = shallowRef(null);\n const {\n withCredentials = false\n } = options;\n const close = () => {\n if (eventSource.value) {\n eventSource.value.close();\n eventSource.value = null;\n status.value = \"CLOSED\";\n }\n };\n const es = new EventSource(url, { withCredentials });\n eventSource.value = es;\n es.onopen = () => {\n status.value = \"OPEN\";\n error.value = null;\n };\n es.onerror = (e) => {\n status.value = \"CLOSED\";\n error.value = e;\n };\n es.onmessage = (e) => {\n event.value = null;\n data.value = e.data;\n };\n for (const event_name of events) {\n useEventListener(es, event_name, (e) => {\n event.value = event_name;\n data.value = e.data || null;\n });\n }\n tryOnScopeDispose(() => {\n close();\n });\n return {\n eventSource,\n event,\n data,\n status,\n error,\n close\n };\n}\n\nfunction useEyeDropper(options = {}) {\n const { initialValue = \"\" } = options;\n const isSupported = useSupported(() => typeof window !== \"undefined\" && \"EyeDropper\" in window);\n const sRGBHex = ref(initialValue);\n async function open(openOptions) {\n if (!isSupported.value)\n return;\n const eyeDropper = new window.EyeDropper();\n const result = await eyeDropper.open(openOptions);\n sRGBHex.value = result.sRGBHex;\n return result;\n }\n return { isSupported, sRGBHex, open };\n}\n\nfunction useFavicon(newIcon = null, options = {}) {\n const {\n baseUrl = \"\",\n rel = \"icon\",\n document = defaultDocument\n } = options;\n const favicon = toRef(newIcon);\n const applyIcon = (icon) => {\n document == null ? void 0 : document.head.querySelectorAll(`link[rel*=\"${rel}\"]`).forEach((el) => el.href = `${baseUrl}${icon}`);\n };\n watch(\n favicon,\n (i, o) => {\n if (typeof i === \"string\" && i !== o)\n applyIcon(i);\n },\n { immediate: true }\n );\n return favicon;\n}\n\nvar __defProp$e = Object.defineProperty;\nvar __defProps$5 = Object.defineProperties;\nvar __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$f = Object.getOwnPropertySymbols;\nvar __hasOwnProp$f = Object.prototype.hasOwnProperty;\nvar __propIsEnum$f = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$e = (obj, key, value) => key in obj ? __defProp$e(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$e = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$f.call(b, prop))\n __defNormalProp$e(a, prop, b[prop]);\n if (__getOwnPropSymbols$f)\n for (var prop of __getOwnPropSymbols$f(b)) {\n if (__propIsEnum$f.call(b, prop))\n __defNormalProp$e(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));\nconst payloadMapping = {\n json: \"application/json\",\n text: \"text/plain\"\n};\nfunction isFetchOptions(obj) {\n return obj && containsProp(obj, \"immediate\", \"refetch\", \"initialData\", \"timeout\", \"beforeFetch\", \"afterFetch\", \"onFetchError\", \"fetch\");\n}\nfunction isAbsoluteURL(url) {\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\nfunction headersToObject(headers) {\n if (typeof Headers !== \"undefined\" && headers instanceof Headers)\n return Object.fromEntries([...headers.entries()]);\n return headers;\n}\nfunction combineCallbacks(combination, ...callbacks) {\n if (combination === \"overwrite\") {\n return async (ctx) => {\n const callback = callbacks[callbacks.length - 1];\n if (callback)\n return __spreadValues$e(__spreadValues$e({}, ctx), await callback(ctx));\n return ctx;\n };\n } else {\n return async (ctx) => {\n for (const callback of callbacks) {\n if (callback)\n ctx = __spreadValues$e(__spreadValues$e({}, ctx), await callback(ctx));\n }\n return ctx;\n };\n }\n}\nfunction createFetch(config = {}) {\n const _combination = config.combination || \"chain\";\n const _options = config.options || {};\n const _fetchOptions = config.fetchOptions || {};\n function useFactoryFetch(url, ...args) {\n const computedUrl = computed(() => {\n const baseUrl = toValue(config.baseUrl);\n const targetUrl = toValue(url);\n return baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl;\n });\n let options = _options;\n let fetchOptions = _fetchOptions;\n if (args.length > 0) {\n if (isFetchOptions(args[0])) {\n options = __spreadProps$5(__spreadValues$e(__spreadValues$e({}, options), args[0]), {\n beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch),\n afterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch),\n onFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError)\n });\n } else {\n fetchOptions = __spreadProps$5(__spreadValues$e(__spreadValues$e({}, fetchOptions), args[0]), {\n headers: __spreadValues$e(__spreadValues$e({}, headersToObject(fetchOptions.headers) || {}), headersToObject(args[0].headers) || {})\n });\n }\n }\n if (args.length > 1 && isFetchOptions(args[1])) {\n options = __spreadProps$5(__spreadValues$e(__spreadValues$e({}, options), args[1]), {\n beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch),\n afterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch),\n onFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError)\n });\n }\n return useFetch(computedUrl, fetchOptions, options);\n }\n return useFactoryFetch;\n}\nfunction useFetch(url, ...args) {\n var _a;\n const supportsAbort = typeof AbortController === \"function\";\n let fetchOptions = {};\n let options = { immediate: true, refetch: false, timeout: 0 };\n const config = {\n method: \"GET\",\n type: \"text\",\n payload: void 0\n };\n if (args.length > 0) {\n if (isFetchOptions(args[0]))\n options = __spreadValues$e(__spreadValues$e({}, options), args[0]);\n else\n fetchOptions = args[0];\n }\n if (args.length > 1) {\n if (isFetchOptions(args[1]))\n options = __spreadValues$e(__spreadValues$e({}, options), args[1]);\n }\n const {\n fetch = (_a = defaultWindow) == null ? void 0 : _a.fetch,\n initialData,\n timeout\n } = options;\n const responseEvent = createEventHook();\n const errorEvent = createEventHook();\n const finallyEvent = createEventHook();\n const isFinished = ref(false);\n const isFetching = ref(false);\n const aborted = ref(false);\n const statusCode = ref(null);\n const response = shallowRef(null);\n const error = shallowRef(null);\n const data = shallowRef(initialData || null);\n const canAbort = computed(() => supportsAbort && isFetching.value);\n let controller;\n let timer;\n const abort = () => {\n if (supportsAbort) {\n controller == null ? void 0 : controller.abort();\n controller = new AbortController();\n controller.signal.onabort = () => aborted.value = true;\n fetchOptions = __spreadProps$5(__spreadValues$e({}, fetchOptions), {\n signal: controller.signal\n });\n }\n };\n const loading = (isLoading) => {\n isFetching.value = isLoading;\n isFinished.value = !isLoading;\n };\n if (timeout)\n timer = useTimeoutFn(abort, timeout, { immediate: false });\n const execute = async (throwOnFailed = false) => {\n var _a2;\n abort();\n loading(true);\n error.value = null;\n statusCode.value = null;\n aborted.value = false;\n const defaultFetchOptions = {\n method: config.method,\n headers: {}\n };\n if (config.payload) {\n const headers = headersToObject(defaultFetchOptions.headers);\n const payload = toValue(config.payload);\n if (!config.payloadType && payload && Object.getPrototypeOf(payload) === Object.prototype && !(payload instanceof FormData))\n config.payloadType = \"json\";\n if (config.payloadType)\n headers[\"Content-Type\"] = (_a2 = payloadMapping[config.payloadType]) != null ? _a2 : config.payloadType;\n defaultFetchOptions.body = config.payloadType === \"json\" ? JSON.stringify(payload) : payload;\n }\n let isCanceled = false;\n const context = {\n url: toValue(url),\n options: __spreadValues$e(__spreadValues$e({}, defaultFetchOptions), fetchOptions),\n cancel: () => {\n isCanceled = true;\n }\n };\n if (options.beforeFetch)\n Object.assign(context, await options.beforeFetch(context));\n if (isCanceled || !fetch) {\n loading(false);\n return Promise.resolve(null);\n }\n let responseData = null;\n if (timer)\n timer.start();\n return new Promise((resolve, reject) => {\n var _a3;\n fetch(\n context.url,\n __spreadProps$5(__spreadValues$e(__spreadValues$e({}, defaultFetchOptions), context.options), {\n headers: __spreadValues$e(__spreadValues$e({}, headersToObject(defaultFetchOptions.headers)), headersToObject((_a3 = context.options) == null ? void 0 : _a3.headers))\n })\n ).then(async (fetchResponse) => {\n response.value = fetchResponse;\n statusCode.value = fetchResponse.status;\n responseData = await fetchResponse[config.type]();\n if (!fetchResponse.ok) {\n data.value = initialData || null;\n throw new Error(fetchResponse.statusText);\n }\n if (options.afterFetch)\n ({ data: responseData } = await options.afterFetch({ data: responseData, response: fetchResponse }));\n data.value = responseData;\n responseEvent.trigger(fetchResponse);\n return resolve(fetchResponse);\n }).catch(async (fetchError) => {\n let errorData = fetchError.message || fetchError.name;\n if (options.onFetchError)\n ({ error: errorData } = await options.onFetchError({ data: responseData, error: fetchError, response: response.value }));\n error.value = errorData;\n errorEvent.trigger(fetchError);\n if (throwOnFailed)\n return reject(fetchError);\n return resolve(null);\n }).finally(() => {\n loading(false);\n if (timer)\n timer.stop();\n finallyEvent.trigger(null);\n });\n });\n };\n const refetch = toRef(options.refetch);\n watch(\n [\n refetch,\n toRef(url)\n ],\n ([refetch2]) => refetch2 && execute(),\n { deep: true }\n );\n const shell = {\n isFinished,\n statusCode,\n response,\n error,\n data,\n isFetching,\n canAbort,\n aborted,\n abort,\n execute,\n onFetchResponse: responseEvent.on,\n onFetchError: errorEvent.on,\n onFetchFinally: finallyEvent.on,\n // method\n get: setMethod(\"GET\"),\n put: setMethod(\"PUT\"),\n post: setMethod(\"POST\"),\n delete: setMethod(\"DELETE\"),\n patch: setMethod(\"PATCH\"),\n head: setMethod(\"HEAD\"),\n options: setMethod(\"OPTIONS\"),\n // type\n json: setType(\"json\"),\n text: setType(\"text\"),\n blob: setType(\"blob\"),\n arrayBuffer: setType(\"arrayBuffer\"),\n formData: setType(\"formData\")\n };\n function setMethod(method) {\n return (payload, payloadType) => {\n if (!isFetching.value) {\n config.method = method;\n config.payload = payload;\n config.payloadType = payloadType;\n if (isRef(config.payload)) {\n watch(\n [\n refetch,\n toRef(config.payload)\n ],\n ([refetch2]) => refetch2 && execute(),\n { deep: true }\n );\n }\n return __spreadProps$5(__spreadValues$e({}, shell), {\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n });\n }\n return void 0;\n };\n }\n function waitUntilFinished() {\n return new Promise((resolve, reject) => {\n until(isFinished).toBe(true).then(() => resolve(shell)).catch((error2) => reject(error2));\n });\n }\n function setType(type) {\n return () => {\n if (!isFetching.value) {\n config.type = type;\n return __spreadProps$5(__spreadValues$e({}, shell), {\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n });\n }\n return void 0;\n };\n }\n if (options.immediate)\n Promise.resolve().then(() => execute());\n return __spreadProps$5(__spreadValues$e({}, shell), {\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n });\n}\nfunction joinPaths(start, end) {\n if (!start.endsWith(\"/\") && !end.startsWith(\"/\"))\n return `${start}/${end}`;\n return `${start}${end}`;\n}\n\nvar __defProp$d = Object.defineProperty;\nvar __getOwnPropSymbols$e = Object.getOwnPropertySymbols;\nvar __hasOwnProp$e = Object.prototype.hasOwnProperty;\nvar __propIsEnum$e = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$d = (obj, key, value) => key in obj ? __defProp$d(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$d = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$e.call(b, prop))\n __defNormalProp$d(a, prop, b[prop]);\n if (__getOwnPropSymbols$e)\n for (var prop of __getOwnPropSymbols$e(b)) {\n if (__propIsEnum$e.call(b, prop))\n __defNormalProp$d(a, prop, b[prop]);\n }\n return a;\n};\nconst DEFAULT_OPTIONS = {\n multiple: true,\n accept: \"*\",\n reset: false\n};\nfunction useFileDialog(options = {}) {\n const {\n document = defaultDocument\n } = options;\n const files = ref(null);\n const { on: onChange, trigger } = createEventHook();\n let input;\n if (document) {\n input = document.createElement(\"input\");\n input.type = \"file\";\n input.onchange = (event) => {\n const result = event.target;\n files.value = result.files;\n trigger(files.value);\n };\n }\n const reset = () => {\n files.value = null;\n if (input)\n input.value = \"\";\n };\n const open = (localOptions) => {\n if (!input)\n return;\n const _options = __spreadValues$d(__spreadValues$d(__spreadValues$d({}, DEFAULT_OPTIONS), options), localOptions);\n input.multiple = _options.multiple;\n input.accept = _options.accept;\n if (hasOwn(_options, \"capture\"))\n input.capture = _options.capture;\n if (_options.reset)\n reset();\n input.click();\n };\n return {\n files: readonly(files),\n open,\n reset,\n onChange\n };\n}\n\nvar __defProp$c = Object.defineProperty;\nvar __getOwnPropSymbols$d = Object.getOwnPropertySymbols;\nvar __hasOwnProp$d = Object.prototype.hasOwnProperty;\nvar __propIsEnum$d = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$c = (obj, key, value) => key in obj ? __defProp$c(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$c = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$d.call(b, prop))\n __defNormalProp$c(a, prop, b[prop]);\n if (__getOwnPropSymbols$d)\n for (var prop of __getOwnPropSymbols$d(b)) {\n if (__propIsEnum$d.call(b, prop))\n __defNormalProp$c(a, prop, b[prop]);\n }\n return a;\n};\nfunction useFileSystemAccess(options = {}) {\n const {\n window: _window = defaultWindow,\n dataType = \"Text\"\n } = options;\n const window = _window;\n const isSupported = useSupported(() => window && \"showSaveFilePicker\" in window && \"showOpenFilePicker\" in window);\n const fileHandle = ref();\n const data = ref();\n const file = ref();\n const fileName = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.name) != null ? _b : \"\";\n });\n const fileMIME = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.type) != null ? _b : \"\";\n });\n const fileSize = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.size) != null ? _b : 0;\n });\n const fileLastModified = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.lastModified) != null ? _b : 0;\n });\n async function open(_options = {}) {\n if (!isSupported.value)\n return;\n const [handle] = await window.showOpenFilePicker(__spreadValues$c(__spreadValues$c({}, toValue(options)), _options));\n fileHandle.value = handle;\n await updateFile();\n await updateData();\n }\n async function create(_options = {}) {\n if (!isSupported.value)\n return;\n fileHandle.value = await window.showSaveFilePicker(__spreadValues$c(__spreadValues$c({}, options), _options));\n data.value = void 0;\n await updateFile();\n await updateData();\n }\n async function save(_options = {}) {\n if (!isSupported.value)\n return;\n if (!fileHandle.value)\n return saveAs(_options);\n if (data.value) {\n const writableStream = await fileHandle.value.createWritable();\n await writableStream.write(data.value);\n await writableStream.close();\n }\n await updateFile();\n }\n async function saveAs(_options = {}) {\n if (!isSupported.value)\n return;\n fileHandle.value = await window.showSaveFilePicker(__spreadValues$c(__spreadValues$c({}, options), _options));\n if (data.value) {\n const writableStream = await fileHandle.value.createWritable();\n await writableStream.write(data.value);\n await writableStream.close();\n }\n await updateFile();\n }\n async function updateFile() {\n var _a;\n file.value = await ((_a = fileHandle.value) == null ? void 0 : _a.getFile());\n }\n async function updateData() {\n var _a, _b;\n const type = toValue(dataType);\n if (type === \"Text\")\n data.value = await ((_a = file.value) == null ? void 0 : _a.text());\n else if (type === \"ArrayBuffer\")\n data.value = await ((_b = file.value) == null ? void 0 : _b.arrayBuffer());\n else if (type === \"Blob\")\n data.value = file.value;\n }\n watch(() => toValue(dataType), updateData);\n return {\n isSupported,\n data,\n file,\n fileName,\n fileMIME,\n fileSize,\n fileLastModified,\n open,\n create,\n save,\n saveAs,\n updateData\n };\n}\n\nfunction useFocus(target, options = {}) {\n const { initialValue = false, focusVisible = false } = options;\n const innerFocused = ref(false);\n const targetElement = computed(() => unrefElement(target));\n useEventListener(targetElement, \"focus\", (event) => {\n var _a, _b;\n if (!focusVisible || ((_b = (_a = event.target).matches) == null ? void 0 : _b.call(_a, \":focus-visible\")))\n innerFocused.value = true;\n });\n useEventListener(targetElement, \"blur\", () => innerFocused.value = false);\n const focused = computed({\n get: () => innerFocused.value,\n set(value) {\n var _a, _b;\n if (!value && innerFocused.value)\n (_a = targetElement.value) == null ? void 0 : _a.blur();\n else if (value && !innerFocused.value)\n (_b = targetElement.value) == null ? void 0 : _b.focus();\n }\n });\n watch(\n targetElement,\n () => {\n focused.value = initialValue;\n },\n { immediate: true, flush: \"post\" }\n );\n return { focused };\n}\n\nfunction useFocusWithin(target, options = {}) {\n const activeElement = useActiveElement(options);\n const targetElement = computed(() => unrefElement(target));\n const focused = computed(() => targetElement.value && activeElement.value ? targetElement.value.contains(activeElement.value) : false);\n return { focused };\n}\n\nfunction useFps(options) {\n var _a;\n const fps = ref(0);\n if (typeof performance === \"undefined\")\n return fps;\n const every = (_a = options == null ? void 0 : options.every) != null ? _a : 10;\n let last = performance.now();\n let ticks = 0;\n useRafFn(() => {\n ticks += 1;\n if (ticks >= every) {\n const now = performance.now();\n const diff = now - last;\n fps.value = Math.round(1e3 / (diff / ticks));\n last = now;\n ticks = 0;\n }\n });\n return fps;\n}\n\nconst eventHandlers = [\n \"fullscreenchange\",\n \"webkitfullscreenchange\",\n \"webkitendfullscreen\",\n \"mozfullscreenchange\",\n \"MSFullscreenChange\"\n];\nfunction useFullscreen(target, options = {}) {\n const {\n document = defaultDocument,\n autoExit = false\n } = options;\n const targetRef = computed(() => {\n var _a;\n return (_a = unrefElement(target)) != null ? _a : document == null ? void 0 : document.querySelector(\"html\");\n });\n const isFullscreen = ref(false);\n const requestMethod = computed(() => {\n return [\n \"requestFullscreen\",\n \"webkitRequestFullscreen\",\n \"webkitEnterFullscreen\",\n \"webkitEnterFullScreen\",\n \"webkitRequestFullScreen\",\n \"mozRequestFullScreen\",\n \"msRequestFullscreen\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const exitMethod = computed(() => {\n return [\n \"exitFullscreen\",\n \"webkitExitFullscreen\",\n \"webkitExitFullScreen\",\n \"webkitCancelFullScreen\",\n \"mozCancelFullScreen\",\n \"msExitFullscreen\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const fullscreenEnabled = computed(() => {\n return [\n \"fullScreen\",\n \"webkitIsFullScreen\",\n \"webkitDisplayingFullscreen\",\n \"mozFullScreen\",\n \"msFullscreenElement\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const fullscreenElementMethod = [\n \"fullscreenElement\",\n \"webkitFullscreenElement\",\n \"mozFullScreenElement\",\n \"msFullscreenElement\"\n ].find((m) => document && m in document);\n const isSupported = useSupported(\n () => targetRef.value && document && requestMethod.value !== void 0 && exitMethod.value !== void 0 && fullscreenEnabled.value !== void 0\n );\n const isCurrentElementFullScreen = () => {\n if (fullscreenElementMethod)\n return (document == null ? void 0 : document[fullscreenElementMethod]) === targetRef.value;\n return false;\n };\n const isElementFullScreen = () => {\n if (fullscreenEnabled.value) {\n if (document && document[fullscreenEnabled.value] != null) {\n return document[fullscreenEnabled.value];\n } else {\n const target2 = targetRef.value;\n if ((target2 == null ? void 0 : target2[fullscreenEnabled.value]) != null) {\n return Boolean(target2[fullscreenEnabled.value]);\n }\n }\n }\n return false;\n };\n async function exit() {\n if (!isSupported.value || !isFullscreen.value)\n return;\n if (exitMethod.value) {\n if ((document == null ? void 0 : document[exitMethod.value]) != null) {\n await document[exitMethod.value]();\n } else {\n const target2 = targetRef.value;\n if ((target2 == null ? void 0 : target2[exitMethod.value]) != null)\n await target2[exitMethod.value]();\n }\n }\n isFullscreen.value = false;\n }\n async function enter() {\n if (!isSupported.value || isFullscreen.value)\n return;\n if (isElementFullScreen())\n await exit();\n const target2 = targetRef.value;\n if (requestMethod.value && (target2 == null ? void 0 : target2[requestMethod.value]) != null) {\n await target2[requestMethod.value]();\n isFullscreen.value = true;\n }\n }\n async function toggle() {\n await (isFullscreen.value ? exit() : enter());\n }\n const handlerCallback = () => {\n const isElementFullScreenValue = isElementFullScreen();\n if (!isElementFullScreenValue || isElementFullScreenValue && isCurrentElementFullScreen())\n isFullscreen.value = isElementFullScreenValue;\n };\n useEventListener(document, eventHandlers, handlerCallback, false);\n useEventListener(() => unrefElement(targetRef), eventHandlers, handlerCallback, false);\n if (autoExit)\n tryOnScopeDispose(exit);\n return {\n isSupported,\n isFullscreen,\n enter,\n exit,\n toggle\n };\n}\n\nvar __defProp$b = Object.defineProperty;\nvar __defProps$4 = Object.defineProperties;\nvar __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$c = Object.getOwnPropertySymbols;\nvar __hasOwnProp$c = Object.prototype.hasOwnProperty;\nvar __propIsEnum$c = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$b = (obj, key, value) => key in obj ? __defProp$b(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$b = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$c.call(b, prop))\n __defNormalProp$b(a, prop, b[prop]);\n if (__getOwnPropSymbols$c)\n for (var prop of __getOwnPropSymbols$c(b)) {\n if (__propIsEnum$c.call(b, prop))\n __defNormalProp$b(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));\nfunction mapGamepadToXbox360Controller(gamepad) {\n return computed(() => {\n if (gamepad.value) {\n return {\n buttons: {\n a: gamepad.value.buttons[0],\n b: gamepad.value.buttons[1],\n x: gamepad.value.buttons[2],\n y: gamepad.value.buttons[3]\n },\n bumper: {\n left: gamepad.value.buttons[4],\n right: gamepad.value.buttons[5]\n },\n triggers: {\n left: gamepad.value.buttons[6],\n right: gamepad.value.buttons[7]\n },\n stick: {\n left: {\n horizontal: gamepad.value.axes[0],\n vertical: gamepad.value.axes[1],\n button: gamepad.value.buttons[10]\n },\n right: {\n horizontal: gamepad.value.axes[2],\n vertical: gamepad.value.axes[3],\n button: gamepad.value.buttons[11]\n }\n },\n dpad: {\n up: gamepad.value.buttons[12],\n down: gamepad.value.buttons[13],\n left: gamepad.value.buttons[14],\n right: gamepad.value.buttons[15]\n },\n back: gamepad.value.buttons[8],\n start: gamepad.value.buttons[9]\n };\n }\n return null;\n });\n}\nfunction useGamepad(options = {}) {\n const {\n navigator = defaultNavigator\n } = options;\n const isSupported = useSupported(() => navigator && \"getGamepads\" in navigator);\n const gamepads = ref([]);\n const onConnectedHook = createEventHook();\n const onDisconnectedHook = createEventHook();\n const stateFromGamepad = (gamepad) => {\n const hapticActuators = [];\n const vibrationActuator = \"vibrationActuator\" in gamepad ? gamepad.vibrationActuator : null;\n if (vibrationActuator)\n hapticActuators.push(vibrationActuator);\n if (gamepad.hapticActuators)\n hapticActuators.push(...gamepad.hapticActuators);\n return __spreadProps$4(__spreadValues$b({}, gamepad), {\n id: gamepad.id,\n hapticActuators,\n axes: gamepad.axes.map((axes) => axes),\n buttons: gamepad.buttons.map((button) => ({ pressed: button.pressed, touched: button.touched, value: button.value }))\n });\n };\n const updateGamepadState = () => {\n const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n for (let i = 0; i < _gamepads.length; ++i) {\n const gamepad = _gamepads[i];\n if (gamepad) {\n const index = gamepads.value.findIndex(({ index: index2 }) => index2 === gamepad.index);\n if (index > -1)\n gamepads.value[index] = stateFromGamepad(gamepad);\n }\n }\n };\n const { isActive, pause, resume } = useRafFn(updateGamepadState);\n const onGamepadConnected = (gamepad) => {\n if (!gamepads.value.some(({ index }) => index === gamepad.index)) {\n gamepads.value.push(stateFromGamepad(gamepad));\n onConnectedHook.trigger(gamepad.index);\n }\n resume();\n };\n const onGamepadDisconnected = (gamepad) => {\n gamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index);\n onDisconnectedHook.trigger(gamepad.index);\n };\n useEventListener(\"gamepadconnected\", (e) => onGamepadConnected(e.gamepad));\n useEventListener(\"gamepaddisconnected\", (e) => onGamepadDisconnected(e.gamepad));\n tryOnMounted(() => {\n const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n if (_gamepads) {\n for (let i = 0; i < _gamepads.length; ++i) {\n const gamepad = _gamepads[i];\n if (gamepad)\n onGamepadConnected(gamepad);\n }\n }\n });\n pause();\n return {\n isSupported,\n onConnected: onConnectedHook.on,\n onDisconnected: onDisconnectedHook.on,\n gamepads,\n pause,\n resume,\n isActive\n };\n}\n\nfunction useGeolocation(options = {}) {\n const {\n enableHighAccuracy = true,\n maximumAge = 3e4,\n timeout = 27e3,\n navigator = defaultNavigator,\n immediate = true\n } = options;\n const isSupported = useSupported(() => navigator && \"geolocation\" in navigator);\n const locatedAt = ref(null);\n const error = shallowRef(null);\n const coords = ref({\n accuracy: 0,\n latitude: Number.POSITIVE_INFINITY,\n longitude: Number.POSITIVE_INFINITY,\n altitude: null,\n altitudeAccuracy: null,\n heading: null,\n speed: null\n });\n function updatePosition(position) {\n locatedAt.value = position.timestamp;\n coords.value = position.coords;\n error.value = null;\n }\n let watcher;\n function resume() {\n if (isSupported.value) {\n watcher = navigator.geolocation.watchPosition(\n updatePosition,\n (err) => error.value = err,\n {\n enableHighAccuracy,\n maximumAge,\n timeout\n }\n );\n }\n }\n if (immediate)\n resume();\n function pause() {\n if (watcher && navigator)\n navigator.geolocation.clearWatch(watcher);\n }\n tryOnScopeDispose(() => {\n pause();\n });\n return {\n isSupported,\n coords,\n locatedAt,\n error,\n resume,\n pause\n };\n}\n\nconst defaultEvents$1 = [\"mousemove\", \"mousedown\", \"resize\", \"keydown\", \"touchstart\", \"wheel\"];\nconst oneMinute = 6e4;\nfunction useIdle(timeout = oneMinute, options = {}) {\n const {\n initialState = false,\n listenForVisibilityChange = true,\n events = defaultEvents$1,\n window = defaultWindow,\n eventFilter = throttleFilter(50)\n } = options;\n const idle = ref(initialState);\n const lastActive = ref(timestamp());\n let timer;\n const reset = () => {\n idle.value = false;\n clearTimeout(timer);\n timer = setTimeout(() => idle.value = true, timeout);\n };\n const onEvent = createFilterWrapper(\n eventFilter,\n () => {\n lastActive.value = timestamp();\n reset();\n }\n );\n if (window) {\n const document = window.document;\n for (const event of events)\n useEventListener(window, event, onEvent, { passive: true });\n if (listenForVisibilityChange) {\n useEventListener(document, \"visibilitychange\", () => {\n if (!document.hidden)\n onEvent();\n });\n }\n reset();\n }\n return {\n idle,\n lastActive,\n reset\n };\n}\n\nvar __defProp$a = Object.defineProperty;\nvar __getOwnPropSymbols$b = Object.getOwnPropertySymbols;\nvar __hasOwnProp$b = Object.prototype.hasOwnProperty;\nvar __propIsEnum$b = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$a = (obj, key, value) => key in obj ? __defProp$a(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$a = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$b.call(b, prop))\n __defNormalProp$a(a, prop, b[prop]);\n if (__getOwnPropSymbols$b)\n for (var prop of __getOwnPropSymbols$b(b)) {\n if (__propIsEnum$b.call(b, prop))\n __defNormalProp$a(a, prop, b[prop]);\n }\n return a;\n};\nasync function loadImage(options) {\n return new Promise((resolve, reject) => {\n const img = new Image();\n const { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy } = options;\n img.src = src;\n if (srcset)\n img.srcset = srcset;\n if (sizes)\n img.sizes = sizes;\n if (clazz)\n img.className = clazz;\n if (loading)\n img.loading = loading;\n if (crossorigin)\n img.crossOrigin = crossorigin;\n if (referrerPolicy)\n img.referrerPolicy = referrerPolicy;\n img.onload = () => resolve(img);\n img.onerror = reject;\n });\n}\nfunction useImage(options, asyncStateOptions = {}) {\n const state = useAsyncState(\n () => loadImage(toValue(options)),\n void 0,\n __spreadValues$a({\n resetOnExecute: true\n }, asyncStateOptions)\n );\n watch(\n () => toValue(options),\n () => state.execute(asyncStateOptions.delay),\n { deep: true }\n );\n return state;\n}\n\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\nfunction useScroll(element, options = {}) {\n const {\n throttle = 0,\n idle = 200,\n onStop = noop,\n onScroll = noop,\n offset = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n },\n eventListenerOptions = {\n capture: false,\n passive: true\n },\n behavior = \"auto\",\n window = defaultWindow\n } = options;\n const internalX = ref(0);\n const internalY = ref(0);\n const x = computed({\n get() {\n return internalX.value;\n },\n set(x2) {\n scrollTo(x2, void 0);\n }\n });\n const y = computed({\n get() {\n return internalY.value;\n },\n set(y2) {\n scrollTo(void 0, y2);\n }\n });\n function scrollTo(_x, _y) {\n var _a, _b, _c;\n if (!window)\n return;\n const _element = toValue(element);\n if (!_element)\n return;\n (_c = _element instanceof Document ? window.document.body : _element) == null ? void 0 : _c.scrollTo({\n top: (_a = toValue(_y)) != null ? _a : y.value,\n left: (_b = toValue(_x)) != null ? _b : x.value,\n behavior: toValue(behavior)\n });\n }\n const isScrolling = ref(false);\n const arrivedState = reactive({\n left: true,\n right: false,\n top: true,\n bottom: false\n });\n const directions = reactive({\n left: false,\n right: false,\n top: false,\n bottom: false\n });\n const onScrollEnd = (e) => {\n if (!isScrolling.value)\n return;\n isScrolling.value = false;\n directions.left = false;\n directions.right = false;\n directions.top = false;\n directions.bottom = false;\n onStop(e);\n };\n const onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n const setArrivedState = (target) => {\n if (!window)\n return;\n const el = target === window ? target.document.documentElement : target === window.document ? target.documentElement : target;\n const { display, flexDirection } = getComputedStyle(el);\n const scrollLeft = el.scrollLeft;\n directions.left = scrollLeft < internalX.value;\n directions.right = scrollLeft > internalX.value;\n const left = Math.abs(scrollLeft) <= 0 + (offset.left || 0);\n const right = Math.abs(scrollLeft) + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n if (display === \"flex\" && flexDirection === \"row-reverse\") {\n arrivedState.left = right;\n arrivedState.right = left;\n } else {\n arrivedState.left = left;\n arrivedState.right = right;\n }\n internalX.value = scrollLeft;\n let scrollTop = el.scrollTop;\n if (target === window.document && !scrollTop)\n scrollTop = window.document.body.scrollTop;\n directions.top = scrollTop < internalY.value;\n directions.bottom = scrollTop > internalY.value;\n const top = Math.abs(scrollTop) <= 0 + (offset.top || 0);\n const bottom = Math.abs(scrollTop) + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n if (display === \"flex\" && flexDirection === \"column-reverse\") {\n arrivedState.top = bottom;\n arrivedState.bottom = top;\n } else {\n arrivedState.top = top;\n arrivedState.bottom = bottom;\n }\n internalY.value = scrollTop;\n };\n const onScrollHandler = (e) => {\n if (!window)\n return;\n const eventTarget = e.target === window.document ? e.target.documentElement : e.target;\n setArrivedState(eventTarget);\n isScrolling.value = true;\n onScrollEndDebounced(e);\n onScroll(e);\n };\n useEventListener(\n element,\n \"scroll\",\n throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler,\n eventListenerOptions\n );\n useEventListener(\n element,\n \"scrollend\",\n onScrollEnd,\n eventListenerOptions\n );\n return {\n x,\n y,\n isScrolling,\n arrivedState,\n directions,\n measure() {\n const _element = toValue(element);\n if (window && _element)\n setArrivedState(_element);\n }\n };\n}\n\nvar __defProp$9 = Object.defineProperty;\nvar __defProps$3 = Object.defineProperties;\nvar __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$a = Object.getOwnPropertySymbols;\nvar __hasOwnProp$a = Object.prototype.hasOwnProperty;\nvar __propIsEnum$a = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$9 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$a.call(b, prop))\n __defNormalProp$9(a, prop, b[prop]);\n if (__getOwnPropSymbols$a)\n for (var prop of __getOwnPropSymbols$a(b)) {\n if (__propIsEnum$a.call(b, prop))\n __defNormalProp$9(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n var _a;\n const {\n direction = \"bottom\",\n interval = 100\n } = options;\n const state = reactive(useScroll(\n element,\n __spreadProps$3(__spreadValues$9({}, options), {\n offset: __spreadValues$9({\n [direction]: (_a = options.distance) != null ? _a : 0\n }, options.offset)\n })\n ));\n const promise = ref();\n const isLoading = computed(() => !!promise.value);\n const observedElement = computed(() => {\n const el = toValue(element);\n if (el instanceof Window)\n return window.document.documentElement;\n if (el instanceof Document)\n return document.documentElement;\n return el;\n });\n const isElementVisible = useElementVisibility(observedElement);\n function checkAndLoad() {\n state.measure();\n if (!observedElement.value || !isElementVisible.value)\n return;\n const { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value;\n const isNarrower = direction === \"bottom\" || direction === \"top\" ? scrollHeight <= clientHeight : scrollWidth <= clientWidth;\n if (state.arrivedState[direction] || isNarrower) {\n if (!promise.value) {\n promise.value = Promise.all([\n onLoadMore(state),\n new Promise((resolve) => setTimeout(resolve, interval))\n ]).finally(() => {\n promise.value = null;\n nextTick(() => checkAndLoad());\n });\n }\n }\n }\n watch(\n () => [state.arrivedState[direction], isElementVisible.value],\n checkAndLoad,\n { immediate: true }\n );\n return {\n isLoading\n };\n}\n\nconst defaultEvents = [\"mousedown\", \"mouseup\", \"keydown\", \"keyup\"];\nfunction useKeyModifier(modifier, options = {}) {\n const {\n events = defaultEvents,\n document = defaultDocument,\n initial = null\n } = options;\n const state = ref(initial);\n if (document) {\n events.forEach((listenerEvent) => {\n useEventListener(document, listenerEvent, (evt) => {\n if (typeof evt.getModifierState === \"function\")\n state.value = evt.getModifierState(modifier);\n });\n });\n }\n return state;\n}\n\nfunction useLocalStorage(key, initialValue, options = {}) {\n const { window = defaultWindow } = options;\n return useStorage(key, initialValue, window == null ? void 0 : window.localStorage, options);\n}\n\nconst DefaultMagicKeysAliasMap = {\n ctrl: \"control\",\n command: \"meta\",\n cmd: \"meta\",\n option: \"alt\",\n up: \"arrowup\",\n down: \"arrowdown\",\n left: \"arrowleft\",\n right: \"arrowright\"\n};\n\nfunction useMagicKeys(options = {}) {\n const {\n reactive: useReactive = false,\n target = defaultWindow,\n aliasMap = DefaultMagicKeysAliasMap,\n passive = true,\n onEventFired = noop\n } = options;\n const current = reactive(/* @__PURE__ */ new Set());\n const obj = {\n toJSON() {\n return {};\n },\n current\n };\n const refs = useReactive ? reactive(obj) : obj;\n const metaDeps = /* @__PURE__ */ new Set();\n const usedKeys = /* @__PURE__ */ new Set();\n function setRefs(key, value) {\n if (key in refs) {\n if (useReactive)\n refs[key] = value;\n else\n refs[key].value = value;\n }\n }\n function reset() {\n current.clear();\n for (const key of usedKeys)\n setRefs(key, false);\n }\n function updateRefs(e, value) {\n var _a, _b;\n const key = (_a = e.key) == null ? void 0 : _a.toLowerCase();\n const code = (_b = e.code) == null ? void 0 : _b.toLowerCase();\n const values = [code, key].filter(Boolean);\n if (key) {\n if (value)\n current.add(key);\n else\n current.delete(key);\n }\n for (const key2 of values) {\n usedKeys.add(key2);\n setRefs(key2, value);\n }\n if (key === \"meta\" && !value) {\n metaDeps.forEach((key2) => {\n current.delete(key2);\n setRefs(key2, false);\n });\n metaDeps.clear();\n } else if (typeof e.getModifierState === \"function\" && e.getModifierState(\"Meta\") && value) {\n [...current, ...values].forEach((key2) => metaDeps.add(key2));\n }\n }\n useEventListener(target, \"keydown\", (e) => {\n updateRefs(e, true);\n return onEventFired(e);\n }, { passive });\n useEventListener(target, \"keyup\", (e) => {\n updateRefs(e, false);\n return onEventFired(e);\n }, { passive });\n useEventListener(\"blur\", reset, { passive: true });\n useEventListener(\"focus\", reset, { passive: true });\n const proxy = new Proxy(\n refs,\n {\n get(target2, prop, rec) {\n if (typeof prop !== \"string\")\n return Reflect.get(target2, prop, rec);\n prop = prop.toLowerCase();\n if (prop in aliasMap)\n prop = aliasMap[prop];\n if (!(prop in refs)) {\n if (/[+_-]/.test(prop)) {\n const keys = prop.split(/[+_-]/g).map((i) => i.trim());\n refs[prop] = computed(() => keys.every((key) => toValue(proxy[key])));\n } else {\n refs[prop] = ref(false);\n }\n }\n const r = Reflect.get(target2, prop, rec);\n return useReactive ? toValue(r) : r;\n }\n }\n );\n return proxy;\n}\n\nvar __defProp$8 = Object.defineProperty;\nvar __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$9 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$9 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$8 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$9.call(b, prop))\n __defNormalProp$8(a, prop, b[prop]);\n if (__getOwnPropSymbols$9)\n for (var prop of __getOwnPropSymbols$9(b)) {\n if (__propIsEnum$9.call(b, prop))\n __defNormalProp$8(a, prop, b[prop]);\n }\n return a;\n};\nfunction usingElRef(source, cb) {\n if (toValue(source))\n cb(toValue(source));\n}\nfunction timeRangeToArray(timeRanges) {\n let ranges = [];\n for (let i = 0; i < timeRanges.length; ++i)\n ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];\n return ranges;\n}\nfunction tracksToArray(tracks) {\n return Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({ id, label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }));\n}\nconst defaultOptions = {\n src: \"\",\n tracks: []\n};\nfunction useMediaControls(target, options = {}) {\n options = __spreadValues$8(__spreadValues$8({}, defaultOptions), options);\n const {\n document = defaultDocument\n } = options;\n const currentTime = ref(0);\n const duration = ref(0);\n const seeking = ref(false);\n const volume = ref(1);\n const waiting = ref(false);\n const ended = ref(false);\n const playing = ref(false);\n const rate = ref(1);\n const stalled = ref(false);\n const buffered = ref([]);\n const tracks = ref([]);\n const selectedTrack = ref(-1);\n const isPictureInPicture = ref(false);\n const muted = ref(false);\n const supportsPictureInPicture = document && \"pictureInPictureEnabled\" in document;\n const sourceErrorEvent = createEventHook();\n const disableTrack = (track) => {\n usingElRef(target, (el) => {\n if (track) {\n const id = typeof track === \"number\" ? track : track.id;\n el.textTracks[id].mode = \"disabled\";\n } else {\n for (let i = 0; i < el.textTracks.length; ++i)\n el.textTracks[i].mode = \"disabled\";\n }\n selectedTrack.value = -1;\n });\n };\n const enableTrack = (track, disableTracks = true) => {\n usingElRef(target, (el) => {\n const id = typeof track === \"number\" ? track : track.id;\n if (disableTracks)\n disableTrack();\n el.textTracks[id].mode = \"showing\";\n selectedTrack.value = id;\n });\n };\n const togglePictureInPicture = () => {\n return new Promise((resolve, reject) => {\n usingElRef(target, async (el) => {\n if (supportsPictureInPicture) {\n if (!isPictureInPicture.value) {\n el.requestPictureInPicture().then(resolve).catch(reject);\n } else {\n document.exitPictureInPicture().then(resolve).catch(reject);\n }\n }\n });\n });\n };\n watchEffect(() => {\n if (!document)\n return;\n const el = toValue(target);\n if (!el)\n return;\n const src = toValue(options.src);\n let sources = [];\n if (!src)\n return;\n if (typeof src === \"string\")\n sources = [{ src }];\n else if (Array.isArray(src))\n sources = src;\n else if (isObject(src))\n sources = [src];\n el.querySelectorAll(\"source\").forEach((e) => {\n e.removeEventListener(\"error\", sourceErrorEvent.trigger);\n e.remove();\n });\n sources.forEach(({ src: src2, type }) => {\n const source = document.createElement(\"source\");\n source.setAttribute(\"src\", src2);\n source.setAttribute(\"type\", type || \"\");\n source.addEventListener(\"error\", sourceErrorEvent.trigger);\n el.appendChild(source);\n });\n el.load();\n });\n tryOnScopeDispose(() => {\n const el = toValue(target);\n if (!el)\n return;\n el.querySelectorAll(\"source\").forEach((e) => e.removeEventListener(\"error\", sourceErrorEvent.trigger));\n });\n watch([target, volume], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.volume = volume.value;\n });\n watch([target, muted], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.muted = muted.value;\n });\n watch([target, rate], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.playbackRate = rate.value;\n });\n watchEffect(() => {\n if (!document)\n return;\n const textTracks = toValue(options.tracks);\n const el = toValue(target);\n if (!textTracks || !textTracks.length || !el)\n return;\n el.querySelectorAll(\"track\").forEach((e) => e.remove());\n textTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => {\n const track = document.createElement(\"track\");\n track.default = isDefault || false;\n track.kind = kind;\n track.label = label;\n track.src = src;\n track.srclang = srcLang;\n if (track.default)\n selectedTrack.value = i;\n el.appendChild(track);\n });\n });\n const { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => {\n const el = toValue(target);\n if (!el)\n return;\n el.currentTime = time;\n });\n const { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => {\n const el = toValue(target);\n if (!el)\n return;\n isPlaying ? el.play() : el.pause();\n });\n useEventListener(target, \"timeupdate\", () => ignoreCurrentTimeUpdates(() => currentTime.value = toValue(target).currentTime));\n useEventListener(target, \"durationchange\", () => duration.value = toValue(target).duration);\n useEventListener(target, \"progress\", () => buffered.value = timeRangeToArray(toValue(target).buffered));\n useEventListener(target, \"seeking\", () => seeking.value = true);\n useEventListener(target, \"seeked\", () => seeking.value = false);\n useEventListener(target, [\"waiting\", \"loadstart\"], () => {\n waiting.value = true;\n ignorePlayingUpdates(() => playing.value = false);\n });\n useEventListener(target, \"loadeddata\", () => waiting.value = false);\n useEventListener(target, \"playing\", () => {\n waiting.value = false;\n ended.value = false;\n ignorePlayingUpdates(() => playing.value = true);\n });\n useEventListener(target, \"ratechange\", () => rate.value = toValue(target).playbackRate);\n useEventListener(target, \"stalled\", () => stalled.value = true);\n useEventListener(target, \"ended\", () => ended.value = true);\n useEventListener(target, \"pause\", () => ignorePlayingUpdates(() => playing.value = false));\n useEventListener(target, \"play\", () => ignorePlayingUpdates(() => playing.value = true));\n useEventListener(target, \"enterpictureinpicture\", () => isPictureInPicture.value = true);\n useEventListener(target, \"leavepictureinpicture\", () => isPictureInPicture.value = false);\n useEventListener(target, \"volumechange\", () => {\n const el = toValue(target);\n if (!el)\n return;\n volume.value = el.volume;\n muted.value = el.muted;\n });\n const listeners = [];\n const stop = watch([target], () => {\n const el = toValue(target);\n if (!el)\n return;\n stop();\n listeners[0] = useEventListener(el.textTracks, \"addtrack\", () => tracks.value = tracksToArray(el.textTracks));\n listeners[1] = useEventListener(el.textTracks, \"removetrack\", () => tracks.value = tracksToArray(el.textTracks));\n listeners[2] = useEventListener(el.textTracks, \"change\", () => tracks.value = tracksToArray(el.textTracks));\n });\n tryOnScopeDispose(() => listeners.forEach((listener) => listener()));\n return {\n currentTime,\n duration,\n waiting,\n seeking,\n ended,\n stalled,\n buffered,\n playing,\n rate,\n // Volume\n volume,\n muted,\n // Tracks\n tracks,\n selectedTrack,\n enableTrack,\n disableTrack,\n // Picture in Picture\n supportsPictureInPicture,\n togglePictureInPicture,\n isPictureInPicture,\n // Events\n onSourceError: sourceErrorEvent.on\n };\n}\n\nfunction getMapVue2Compat() {\n const data = reactive({});\n return {\n get: (key) => data[key],\n set: (key, value) => set(data, key, value),\n has: (key) => hasOwn(data, key),\n delete: (key) => del(data, key),\n clear: () => {\n Object.keys(data).forEach((key) => {\n del(data, key);\n });\n }\n };\n}\nfunction useMemoize(resolver, options) {\n const initCache = () => {\n if (options == null ? void 0 : options.cache)\n return reactive(options.cache);\n if (isVue2)\n return getMapVue2Compat();\n return reactive(/* @__PURE__ */ new Map());\n };\n const cache = initCache();\n const generateKey = (...args) => (options == null ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args);\n const _loadData = (key, ...args) => {\n cache.set(key, resolver(...args));\n return cache.get(key);\n };\n const loadData = (...args) => _loadData(generateKey(...args), ...args);\n const deleteData = (...args) => {\n cache.delete(generateKey(...args));\n };\n const clearData = () => {\n cache.clear();\n };\n const memoized = (...args) => {\n const key = generateKey(...args);\n if (cache.has(key))\n return cache.get(key);\n return _loadData(key, ...args);\n };\n memoized.load = loadData;\n memoized.delete = deleteData;\n memoized.clear = clearData;\n memoized.generateKey = generateKey;\n memoized.cache = cache;\n return memoized;\n}\n\nfunction useMemory(options = {}) {\n const memory = ref();\n const isSupported = useSupported(() => typeof performance !== \"undefined\" && \"memory\" in performance);\n if (isSupported.value) {\n const { interval = 1e3 } = options;\n useIntervalFn(() => {\n memory.value = performance.memory;\n }, interval, { immediate: options.immediate, immediateCallback: options.immediateCallback });\n }\n return { isSupported, memory };\n}\n\nconst BuiltinExtractors = {\n page: (event) => [event.pageX, event.pageY],\n client: (event) => [event.clientX, event.clientY],\n screen: (event) => [event.screenX, event.screenY],\n movement: (event) => event instanceof Touch ? null : [event.movementX, event.movementY]\n};\nfunction useMouse(options = {}) {\n const {\n type = \"page\",\n touch = true,\n resetOnTouchEnds = false,\n initialValue = { x: 0, y: 0 },\n window = defaultWindow,\n target = window,\n eventFilter\n } = options;\n const x = ref(initialValue.x);\n const y = ref(initialValue.y);\n const sourceType = ref(null);\n const extractor = typeof type === \"function\" ? type : BuiltinExtractors[type];\n const mouseHandler = (event) => {\n const result = extractor(event);\n if (result) {\n [x.value, y.value] = result;\n sourceType.value = \"mouse\";\n }\n };\n const touchHandler = (event) => {\n if (event.touches.length > 0) {\n const result = extractor(event.touches[0]);\n if (result) {\n [x.value, y.value] = result;\n sourceType.value = \"touch\";\n }\n }\n };\n const reset = () => {\n x.value = initialValue.x;\n y.value = initialValue.y;\n };\n const mouseHandlerWrapper = eventFilter ? (event) => eventFilter(() => mouseHandler(event), {}) : (event) => mouseHandler(event);\n const touchHandlerWrapper = eventFilter ? (event) => eventFilter(() => touchHandler(event), {}) : (event) => touchHandler(event);\n if (target) {\n const listenerOptions = { passive: true };\n useEventListener(target, [\"mousemove\", \"dragover\"], mouseHandlerWrapper, listenerOptions);\n if (touch && type !== \"movement\") {\n useEventListener(target, [\"touchstart\", \"touchmove\"], touchHandlerWrapper, listenerOptions);\n if (resetOnTouchEnds)\n useEventListener(target, \"touchend\", reset, listenerOptions);\n }\n }\n return {\n x,\n y,\n sourceType\n };\n}\n\nfunction useMouseInElement(target, options = {}) {\n const {\n handleOutside = true,\n window = defaultWindow\n } = options;\n const { x, y, sourceType } = useMouse(options);\n const targetRef = ref(target != null ? target : window == null ? void 0 : window.document.body);\n const elementX = ref(0);\n const elementY = ref(0);\n const elementPositionX = ref(0);\n const elementPositionY = ref(0);\n const elementHeight = ref(0);\n const elementWidth = ref(0);\n const isOutside = ref(true);\n let stop = () => {\n };\n if (window) {\n stop = watch(\n [targetRef, x, y],\n () => {\n const el = unrefElement(targetRef);\n if (!el)\n return;\n const {\n left,\n top,\n width,\n height\n } = el.getBoundingClientRect();\n elementPositionX.value = left + window.pageXOffset;\n elementPositionY.value = top + window.pageYOffset;\n elementHeight.value = height;\n elementWidth.value = width;\n const elX = x.value - elementPositionX.value;\n const elY = y.value - elementPositionY.value;\n isOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height;\n if (handleOutside || !isOutside.value) {\n elementX.value = elX;\n elementY.value = elY;\n }\n },\n { immediate: true }\n );\n useEventListener(document, \"mouseleave\", () => {\n isOutside.value = true;\n });\n }\n return {\n x,\n y,\n sourceType,\n elementX,\n elementY,\n elementPositionX,\n elementPositionY,\n elementHeight,\n elementWidth,\n isOutside,\n stop\n };\n}\n\nfunction useMousePressed(options = {}) {\n const {\n touch = true,\n drag = true,\n initialValue = false,\n window = defaultWindow\n } = options;\n const pressed = ref(initialValue);\n const sourceType = ref(null);\n if (!window) {\n return {\n pressed,\n sourceType\n };\n }\n const onPressed = (srcType) => () => {\n pressed.value = true;\n sourceType.value = srcType;\n };\n const onReleased = () => {\n pressed.value = false;\n sourceType.value = null;\n };\n const target = computed(() => unrefElement(options.target) || window);\n useEventListener(target, \"mousedown\", onPressed(\"mouse\"), { passive: true });\n useEventListener(window, \"mouseleave\", onReleased, { passive: true });\n useEventListener(window, \"mouseup\", onReleased, { passive: true });\n if (drag) {\n useEventListener(target, \"dragstart\", onPressed(\"mouse\"), { passive: true });\n useEventListener(window, \"drop\", onReleased, { passive: true });\n useEventListener(window, \"dragend\", onReleased, { passive: true });\n }\n if (touch) {\n useEventListener(target, \"touchstart\", onPressed(\"touch\"), { passive: true });\n useEventListener(window, \"touchend\", onReleased, { passive: true });\n useEventListener(window, \"touchcancel\", onReleased, { passive: true });\n }\n return {\n pressed,\n sourceType\n };\n}\n\nfunction useNavigatorLanguage(options = {}) {\n const { window = defaultWindow } = options;\n const navigator = window == null ? void 0 : window.navigator;\n const isSupported = useSupported(() => navigator && \"language\" in navigator);\n const language = ref(navigator == null ? void 0 : navigator.language);\n useEventListener(window, \"languagechange\", () => {\n if (navigator)\n language.value = navigator.language;\n });\n return {\n isSupported,\n language\n };\n}\n\nfunction useNetwork(options = {}) {\n const { window = defaultWindow } = options;\n const navigator = window == null ? void 0 : window.navigator;\n const isSupported = useSupported(() => navigator && \"connection\" in navigator);\n const isOnline = ref(true);\n const saveData = ref(false);\n const offlineAt = ref(void 0);\n const onlineAt = ref(void 0);\n const downlink = ref(void 0);\n const downlinkMax = ref(void 0);\n const rtt = ref(void 0);\n const effectiveType = ref(void 0);\n const type = ref(\"unknown\");\n const connection = isSupported.value && navigator.connection;\n function updateNetworkInformation() {\n if (!navigator)\n return;\n isOnline.value = navigator.onLine;\n offlineAt.value = isOnline.value ? void 0 : Date.now();\n onlineAt.value = isOnline.value ? Date.now() : void 0;\n if (connection) {\n downlink.value = connection.downlink;\n downlinkMax.value = connection.downlinkMax;\n effectiveType.value = connection.effectiveType;\n rtt.value = connection.rtt;\n saveData.value = connection.saveData;\n type.value = connection.type;\n }\n }\n if (window) {\n useEventListener(window, \"offline\", () => {\n isOnline.value = false;\n offlineAt.value = Date.now();\n });\n useEventListener(window, \"online\", () => {\n isOnline.value = true;\n onlineAt.value = Date.now();\n });\n }\n if (connection)\n useEventListener(connection, \"change\", updateNetworkInformation, false);\n updateNetworkInformation();\n return {\n isSupported,\n isOnline,\n saveData,\n offlineAt,\n onlineAt,\n downlink,\n downlinkMax,\n effectiveType,\n rtt,\n type\n };\n}\n\nvar __defProp$7 = Object.defineProperty;\nvar __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$8 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$8 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$7 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$8.call(b, prop))\n __defNormalProp$7(a, prop, b[prop]);\n if (__getOwnPropSymbols$8)\n for (var prop of __getOwnPropSymbols$8(b)) {\n if (__propIsEnum$8.call(b, prop))\n __defNormalProp$7(a, prop, b[prop]);\n }\n return a;\n};\nfunction useNow(options = {}) {\n const {\n controls: exposeControls = false,\n interval = \"requestAnimationFrame\"\n } = options;\n const now = ref(/* @__PURE__ */ new Date());\n const update = () => now.value = /* @__PURE__ */ new Date();\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(update, { immediate: true }) : useIntervalFn(update, interval, { immediate: true });\n if (exposeControls) {\n return __spreadValues$7({\n now\n }, controls);\n } else {\n return now;\n }\n}\n\nfunction useObjectUrl(object) {\n const url = ref();\n const release = () => {\n if (url.value)\n URL.revokeObjectURL(url.value);\n url.value = void 0;\n };\n watch(\n () => toValue(object),\n (newObject) => {\n release();\n if (newObject)\n url.value = URL.createObjectURL(newObject);\n },\n { immediate: true }\n );\n tryOnScopeDispose(release);\n return readonly(url);\n}\n\nfunction useClamp(value, min, max) {\n if (typeof value === \"function\" || isReadonly(value))\n return computed(() => clamp(toValue(value), toValue(min), toValue(max)));\n const _value = ref(value);\n return computed({\n get() {\n return _value.value = clamp(_value.value, toValue(min), toValue(max));\n },\n set(value2) {\n _value.value = clamp(value2, toValue(min), toValue(max));\n }\n });\n}\n\nfunction useOffsetPagination(options) {\n const {\n total = Number.POSITIVE_INFINITY,\n pageSize = 10,\n page = 1,\n onPageChange = noop,\n onPageSizeChange = noop,\n onPageCountChange = noop\n } = options;\n const currentPageSize = useClamp(pageSize, 1, Number.POSITIVE_INFINITY);\n const pageCount = computed(() => Math.max(\n 1,\n Math.ceil(toValue(total) / toValue(currentPageSize))\n ));\n const currentPage = useClamp(page, 1, pageCount);\n const isFirstPage = computed(() => currentPage.value === 1);\n const isLastPage = computed(() => currentPage.value === pageCount.value);\n if (isRef(page))\n syncRef(page, currentPage);\n if (isRef(pageSize))\n syncRef(pageSize, currentPageSize);\n function prev() {\n currentPage.value--;\n }\n function next() {\n currentPage.value++;\n }\n const returnValue = {\n currentPage,\n currentPageSize,\n pageCount,\n isFirstPage,\n isLastPage,\n prev,\n next\n };\n watch(currentPage, () => {\n onPageChange(reactive(returnValue));\n });\n watch(currentPageSize, () => {\n onPageSizeChange(reactive(returnValue));\n });\n watch(pageCount, () => {\n onPageCountChange(reactive(returnValue));\n });\n return returnValue;\n}\n\nfunction useOnline(options = {}) {\n const { isOnline } = useNetwork(options);\n return isOnline;\n}\n\nfunction usePageLeave(options = {}) {\n const { window = defaultWindow } = options;\n const isLeft = ref(false);\n const handler = (event) => {\n if (!window)\n return;\n event = event || window.event;\n const from = event.relatedTarget || event.toElement;\n isLeft.value = !from;\n };\n if (window) {\n useEventListener(window, \"mouseout\", handler, { passive: true });\n useEventListener(window.document, \"mouseleave\", handler, { passive: true });\n useEventListener(window.document, \"mouseenter\", handler, { passive: true });\n }\n return isLeft;\n}\n\nfunction useParallax(target, options = {}) {\n const {\n deviceOrientationTiltAdjust = (i) => i,\n deviceOrientationRollAdjust = (i) => i,\n mouseTiltAdjust = (i) => i,\n mouseRollAdjust = (i) => i,\n window = defaultWindow\n } = options;\n const orientation = reactive(useDeviceOrientation({ window }));\n const {\n elementX: x,\n elementY: y,\n elementWidth: width,\n elementHeight: height\n } = useMouseInElement(target, { handleOutside: false, window });\n const source = computed(() => {\n if (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0))\n return \"deviceOrientation\";\n return \"mouse\";\n });\n const roll = computed(() => {\n if (source.value === \"deviceOrientation\") {\n const value = -orientation.beta / 90;\n return deviceOrientationRollAdjust(value);\n } else {\n const value = -(y.value - height.value / 2) / height.value;\n return mouseRollAdjust(value);\n }\n });\n const tilt = computed(() => {\n if (source.value === \"deviceOrientation\") {\n const value = orientation.gamma / 90;\n return deviceOrientationTiltAdjust(value);\n } else {\n const value = (x.value - width.value / 2) / width.value;\n return mouseTiltAdjust(value);\n }\n });\n return { roll, tilt, source };\n}\n\nfunction useParentElement(element = useCurrentElement()) {\n const parentElement = shallowRef();\n const update = () => {\n const el = unrefElement(element);\n if (el)\n parentElement.value = el.parentElement;\n };\n tryOnMounted(update);\n watch(() => toValue(element), update);\n return parentElement;\n}\n\nvar __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$7 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$7 = Object.prototype.propertyIsEnumerable;\nvar __objRest$1 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$7.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$7)\n for (var prop of __getOwnPropSymbols$7(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$7.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction usePerformanceObserver(options, callback) {\n const _a = options, {\n window = defaultWindow,\n immediate = true\n } = _a, performanceOptions = __objRest$1(_a, [\n \"window\",\n \"immediate\"\n ]);\n const isSupported = useSupported(() => window && \"PerformanceObserver\" in window);\n let observer;\n const stop = () => {\n observer == null ? void 0 : observer.disconnect();\n };\n const start = () => {\n if (isSupported.value) {\n stop();\n observer = new PerformanceObserver(callback);\n observer.observe(performanceOptions);\n }\n };\n tryOnScopeDispose(stop);\n if (immediate)\n start();\n return {\n isSupported,\n start,\n stop\n };\n}\n\nvar __defProp$6 = Object.defineProperty;\nvar __defProps$2 = Object.defineProperties;\nvar __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$6 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$6 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$6 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$6.call(b, prop))\n __defNormalProp$6(a, prop, b[prop]);\n if (__getOwnPropSymbols$6)\n for (var prop of __getOwnPropSymbols$6(b)) {\n if (__propIsEnum$6.call(b, prop))\n __defNormalProp$6(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));\nconst defaultState = {\n x: 0,\n y: 0,\n pointerId: 0,\n pressure: 0,\n tiltX: 0,\n tiltY: 0,\n width: 0,\n height: 0,\n twist: 0,\n pointerType: null\n};\nconst keys = /* @__PURE__ */ Object.keys(defaultState);\nfunction usePointer(options = {}) {\n const {\n target = defaultWindow\n } = options;\n const isInside = ref(false);\n const state = ref(options.initialValue || {});\n Object.assign(state.value, defaultState, state.value);\n const handler = (event) => {\n isInside.value = true;\n if (options.pointerTypes && !options.pointerTypes.includes(event.pointerType))\n return;\n state.value = objectPick(event, keys, false);\n };\n if (target) {\n const listenerOptions = { passive: true };\n useEventListener(target, [\"pointerdown\", \"pointermove\", \"pointerup\"], handler, listenerOptions);\n useEventListener(target, \"pointerleave\", () => isInside.value = false, listenerOptions);\n }\n return __spreadProps$2(__spreadValues$6({}, toRefs(state)), {\n isInside\n });\n}\n\nfunction usePointerLock(target, options = {}) {\n const { document = defaultDocument, pointerLockOptions } = options;\n const isSupported = useSupported(() => document && \"pointerLockElement\" in document);\n const element = ref();\n const triggerElement = ref();\n let targetElement;\n if (isSupported.value) {\n useEventListener(document, \"pointerlockchange\", () => {\n var _a;\n const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n if (targetElement && currentElement === targetElement) {\n element.value = document.pointerLockElement;\n if (!element.value)\n targetElement = triggerElement.value = null;\n }\n });\n useEventListener(document, \"pointerlockerror\", () => {\n var _a;\n const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n if (targetElement && currentElement === targetElement) {\n const action = document.pointerLockElement ? \"release\" : \"acquire\";\n throw new Error(`Failed to ${action} pointer lock.`);\n }\n });\n }\n async function lock(e, options2) {\n var _a;\n if (!isSupported.value)\n throw new Error(\"Pointer Lock API is not supported by your browser.\");\n triggerElement.value = e instanceof Event ? e.currentTarget : null;\n targetElement = e instanceof Event ? (_a = unrefElement(target)) != null ? _a : triggerElement.value : unrefElement(e);\n if (!targetElement)\n throw new Error(\"Target element undefined.\");\n targetElement.requestPointerLock(options2 != null ? options2 : pointerLockOptions);\n return await until(element).toBe(targetElement);\n }\n async function unlock() {\n if (!element.value)\n return false;\n document.exitPointerLock();\n await until(element).toBeNull();\n return true;\n }\n return {\n isSupported,\n element,\n triggerElement,\n lock,\n unlock\n };\n}\n\nfunction usePointerSwipe(target, options = {}) {\n const targetRef = toRef(target);\n const {\n threshold = 50,\n onSwipe,\n onSwipeEnd,\n onSwipeStart\n } = options;\n const posStart = reactive({ x: 0, y: 0 });\n const updatePosStart = (x, y) => {\n posStart.x = x;\n posStart.y = y;\n };\n const posEnd = reactive({ x: 0, y: 0 });\n const updatePosEnd = (x, y) => {\n posEnd.x = x;\n posEnd.y = y;\n };\n const distanceX = computed(() => posStart.x - posEnd.x);\n const distanceY = computed(() => posStart.y - posEnd.y);\n const { max, abs } = Math;\n const isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold);\n const isSwiping = ref(false);\n const isPointerDown = ref(false);\n const direction = computed(() => {\n if (!isThresholdExceeded.value)\n return \"none\";\n if (abs(distanceX.value) > abs(distanceY.value)) {\n return distanceX.value > 0 ? \"left\" : \"right\";\n } else {\n return distanceY.value > 0 ? \"up\" : \"down\";\n }\n });\n const eventIsAllowed = (e) => {\n var _a, _b, _c;\n const isReleasingButton = e.buttons === 0;\n const isPrimaryButton = e.buttons === 1;\n return (_c = (_b = (_a = options.pointerTypes) == null ? void 0 : _a.includes(e.pointerType)) != null ? _b : isReleasingButton || isPrimaryButton) != null ? _c : true;\n };\n const stops = [\n useEventListener(target, \"pointerdown\", (e) => {\n var _a, _b;\n if (!eventIsAllowed(e))\n return;\n isPointerDown.value = true;\n (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty(\"touch-action\", \"none\");\n const eventTarget = e.target;\n eventTarget == null ? void 0 : eventTarget.setPointerCapture(e.pointerId);\n const { clientX: x, clientY: y } = e;\n updatePosStart(x, y);\n updatePosEnd(x, y);\n onSwipeStart == null ? void 0 : onSwipeStart(e);\n }),\n useEventListener(target, \"pointermove\", (e) => {\n if (!eventIsAllowed(e))\n return;\n if (!isPointerDown.value)\n return;\n const { clientX: x, clientY: y } = e;\n updatePosEnd(x, y);\n if (!isSwiping.value && isThresholdExceeded.value)\n isSwiping.value = true;\n if (isSwiping.value)\n onSwipe == null ? void 0 : onSwipe(e);\n }),\n useEventListener(target, \"pointerup\", (e) => {\n var _a, _b;\n if (!eventIsAllowed(e))\n return;\n if (isSwiping.value)\n onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n isPointerDown.value = false;\n isSwiping.value = false;\n (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty(\"touch-action\", \"initial\");\n })\n ];\n const stop = () => stops.forEach((s) => s());\n return {\n isSwiping: readonly(isSwiping),\n direction: readonly(direction),\n posStart: readonly(posStart),\n posEnd: readonly(posEnd),\n distanceX,\n distanceY,\n stop\n };\n}\n\nfunction usePreferredColorScheme(options) {\n const isLight = useMediaQuery(\"(prefers-color-scheme: light)\", options);\n const isDark = useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n return computed(() => {\n if (isDark.value)\n return \"dark\";\n if (isLight.value)\n return \"light\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredContrast(options) {\n const isMore = useMediaQuery(\"(prefers-contrast: more)\", options);\n const isLess = useMediaQuery(\"(prefers-contrast: less)\", options);\n const isCustom = useMediaQuery(\"(prefers-contrast: custom)\", options);\n return computed(() => {\n if (isMore.value)\n return \"more\";\n if (isLess.value)\n return \"less\";\n if (isCustom.value)\n return \"custom\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredLanguages(options = {}) {\n const { window = defaultWindow } = options;\n if (!window)\n return ref([\"en\"]);\n const navigator = window.navigator;\n const value = ref(navigator.languages);\n useEventListener(window, \"languagechange\", () => {\n value.value = navigator.languages;\n });\n return value;\n}\n\nfunction usePreferredReducedMotion(options) {\n const isReduced = useMediaQuery(\"(prefers-reduced-motion: reduce)\", options);\n return computed(() => {\n if (isReduced.value)\n return \"reduce\";\n return \"no-preference\";\n });\n}\n\nfunction usePrevious(value, initialValue) {\n const previous = shallowRef(initialValue);\n watch(\n toRef(value),\n (_, oldValue) => {\n previous.value = oldValue;\n },\n { flush: \"sync\" }\n );\n return readonly(previous);\n}\n\nfunction useScreenOrientation(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const isSupported = useSupported(() => window && \"screen\" in window && \"orientation\" in window.screen);\n const screenOrientation = isSupported.value ? window.screen.orientation : {};\n const orientation = ref(screenOrientation.type);\n const angle = ref(screenOrientation.angle || 0);\n if (isSupported.value) {\n useEventListener(window, \"orientationchange\", () => {\n orientation.value = screenOrientation.type;\n angle.value = screenOrientation.angle;\n });\n }\n const lockOrientation = (type) => {\n if (!isSupported.value)\n return Promise.reject(new Error(\"Not supported\"));\n return screenOrientation.lock(type);\n };\n const unlockOrientation = () => {\n if (isSupported.value)\n screenOrientation.unlock();\n };\n return {\n isSupported,\n orientation,\n angle,\n lockOrientation,\n unlockOrientation\n };\n}\n\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\nfunction useScreenSafeArea() {\n const top = ref(\"\");\n const right = ref(\"\");\n const bottom = ref(\"\");\n const left = ref(\"\");\n if (isClient) {\n const topCssVar = useCssVar(topVarName);\n const rightCssVar = useCssVar(rightVarName);\n const bottomCssVar = useCssVar(bottomVarName);\n const leftCssVar = useCssVar(leftVarName);\n topCssVar.value = \"env(safe-area-inset-top, 0px)\";\n rightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n bottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n leftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n update();\n useEventListener(\"resize\", useDebounceFn(update));\n }\n function update() {\n top.value = getValue(topVarName);\n right.value = getValue(rightVarName);\n bottom.value = getValue(bottomVarName);\n left.value = getValue(leftVarName);\n }\n return {\n top,\n right,\n bottom,\n left,\n update\n };\n}\nfunction getValue(position) {\n return getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\nfunction useScriptTag(src, onLoaded = noop, options = {}) {\n const {\n immediate = true,\n manual = false,\n type = \"text/javascript\",\n async = true,\n crossOrigin,\n referrerPolicy,\n noModule,\n defer,\n document = defaultDocument,\n attrs = {}\n } = options;\n const scriptTag = ref(null);\n let _promise = null;\n const loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => {\n const resolveWithElement = (el2) => {\n scriptTag.value = el2;\n resolve(el2);\n return el2;\n };\n if (!document) {\n resolve(false);\n return;\n }\n let shouldAppend = false;\n let el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n if (!el) {\n el = document.createElement(\"script\");\n el.type = type;\n el.async = async;\n el.src = toValue(src);\n if (defer)\n el.defer = defer;\n if (crossOrigin)\n el.crossOrigin = crossOrigin;\n if (noModule)\n el.noModule = noModule;\n if (referrerPolicy)\n el.referrerPolicy = referrerPolicy;\n Object.entries(attrs).forEach(([name, value]) => el == null ? void 0 : el.setAttribute(name, value));\n shouldAppend = true;\n } else if (el.hasAttribute(\"data-loaded\")) {\n resolveWithElement(el);\n }\n el.addEventListener(\"error\", (event) => reject(event));\n el.addEventListener(\"abort\", (event) => reject(event));\n el.addEventListener(\"load\", () => {\n el.setAttribute(\"data-loaded\", \"true\");\n onLoaded(el);\n resolveWithElement(el);\n });\n if (shouldAppend)\n el = document.head.appendChild(el);\n if (!waitForScriptLoad)\n resolveWithElement(el);\n });\n const load = (waitForScriptLoad = true) => {\n if (!_promise)\n _promise = loadScript(waitForScriptLoad);\n return _promise;\n };\n const unload = () => {\n if (!document)\n return;\n _promise = null;\n if (scriptTag.value)\n scriptTag.value = null;\n const el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n if (el)\n document.head.removeChild(el);\n };\n if (immediate && !manual)\n tryOnMounted(load);\n if (!manual)\n tryOnUnmounted(unload);\n return { scriptTag, load, unload };\n}\n\nfunction checkOverflowScroll(ele) {\n const style = window.getComputedStyle(ele);\n if (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientWidth < ele.scrollWidth || style.overflowY === \"auto\" && ele.clientHeight < ele.scrollHeight) {\n return true;\n } else {\n const parent = ele.parentNode;\n if (!parent || parent.tagName === \"BODY\")\n return false;\n return checkOverflowScroll(parent);\n }\n}\nfunction preventDefault(rawEvent) {\n const e = rawEvent || window.event;\n const _target = e.target;\n if (checkOverflowScroll(_target))\n return false;\n if (e.touches.length > 1)\n return true;\n if (e.preventDefault)\n e.preventDefault();\n return false;\n}\nfunction useScrollLock(element, initialState = false) {\n const isLocked = ref(initialState);\n let stopTouchMoveListener = null;\n let initialOverflow;\n watch(toRef(element), (el) => {\n if (el) {\n const ele = el;\n initialOverflow = ele.style.overflow;\n if (isLocked.value)\n ele.style.overflow = \"hidden\";\n }\n }, {\n immediate: true\n });\n const lock = () => {\n const ele = toValue(element);\n if (!ele || isLocked.value)\n return;\n if (isIOS) {\n stopTouchMoveListener = useEventListener(\n ele,\n \"touchmove\",\n (e) => {\n preventDefault(e);\n },\n { passive: false }\n );\n }\n ele.style.overflow = \"hidden\";\n isLocked.value = true;\n };\n const unlock = () => {\n const ele = toValue(element);\n if (!ele || !isLocked.value)\n return;\n isIOS && (stopTouchMoveListener == null ? void 0 : stopTouchMoveListener());\n ele.style.overflow = initialOverflow;\n isLocked.value = false;\n };\n tryOnScopeDispose(unlock);\n return computed({\n get() {\n return isLocked.value;\n },\n set(v) {\n if (v)\n lock();\n else\n unlock();\n }\n });\n}\n\nfunction useSessionStorage(key, initialValue, options = {}) {\n const { window = defaultWindow } = options;\n return useStorage(key, initialValue, window == null ? void 0 : window.sessionStorage, options);\n}\n\nvar __defProp$5 = Object.defineProperty;\nvar __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$5 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$5 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$5 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$5.call(b, prop))\n __defNormalProp$5(a, prop, b[prop]);\n if (__getOwnPropSymbols$5)\n for (var prop of __getOwnPropSymbols$5(b)) {\n if (__propIsEnum$5.call(b, prop))\n __defNormalProp$5(a, prop, b[prop]);\n }\n return a;\n};\nfunction useShare(shareOptions = {}, options = {}) {\n const { navigator = defaultNavigator } = options;\n const _navigator = navigator;\n const isSupported = useSupported(() => _navigator && \"canShare\" in _navigator);\n const share = async (overrideOptions = {}) => {\n if (isSupported.value) {\n const data = __spreadValues$5(__spreadValues$5({}, toValue(shareOptions)), toValue(overrideOptions));\n let granted = true;\n if (data.files && _navigator.canShare)\n granted = _navigator.canShare({ files: data.files });\n if (granted)\n return _navigator.share(data);\n }\n };\n return {\n isSupported,\n share\n };\n}\n\nconst defaultSortFn = (source, compareFn) => source.sort(compareFn);\nconst defaultCompare = (a, b) => a - b;\nfunction useSorted(...args) {\n var _a, _b, _c, _d;\n const [source] = args;\n let compareFn = defaultCompare;\n let options = {};\n if (args.length === 2) {\n if (typeof args[1] === \"object\") {\n options = args[1];\n compareFn = (_a = options.compareFn) != null ? _a : defaultCompare;\n } else {\n compareFn = (_b = args[1]) != null ? _b : defaultCompare;\n }\n } else if (args.length > 2) {\n compareFn = (_c = args[1]) != null ? _c : defaultCompare;\n options = (_d = args[2]) != null ? _d : {};\n }\n const {\n dirty = false,\n sortFn = defaultSortFn\n } = options;\n if (!dirty)\n return computed(() => sortFn([...toValue(source)], compareFn));\n watchEffect(() => {\n const result = sortFn(toValue(source), compareFn);\n if (isRef(source))\n source.value = result;\n else\n source.splice(0, source.length, ...result);\n });\n return source;\n}\n\nfunction useSpeechRecognition(options = {}) {\n const {\n interimResults = true,\n continuous = true,\n window = defaultWindow\n } = options;\n const lang = toRef(options.lang || \"en-US\");\n const isListening = ref(false);\n const isFinal = ref(false);\n const result = ref(\"\");\n const error = shallowRef(void 0);\n const toggle = (value = !isListening.value) => {\n isListening.value = value;\n };\n const start = () => {\n isListening.value = true;\n };\n const stop = () => {\n isListening.value = false;\n };\n const SpeechRecognition = window && (window.SpeechRecognition || window.webkitSpeechRecognition);\n const isSupported = useSupported(() => SpeechRecognition);\n let recognition;\n if (isSupported.value) {\n recognition = new SpeechRecognition();\n recognition.continuous = continuous;\n recognition.interimResults = interimResults;\n recognition.lang = toValue(lang);\n recognition.onstart = () => {\n isFinal.value = false;\n };\n watch(lang, (lang2) => {\n if (recognition && !isListening.value)\n recognition.lang = lang2;\n });\n recognition.onresult = (event) => {\n const transcript = Array.from(event.results).map((result2) => {\n isFinal.value = result2.isFinal;\n return result2[0];\n }).map((result2) => result2.transcript).join(\"\");\n result.value = transcript;\n error.value = void 0;\n };\n recognition.onerror = (event) => {\n error.value = event;\n };\n recognition.onend = () => {\n isListening.value = false;\n recognition.lang = toValue(lang);\n };\n watch(isListening, () => {\n if (isListening.value)\n recognition.start();\n else\n recognition.stop();\n });\n }\n tryOnScopeDispose(() => {\n isListening.value = false;\n });\n return {\n isSupported,\n isListening,\n isFinal,\n recognition,\n result,\n error,\n toggle,\n start,\n stop\n };\n}\n\nfunction useSpeechSynthesis(text, options = {}) {\n const {\n pitch = 1,\n rate = 1,\n volume = 1,\n window = defaultWindow\n } = options;\n const synth = window && window.speechSynthesis;\n const isSupported = useSupported(() => synth);\n const isPlaying = ref(false);\n const status = ref(\"init\");\n const spokenText = toRef(text || \"\");\n const lang = toRef(options.lang || \"en-US\");\n const error = shallowRef(void 0);\n const toggle = (value = !isPlaying.value) => {\n isPlaying.value = value;\n };\n const bindEventsForUtterance = (utterance2) => {\n utterance2.lang = toValue(lang);\n utterance2.voice = toValue(options.voice) || null;\n utterance2.pitch = toValue(pitch);\n utterance2.rate = toValue(rate);\n utterance2.volume = volume;\n utterance2.onstart = () => {\n isPlaying.value = true;\n status.value = \"play\";\n };\n utterance2.onpause = () => {\n isPlaying.value = false;\n status.value = \"pause\";\n };\n utterance2.onresume = () => {\n isPlaying.value = true;\n status.value = \"play\";\n };\n utterance2.onend = () => {\n isPlaying.value = false;\n status.value = \"end\";\n };\n utterance2.onerror = (event) => {\n error.value = event;\n };\n };\n const utterance = computed(() => {\n isPlaying.value = false;\n status.value = \"init\";\n const newUtterance = new SpeechSynthesisUtterance(spokenText.value);\n bindEventsForUtterance(newUtterance);\n return newUtterance;\n });\n const speak = () => {\n synth.cancel();\n utterance && synth.speak(utterance.value);\n };\n const stop = () => {\n synth.cancel();\n isPlaying.value = false;\n };\n if (isSupported.value) {\n bindEventsForUtterance(utterance.value);\n watch(lang, (lang2) => {\n if (utterance.value && !isPlaying.value)\n utterance.value.lang = lang2;\n });\n if (options.voice) {\n watch(options.voice, () => {\n synth.cancel();\n });\n }\n watch(isPlaying, () => {\n if (isPlaying.value)\n synth.resume();\n else\n synth.pause();\n });\n }\n tryOnScopeDispose(() => {\n isPlaying.value = false;\n });\n return {\n isSupported,\n isPlaying,\n status,\n utterance,\n error,\n stop,\n toggle,\n speak\n };\n}\n\nfunction useStepper(steps, initialStep) {\n const stepsRef = ref(steps);\n const stepNames = computed(() => Array.isArray(stepsRef.value) ? stepsRef.value : Object.keys(stepsRef.value));\n const index = ref(stepNames.value.indexOf(initialStep != null ? initialStep : stepNames.value[0]));\n const current = computed(() => at(index.value));\n const isFirst = computed(() => index.value === 0);\n const isLast = computed(() => index.value === stepNames.value.length - 1);\n const next = computed(() => stepNames.value[index.value + 1]);\n const previous = computed(() => stepNames.value[index.value - 1]);\n function at(index2) {\n if (Array.isArray(stepsRef.value))\n return stepsRef.value[index2];\n return stepsRef.value[stepNames.value[index2]];\n }\n function get(step) {\n if (!stepNames.value.includes(step))\n return;\n return at(stepNames.value.indexOf(step));\n }\n function goTo(step) {\n if (stepNames.value.includes(step))\n index.value = stepNames.value.indexOf(step);\n }\n function goToNext() {\n if (isLast.value)\n return;\n index.value++;\n }\n function goToPrevious() {\n if (isFirst.value)\n return;\n index.value--;\n }\n function goBackTo(step) {\n if (isAfter(step))\n goTo(step);\n }\n function isNext(step) {\n return stepNames.value.indexOf(step) === index.value + 1;\n }\n function isPrevious(step) {\n return stepNames.value.indexOf(step) === index.value - 1;\n }\n function isCurrent(step) {\n return stepNames.value.indexOf(step) === index.value;\n }\n function isBefore(step) {\n return index.value < stepNames.value.indexOf(step);\n }\n function isAfter(step) {\n return index.value > stepNames.value.indexOf(step);\n }\n return {\n steps: stepsRef,\n stepNames,\n index,\n current,\n next,\n previous,\n isFirst,\n isLast,\n at,\n get,\n goTo,\n goToNext,\n goToPrevious,\n goBackTo,\n isNext,\n isPrevious,\n isCurrent,\n isBefore,\n isAfter\n };\n}\n\nvar __defProp$4 = Object.defineProperty;\nvar __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$4 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$4 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$4 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$4.call(b, prop))\n __defNormalProp$4(a, prop, b[prop]);\n if (__getOwnPropSymbols$4)\n for (var prop of __getOwnPropSymbols$4(b)) {\n if (__propIsEnum$4.call(b, prop))\n __defNormalProp$4(a, prop, b[prop]);\n }\n return a;\n};\nfunction useStorageAsync(key, initialValue, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n mergeDefaults = false,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n }\n } = options;\n const rawInit = toValue(initialValue);\n const type = guessSerializerType(rawInit);\n const data = (shallow ? shallowRef : ref)(initialValue);\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorage\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n async function read(event) {\n if (!storage || event && event.key !== key)\n return;\n try {\n const rawValue = event ? event.newValue : await storage.getItem(key);\n if (rawValue == null) {\n data.value = rawInit;\n if (writeDefaults && rawInit !== null)\n await storage.setItem(key, await serializer.write(rawInit));\n } else if (mergeDefaults) {\n const value = await serializer.read(rawValue);\n if (typeof mergeDefaults === \"function\")\n data.value = mergeDefaults(value, rawInit);\n else if (type === \"object\" && !Array.isArray(value))\n data.value = __spreadValues$4(__spreadValues$4({}, rawInit), value);\n else\n data.value = value;\n } else {\n data.value = await serializer.read(rawValue);\n }\n } catch (e) {\n onError(e);\n }\n }\n read();\n if (window && listenToStorageChanges)\n useEventListener(window, \"storage\", (e) => Promise.resolve().then(() => read(e)));\n if (storage) {\n watchWithFilter(\n data,\n async () => {\n try {\n if (data.value == null)\n await storage.removeItem(key);\n else\n await storage.setItem(key, await serializer.write(data.value));\n } catch (e) {\n onError(e);\n }\n },\n {\n flush,\n deep,\n eventFilter\n }\n );\n }\n return data;\n}\n\nlet _id = 0;\nfunction useStyleTag(css, options = {}) {\n const isLoaded = ref(false);\n const {\n document = defaultDocument,\n immediate = true,\n manual = false,\n id = `vueuse_styletag_${++_id}`\n } = options;\n const cssRef = ref(css);\n let stop = () => {\n };\n const load = () => {\n if (!document)\n return;\n const el = document.getElementById(id) || document.createElement(\"style\");\n if (!el.isConnected) {\n el.id = id;\n if (options.media)\n el.media = options.media;\n document.head.appendChild(el);\n }\n if (isLoaded.value)\n return;\n stop = watch(\n cssRef,\n (value) => {\n el.textContent = value;\n },\n { immediate: true }\n );\n isLoaded.value = true;\n };\n const unload = () => {\n if (!document || !isLoaded.value)\n return;\n stop();\n document.head.removeChild(document.getElementById(id));\n isLoaded.value = false;\n };\n if (immediate && !manual)\n tryOnMounted(load);\n if (!manual)\n tryOnScopeDispose(unload);\n return {\n id,\n css: cssRef,\n unload,\n load,\n isLoaded: readonly(isLoaded)\n };\n}\n\nfunction useSwipe(target, options = {}) {\n const {\n threshold = 50,\n onSwipe,\n onSwipeEnd,\n onSwipeStart,\n passive = true,\n window = defaultWindow\n } = options;\n const coordsStart = reactive({ x: 0, y: 0 });\n const coordsEnd = reactive({ x: 0, y: 0 });\n const diffX = computed(() => coordsStart.x - coordsEnd.x);\n const diffY = computed(() => coordsStart.y - coordsEnd.y);\n const { max, abs } = Math;\n const isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold);\n const isSwiping = ref(false);\n const direction = computed(() => {\n if (!isThresholdExceeded.value)\n return \"none\";\n if (abs(diffX.value) > abs(diffY.value)) {\n return diffX.value > 0 ? \"left\" : \"right\";\n } else {\n return diffY.value > 0 ? \"up\" : \"down\";\n }\n });\n const getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY];\n const updateCoordsStart = (x, y) => {\n coordsStart.x = x;\n coordsStart.y = y;\n };\n const updateCoordsEnd = (x, y) => {\n coordsEnd.x = x;\n coordsEnd.y = y;\n };\n let listenerOptions;\n const isPassiveEventSupported = checkPassiveEventSupport(window == null ? void 0 : window.document);\n if (!passive)\n listenerOptions = isPassiveEventSupported ? { passive: false, capture: true } : { capture: true };\n else\n listenerOptions = isPassiveEventSupported ? { passive: true } : { capture: false };\n const onTouchEnd = (e) => {\n if (isSwiping.value)\n onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n isSwiping.value = false;\n };\n const stops = [\n useEventListener(target, \"touchstart\", (e) => {\n if (e.touches.length !== 1)\n return;\n if (listenerOptions.capture && !listenerOptions.passive)\n e.preventDefault();\n const [x, y] = getTouchEventCoords(e);\n updateCoordsStart(x, y);\n updateCoordsEnd(x, y);\n onSwipeStart == null ? void 0 : onSwipeStart(e);\n }, listenerOptions),\n useEventListener(target, \"touchmove\", (e) => {\n if (e.touches.length !== 1)\n return;\n const [x, y] = getTouchEventCoords(e);\n updateCoordsEnd(x, y);\n if (!isSwiping.value && isThresholdExceeded.value)\n isSwiping.value = true;\n if (isSwiping.value)\n onSwipe == null ? void 0 : onSwipe(e);\n }, listenerOptions),\n useEventListener(target, [\"touchend\", \"touchcancel\"], onTouchEnd, listenerOptions)\n ];\n const stop = () => stops.forEach((s) => s());\n return {\n isPassiveEventSupported,\n isSwiping,\n direction,\n coordsStart,\n coordsEnd,\n lengthX: diffX,\n lengthY: diffY,\n stop\n };\n}\nfunction checkPassiveEventSupport(document) {\n if (!document)\n return false;\n let supportsPassive = false;\n const optionsBlock = {\n get passive() {\n supportsPassive = true;\n return false;\n }\n };\n document.addEventListener(\"x\", noop, optionsBlock);\n document.removeEventListener(\"x\", noop);\n return supportsPassive;\n}\n\nfunction useTemplateRefsList() {\n const refs = ref([]);\n refs.value.set = (el) => {\n if (el)\n refs.value.push(el);\n };\n onBeforeUpdate(() => {\n refs.value.length = 0;\n });\n return refs;\n}\n\nfunction useTextDirection(options = {}) {\n const {\n document = defaultDocument,\n selector = \"html\",\n observe = false,\n initialValue = \"ltr\"\n } = options;\n function getValue() {\n var _a, _b;\n return (_b = (_a = document == null ? void 0 : document.querySelector(selector)) == null ? void 0 : _a.getAttribute(\"dir\")) != null ? _b : initialValue;\n }\n const dir = ref(getValue());\n tryOnMounted(() => dir.value = getValue());\n if (observe && document) {\n useMutationObserver(\n document.querySelector(selector),\n () => dir.value = getValue(),\n { attributes: true }\n );\n }\n return computed({\n get() {\n return dir.value;\n },\n set(v) {\n var _a, _b;\n dir.value = v;\n if (!document)\n return;\n if (dir.value)\n (_a = document.querySelector(selector)) == null ? void 0 : _a.setAttribute(\"dir\", dir.value);\n else\n (_b = document.querySelector(selector)) == null ? void 0 : _b.removeAttribute(\"dir\");\n }\n });\n}\n\nfunction getRangesFromSelection(selection) {\n var _a;\n const rangeCount = (_a = selection.rangeCount) != null ? _a : 0;\n return Array.from({ length: rangeCount }, (_, i) => selection.getRangeAt(i));\n}\nfunction useTextSelection(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const selection = ref(null);\n const text = computed(() => {\n var _a, _b;\n return (_b = (_a = selection.value) == null ? void 0 : _a.toString()) != null ? _b : \"\";\n });\n const ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []);\n const rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect()));\n function onSelectionChange() {\n selection.value = null;\n if (window)\n selection.value = window.getSelection();\n }\n if (window)\n useEventListener(window.document, \"selectionchange\", onSelectionChange);\n return {\n text,\n rects,\n ranges,\n selection\n };\n}\n\nfunction useTextareaAutosize(options) {\n const textarea = ref(options == null ? void 0 : options.element);\n const input = ref(options == null ? void 0 : options.input);\n const textareaScrollHeight = ref(1);\n function triggerResize() {\n var _a, _b;\n if (!textarea.value)\n return;\n let height = \"\";\n textarea.value.style.height = \"1px\";\n textareaScrollHeight.value = (_a = textarea.value) == null ? void 0 : _a.scrollHeight;\n if (options == null ? void 0 : options.styleTarget)\n toValue(options.styleTarget).style.height = `${textareaScrollHeight.value}px`;\n else\n height = `${textareaScrollHeight.value}px`;\n textarea.value.style.height = height;\n (_b = options == null ? void 0 : options.onResize) == null ? void 0 : _b.call(options);\n }\n watch([input, textarea], () => nextTick(triggerResize), { immediate: true });\n useResizeObserver(textarea, () => triggerResize());\n if (options == null ? void 0 : options.watch)\n watch(options.watch, triggerResize, { immediate: true, deep: true });\n return {\n textarea,\n input,\n triggerResize\n };\n}\n\nvar __defProp$3 = Object.defineProperty;\nvar __defProps$1 = Object.defineProperties;\nvar __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$3 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$3 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$3 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$3.call(b, prop))\n __defNormalProp$3(a, prop, b[prop]);\n if (__getOwnPropSymbols$3)\n for (var prop of __getOwnPropSymbols$3(b)) {\n if (__propIsEnum$3.call(b, prop))\n __defNormalProp$3(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));\nfunction useThrottledRefHistory(source, options = {}) {\n const { throttle = 200, trailing = true } = options;\n const filter = throttleFilter(throttle, trailing);\n const history = useRefHistory(source, __spreadProps$1(__spreadValues$3({}, options), { eventFilter: filter }));\n return __spreadValues$3({}, history);\n}\n\nvar __defProp$2 = Object.defineProperty;\nvar __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$2 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$2 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$2 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$2.call(b, prop))\n __defNormalProp$2(a, prop, b[prop]);\n if (__getOwnPropSymbols$2)\n for (var prop of __getOwnPropSymbols$2(b)) {\n if (__propIsEnum$2.call(b, prop))\n __defNormalProp$2(a, prop, b[prop]);\n }\n return a;\n};\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$2.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$2)\n for (var prop of __getOwnPropSymbols$2(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$2.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nconst DEFAULT_UNITS = [\n { max: 6e4, value: 1e3, name: \"second\" },\n { max: 276e4, value: 6e4, name: \"minute\" },\n { max: 72e6, value: 36e5, name: \"hour\" },\n { max: 5184e5, value: 864e5, name: \"day\" },\n { max: 24192e5, value: 6048e5, name: \"week\" },\n { max: 28512e6, value: 2592e6, name: \"month\" },\n { max: Number.POSITIVE_INFINITY, value: 31536e6, name: \"year\" }\n];\nconst DEFAULT_MESSAGES = {\n justNow: \"just now\",\n past: (n) => n.match(/\\d/) ? `${n} ago` : n,\n future: (n) => n.match(/\\d/) ? `in ${n}` : n,\n month: (n, past) => n === 1 ? past ? \"last month\" : \"next month\" : `${n} month${n > 1 ? \"s\" : \"\"}`,\n year: (n, past) => n === 1 ? past ? \"last year\" : \"next year\" : `${n} year${n > 1 ? \"s\" : \"\"}`,\n day: (n, past) => n === 1 ? past ? \"yesterday\" : \"tomorrow\" : `${n} day${n > 1 ? \"s\" : \"\"}`,\n week: (n, past) => n === 1 ? past ? \"last week\" : \"next week\" : `${n} week${n > 1 ? \"s\" : \"\"}`,\n hour: (n) => `${n} hour${n > 1 ? \"s\" : \"\"}`,\n minute: (n) => `${n} minute${n > 1 ? \"s\" : \"\"}`,\n second: (n) => `${n} second${n > 1 ? \"s\" : \"\"}`,\n invalid: \"\"\n};\nfunction DEFAULT_FORMATTER(date) {\n return date.toISOString().slice(0, 10);\n}\nfunction useTimeAgo(time, options = {}) {\n const {\n controls: exposeControls = false,\n updateInterval = 3e4\n } = options;\n const _a = useNow({ interval: updateInterval, controls: true }), { now } = _a, controls = __objRest(_a, [\"now\"]);\n const timeAgo = computed(() => formatTimeAgo(new Date(toValue(time)), options, toValue(now)));\n if (exposeControls) {\n return __spreadValues$2({\n timeAgo\n }, controls);\n } else {\n return timeAgo;\n }\n}\nfunction formatTimeAgo(from, options = {}, now = Date.now()) {\n var _a;\n const {\n max,\n messages = DEFAULT_MESSAGES,\n fullDateFormatter = DEFAULT_FORMATTER,\n units = DEFAULT_UNITS,\n showSecond = false,\n rounding = \"round\"\n } = options;\n const roundFn = typeof rounding === \"number\" ? (n) => +n.toFixed(rounding) : Math[rounding];\n const diff = +now - +from;\n const absDiff = Math.abs(diff);\n function getValue(diff2, unit) {\n return roundFn(Math.abs(diff2) / unit.value);\n }\n function format(diff2, unit) {\n const val = getValue(diff2, unit);\n const past = diff2 > 0;\n const str = applyFormat(unit.name, val, past);\n return applyFormat(past ? \"past\" : \"future\", str, past);\n }\n function applyFormat(name, val, isPast) {\n const formatter = messages[name];\n if (typeof formatter === \"function\")\n return formatter(val, isPast);\n return formatter.replace(\"{0}\", val.toString());\n }\n if (absDiff < 6e4 && !showSecond)\n return messages.justNow;\n if (typeof max === \"number\" && absDiff > max)\n return fullDateFormatter(new Date(from));\n if (typeof max === \"string\") {\n const unitMax = (_a = units.find((i) => i.name === max)) == null ? void 0 : _a.max;\n if (unitMax && absDiff > unitMax)\n return fullDateFormatter(new Date(from));\n }\n for (const [idx, unit] of units.entries()) {\n const val = getValue(diff, unit);\n if (val <= 0 && units[idx - 1])\n return format(diff, units[idx - 1]);\n if (absDiff < unit.max)\n return format(diff, unit);\n }\n return messages.invalid;\n}\n\nfunction useTimeoutPoll(fn, interval, timeoutPollOptions) {\n const { start } = useTimeoutFn(loop, interval, { immediate: false });\n const isActive = ref(false);\n async function loop() {\n if (!isActive.value)\n return;\n await fn();\n start();\n }\n function resume() {\n if (!isActive.value) {\n isActive.value = true;\n loop();\n }\n }\n function pause() {\n isActive.value = false;\n }\n if (timeoutPollOptions == null ? void 0 : timeoutPollOptions.immediate)\n resume();\n tryOnScopeDispose(pause);\n return {\n isActive,\n pause,\n resume\n };\n}\n\nvar __defProp$1 = Object.defineProperty;\nvar __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$1 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$1 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$1 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$1.call(b, prop))\n __defNormalProp$1(a, prop, b[prop]);\n if (__getOwnPropSymbols$1)\n for (var prop of __getOwnPropSymbols$1(b)) {\n if (__propIsEnum$1.call(b, prop))\n __defNormalProp$1(a, prop, b[prop]);\n }\n return a;\n};\nfunction useTimestamp(options = {}) {\n const {\n controls: exposeControls = false,\n offset = 0,\n immediate = true,\n interval = \"requestAnimationFrame\",\n callback\n } = options;\n const ts = ref(timestamp() + offset);\n const update = () => ts.value = timestamp() + offset;\n const cb = callback ? () => {\n update();\n callback(ts.value);\n } : update;\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n if (exposeControls) {\n return __spreadValues$1({\n timestamp: ts\n }, controls);\n } else {\n return ts;\n }\n}\n\nfunction useTitle(newTitle = null, options = {}) {\n var _a, _b;\n const {\n document = defaultDocument\n } = options;\n const title = toRef((_a = newTitle != null ? newTitle : document == null ? void 0 : document.title) != null ? _a : null);\n const isReadonly = newTitle && typeof newTitle === \"function\";\n function format(t) {\n if (!(\"titleTemplate\" in options))\n return t;\n const template = options.titleTemplate || \"%s\";\n return typeof template === \"function\" ? template(t) : toValue(template).replace(/%s/g, t);\n }\n watch(\n title,\n (t, o) => {\n if (t !== o && document)\n document.title = format(typeof t === \"string\" ? t : \"\");\n },\n { immediate: true }\n );\n if (options.observe && !options.titleTemplate && document && !isReadonly) {\n useMutationObserver(\n (_b = document.head) == null ? void 0 : _b.querySelector(\"title\"),\n () => {\n if (document && document.title !== title.value)\n title.value = format(document.title);\n },\n { childList: true }\n );\n }\n return title;\n}\n\nvar __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nconst _TransitionPresets = {\n easeInSine: [0.12, 0, 0.39, 0],\n easeOutSine: [0.61, 1, 0.88, 1],\n easeInOutSine: [0.37, 0, 0.63, 1],\n easeInQuad: [0.11, 0, 0.5, 0],\n easeOutQuad: [0.5, 1, 0.89, 1],\n easeInOutQuad: [0.45, 0, 0.55, 1],\n easeInCubic: [0.32, 0, 0.67, 0],\n easeOutCubic: [0.33, 1, 0.68, 1],\n easeInOutCubic: [0.65, 0, 0.35, 1],\n easeInQuart: [0.5, 0, 0.75, 0],\n easeOutQuart: [0.25, 1, 0.5, 1],\n easeInOutQuart: [0.76, 0, 0.24, 1],\n easeInQuint: [0.64, 0, 0.78, 0],\n easeOutQuint: [0.22, 1, 0.36, 1],\n easeInOutQuint: [0.83, 0, 0.17, 1],\n easeInExpo: [0.7, 0, 0.84, 0],\n easeOutExpo: [0.16, 1, 0.3, 1],\n easeInOutExpo: [0.87, 0, 0.13, 1],\n easeInCirc: [0.55, 0, 1, 0.45],\n easeOutCirc: [0, 0.55, 0.45, 1],\n easeInOutCirc: [0.85, 0, 0.15, 1],\n easeInBack: [0.36, 0, 0.66, -0.56],\n easeOutBack: [0.34, 1.56, 0.64, 1],\n easeInOutBack: [0.68, -0.6, 0.32, 1.6]\n};\nconst TransitionPresets = /* @__PURE__ */ Object.assign({}, { linear: identity }, _TransitionPresets);\nfunction createEasingFunction([p0, p1, p2, p3]) {\n const a = (a1, a2) => 1 - 3 * a2 + 3 * a1;\n const b = (a1, a2) => 3 * a2 - 6 * a1;\n const c = (a1) => 3 * a1;\n const calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t;\n const getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1);\n const getTforX = (x) => {\n let aGuessT = x;\n for (let i = 0; i < 4; ++i) {\n const currentSlope = getSlope(aGuessT, p0, p2);\n if (currentSlope === 0)\n return aGuessT;\n const currentX = calcBezier(aGuessT, p0, p2) - x;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n };\n return (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3);\n}\nfunction lerp(a, b, alpha) {\n return a + alpha * (b - a);\n}\nfunction toVec(t) {\n return (typeof t === \"number\" ? [t] : t) || [];\n}\nfunction executeTransition(source, from, to, options = {}) {\n var _a, _b;\n const fromVal = toValue(from);\n const toVal = toValue(to);\n const v1 = toVec(fromVal);\n const v2 = toVec(toVal);\n const duration = (_a = toValue(options.duration)) != null ? _a : 1e3;\n const startedAt = Date.now();\n const endAt = Date.now() + duration;\n const trans = typeof options.transition === \"function\" ? options.transition : (_b = toValue(options.transition)) != null ? _b : identity;\n const ease = typeof trans === \"function\" ? trans : createEasingFunction(trans);\n return new Promise((resolve) => {\n source.value = fromVal;\n const tick = () => {\n var _a2;\n if ((_a2 = options.abort) == null ? void 0 : _a2.call(options)) {\n resolve();\n return;\n }\n const now = Date.now();\n const alpha = ease((now - startedAt) / duration);\n const arr = toVec(source.value).map((n, i) => lerp(v1[i], v2[i], alpha));\n if (Array.isArray(source.value))\n source.value = arr.map((n, i) => {\n var _a3, _b2;\n return lerp((_a3 = v1[i]) != null ? _a3 : 0, (_b2 = v2[i]) != null ? _b2 : 0, alpha);\n });\n else if (typeof source.value === \"number\")\n source.value = arr[0];\n if (now < endAt) {\n requestAnimationFrame(tick);\n } else {\n source.value = toVal;\n resolve();\n }\n };\n tick();\n });\n}\nfunction useTransition(source, options = {}) {\n let currentId = 0;\n const sourceVal = () => {\n const v = toValue(source);\n return typeof v === \"number\" ? v : v.map(toValue);\n };\n const outputRef = ref(sourceVal());\n watch(sourceVal, async (to) => {\n var _a, _b;\n if (toValue(options.disabled))\n return;\n const id = ++currentId;\n if (options.delay)\n await promiseTimeout(toValue(options.delay));\n if (id !== currentId)\n return;\n const toVal = Array.isArray(to) ? to.map(toValue) : toValue(to);\n (_a = options.onStarted) == null ? void 0 : _a.call(options);\n await executeTransition(outputRef, outputRef.value, toVal, __spreadProps(__spreadValues({}, options), {\n abort: () => {\n var _a2;\n return id !== currentId || ((_a2 = options.abort) == null ? void 0 : _a2.call(options));\n }\n }));\n (_b = options.onFinished) == null ? void 0 : _b.call(options);\n }, { deep: true });\n watch(() => toValue(options.disabled), (disabled) => {\n if (disabled) {\n currentId++;\n outputRef.value = sourceVal();\n }\n });\n tryOnScopeDispose(() => {\n currentId++;\n });\n return computed(() => toValue(options.disabled) ? sourceVal() : outputRef.value);\n}\n\nfunction useUrlSearchParams(mode = \"history\", options = {}) {\n const {\n initialValue = {},\n removeNullishValues = true,\n removeFalsyValues = false,\n write: enableWrite = true,\n window = defaultWindow\n } = options;\n if (!window)\n return reactive(initialValue);\n const state = reactive({});\n function getRawParams() {\n if (mode === \"history\") {\n return window.location.search || \"\";\n } else if (mode === \"hash\") {\n const hash = window.location.hash || \"\";\n const index = hash.indexOf(\"?\");\n return index > 0 ? hash.slice(index) : \"\";\n } else {\n return (window.location.hash || \"\").replace(/^#/, \"\");\n }\n }\n function constructQuery(params) {\n const stringified = params.toString();\n if (mode === \"history\")\n return `${stringified ? `?${stringified}` : \"\"}${window.location.hash || \"\"}`;\n if (mode === \"hash-params\")\n return `${window.location.search || \"\"}${stringified ? `#${stringified}` : \"\"}`;\n const hash = window.location.hash || \"#\";\n const index = hash.indexOf(\"?\");\n if (index > 0)\n return `${hash.slice(0, index)}${stringified ? `?${stringified}` : \"\"}`;\n return `${hash}${stringified ? `?${stringified}` : \"\"}`;\n }\n function read() {\n return new URLSearchParams(getRawParams());\n }\n function updateState(params) {\n const unusedKeys = new Set(Object.keys(state));\n for (const key of params.keys()) {\n const paramsForKey = params.getAll(key);\n state[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || \"\";\n unusedKeys.delete(key);\n }\n Array.from(unusedKeys).forEach((key) => delete state[key]);\n }\n const { pause, resume } = pausableWatch(\n state,\n () => {\n const params = new URLSearchParams(\"\");\n Object.keys(state).forEach((key) => {\n const mapEntry = state[key];\n if (Array.isArray(mapEntry))\n mapEntry.forEach((value) => params.append(key, value));\n else if (removeNullishValues && mapEntry == null)\n params.delete(key);\n else if (removeFalsyValues && !mapEntry)\n params.delete(key);\n else\n params.set(key, mapEntry);\n });\n write(params);\n },\n { deep: true }\n );\n function write(params, shouldUpdate) {\n pause();\n if (shouldUpdate)\n updateState(params);\n window.history.replaceState(\n window.history.state,\n window.document.title,\n window.location.pathname + constructQuery(params)\n );\n resume();\n }\n function onChanged() {\n if (!enableWrite)\n return;\n write(read(), true);\n }\n useEventListener(window, \"popstate\", onChanged, false);\n if (mode !== \"history\")\n useEventListener(window, \"hashchange\", onChanged, false);\n const initial = read();\n if (initial.keys().next().value)\n updateState(initial);\n else\n Object.assign(state, initialValue);\n return state;\n}\n\nfunction useUserMedia(options = {}) {\n var _a, _b;\n const enabled = ref((_a = options.enabled) != null ? _a : false);\n const autoSwitch = ref((_b = options.autoSwitch) != null ? _b : true);\n const constraints = ref(options.constraints);\n const { navigator = defaultNavigator } = options;\n const isSupported = useSupported(() => {\n var _a2;\n return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getUserMedia;\n });\n const stream = shallowRef();\n function getDeviceOptions(type) {\n switch (type) {\n case \"video\": {\n if (constraints.value)\n return constraints.value.video || false;\n break;\n }\n case \"audio\": {\n if (constraints.value)\n return constraints.value.audio || false;\n break;\n }\n }\n }\n async function _start() {\n if (!isSupported.value || stream.value)\n return;\n stream.value = await navigator.mediaDevices.getUserMedia({\n video: getDeviceOptions(\"video\"),\n audio: getDeviceOptions(\"audio\")\n });\n return stream.value;\n }\n function _stop() {\n var _a2;\n (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n stream.value = void 0;\n }\n function stop() {\n _stop();\n enabled.value = false;\n }\n async function start() {\n await _start();\n if (stream.value)\n enabled.value = true;\n return stream.value;\n }\n async function restart() {\n _stop();\n return await start();\n }\n watch(\n enabled,\n (v) => {\n if (v)\n _start();\n else\n _stop();\n },\n { immediate: true }\n );\n watch(\n constraints,\n () => {\n if (autoSwitch.value && stream.value)\n restart();\n },\n { immediate: true }\n );\n return {\n isSupported,\n stream,\n start,\n stop,\n restart,\n constraints,\n enabled,\n autoSwitch\n };\n}\n\nfunction useVModel(props, key, emit, options = {}) {\n var _a, _b, _c, _d, _e;\n const {\n clone = false,\n passive = false,\n eventName,\n deep = false,\n defaultValue,\n shouldEmit\n } = options;\n const vm = getCurrentInstance();\n const _emit = emit || (vm == null ? void 0 : vm.emit) || ((_a = vm == null ? void 0 : vm.$emit) == null ? void 0 : _a.bind(vm)) || ((_c = (_b = vm == null ? void 0 : vm.proxy) == null ? void 0 : _b.$emit) == null ? void 0 : _c.bind(vm == null ? void 0 : vm.proxy));\n let event = eventName;\n if (!key) {\n if (isVue2) {\n const modelOptions = (_e = (_d = vm == null ? void 0 : vm.proxy) == null ? void 0 : _d.$options) == null ? void 0 : _e.model;\n key = (modelOptions == null ? void 0 : modelOptions.value) || \"value\";\n if (!eventName)\n event = (modelOptions == null ? void 0 : modelOptions.event) || \"input\";\n } else {\n key = \"modelValue\";\n }\n }\n event = event || `update:${key.toString()}`;\n const cloneFn = (val) => !clone ? val : typeof clone === \"function\" ? clone(val) : cloneFnJSON(val);\n const getValue = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue;\n const triggerEmit = (value) => {\n if (shouldEmit) {\n if (shouldEmit(value))\n _emit(event, value);\n } else {\n _emit(event, value);\n }\n };\n if (passive) {\n const initialValue = getValue();\n const proxy = ref(initialValue);\n watch(\n () => props[key],\n (v) => proxy.value = cloneFn(v)\n );\n watch(\n proxy,\n (v) => {\n if (v !== props[key] || deep)\n triggerEmit(v);\n },\n { deep }\n );\n return proxy;\n } else {\n return computed({\n get() {\n return getValue();\n },\n set(value) {\n triggerEmit(value);\n }\n });\n }\n}\n\nfunction useVModels(props, emit, options = {}) {\n const ret = {};\n for (const key in props)\n ret[key] = useVModel(props, key, emit, options);\n return ret;\n}\n\nfunction useVibrate(options) {\n const {\n pattern = [],\n interval = 0,\n navigator = defaultNavigator\n } = options || {};\n const isSupported = useSupported(() => typeof navigator !== \"undefined\" && \"vibrate\" in navigator);\n const patternRef = toRef(pattern);\n let intervalControls;\n const vibrate = (pattern2 = patternRef.value) => {\n if (isSupported.value)\n navigator.vibrate(pattern2);\n };\n const stop = () => {\n if (isSupported.value)\n navigator.vibrate(0);\n intervalControls == null ? void 0 : intervalControls.pause();\n };\n if (interval > 0) {\n intervalControls = useIntervalFn(\n vibrate,\n interval,\n {\n immediate: false,\n immediateCallback: false\n }\n );\n }\n return {\n isSupported,\n pattern,\n intervalControls,\n vibrate,\n stop\n };\n}\n\nfunction useVirtualList(list, options) {\n const { containerStyle, wrapperProps, scrollTo, calculateRange, currentList, containerRef } = \"itemHeight\" in options ? useVerticalVirtualList(options, list) : useHorizontalVirtualList(options, list);\n return {\n list: currentList,\n scrollTo,\n containerProps: {\n ref: containerRef,\n onScroll: () => {\n calculateRange();\n },\n style: containerStyle\n },\n wrapperProps\n };\n}\nfunction useVirtualListResources(list) {\n const containerRef = ref(null);\n const size = useElementSize(containerRef);\n const currentList = ref([]);\n const source = shallowRef(list);\n const state = ref({ start: 0, end: 10 });\n return { state, source, currentList, size, containerRef };\n}\nfunction createGetViewCapacity(state, source, itemSize) {\n return (containerSize) => {\n if (typeof itemSize === \"number\")\n return Math.ceil(containerSize / itemSize);\n const { start = 0 } = state.value;\n let sum = 0;\n let capacity = 0;\n for (let i = start; i < source.value.length; i++) {\n const size = itemSize(i);\n sum += size;\n capacity = i;\n if (sum > containerSize)\n break;\n }\n return capacity - start;\n };\n}\nfunction createGetOffset(source, itemSize) {\n return (scrollDirection) => {\n if (typeof itemSize === \"number\")\n return Math.floor(scrollDirection / itemSize) + 1;\n let sum = 0;\n let offset = 0;\n for (let i = 0; i < source.value.length; i++) {\n const size = itemSize(i);\n sum += size;\n if (sum >= scrollDirection) {\n offset = i;\n break;\n }\n }\n return offset + 1;\n };\n}\nfunction createCalculateRange(type, overscan, getOffset, getViewCapacity, { containerRef, state, currentList, source }) {\n return () => {\n const element = containerRef.value;\n if (element) {\n const offset = getOffset(type === \"vertical\" ? element.scrollTop : element.scrollLeft);\n const viewCapacity = getViewCapacity(type === \"vertical\" ? element.clientHeight : element.clientWidth);\n const from = offset - overscan;\n const to = offset + viewCapacity + overscan;\n state.value = {\n start: from < 0 ? 0 : from,\n end: to > source.value.length ? source.value.length : to\n };\n currentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({\n data: ele,\n index: index + state.value.start\n }));\n }\n };\n}\nfunction createGetDistance(itemSize, source) {\n return (index) => {\n if (typeof itemSize === \"number\") {\n const size2 = index * itemSize;\n return size2;\n }\n const size = source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0);\n return size;\n };\n}\nfunction useWatchForSizes(size, list, calculateRange) {\n watch([size.width, size.height, list], () => {\n calculateRange();\n });\n}\nfunction createComputedTotalSize(itemSize, source) {\n return computed(() => {\n if (typeof itemSize === \"number\")\n return source.value.length * itemSize;\n return source.value.reduce((sum, _, index) => sum + itemSize(index), 0);\n });\n}\nconst scrollToDictionaryForElementScrollKey = {\n horizontal: \"scrollLeft\",\n vertical: \"scrollTop\"\n};\nfunction createScrollTo(type, calculateRange, getDistance, containerRef) {\n return (index) => {\n if (containerRef.value) {\n containerRef.value[scrollToDictionaryForElementScrollKey[type]] = getDistance(index);\n calculateRange();\n }\n };\n}\nfunction useHorizontalVirtualList(options, list) {\n const resources = useVirtualListResources(list);\n const { state, source, currentList, size, containerRef } = resources;\n const containerStyle = { overflowX: \"auto\" };\n const { itemWidth, overscan = 5 } = options;\n const getViewCapacity = createGetViewCapacity(state, source, itemWidth);\n const getOffset = createGetOffset(source, itemWidth);\n const calculateRange = createCalculateRange(\"horizontal\", overscan, getOffset, getViewCapacity, resources);\n const getDistanceLeft = createGetDistance(itemWidth, source);\n const offsetLeft = computed(() => getDistanceLeft(state.value.start));\n const totalWidth = createComputedTotalSize(itemWidth, source);\n useWatchForSizes(size, list, calculateRange);\n const scrollTo = createScrollTo(\"horizontal\", calculateRange, getDistanceLeft, containerRef);\n const wrapperProps = computed(() => {\n return {\n style: {\n height: \"100%\",\n width: `${totalWidth.value - offsetLeft.value}px`,\n marginLeft: `${offsetLeft.value}px`,\n display: \"flex\"\n }\n };\n });\n return {\n scrollTo,\n calculateRange,\n wrapperProps,\n containerStyle,\n currentList,\n containerRef\n };\n}\nfunction useVerticalVirtualList(options, list) {\n const resources = useVirtualListResources(list);\n const { state, source, currentList, size, containerRef } = resources;\n const containerStyle = { overflowY: \"auto\" };\n const { itemHeight, overscan = 5 } = options;\n const getViewCapacity = createGetViewCapacity(state, source, itemHeight);\n const getOffset = createGetOffset(source, itemHeight);\n const calculateRange = createCalculateRange(\"vertical\", overscan, getOffset, getViewCapacity, resources);\n const getDistanceTop = createGetDistance(itemHeight, source);\n const offsetTop = computed(() => getDistanceTop(state.value.start));\n const totalHeight = createComputedTotalSize(itemHeight, source);\n useWatchForSizes(size, list, calculateRange);\n const scrollTo = createScrollTo(\"vertical\", calculateRange, getDistanceTop, containerRef);\n const wrapperProps = computed(() => {\n return {\n style: {\n width: \"100%\",\n height: `${totalHeight.value - offsetTop.value}px`,\n marginTop: `${offsetTop.value}px`\n }\n };\n });\n return {\n calculateRange,\n scrollTo,\n containerStyle,\n wrapperProps,\n currentList,\n containerRef\n };\n}\n\nfunction useWakeLock(options = {}) {\n const {\n navigator = defaultNavigator,\n document = defaultDocument\n } = options;\n let wakeLock;\n const isSupported = useSupported(() => navigator && \"wakeLock\" in navigator);\n const isActive = ref(false);\n async function onVisibilityChange() {\n if (!isSupported.value || !wakeLock)\n return;\n if (document && document.visibilityState === \"visible\")\n wakeLock = await navigator.wakeLock.request(\"screen\");\n isActive.value = !wakeLock.released;\n }\n if (document)\n useEventListener(document, \"visibilitychange\", onVisibilityChange, { passive: true });\n async function request(type) {\n if (!isSupported.value)\n return;\n wakeLock = await navigator.wakeLock.request(type);\n isActive.value = !wakeLock.released;\n }\n async function release() {\n if (!isSupported.value || !wakeLock)\n return;\n await wakeLock.release();\n isActive.value = !wakeLock.released;\n wakeLock = null;\n }\n return {\n isSupported,\n isActive,\n request,\n release\n };\n}\n\nfunction useWebNotification(defaultOptions = {}) {\n const {\n window = defaultWindow\n } = defaultOptions;\n const isSupported = useSupported(() => !!window && \"Notification\" in window);\n const notification = ref(null);\n const requestPermission = async () => {\n if (!isSupported.value)\n return;\n if (\"permission\" in Notification && Notification.permission !== \"denied\")\n await Notification.requestPermission();\n };\n const { on: onClick, trigger: clickTrigger } = createEventHook();\n const { on: onShow, trigger: showTrigger } = createEventHook();\n const { on: onError, trigger: errorTrigger } = createEventHook();\n const { on: onClose, trigger: closeTrigger } = createEventHook();\n const show = async (overrides) => {\n if (!isSupported.value)\n return;\n await requestPermission();\n const options = Object.assign({}, defaultOptions, overrides);\n notification.value = new Notification(options.title || \"\", options);\n notification.value.onclick = clickTrigger;\n notification.value.onshow = showTrigger;\n notification.value.onerror = errorTrigger;\n notification.value.onclose = closeTrigger;\n return notification.value;\n };\n const close = () => {\n if (notification.value)\n notification.value.close();\n notification.value = null;\n };\n tryOnMounted(async () => {\n if (isSupported.value)\n await requestPermission();\n });\n tryOnScopeDispose(close);\n if (isSupported.value && window) {\n const document = window.document;\n useEventListener(document, \"visibilitychange\", (e) => {\n e.preventDefault();\n if (document.visibilityState === \"visible\") {\n close();\n }\n });\n }\n return {\n isSupported,\n notification,\n show,\n close,\n onClick,\n onShow,\n onError,\n onClose\n };\n}\n\nconst DEFAULT_PING_MESSAGE = \"ping\";\nfunction resolveNestedOptions(options) {\n if (options === true)\n return {};\n return options;\n}\nfunction useWebSocket(url, options = {}) {\n const {\n onConnected,\n onDisconnected,\n onError,\n onMessage,\n immediate = true,\n autoClose = true,\n protocols = []\n } = options;\n const data = ref(null);\n const status = ref(\"CLOSED\");\n const wsRef = ref();\n const urlRef = toRef(url);\n let heartbeatPause;\n let heartbeatResume;\n let explicitlyClosed = false;\n let retried = 0;\n let bufferedData = [];\n let pongTimeoutWait;\n const close = (code = 1e3, reason) => {\n if (!wsRef.value)\n return;\n explicitlyClosed = true;\n heartbeatPause == null ? void 0 : heartbeatPause();\n wsRef.value.close(code, reason);\n };\n const _sendBuffer = () => {\n if (bufferedData.length && wsRef.value && status.value === \"OPEN\") {\n for (const buffer of bufferedData)\n wsRef.value.send(buffer);\n bufferedData = [];\n }\n };\n const resetHeartbeat = () => {\n clearTimeout(pongTimeoutWait);\n pongTimeoutWait = void 0;\n };\n const send = (data2, useBuffer = true) => {\n if (!wsRef.value || status.value !== \"OPEN\") {\n if (useBuffer)\n bufferedData.push(data2);\n return false;\n }\n _sendBuffer();\n wsRef.value.send(data2);\n return true;\n };\n const _init = () => {\n if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n return;\n const ws = new WebSocket(urlRef.value, protocols);\n wsRef.value = ws;\n status.value = \"CONNECTING\";\n ws.onopen = () => {\n status.value = \"OPEN\";\n onConnected == null ? void 0 : onConnected(ws);\n heartbeatResume == null ? void 0 : heartbeatResume();\n _sendBuffer();\n };\n ws.onclose = (ev) => {\n status.value = \"CLOSED\";\n wsRef.value = void 0;\n onDisconnected == null ? void 0 : onDisconnected(ws, ev);\n if (!explicitlyClosed && options.autoReconnect) {\n const {\n retries = -1,\n delay = 1e3,\n onFailed\n } = resolveNestedOptions(options.autoReconnect);\n retried += 1;\n if (typeof retries === \"number\" && (retries < 0 || retried < retries))\n setTimeout(_init, delay);\n else if (typeof retries === \"function\" && retries())\n setTimeout(_init, delay);\n else\n onFailed == null ? void 0 : onFailed();\n }\n };\n ws.onerror = (e) => {\n onError == null ? void 0 : onError(ws, e);\n };\n ws.onmessage = (e) => {\n if (options.heartbeat) {\n resetHeartbeat();\n const {\n message = DEFAULT_PING_MESSAGE\n } = resolveNestedOptions(options.heartbeat);\n if (e.data === message)\n return;\n }\n data.value = e.data;\n onMessage == null ? void 0 : onMessage(ws, e);\n };\n };\n if (options.heartbeat) {\n const {\n message = DEFAULT_PING_MESSAGE,\n interval = 1e3,\n pongTimeout = 1e3\n } = resolveNestedOptions(options.heartbeat);\n const { pause, resume } = useIntervalFn(\n () => {\n send(message, false);\n if (pongTimeoutWait != null)\n return;\n pongTimeoutWait = setTimeout(() => {\n close();\n }, pongTimeout);\n },\n interval,\n { immediate: false }\n );\n heartbeatPause = pause;\n heartbeatResume = resume;\n }\n if (autoClose) {\n useEventListener(window, \"beforeunload\", () => close());\n tryOnScopeDispose(close);\n }\n const open = () => {\n close();\n explicitlyClosed = false;\n retried = 0;\n _init();\n };\n if (immediate)\n watch(urlRef, open, { immediate: true });\n return {\n data,\n status,\n close,\n send,\n open,\n ws: wsRef\n };\n}\n\nfunction useWebWorker(arg0, workerOptions, options) {\n const {\n window = defaultWindow\n } = options != null ? options : {};\n const data = ref(null);\n const worker = shallowRef();\n const post = (...args) => {\n if (!worker.value)\n return;\n worker.value.postMessage(...args);\n };\n const terminate = function terminate2() {\n if (!worker.value)\n return;\n worker.value.terminate();\n };\n if (window) {\n if (typeof arg0 === \"string\")\n worker.value = new Worker(arg0, workerOptions);\n else if (typeof arg0 === \"function\")\n worker.value = arg0();\n else\n worker.value = arg0;\n worker.value.onmessage = (e) => {\n data.value = e.data;\n };\n tryOnScopeDispose(() => {\n if (worker.value)\n worker.value.terminate();\n });\n }\n return {\n data,\n post,\n terminate,\n worker\n };\n}\n\nfunction jobRunner(userFunc) {\n return (e) => {\n const userFuncArgs = e.data[0];\n return Promise.resolve(userFunc.apply(void 0, userFuncArgs)).then((result) => {\n postMessage([\"SUCCESS\", result]);\n }).catch((error) => {\n postMessage([\"ERROR\", error]);\n });\n };\n}\n\nfunction depsParser(deps) {\n if (deps.length === 0)\n return \"\";\n const depsString = deps.map((dep) => `'${dep}'`).toString();\n return `importScripts(${depsString})`;\n}\n\nfunction createWorkerBlobUrl(fn, deps) {\n const blobCode = `${depsParser(deps)}; onmessage=(${jobRunner})(${fn})`;\n const blob = new Blob([blobCode], { type: \"text/javascript\" });\n const url = URL.createObjectURL(blob);\n return url;\n}\n\nfunction useWebWorkerFn(fn, options = {}) {\n const {\n dependencies = [],\n timeout,\n window = defaultWindow\n } = options;\n const worker = ref();\n const workerStatus = ref(\"PENDING\");\n const promise = ref({});\n const timeoutId = ref();\n const workerTerminate = (status = \"PENDING\") => {\n if (worker.value && worker.value._url && window) {\n worker.value.terminate();\n URL.revokeObjectURL(worker.value._url);\n promise.value = {};\n worker.value = void 0;\n window.clearTimeout(timeoutId.value);\n workerStatus.value = status;\n }\n };\n workerTerminate();\n tryOnScopeDispose(workerTerminate);\n const generateWorker = () => {\n const blobUrl = createWorkerBlobUrl(fn, dependencies);\n const newWorker = new Worker(blobUrl);\n newWorker._url = blobUrl;\n newWorker.onmessage = (e) => {\n const { resolve = () => {\n }, reject = () => {\n } } = promise.value;\n const [status, result] = e.data;\n switch (status) {\n case \"SUCCESS\":\n resolve(result);\n workerTerminate(status);\n break;\n default:\n reject(result);\n workerTerminate(\"ERROR\");\n break;\n }\n };\n newWorker.onerror = (e) => {\n const { reject = () => {\n } } = promise.value;\n reject(e);\n workerTerminate(\"ERROR\");\n };\n if (timeout) {\n timeoutId.value = setTimeout(\n () => workerTerminate(\"TIMEOUT_EXPIRED\"),\n timeout\n );\n }\n return newWorker;\n };\n const callWorker = (...fnArgs) => new Promise((resolve, reject) => {\n promise.value = {\n resolve,\n reject\n };\n worker.value && worker.value.postMessage([[...fnArgs]]);\n workerStatus.value = \"RUNNING\";\n });\n const workerFn = (...fnArgs) => {\n if (workerStatus.value === \"RUNNING\") {\n console.error(\n \"[useWebWorkerFn] You can only run one instance of the worker at a time.\"\n );\n return Promise.reject();\n }\n worker.value = generateWorker();\n return callWorker(...fnArgs);\n };\n return {\n workerFn,\n workerStatus,\n workerTerminate\n };\n}\n\nfunction useWindowFocus({ window = defaultWindow } = {}) {\n if (!window)\n return ref(false);\n const focused = ref(window.document.hasFocus());\n useEventListener(window, \"blur\", () => {\n focused.value = false;\n });\n useEventListener(window, \"focus\", () => {\n focused.value = true;\n });\n return focused;\n}\n\nfunction useWindowScroll({ window = defaultWindow } = {}) {\n if (!window) {\n return {\n x: ref(0),\n y: ref(0)\n };\n }\n const x = ref(window.scrollX);\n const y = ref(window.scrollY);\n useEventListener(\n window,\n \"scroll\",\n () => {\n x.value = window.scrollX;\n y.value = window.scrollY;\n },\n {\n capture: false,\n passive: true\n }\n );\n return { x, y };\n}\n\nfunction useWindowSize(options = {}) {\n const {\n window = defaultWindow,\n initialWidth = Number.POSITIVE_INFINITY,\n initialHeight = Number.POSITIVE_INFINITY,\n listenOrientation = true,\n includeScrollbar = true\n } = options;\n const width = ref(initialWidth);\n const height = ref(initialHeight);\n const update = () => {\n if (window) {\n if (includeScrollbar) {\n width.value = window.innerWidth;\n height.value = window.innerHeight;\n } else {\n width.value = window.document.documentElement.clientWidth;\n height.value = window.document.documentElement.clientHeight;\n }\n }\n };\n update();\n tryOnMounted(update);\n useEventListener(\"resize\", update, { passive: true });\n if (listenOrientation) {\n const matches = useMediaQuery(\"(orientation: portrait)\");\n watch(matches, () => update());\n }\n return { width, height };\n}\n\nexport { DefaultMagicKeysAliasMap, StorageSerializers, TransitionPresets, computedAsync as asyncComputed, breakpointsAntDesign, breakpointsBootstrapV5, breakpointsMasterCss, breakpointsQuasar, breakpointsSematic, breakpointsTailwind, breakpointsVuetify, cloneFnJSON, computedAsync, computedInject, createFetch, createReusableTemplate, createTemplatePromise, createUnrefFn, customStorageEventName, defaultDocument, defaultLocation, defaultNavigator, defaultWindow, executeTransition, formatTimeAgo, getSSRHandler, mapGamepadToXbox360Controller, onClickOutside, onKeyDown, onKeyPressed, onKeyStroke, onKeyUp, onLongPress, onStartTyping, setSSRHandler, templateRef, unrefElement, useActiveElement, useAnimate, useAsyncQueue, useAsyncState, useBase64, useBattery, useBluetooth, useBreakpoints, useBroadcastChannel, useBrowserLocation, useCached, useClipboard, useCloned, useColorMode, useConfirmDialog, useCssVar, useCurrentElement, useCycleList, useDark, useDebouncedRefHistory, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDisplayMedia, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementByPoint, useElementHover, useElementSize, useElementVisibility, useEventBus, useEventListener, useEventSource, useEyeDropper, useFavicon, useFetch, useFileDialog, useFileSystemAccess, useFocus, useFocusWithin, useFps, useFullscreen, useGamepad, useGeolocation, useIdle, useImage, useInfiniteScroll, useIntersectionObserver, useKeyModifier, useLocalStorage, useMagicKeys, useManualRefHistory, useMediaControls, useMediaQuery, useMemoize, useMemory, useMounted, useMouse, useMouseInElement, useMousePressed, useMutationObserver, useNavigatorLanguage, useNetwork, useNow, useObjectUrl, useOffsetPagination, useOnline, usePageLeave, useParallax, useParentElement, usePerformanceObserver, usePermission, usePointer, usePointerLock, usePointerSwipe, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePreferredLanguages, usePreferredReducedMotion, usePrevious, useRafFn, useRefHistory, useResizeObserver, useScreenOrientation, useScreenSafeArea, useScriptTag, useScroll, useScrollLock, useSessionStorage, useShare, useSorted, useSpeechRecognition, useSpeechSynthesis, useStepper, useStorage, useStorageAsync, useStyleTag, useSupported, useSwipe, useTemplateRefsList, useTextDirection, useTextSelection, useTextareaAutosize, useThrottledRefHistory, useTimeAgo, useTimeoutPoll, useTimestamp, useTitle, useTransition, useUrlSearchParams, useUserMedia, useVModel, useVModels, useVibrate, useVirtualList, useWakeLock, useWebNotification, useWebSocket, useWebWorker, useWebWorkerFn, useWindowFocus, useWindowScroll, useWindowSize };\n", "export const EXTERNAL_URL_RE = /^[a-z]+:/i;\nexport const PATHNAME_PROTOCOL_RE = /^pathname:\\/\\//;\nexport const APPEARANCE_KEY = 'vitepress-theme-appearance';\nexport const HASH_RE = /#.*$/;\nexport const EXT_RE = /(index)?\\.(md|html)$/;\nexport const inBrowser = typeof document !== 'undefined';\nexport const notFoundPageData = {\n relativePath: '',\n filePath: '',\n title: '404',\n description: 'Not Found',\n headers: [],\n frontmatter: { sidebar: false, layout: 'page' },\n lastUpdated: 0,\n isNotFound: true\n};\nexport function isActive(currentPath, matchPath, asRegex = false) {\n if (matchPath === undefined) {\n return false;\n }\n currentPath = normalize(`/${currentPath}`);\n if (asRegex) {\n return new RegExp(matchPath).test(currentPath);\n }\n if (normalize(matchPath) !== currentPath) {\n return false;\n }\n const hashMatch = matchPath.match(HASH_RE);\n if (hashMatch) {\n return (inBrowser ? location.hash : '') === hashMatch[0];\n }\n return true;\n}\nexport function normalize(path) {\n return decodeURI(path).replace(HASH_RE, '').replace(EXT_RE, '');\n}\nexport function isExternal(path) {\n return EXTERNAL_URL_RE.test(path);\n}\n/**\n * this merges the locales data to the main data by the route\n */\nexport function resolveSiteDataByRoute(siteData, relativePath) {\n const localeIndex = Object.keys(siteData.locales).find((key) => key !== 'root' &&\n !isExternal(key) &&\n isActive(relativePath, `/${key}/`, true)) || 'root';\n return Object.assign({}, siteData, {\n localeIndex,\n lang: siteData.locales[localeIndex]?.lang ?? siteData.lang,\n dir: siteData.locales[localeIndex]?.dir ?? siteData.dir,\n title: siteData.locales[localeIndex]?.title ?? siteData.title,\n titleTemplate: siteData.locales[localeIndex]?.titleTemplate ?? siteData.titleTemplate,\n description: siteData.locales[localeIndex]?.description ?? siteData.description,\n head: mergeHead(siteData.head, siteData.locales[localeIndex]?.head ?? []),\n themeConfig: {\n ...siteData.themeConfig,\n ...siteData.locales[localeIndex]?.themeConfig\n }\n });\n}\n/**\n * Create the page title string based on config.\n */\nexport function createTitle(siteData, pageData) {\n const title = pageData.title || siteData.title;\n const template = pageData.titleTemplate ?? siteData.titleTemplate;\n if (typeof template === 'string' && template.includes(':title')) {\n return template.replace(/:title/g, title);\n }\n const templateString = createTitleTemplate(siteData.title, template);\n return `${title}${templateString}`;\n}\nfunction createTitleTemplate(siteTitle, template) {\n if (template === false) {\n return '';\n }\n if (template === true || template === undefined) {\n return ` | ${siteTitle}`;\n }\n if (siteTitle === template) {\n return '';\n }\n return ` | ${template}`;\n}\nfunction hasTag(head, tag) {\n const [tagType, tagAttrs] = tag;\n if (tagType !== 'meta')\n return false;\n const keyAttr = Object.entries(tagAttrs)[0]; // First key\n if (keyAttr == null)\n return false;\n return head.some(([type, attrs]) => type === tagType && attrs[keyAttr[0]] === keyAttr[1]);\n}\nexport function mergeHead(prev, curr) {\n return [...prev.filter((tagAttrs) => !hasTag(curr, tagAttrs)), ...curr];\n}\n// https://github.com/rollup/rollup/blob/fec513270c6ac350072425cc045db367656c623b/src/utils/sanitizeFileName.ts\nconst INVALID_CHAR_REGEX = /[\\u0000-\\u001F\"#$&*+,:;<=>?[\\]^`{|}\\u007F]/g;\nconst DRIVE_LETTER_REGEX = /^[a-z]:/i;\nexport function sanitizeFileName(name) {\n const match = DRIVE_LETTER_REGEX.exec(name);\n const driveLetter = match ? match[0] : '';\n return (driveLetter +\n name\n .slice(driveLetter.length)\n .replace(INVALID_CHAR_REGEX, '_')\n .replace(/(^|\\/)_+(?=[^/]*$)/, '$1'));\n}\nexport function slash(p) {\n return p.replace(/\\\\/g, '/');\n}\n", "import { withBase } from 'vitepress';\nimport { useData } from '../composables/data';\nimport { isExternal, PATHNAME_PROTOCOL_RE } from '../../shared';\nexport function throttleAndDebounce(fn, delay) {\n let timeoutId;\n let called = false;\n return () => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n if (!called) {\n fn();\n called = true;\n setTimeout(() => {\n called = false;\n }, delay);\n }\n else {\n timeoutId = setTimeout(fn, delay);\n }\n };\n}\nexport function ensureStartingSlash(path) {\n return /^\\//.test(path) ? path : `/${path}`;\n}\nexport function normalizeLink(url) {\n if (isExternal(url)) {\n return url.replace(PATHNAME_PROTOCOL_RE, '');\n }\n const { site } = useData();\n const { pathname, search, hash } = new URL(url, 'http://a.com');\n const normalizedPath = pathname.endsWith('/') || pathname.endsWith('.html')\n ? url\n : url.replace(/(?:(^\\.+)\\/)?.*$/, `$1${pathname.replace(/(\\.md)?$/, site.value.cleanUrls ? '' : '.html')}${search}${hash}`);\n return withBase(normalizedPath);\n}\n", "import { useData as useData$ } from 'vitepress';\nexport const useData = useData$;\n", "import { ensureStartingSlash } from './utils';\nimport { isActive } from '../../shared';\n/**\n * Get the `Sidebar` from sidebar option. This method will ensure to get correct\n * sidebar config from `MultiSideBarConfig` with various path combinations such\n * as matching `guide/` and `/guide/`. If no matching config was found, it will\n * return empty array.\n */\nexport function getSidebar(_sidebar, path) {\n if (Array.isArray(_sidebar))\n return addBase(_sidebar);\n if (_sidebar == null)\n return [];\n path = ensureStartingSlash(path);\n const dir = Object.keys(_sidebar)\n .sort((a, b) => {\n return b.split('/').length - a.split('/').length;\n })\n .find((dir) => {\n // make sure the multi sidebar key starts with slash too\n return path.startsWith(ensureStartingSlash(dir));\n });\n const sidebar = dir ? _sidebar[dir] : [];\n return Array.isArray(sidebar)\n ? addBase(sidebar)\n : addBase(sidebar.items, sidebar.base);\n}\n/**\n * Get or generate sidebar group from the given sidebar items.\n */\nexport function getSidebarGroups(sidebar) {\n const groups = [];\n let lastGroupIndex = 0;\n for (const index in sidebar) {\n const item = sidebar[index];\n if (item.items) {\n lastGroupIndex = groups.push(item);\n continue;\n }\n if (!groups[lastGroupIndex]) {\n groups.push({ items: [] });\n }\n groups[lastGroupIndex].items.push(item);\n }\n return groups;\n}\nexport function getFlatSideBarLinks(sidebar) {\n const links = [];\n function recursivelyExtractLinks(items) {\n for (const item of items) {\n if (item.text && item.link) {\n links.push({\n text: item.text,\n link: item.link,\n docFooterText: item.docFooterText\n });\n }\n if (item.items) {\n recursivelyExtractLinks(item.items);\n }\n }\n }\n recursivelyExtractLinks(sidebar);\n return links;\n}\n/**\n * Check if the given sidebar item contains any active link.\n */\nexport function hasActiveLink(path, items) {\n if (Array.isArray(items)) {\n return items.some((item) => hasActiveLink(path, item));\n }\n return isActive(path, items.link)\n ? true\n : items.items\n ? hasActiveLink(path, items.items)\n : false;\n}\nfunction addBase(items, _base) {\n return [...items].map((_item) => {\n const item = { ..._item };\n const base = item.base || _base;\n if (base && item.link)\n item.link = base + item.link;\n if (item.items)\n item.items = addBase(item.items, base);\n return item;\n });\n}\n", "import { useMediaQuery } from '@vueuse/core';\nimport { computed, onMounted, onUnmounted, ref, watch, watchEffect, watchPostEffect } from 'vue';\nimport { inBrowser, isActive } from '../../shared';\nimport { hasActiveLink as containsActiveLink, getSidebar, getSidebarGroups } from '../support/sidebar';\nimport { useData } from './data';\nexport function useSidebar() {\n const { frontmatter, page, theme } = useData();\n const is960 = useMediaQuery('(min-width: 960px)');\n const isOpen = ref(false);\n const sidebar = computed(() => {\n const sidebarConfig = theme.value.sidebar;\n const relativePath = page.value.relativePath;\n return sidebarConfig ? getSidebar(sidebarConfig, relativePath) : [];\n });\n const hasSidebar = computed(() => {\n return (frontmatter.value.sidebar !== false &&\n sidebar.value.length > 0 &&\n frontmatter.value.layout !== 'home');\n });\n const leftAside = computed(() => {\n if (hasAside)\n return frontmatter.value.aside == null\n ? theme.value.aside === 'left'\n : frontmatter.value.aside === 'left';\n return false;\n });\n const hasAside = computed(() => {\n if (frontmatter.value.layout === 'home')\n return false;\n if (frontmatter.value.aside != null)\n return !!frontmatter.value.aside;\n return theme.value.aside !== false;\n });\n const isSidebarEnabled = computed(() => hasSidebar.value && is960.value);\n const sidebarGroups = computed(() => {\n return hasSidebar.value ? getSidebarGroups(sidebar.value) : [];\n });\n function open() {\n isOpen.value = true;\n }\n function close() {\n isOpen.value = false;\n }\n function toggle() {\n isOpen.value ? close() : open();\n }\n return {\n isOpen,\n sidebar,\n sidebarGroups,\n hasSidebar,\n hasAside,\n leftAside,\n isSidebarEnabled,\n open,\n close,\n toggle\n };\n}\n/**\n * a11y: cache the element that opened the Sidebar (the menu button) then\n * focus that button again when Menu is closed with Escape key.\n */\nexport function useCloseSidebarOnEscape(isOpen, close) {\n let triggerElement;\n watchEffect(() => {\n triggerElement = isOpen.value\n ? document.activeElement\n : undefined;\n });\n onMounted(() => {\n window.addEventListener('keyup', onEscape);\n });\n onUnmounted(() => {\n window.removeEventListener('keyup', onEscape);\n });\n function onEscape(e) {\n if (e.key === 'Escape' && isOpen.value) {\n close();\n triggerElement?.focus();\n }\n }\n}\nconst hashRef = ref(inBrowser ? location.hash : '');\nif (inBrowser) {\n window.addEventListener('hashchange', () => {\n hashRef.value = location.hash;\n });\n}\nexport function useSidebarControl(item) {\n const { page } = useData();\n const collapsed = ref(false);\n const collapsible = computed(() => {\n return item.value.collapsed != null;\n });\n const isLink = computed(() => {\n return !!item.value.link;\n });\n const isActiveLink = ref(false);\n const updateIsActiveLink = () => {\n isActiveLink.value = isActive(page.value.relativePath, item.value.link);\n };\n watch([page, item, hashRef], updateIsActiveLink);\n onMounted(updateIsActiveLink);\n const hasActiveLink = computed(() => {\n if (isActiveLink.value) {\n return true;\n }\n return item.value.items\n ? containsActiveLink(page.value.relativePath, item.value.items)\n : false;\n });\n const hasChildren = computed(() => {\n return !!(item.value.items && item.value.items.length);\n });\n watchEffect(() => {\n collapsed.value = !!(collapsible.value && item.value.collapsed);\n });\n watchPostEffect(() => {\n ;\n (isActiveLink.value || hasActiveLink.value) && (collapsed.value = false);\n });\n function toggle() {\n if (collapsible.value) {\n collapsed.value = !collapsed.value;\n }\n }\n return {\n collapsed,\n collapsible,\n isLink,\n isActiveLink,\n hasActiveLink,\n hasChildren,\n toggle\n };\n}\n"], - "mappings": "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", - "names": ["default", "window", "dir", "theme"] -} diff --git a/docs/.vitepress/cache/deps/_metadata.json b/docs/.vitepress/cache/deps/_metadata.json index 5f09c4b..cc3c5bc 100644 --- a/docs/.vitepress/cache/deps/_metadata.json +++ b/docs/.vitepress/cache/deps/_metadata.json @@ -1,29 +1,332 @@ { - "hash": "749f24dd", - "browserHash": "4c733c79", + "hash": "bbf895ba", + "browserHash": "e18e21e8", "optimized": { "vue": { "src": "../../../../node_modules/vue/dist/vue.runtime.esm-bundler.js", "file": "vue.js", - "fileHash": "9d2878f3", + "fileHash": "5b5f91d7", "needsInterop": false }, "vitepress > @vue/devtools-api": { "src": "../../../../node_modules/@vue/devtools-api/lib/esm/index.js", "file": "vitepress___@vue_devtools-api.js", - "fileHash": "83a41976", + "fileHash": "2937291a", "needsInterop": false }, - "@theme/index": { - "src": "../../../../node_modules/vitepress/dist/client/theme-default/index.js", - "file": "@theme_index.js", - "fileHash": "3023f33e", + "adaptivecards": { + "src": "../../../../node_modules/adaptivecards/lib/adaptivecards.js", + "file": "adaptivecards.js", + "fileHash": "3b8a82eb", + "needsInterop": true + }, + "element-plus": { + "src": "../../../../node_modules/element-plus/es/index.mjs", + "file": "element-plus.js", + "fileHash": "1764f8d9", + "needsInterop": false + }, + "vitepress > @vueuse/integrations/useFocusTrap": { + "src": "../../../../node_modules/@vueuse/integrations/useFocusTrap.mjs", + "file": "vitepress___@vueuse_integrations_useFocusTrap.js", + "fileHash": "38ac76f9", + "needsInterop": false + }, + "vitepress > mark.js/src/vanilla.js": { + "src": "../../../../node_modules/mark.js/src/vanilla.js", + "file": "vitepress___mark__js_src_vanilla__js.js", + "fileHash": "6b6e2012", + "needsInterop": false + }, + "vitepress > minisearch": { + "src": "../../../../node_modules/minisearch/dist/es/index.js", + "file": "vitepress___minisearch.js", + "fileHash": "e9985c6c", + "needsInterop": false + }, + "@element-plus/icons-vue": { + "src": "../../../../node_modules/@element-plus/icons-vue/dist/index.js", + "file": "@element-plus_icons-vue.js", + "fileHash": "f612aa88", + "needsInterop": false + }, + "monaco-editor": { + "src": "../../../../node_modules/monaco-editor/esm/vs/editor/editor.main.js", + "file": "monaco-editor.js", + "fileHash": "20679472", "needsInterop": false } }, "chunks": { - "chunk-V634PGSD": { - "file": "chunk-V634PGSD.js" + "yaml-UB3NIHKF": { + "file": "yaml-UB3NIHKF.js" + }, + "cssMode-QE3QLDR2": { + "file": "cssMode-QE3QLDR2.js" + }, + "htmlMode-ETVBJ4RH": { + "file": "htmlMode-ETVBJ4RH.js" + }, + "jsonMode-KZAAAXO6": { + "file": "jsonMode-KZAAAXO6.js" + }, + "tsMode-JVBSARJT": { + "file": "tsMode-JVBSARJT.js" + }, + "st-7YHCWAPT": { + "file": "st-7YHCWAPT.js" + }, + "swift-Q5TSV75D": { + "file": "swift-Q5TSV75D.js" + }, + "systemverilog-ARXOEQTU": { + "file": "systemverilog-ARXOEQTU.js" + }, + "tcl-5OENCSEV": { + "file": "tcl-5OENCSEV.js" + }, + "twig-RTWS7BE4": { + "file": "twig-RTWS7BE4.js" + }, + "vb-GRMCI74J": { + "file": "vb-GRMCI74J.js" + }, + "wgsl-FRYNLOZV": { + "file": "wgsl-FRYNLOZV.js" + }, + "xml-ME54AW4P": { + "file": "xml-ME54AW4P.js" + }, + "scala-5QY3IS6I": { + "file": "scala-5QY3IS6I.js" + }, + "scheme-XUJXSTX4": { + "file": "scheme-XUJXSTX4.js" + }, + "scss-EANUFQZF": { + "file": "scss-EANUFQZF.js" + }, + "shell-FL46RSB5": { + "file": "shell-FL46RSB5.js" + }, + "solidity-CQ36NCYM": { + "file": "solidity-CQ36NCYM.js" + }, + "sophia-TOOTAE2G": { + "file": "sophia-TOOTAE2G.js" + }, + "sparql-MPDK2I5P": { + "file": "sparql-MPDK2I5P.js" + }, + "sql-YUWLPR5B": { + "file": "sql-YUWLPR5B.js" + }, + "r-TRLFTC42": { + "file": "r-TRLFTC42.js" + }, + "razor-SBLZH47B": { + "file": "razor-SBLZH47B.js" + }, + "redis-D5KC66ZT": { + "file": "redis-D5KC66ZT.js" + }, + "redshift-HP5ANZGP": { + "file": "redshift-HP5ANZGP.js" + }, + "restructuredtext-6LCM2G6T": { + "file": "restructuredtext-6LCM2G6T.js" + }, + "ruby-ZVMU7DV3": { + "file": "ruby-ZVMU7DV3.js" + }, + "rust-3PMSM46W": { + "file": "rust-3PMSM46W.js" + }, + "sb-6E454WPU": { + "file": "sb-6E454WPU.js" + }, + "pla-OZRPVGRM": { + "file": "pla-OZRPVGRM.js" + }, + "postiats-ARIXBF3F": { + "file": "postiats-ARIXBF3F.js" + }, + "powerquery-MWU7OL3Y": { + "file": "powerquery-MWU7OL3Y.js" + }, + "powershell-ZKC5LBYX": { + "file": "powershell-ZKC5LBYX.js" + }, + "protobuf-3EAVHMEA": { + "file": "protobuf-3EAVHMEA.js" + }, + "pug-5CJGWCA2": { + "file": "pug-5CJGWCA2.js" + }, + "python-WW7TN4Y7": { + "file": "python-WW7TN4Y7.js" + }, + "qsharp-RHGSCZ6J": { + "file": "qsharp-RHGSCZ6J.js" + }, + "msdax-MRW6NJVX": { + "file": "msdax-MRW6NJVX.js" + }, + "mysql-YY275J3W": { + "file": "mysql-YY275J3W.js" + }, + "objective-c-NFBM26LU": { + "file": "objective-c-NFBM26LU.js" + }, + "pascal-XEJKJVA3": { + "file": "pascal-XEJKJVA3.js" + }, + "pascaligo-4QUCTVJS": { + "file": "pascaligo-4QUCTVJS.js" + }, + "perl-IJTE67DD": { + "file": "perl-IJTE67DD.js" + }, + "pgsql-QZCHR3FH": { + "file": "pgsql-QZCHR3FH.js" + }, + "php-ZUHD6MDF": { + "file": "php-ZUHD6MDF.js" + }, + "less-3EZF4JWH": { + "file": "less-3EZF4JWH.js" + }, + "lexon-H5MT3HFC": { + "file": "lexon-H5MT3HFC.js" + }, + "lua-SAN3U2DO": { + "file": "lua-SAN3U2DO.js" + }, + "liquid-D7SDHBE2": { + "file": "liquid-D7SDHBE2.js" + }, + "m3-JBMBWH73": { + "file": "m3-JBMBWH73.js" + }, + "markdown-NHOYTHIG": { + "file": "markdown-NHOYTHIG.js" + }, + "mdx-6E32NSOV": { + "file": "mdx-6E32NSOV.js" + }, + "mips-VMSX6T5Y": { + "file": "mips-VMSX6T5Y.js" + }, + "hcl-2LJKNXTF": { + "file": "hcl-2LJKNXTF.js" + }, + "html-F22UOEP3": { + "file": "html-F22UOEP3.js" + }, + "ini-2XGVAVDV": { + "file": "ini-2XGVAVDV.js" + }, + "java-54IVCUHF": { + "file": "java-54IVCUHF.js" + }, + "typescript-RRKVICLF": { + "file": "typescript-RRKVICLF.js" + }, + "javascript-PTWEJFGX": { + "file": "javascript-PTWEJFGX.js" + }, + "chunk-GHDY2MJ7": { + "file": "chunk-GHDY2MJ7.js" + }, + "julia-WOR3BG33": { + "file": "julia-WOR3BG33.js" + }, + "kotlin-RAEGD7HS": { + "file": "kotlin-RAEGD7HS.js" + }, + "ecl-CHABOUWY": { + "file": "ecl-CHABOUWY.js" + }, + "elixir-JWJYFSSW": { + "file": "elixir-JWJYFSSW.js" + }, + "flow9-XFKWO6PF": { + "file": "flow9-XFKWO6PF.js" + }, + "fsharp-4HR2JBPD": { + "file": "fsharp-4HR2JBPD.js" + }, + "freemarker2-6PB63OZP": { + "file": "freemarker2-6PB63OZP.js" + }, + "go-ZD4OIVGF": { + "file": "go-ZD4OIVGF.js" + }, + "graphql-FBLI5OCC": { + "file": "graphql-FBLI5OCC.js" + }, + "handlebars-XJYSPQ6X": { + "file": "handlebars-XJYSPQ6X.js" + }, + "coffee-722JKW3F": { + "file": "coffee-722JKW3F.js" + }, + "cpp-KZ5NZY3L": { + "file": "cpp-KZ5NZY3L.js" + }, + "csharp-IO2RVZAJ": { + "file": "csharp-IO2RVZAJ.js" + }, + "csp-PQNU3GFG": { + "file": "csp-PQNU3GFG.js" + }, + "css-76SKN4DI": { + "file": "css-76SKN4DI.js" + }, + "cypher-6NDKRB7I": { + "file": "cypher-6NDKRB7I.js" + }, + "dart-NNYF6LA6": { + "file": "dart-NNYF6LA6.js" + }, + "dockerfile-CB4FOHWT": { + "file": "dockerfile-CB4FOHWT.js" + }, + "abap-ZJXPBV7D": { + "file": "abap-ZJXPBV7D.js" + }, + "apex-QXTPZBD5": { + "file": "apex-QXTPZBD5.js" + }, + "azcli-AKNZCCZ4": { + "file": "azcli-AKNZCCZ4.js" + }, + "bat-KITOMZVG": { + "file": "bat-KITOMZVG.js" + }, + "bicep-ZLZPPZLV": { + "file": "bicep-ZLZPPZLV.js" + }, + "cameligo-47AYWHA2": { + "file": "cameligo-47AYWHA2.js" + }, + "clojure-2P4KKSXL": { + "file": "clojure-2P4KKSXL.js" + }, + "chunk-3OGJZLRW": { + "file": "chunk-3OGJZLRW.js" + }, + "chunk-G3JK5JM3": { + "file": "chunk-G3JK5JM3.js" + }, + "chunk-IJRRQNDQ": { + "file": "chunk-IJRRQNDQ.js" + }, + "chunk-3C4OEVM2": { + "file": "chunk-3C4OEVM2.js" + }, + "chunk-6PJEDKO5": { + "file": "chunk-6PJEDKO5.js" } } } \ No newline at end of file diff --git a/docs/.vitepress/cache/deps/abap-ZJXPBV7D.js b/docs/.vitepress/cache/deps/abap-ZJXPBV7D.js new file mode 100644 index 0000000..fd372e5 --- /dev/null +++ b/docs/.vitepress/cache/deps/abap-ZJXPBV7D.js @@ -0,0 +1,1323 @@ +import "./chunk-6PJEDKO5.js"; + +// node_modules/monaco-editor/esm/vs/basic-languages/abap/abap.js +var conf = { + comments: { + lineComment: "*" + }, + brackets: [ + ["[", "]"], + ["(", ")"] + ] +}; +var language = { + defaultToken: "invalid", + ignoreCase: true, + tokenPostfix: ".abap", + keywords: [ + "abap-source", + "abbreviated", + "abstract", + "accept", + "accepting", + "according", + "activation", + "actual", + "add", + "add-corresponding", + "adjacent", + "after", + "alias", + "aliases", + "align", + "all", + "allocate", + "alpha", + "analysis", + "analyzer", + "and", + "append", + "appendage", + "appending", + "application", + "archive", + "area", + "arithmetic", + "as", + "ascending", + "aspect", + "assert", + "assign", + "assigned", + "assigning", + "association", + "asynchronous", + "at", + "attributes", + "authority", + "authority-check", + "avg", + "back", + "background", + "backup", + "backward", + "badi", + "base", + "before", + "begin", + "between", + "big", + "binary", + "bintohex", + "bit", + "black", + "blank", + "blanks", + "blob", + "block", + "blocks", + "blue", + "bound", + "boundaries", + "bounds", + "boxed", + "break-point", + "buffer", + "by", + "bypassing", + "byte", + "byte-order", + "call", + "calling", + "case", + "cast", + "casting", + "catch", + "center", + "centered", + "chain", + "chain-input", + "chain-request", + "change", + "changing", + "channels", + "character", + "char-to-hex", + "check", + "checkbox", + "ci_", + "circular", + "class", + "class-coding", + "class-data", + "class-events", + "class-methods", + "class-pool", + "cleanup", + "clear", + "client", + "clob", + "clock", + "close", + "coalesce", + "code", + "coding", + "col_background", + "col_group", + "col_heading", + "col_key", + "col_negative", + "col_normal", + "col_positive", + "col_total", + "collect", + "color", + "column", + "columns", + "comment", + "comments", + "commit", + "common", + "communication", + "comparing", + "component", + "components", + "compression", + "compute", + "concat", + "concat_with_space", + "concatenate", + "cond", + "condense", + "condition", + "connect", + "connection", + "constants", + "context", + "contexts", + "continue", + "control", + "controls", + "conv", + "conversion", + "convert", + "copies", + "copy", + "corresponding", + "country", + "cover", + "cpi", + "create", + "creating", + "critical", + "currency", + "currency_conversion", + "current", + "cursor", + "cursor-selection", + "customer", + "customer-function", + "dangerous", + "data", + "database", + "datainfo", + "dataset", + "date", + "dats_add_days", + "dats_add_months", + "dats_days_between", + "dats_is_valid", + "daylight", + "dd/mm/yy", + "dd/mm/yyyy", + "ddmmyy", + "deallocate", + "decimal_shift", + "decimals", + "declarations", + "deep", + "default", + "deferred", + "define", + "defining", + "definition", + "delete", + "deleting", + "demand", + "department", + "descending", + "describe", + "destination", + "detail", + "dialog", + "directory", + "disconnect", + "display", + "display-mode", + "distinct", + "divide", + "divide-corresponding", + "division", + "do", + "dummy", + "duplicate", + "duplicates", + "duration", + "during", + "dynamic", + "dynpro", + "edit", + "editor-call", + "else", + "elseif", + "empty", + "enabled", + "enabling", + "encoding", + "end", + "endat", + "endcase", + "endcatch", + "endchain", + "endclass", + "enddo", + "endenhancement", + "end-enhancement-section", + "endexec", + "endform", + "endfunction", + "endian", + "endif", + "ending", + "endinterface", + "end-lines", + "endloop", + "endmethod", + "endmodule", + "end-of-definition", + "end-of-editing", + "end-of-file", + "end-of-page", + "end-of-selection", + "endon", + "endprovide", + "endselect", + "end-test-injection", + "end-test-seam", + "endtry", + "endwhile", + "endwith", + "engineering", + "enhancement", + "enhancement-point", + "enhancements", + "enhancement-section", + "entries", + "entry", + "enum", + "environment", + "equiv", + "errormessage", + "errors", + "escaping", + "event", + "events", + "exact", + "except", + "exception", + "exceptions", + "exception-table", + "exclude", + "excluding", + "exec", + "execute", + "exists", + "exit", + "exit-command", + "expand", + "expanding", + "expiration", + "explicit", + "exponent", + "export", + "exporting", + "extend", + "extended", + "extension", + "extract", + "fail", + "fetch", + "field", + "field-groups", + "fields", + "field-symbol", + "field-symbols", + "file", + "filter", + "filters", + "filter-table", + "final", + "find", + "first", + "first-line", + "fixed-point", + "fkeq", + "fkge", + "flush", + "font", + "for", + "form", + "format", + "forward", + "found", + "frame", + "frames", + "free", + "friends", + "from", + "function", + "functionality", + "function-pool", + "further", + "gaps", + "generate", + "get", + "giving", + "gkeq", + "gkge", + "global", + "grant", + "green", + "group", + "groups", + "handle", + "handler", + "harmless", + "hashed", + "having", + "hdb", + "header", + "headers", + "heading", + "head-lines", + "help-id", + "help-request", + "hextobin", + "hide", + "high", + "hint", + "hold", + "hotspot", + "icon", + "id", + "identification", + "identifier", + "ids", + "if", + "ignore", + "ignoring", + "immediately", + "implementation", + "implementations", + "implemented", + "implicit", + "import", + "importing", + "in", + "inactive", + "incl", + "include", + "includes", + "including", + "increment", + "index", + "index-line", + "infotypes", + "inheriting", + "init", + "initial", + "initialization", + "inner", + "inout", + "input", + "insert", + "instance", + "instances", + "instr", + "intensified", + "interface", + "interface-pool", + "interfaces", + "internal", + "intervals", + "into", + "inverse", + "inverted-date", + "is", + "iso", + "job", + "join", + "keep", + "keeping", + "kernel", + "key", + "keys", + "keywords", + "kind", + "language", + "last", + "late", + "layout", + "leading", + "leave", + "left", + "left-justified", + "leftplus", + "leftspace", + "legacy", + "length", + "let", + "level", + "levels", + "like", + "line", + "lines", + "line-count", + "linefeed", + "line-selection", + "line-size", + "list", + "listbox", + "list-processing", + "little", + "llang", + "load", + "load-of-program", + "lob", + "local", + "locale", + "locator", + "logfile", + "logical", + "log-point", + "long", + "loop", + "low", + "lower", + "lpad", + "lpi", + "ltrim", + "mail", + "main", + "major-id", + "mapping", + "margin", + "mark", + "mask", + "match", + "matchcode", + "max", + "maximum", + "medium", + "members", + "memory", + "mesh", + "message", + "message-id", + "messages", + "messaging", + "method", + "methods", + "min", + "minimum", + "minor-id", + "mm/dd/yy", + "mm/dd/yyyy", + "mmddyy", + "mode", + "modif", + "modifier", + "modify", + "module", + "move", + "move-corresponding", + "multiply", + "multiply-corresponding", + "name", + "nametab", + "native", + "nested", + "nesting", + "new", + "new-line", + "new-page", + "new-section", + "next", + "no", + "no-display", + "no-extension", + "no-gap", + "no-gaps", + "no-grouping", + "no-heading", + "no-scrolling", + "no-sign", + "no-title", + "no-topofpage", + "no-zero", + "node", + "nodes", + "non-unicode", + "non-unique", + "not", + "null", + "number", + "object", + "objects", + "obligatory", + "occurrence", + "occurrences", + "occurs", + "of", + "off", + "offset", + "ole", + "on", + "only", + "open", + "option", + "optional", + "options", + "or", + "order", + "other", + "others", + "out", + "outer", + "output", + "output-length", + "overflow", + "overlay", + "pack", + "package", + "pad", + "padding", + "page", + "pages", + "parameter", + "parameters", + "parameter-table", + "part", + "partially", + "pattern", + "percentage", + "perform", + "performing", + "person", + "pf1", + "pf10", + "pf11", + "pf12", + "pf13", + "pf14", + "pf15", + "pf2", + "pf3", + "pf4", + "pf5", + "pf6", + "pf7", + "pf8", + "pf9", + "pf-status", + "pink", + "places", + "pool", + "pos_high", + "pos_low", + "position", + "pragmas", + "precompiled", + "preferred", + "preserving", + "primary", + "print", + "print-control", + "priority", + "private", + "procedure", + "process", + "program", + "property", + "protected", + "provide", + "public", + "push", + "pushbutton", + "put", + "queue-only", + "quickinfo", + "radiobutton", + "raise", + "raising", + "range", + "ranges", + "read", + "reader", + "read-only", + "receive", + "received", + "receiver", + "receiving", + "red", + "redefinition", + "reduce", + "reduced", + "ref", + "reference", + "refresh", + "regex", + "reject", + "remote", + "renaming", + "replace", + "replacement", + "replacing", + "report", + "request", + "requested", + "reserve", + "reset", + "resolution", + "respecting", + "responsible", + "result", + "results", + "resumable", + "resume", + "retry", + "return", + "returncode", + "returning", + "returns", + "right", + "right-justified", + "rightplus", + "rightspace", + "risk", + "rmc_communication_failure", + "rmc_invalid_status", + "rmc_system_failure", + "role", + "rollback", + "rows", + "rpad", + "rtrim", + "run", + "sap", + "sap-spool", + "saving", + "scale_preserving", + "scale_preserving_scientific", + "scan", + "scientific", + "scientific_with_leading_zero", + "scroll", + "scroll-boundary", + "scrolling", + "search", + "secondary", + "seconds", + "section", + "select", + "selection", + "selections", + "selection-screen", + "selection-set", + "selection-sets", + "selection-table", + "select-options", + "send", + "separate", + "separated", + "set", + "shared", + "shift", + "short", + "shortdump-id", + "sign_as_postfix", + "single", + "size", + "skip", + "skipping", + "smart", + "some", + "sort", + "sortable", + "sorted", + "source", + "specified", + "split", + "spool", + "spots", + "sql", + "sqlscript", + "stable", + "stamp", + "standard", + "starting", + "start-of-editing", + "start-of-selection", + "state", + "statement", + "statements", + "static", + "statics", + "statusinfo", + "step-loop", + "stop", + "structure", + "structures", + "style", + "subkey", + "submatches", + "submit", + "subroutine", + "subscreen", + "subtract", + "subtract-corresponding", + "suffix", + "sum", + "summary", + "summing", + "supplied", + "supply", + "suppress", + "switch", + "switchstates", + "symbol", + "syncpoints", + "syntax", + "syntax-check", + "syntax-trace", + "system-call", + "system-exceptions", + "system-exit", + "tab", + "tabbed", + "table", + "tables", + "tableview", + "tabstrip", + "target", + "task", + "tasks", + "test", + "testing", + "test-injection", + "test-seam", + "text", + "textpool", + "then", + "throw", + "time", + "times", + "timestamp", + "timezone", + "tims_is_valid", + "title", + "titlebar", + "title-lines", + "to", + "tokenization", + "tokens", + "top-lines", + "top-of-page", + "trace-file", + "trace-table", + "trailing", + "transaction", + "transfer", + "transformation", + "translate", + "transporting", + "trmac", + "truncate", + "truncation", + "try", + "tstmp_add_seconds", + "tstmp_current_utctimestamp", + "tstmp_is_valid", + "tstmp_seconds_between", + "type", + "type-pool", + "type-pools", + "types", + "uline", + "unassign", + "under", + "unicode", + "union", + "unique", + "unit_conversion", + "unix", + "unpack", + "until", + "unwind", + "up", + "update", + "upper", + "user", + "user-command", + "using", + "utf-8", + "valid", + "value", + "value-request", + "values", + "vary", + "varying", + "verification-message", + "version", + "via", + "view", + "visible", + "wait", + "warning", + "when", + "whenever", + "where", + "while", + "width", + "window", + "windows", + "with", + "with-heading", + "without", + "with-title", + "word", + "work", + "write", + "writer", + "xml", + "xsd", + "yellow", + "yes", + "yymmdd", + "zero", + "zone", + "abap_system_timezone", + "abap_user_timezone", + "access", + "action", + "adabas", + "adjust_numbers", + "allow_precision_loss", + "allowed", + "amdp", + "applicationuser", + "as_geo_json", + "as400", + "associations", + "balance", + "behavior", + "breakup", + "bulk", + "cds", + "cds_client", + "check_before_save", + "child", + "clients", + "corr", + "corr_spearman", + "cross", + "cycles", + "datn_add_days", + "datn_add_months", + "datn_days_between", + "dats_from_datn", + "dats_tims_to_tstmp", + "dats_to_datn", + "db2", + "db6", + "ddl", + "dense_rank", + "depth", + "deterministic", + "discarding", + "entities", + "entity", + "error", + "failed", + "finalize", + "first_value", + "fltp_to_dec", + "following", + "fractional", + "full", + "graph", + "grouping", + "hierarchy", + "hierarchy_ancestors", + "hierarchy_ancestors_aggregate", + "hierarchy_descendants", + "hierarchy_descendants_aggregate", + "hierarchy_siblings", + "incremental", + "indicators", + "lag", + "last_value", + "lead", + "leaves", + "like_regexpr", + "link", + "locale_sap", + "lock", + "locks", + "many", + "mapped", + "matched", + "measures", + "median", + "mssqlnt", + "multiple", + "nodetype", + "ntile", + "nulls", + "occurrences_regexpr", + "one", + "operations", + "oracle", + "orphans", + "over", + "parent", + "parents", + "partition", + "pcre", + "period", + "pfcg_mapping", + "preceding", + "privileged", + "product", + "projection", + "rank", + "redirected", + "replace_regexpr", + "reported", + "response", + "responses", + "root", + "row", + "row_number", + "sap_system_date", + "save", + "schema", + "session", + "sets", + "shortdump", + "siblings", + "spantree", + "start", + "stddev", + "string_agg", + "subtotal", + "sybase", + "tims_from_timn", + "tims_to_timn", + "to_blob", + "to_clob", + "total", + "trace-entry", + "tstmp_to_dats", + "tstmp_to_dst", + "tstmp_to_tims", + "tstmpl_from_utcl", + "tstmpl_to_utcl", + "unbounded", + "utcl_add_seconds", + "utcl_current", + "utcl_seconds_between", + "uuid", + "var", + "verbatim" + ], + builtinFunctions: [ + "abs", + "acos", + "asin", + "atan", + "bit-set", + "boolc", + "boolx", + "ceil", + "char_off", + "charlen", + "cmax", + "cmin", + "concat_lines_of", + "contains", + "contains_any_not_of", + "contains_any_of", + "cos", + "cosh", + "count", + "count_any_not_of", + "count_any_of", + "dbmaxlen", + "distance", + "escape", + "exp", + "find_any_not_of", + "find_any_of", + "find_end", + "floor", + "frac", + "from_mixed", + "ipow", + "line_exists", + "line_index", + "log", + "log10", + "matches", + "nmax", + "nmin", + "numofchar", + "repeat", + "rescale", + "reverse", + "round", + "segment", + "shift_left", + "shift_right", + "sign", + "sin", + "sinh", + "sqrt", + "strlen", + "substring", + "substring_after", + "substring_before", + "substring_from", + "substring_to", + "tan", + "tanh", + "to_lower", + "to_mixed", + "to_upper", + "trunc", + "utclong_add", + "utclong_current", + "utclong_diff", + "xsdbool", + "xstrlen" + ], + typeKeywords: [ + "b", + "c", + "d", + "decfloat16", + "decfloat34", + "f", + "i", + "int8", + "n", + "p", + "s", + "string", + "t", + "utclong", + "x", + "xstring", + "any", + "clike", + "csequence", + "decfloat", + "numeric", + "simple", + "xsequence", + "accp", + "char", + "clnt", + "cuky", + "curr", + "datn", + "dats", + "d16d", + "d16n", + "d16r", + "d34d", + "d34n", + "d34r", + "dec", + "df16_dec", + "df16_raw", + "df34_dec", + "df34_raw", + "fltp", + "geom_ewkb", + "int1", + "int2", + "int4", + "lang", + "lchr", + "lraw", + "numc", + "quan", + "raw", + "rawstring", + "sstring", + "timn", + "tims", + "unit", + "utcl", + "df16_scl", + "df34_scl", + "prec", + "varc", + "abap_bool", + "abap_false", + "abap_true", + "abap_undefined", + "me", + "screen", + "space", + "super", + "sy", + "syst", + "table_line", + "*sys*" + ], + builtinMethods: ["class_constructor", "constructor"], + derivedTypes: [ + "%CID", + "%CID_REF", + "%CONTROL", + "%DATA", + "%ELEMENT", + "%FAIL", + "%KEY", + "%MSG", + "%PARAM", + "%PID", + "%PID_ASSOC", + "%PID_PARENT", + "%_HINTS" + ], + cdsLanguage: [ + "@AbapAnnotation", + "@AbapCatalog", + "@AccessControl", + "@API", + "@ClientDependent", + "@ClientHandling", + "@CompatibilityContract", + "@DataAging", + "@EndUserText", + "@Environment", + "@LanguageDependency", + "@MappingRole", + "@Metadata", + "@MetadataExtension", + "@ObjectModel", + "@Scope", + "@Semantics", + "$EXTENSION", + "$SELF" + ], + selectors: ["->", "->*", "=>", "~", "~*"], + operators: [ + " +", + " -", + "/", + "*", + "**", + "div", + "mod", + "=", + "#", + "@", + "+=", + "-=", + "*=", + "/=", + "**=", + "&&=", + "?=", + "&", + "&&", + "bit-and", + "bit-not", + "bit-or", + "bit-xor", + "m", + "o", + "z", + "<", + " >", + "<=", + ">=", + "<>", + "><", + "=<", + "=>", + "bt", + "byte-ca", + "byte-cn", + "byte-co", + "byte-cs", + "byte-na", + "byte-ns", + "ca", + "cn", + "co", + "cp", + "cs", + "eq", + "ge", + "gt", + "le", + "lt", + "na", + "nb", + "ne", + "np", + "ns", + "*/", + "*:", + "--", + "/*", + "//" + ], + symbols: /[=>))*/, + { + cases: { + "@typeKeywords": "type", + "@keywords": "keyword", + "@cdsLanguage": "annotation", + "@derivedTypes": "type", + "@builtinFunctions": "type", + "@builtinMethods": "type", + "@operators": "key", + "@default": "identifier" + } + } + ], + [/<[\w]+>/, "identifier"], + [/##[\w|_]+/, "comment"], + { include: "@whitespace" }, + [/[:,.]/, "delimiter"], + [/[{}()\[\]]/, "@brackets"], + [ + /@symbols/, + { + cases: { + "@selectors": "tag", + "@operators": "key", + "@default": "" + } + } + ], + [/'/, { token: "string", bracket: "@open", next: "@stringquote" }], + [/`/, { token: "string", bracket: "@open", next: "@stringping" }], + [/\|/, { token: "string", bracket: "@open", next: "@stringtemplate" }], + [/\d+/, "number"] + ], + stringtemplate: [ + [/[^\\\|]+/, "string"], + [/\\\|/, "string"], + [/\|/, { token: "string", bracket: "@close", next: "@pop" }] + ], + stringping: [ + [/[^\\`]+/, "string"], + [/`/, { token: "string", bracket: "@close", next: "@pop" }] + ], + stringquote: [ + [/[^\\']+/, "string"], + [/'/, { token: "string", bracket: "@close", next: "@pop" }] + ], + whitespace: [ + [/[ \t\r\n]+/, ""], + [/^\*.*$/, "comment"], + [/\".*$/, "comment"] + ] + } +}; +export { + conf, + language +}; +/*! Bundled license information: + +monaco-editor/esm/vs/basic-languages/abap/abap.js: + (*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Version: 0.41.0(38e1e3d097f84e336c311d071a9ffb5191d4ffd1) + * Released under the MIT license + * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt + *-----------------------------------------------------------------------------*) +*/ +//# sourceMappingURL=abap-ZJXPBV7D.js.map diff --git a/docs/.vitepress/cache/deps/abap-ZJXPBV7D.js.map b/docs/.vitepress/cache/deps/abap-ZJXPBV7D.js.map new file mode 100644 index 0000000..a86090d --- /dev/null +++ b/docs/.vitepress/cache/deps/abap-ZJXPBV7D.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../../../node_modules/monaco-editor/esm/vs/basic-languages/abap/abap.js"], + "sourcesContent": ["/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.41.0(38e1e3d097f84e336c311d071a9ffb5191d4ffd1)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\n\n// src/basic-languages/abap/abap.ts\nvar conf = {\n comments: {\n lineComment: \"*\"\n },\n brackets: [\n [\"[\", \"]\"],\n [\"(\", \")\"]\n ]\n};\nvar language = {\n defaultToken: \"invalid\",\n ignoreCase: true,\n tokenPostfix: \".abap\",\n keywords: [\n \"abap-source\",\n \"abbreviated\",\n \"abstract\",\n \"accept\",\n \"accepting\",\n \"according\",\n \"activation\",\n \"actual\",\n \"add\",\n \"add-corresponding\",\n \"adjacent\",\n \"after\",\n \"alias\",\n \"aliases\",\n \"align\",\n \"all\",\n \"allocate\",\n \"alpha\",\n \"analysis\",\n \"analyzer\",\n \"and\",\n \"append\",\n \"appendage\",\n \"appending\",\n \"application\",\n \"archive\",\n \"area\",\n \"arithmetic\",\n \"as\",\n \"ascending\",\n \"aspect\",\n \"assert\",\n \"assign\",\n \"assigned\",\n \"assigning\",\n \"association\",\n \"asynchronous\",\n \"at\",\n \"attributes\",\n \"authority\",\n \"authority-check\",\n \"avg\",\n \"back\",\n \"background\",\n \"backup\",\n \"backward\",\n \"badi\",\n \"base\",\n \"before\",\n \"begin\",\n \"between\",\n \"big\",\n \"binary\",\n \"bintohex\",\n \"bit\",\n \"black\",\n \"blank\",\n \"blanks\",\n \"blob\",\n \"block\",\n \"blocks\",\n \"blue\",\n \"bound\",\n \"boundaries\",\n \"bounds\",\n \"boxed\",\n \"break-point\",\n \"buffer\",\n \"by\",\n \"bypassing\",\n \"byte\",\n \"byte-order\",\n \"call\",\n \"calling\",\n \"case\",\n \"cast\",\n \"casting\",\n \"catch\",\n \"center\",\n \"centered\",\n \"chain\",\n \"chain-input\",\n \"chain-request\",\n \"change\",\n \"changing\",\n \"channels\",\n \"character\",\n \"char-to-hex\",\n \"check\",\n \"checkbox\",\n \"ci_\",\n \"circular\",\n \"class\",\n \"class-coding\",\n \"class-data\",\n \"class-events\",\n \"class-methods\",\n \"class-pool\",\n \"cleanup\",\n \"clear\",\n \"client\",\n \"clob\",\n \"clock\",\n \"close\",\n \"coalesce\",\n \"code\",\n \"coding\",\n \"col_background\",\n \"col_group\",\n \"col_heading\",\n \"col_key\",\n \"col_negative\",\n \"col_normal\",\n \"col_positive\",\n \"col_total\",\n \"collect\",\n \"color\",\n \"column\",\n \"columns\",\n \"comment\",\n \"comments\",\n \"commit\",\n \"common\",\n \"communication\",\n \"comparing\",\n \"component\",\n \"components\",\n \"compression\",\n \"compute\",\n \"concat\",\n \"concat_with_space\",\n \"concatenate\",\n \"cond\",\n \"condense\",\n \"condition\",\n \"connect\",\n \"connection\",\n \"constants\",\n \"context\",\n \"contexts\",\n \"continue\",\n \"control\",\n \"controls\",\n \"conv\",\n \"conversion\",\n \"convert\",\n \"copies\",\n \"copy\",\n \"corresponding\",\n \"country\",\n \"cover\",\n \"cpi\",\n \"create\",\n \"creating\",\n \"critical\",\n \"currency\",\n \"currency_conversion\",\n \"current\",\n \"cursor\",\n \"cursor-selection\",\n \"customer\",\n \"customer-function\",\n \"dangerous\",\n \"data\",\n \"database\",\n \"datainfo\",\n \"dataset\",\n \"date\",\n \"dats_add_days\",\n \"dats_add_months\",\n \"dats_days_between\",\n \"dats_is_valid\",\n \"daylight\",\n \"dd/mm/yy\",\n \"dd/mm/yyyy\",\n \"ddmmyy\",\n \"deallocate\",\n \"decimal_shift\",\n \"decimals\",\n \"declarations\",\n \"deep\",\n \"default\",\n \"deferred\",\n \"define\",\n \"defining\",\n \"definition\",\n \"delete\",\n \"deleting\",\n \"demand\",\n \"department\",\n \"descending\",\n \"describe\",\n \"destination\",\n \"detail\",\n \"dialog\",\n \"directory\",\n \"disconnect\",\n \"display\",\n \"display-mode\",\n \"distinct\",\n \"divide\",\n \"divide-corresponding\",\n \"division\",\n \"do\",\n \"dummy\",\n \"duplicate\",\n \"duplicates\",\n \"duration\",\n \"during\",\n \"dynamic\",\n \"dynpro\",\n \"edit\",\n \"editor-call\",\n \"else\",\n \"elseif\",\n \"empty\",\n \"enabled\",\n \"enabling\",\n \"encoding\",\n \"end\",\n \"endat\",\n \"endcase\",\n \"endcatch\",\n \"endchain\",\n \"endclass\",\n \"enddo\",\n \"endenhancement\",\n \"end-enhancement-section\",\n \"endexec\",\n \"endform\",\n \"endfunction\",\n \"endian\",\n \"endif\",\n \"ending\",\n \"endinterface\",\n \"end-lines\",\n \"endloop\",\n \"endmethod\",\n \"endmodule\",\n \"end-of-definition\",\n \"end-of-editing\",\n \"end-of-file\",\n \"end-of-page\",\n \"end-of-selection\",\n \"endon\",\n \"endprovide\",\n \"endselect\",\n \"end-test-injection\",\n \"end-test-seam\",\n \"endtry\",\n \"endwhile\",\n \"endwith\",\n \"engineering\",\n \"enhancement\",\n \"enhancement-point\",\n \"enhancements\",\n \"enhancement-section\",\n \"entries\",\n \"entry\",\n \"enum\",\n \"environment\",\n \"equiv\",\n \"errormessage\",\n \"errors\",\n \"escaping\",\n \"event\",\n \"events\",\n \"exact\",\n \"except\",\n \"exception\",\n \"exceptions\",\n \"exception-table\",\n \"exclude\",\n \"excluding\",\n \"exec\",\n \"execute\",\n \"exists\",\n \"exit\",\n \"exit-command\",\n \"expand\",\n \"expanding\",\n \"expiration\",\n \"explicit\",\n \"exponent\",\n \"export\",\n \"exporting\",\n \"extend\",\n \"extended\",\n \"extension\",\n \"extract\",\n \"fail\",\n \"fetch\",\n \"field\",\n \"field-groups\",\n \"fields\",\n \"field-symbol\",\n \"field-symbols\",\n \"file\",\n \"filter\",\n \"filters\",\n \"filter-table\",\n \"final\",\n \"find\",\n \"first\",\n \"first-line\",\n \"fixed-point\",\n \"fkeq\",\n \"fkge\",\n \"flush\",\n \"font\",\n \"for\",\n \"form\",\n \"format\",\n \"forward\",\n \"found\",\n \"frame\",\n \"frames\",\n \"free\",\n \"friends\",\n \"from\",\n \"function\",\n \"functionality\",\n \"function-pool\",\n \"further\",\n \"gaps\",\n \"generate\",\n \"get\",\n \"giving\",\n \"gkeq\",\n \"gkge\",\n \"global\",\n \"grant\",\n \"green\",\n \"group\",\n \"groups\",\n \"handle\",\n \"handler\",\n \"harmless\",\n \"hashed\",\n \"having\",\n \"hdb\",\n \"header\",\n \"headers\",\n \"heading\",\n \"head-lines\",\n \"help-id\",\n \"help-request\",\n \"hextobin\",\n \"hide\",\n \"high\",\n \"hint\",\n \"hold\",\n \"hotspot\",\n \"icon\",\n \"id\",\n \"identification\",\n \"identifier\",\n \"ids\",\n \"if\",\n \"ignore\",\n \"ignoring\",\n \"immediately\",\n \"implementation\",\n \"implementations\",\n \"implemented\",\n \"implicit\",\n \"import\",\n \"importing\",\n \"in\",\n \"inactive\",\n \"incl\",\n \"include\",\n \"includes\",\n \"including\",\n \"increment\",\n \"index\",\n \"index-line\",\n \"infotypes\",\n \"inheriting\",\n \"init\",\n \"initial\",\n \"initialization\",\n \"inner\",\n \"inout\",\n \"input\",\n \"insert\",\n \"instance\",\n \"instances\",\n \"instr\",\n \"intensified\",\n \"interface\",\n \"interface-pool\",\n \"interfaces\",\n \"internal\",\n \"intervals\",\n \"into\",\n \"inverse\",\n \"inverted-date\",\n \"is\",\n \"iso\",\n \"job\",\n \"join\",\n \"keep\",\n \"keeping\",\n \"kernel\",\n \"key\",\n \"keys\",\n \"keywords\",\n \"kind\",\n \"language\",\n \"last\",\n \"late\",\n \"layout\",\n \"leading\",\n \"leave\",\n \"left\",\n \"left-justified\",\n \"leftplus\",\n \"leftspace\",\n \"legacy\",\n \"length\",\n \"let\",\n \"level\",\n \"levels\",\n \"like\",\n \"line\",\n \"lines\",\n \"line-count\",\n \"linefeed\",\n \"line-selection\",\n \"line-size\",\n \"list\",\n \"listbox\",\n \"list-processing\",\n \"little\",\n \"llang\",\n \"load\",\n \"load-of-program\",\n \"lob\",\n \"local\",\n \"locale\",\n \"locator\",\n \"logfile\",\n \"logical\",\n \"log-point\",\n \"long\",\n \"loop\",\n \"low\",\n \"lower\",\n \"lpad\",\n \"lpi\",\n \"ltrim\",\n \"mail\",\n \"main\",\n \"major-id\",\n \"mapping\",\n \"margin\",\n \"mark\",\n \"mask\",\n \"match\",\n \"matchcode\",\n \"max\",\n \"maximum\",\n \"medium\",\n \"members\",\n \"memory\",\n \"mesh\",\n \"message\",\n \"message-id\",\n \"messages\",\n \"messaging\",\n \"method\",\n \"methods\",\n \"min\",\n \"minimum\",\n \"minor-id\",\n \"mm/dd/yy\",\n \"mm/dd/yyyy\",\n \"mmddyy\",\n \"mode\",\n \"modif\",\n \"modifier\",\n \"modify\",\n \"module\",\n \"move\",\n \"move-corresponding\",\n \"multiply\",\n \"multiply-corresponding\",\n \"name\",\n \"nametab\",\n \"native\",\n \"nested\",\n \"nesting\",\n \"new\",\n \"new-line\",\n \"new-page\",\n \"new-section\",\n \"next\",\n \"no\",\n \"no-display\",\n \"no-extension\",\n \"no-gap\",\n \"no-gaps\",\n \"no-grouping\",\n \"no-heading\",\n \"no-scrolling\",\n \"no-sign\",\n \"no-title\",\n \"no-topofpage\",\n \"no-zero\",\n \"node\",\n \"nodes\",\n \"non-unicode\",\n \"non-unique\",\n \"not\",\n \"null\",\n \"number\",\n \"object\",\n \"objects\",\n \"obligatory\",\n \"occurrence\",\n \"occurrences\",\n \"occurs\",\n \"of\",\n \"off\",\n \"offset\",\n \"ole\",\n \"on\",\n \"only\",\n \"open\",\n \"option\",\n \"optional\",\n \"options\",\n \"or\",\n \"order\",\n \"other\",\n \"others\",\n \"out\",\n \"outer\",\n \"output\",\n \"output-length\",\n \"overflow\",\n \"overlay\",\n \"pack\",\n \"package\",\n \"pad\",\n \"padding\",\n \"page\",\n \"pages\",\n \"parameter\",\n \"parameters\",\n \"parameter-table\",\n \"part\",\n \"partially\",\n \"pattern\",\n \"percentage\",\n \"perform\",\n \"performing\",\n \"person\",\n \"pf1\",\n \"pf10\",\n \"pf11\",\n \"pf12\",\n \"pf13\",\n \"pf14\",\n \"pf15\",\n \"pf2\",\n \"pf3\",\n \"pf4\",\n \"pf5\",\n \"pf6\",\n \"pf7\",\n \"pf8\",\n \"pf9\",\n \"pf-status\",\n \"pink\",\n \"places\",\n \"pool\",\n \"pos_high\",\n \"pos_low\",\n \"position\",\n \"pragmas\",\n \"precompiled\",\n \"preferred\",\n \"preserving\",\n \"primary\",\n \"print\",\n \"print-control\",\n \"priority\",\n \"private\",\n \"procedure\",\n \"process\",\n \"program\",\n \"property\",\n \"protected\",\n \"provide\",\n \"public\",\n \"push\",\n \"pushbutton\",\n \"put\",\n \"queue-only\",\n \"quickinfo\",\n \"radiobutton\",\n \"raise\",\n \"raising\",\n \"range\",\n \"ranges\",\n \"read\",\n \"reader\",\n \"read-only\",\n \"receive\",\n \"received\",\n \"receiver\",\n \"receiving\",\n \"red\",\n \"redefinition\",\n \"reduce\",\n \"reduced\",\n \"ref\",\n \"reference\",\n \"refresh\",\n \"regex\",\n \"reject\",\n \"remote\",\n \"renaming\",\n \"replace\",\n \"replacement\",\n \"replacing\",\n \"report\",\n \"request\",\n \"requested\",\n \"reserve\",\n \"reset\",\n \"resolution\",\n \"respecting\",\n \"responsible\",\n \"result\",\n \"results\",\n \"resumable\",\n \"resume\",\n \"retry\",\n \"return\",\n \"returncode\",\n \"returning\",\n \"returns\",\n \"right\",\n \"right-justified\",\n \"rightplus\",\n \"rightspace\",\n \"risk\",\n \"rmc_communication_failure\",\n \"rmc_invalid_status\",\n \"rmc_system_failure\",\n \"role\",\n \"rollback\",\n \"rows\",\n \"rpad\",\n \"rtrim\",\n \"run\",\n \"sap\",\n \"sap-spool\",\n \"saving\",\n \"scale_preserving\",\n \"scale_preserving_scientific\",\n \"scan\",\n \"scientific\",\n \"scientific_with_leading_zero\",\n \"scroll\",\n \"scroll-boundary\",\n \"scrolling\",\n \"search\",\n \"secondary\",\n \"seconds\",\n \"section\",\n \"select\",\n \"selection\",\n \"selections\",\n \"selection-screen\",\n \"selection-set\",\n \"selection-sets\",\n \"selection-table\",\n \"select-options\",\n \"send\",\n \"separate\",\n \"separated\",\n \"set\",\n \"shared\",\n \"shift\",\n \"short\",\n \"shortdump-id\",\n \"sign_as_postfix\",\n \"single\",\n \"size\",\n \"skip\",\n \"skipping\",\n \"smart\",\n \"some\",\n \"sort\",\n \"sortable\",\n \"sorted\",\n \"source\",\n \"specified\",\n \"split\",\n \"spool\",\n \"spots\",\n \"sql\",\n \"sqlscript\",\n \"stable\",\n \"stamp\",\n \"standard\",\n \"starting\",\n \"start-of-editing\",\n \"start-of-selection\",\n \"state\",\n \"statement\",\n \"statements\",\n \"static\",\n \"statics\",\n \"statusinfo\",\n \"step-loop\",\n \"stop\",\n \"structure\",\n \"structures\",\n \"style\",\n \"subkey\",\n \"submatches\",\n \"submit\",\n \"subroutine\",\n \"subscreen\",\n \"subtract\",\n \"subtract-corresponding\",\n \"suffix\",\n \"sum\",\n \"summary\",\n \"summing\",\n \"supplied\",\n \"supply\",\n \"suppress\",\n \"switch\",\n \"switchstates\",\n \"symbol\",\n \"syncpoints\",\n \"syntax\",\n \"syntax-check\",\n \"syntax-trace\",\n \"system-call\",\n \"system-exceptions\",\n \"system-exit\",\n \"tab\",\n \"tabbed\",\n \"table\",\n \"tables\",\n \"tableview\",\n \"tabstrip\",\n \"target\",\n \"task\",\n \"tasks\",\n \"test\",\n \"testing\",\n \"test-injection\",\n \"test-seam\",\n \"text\",\n \"textpool\",\n \"then\",\n \"throw\",\n \"time\",\n \"times\",\n \"timestamp\",\n \"timezone\",\n \"tims_is_valid\",\n \"title\",\n \"titlebar\",\n \"title-lines\",\n \"to\",\n \"tokenization\",\n \"tokens\",\n \"top-lines\",\n \"top-of-page\",\n \"trace-file\",\n \"trace-table\",\n \"trailing\",\n \"transaction\",\n \"transfer\",\n \"transformation\",\n \"translate\",\n \"transporting\",\n \"trmac\",\n \"truncate\",\n \"truncation\",\n \"try\",\n \"tstmp_add_seconds\",\n \"tstmp_current_utctimestamp\",\n \"tstmp_is_valid\",\n \"tstmp_seconds_between\",\n \"type\",\n \"type-pool\",\n \"type-pools\",\n \"types\",\n \"uline\",\n \"unassign\",\n \"under\",\n \"unicode\",\n \"union\",\n \"unique\",\n \"unit_conversion\",\n \"unix\",\n \"unpack\",\n \"until\",\n \"unwind\",\n \"up\",\n \"update\",\n \"upper\",\n \"user\",\n \"user-command\",\n \"using\",\n \"utf-8\",\n \"valid\",\n \"value\",\n \"value-request\",\n \"values\",\n \"vary\",\n \"varying\",\n \"verification-message\",\n \"version\",\n \"via\",\n \"view\",\n \"visible\",\n \"wait\",\n \"warning\",\n \"when\",\n \"whenever\",\n \"where\",\n \"while\",\n \"width\",\n \"window\",\n \"windows\",\n \"with\",\n \"with-heading\",\n \"without\",\n \"with-title\",\n \"word\",\n \"work\",\n \"write\",\n \"writer\",\n \"xml\",\n \"xsd\",\n \"yellow\",\n \"yes\",\n \"yymmdd\",\n \"zero\",\n \"zone\",\n \"abap_system_timezone\",\n \"abap_user_timezone\",\n \"access\",\n \"action\",\n \"adabas\",\n \"adjust_numbers\",\n \"allow_precision_loss\",\n \"allowed\",\n \"amdp\",\n \"applicationuser\",\n \"as_geo_json\",\n \"as400\",\n \"associations\",\n \"balance\",\n \"behavior\",\n \"breakup\",\n \"bulk\",\n \"cds\",\n \"cds_client\",\n \"check_before_save\",\n \"child\",\n \"clients\",\n \"corr\",\n \"corr_spearman\",\n \"cross\",\n \"cycles\",\n \"datn_add_days\",\n \"datn_add_months\",\n \"datn_days_between\",\n \"dats_from_datn\",\n \"dats_tims_to_tstmp\",\n \"dats_to_datn\",\n \"db2\",\n \"db6\",\n \"ddl\",\n \"dense_rank\",\n \"depth\",\n \"deterministic\",\n \"discarding\",\n \"entities\",\n \"entity\",\n \"error\",\n \"failed\",\n \"finalize\",\n \"first_value\",\n \"fltp_to_dec\",\n \"following\",\n \"fractional\",\n \"full\",\n \"graph\",\n \"grouping\",\n \"hierarchy\",\n \"hierarchy_ancestors\",\n \"hierarchy_ancestors_aggregate\",\n \"hierarchy_descendants\",\n \"hierarchy_descendants_aggregate\",\n \"hierarchy_siblings\",\n \"incremental\",\n \"indicators\",\n \"lag\",\n \"last_value\",\n \"lead\",\n \"leaves\",\n \"like_regexpr\",\n \"link\",\n \"locale_sap\",\n \"lock\",\n \"locks\",\n \"many\",\n \"mapped\",\n \"matched\",\n \"measures\",\n \"median\",\n \"mssqlnt\",\n \"multiple\",\n \"nodetype\",\n \"ntile\",\n \"nulls\",\n \"occurrences_regexpr\",\n \"one\",\n \"operations\",\n \"oracle\",\n \"orphans\",\n \"over\",\n \"parent\",\n \"parents\",\n \"partition\",\n \"pcre\",\n \"period\",\n \"pfcg_mapping\",\n \"preceding\",\n \"privileged\",\n \"product\",\n \"projection\",\n \"rank\",\n \"redirected\",\n \"replace_regexpr\",\n \"reported\",\n \"response\",\n \"responses\",\n \"root\",\n \"row\",\n \"row_number\",\n \"sap_system_date\",\n \"save\",\n \"schema\",\n \"session\",\n \"sets\",\n \"shortdump\",\n \"siblings\",\n \"spantree\",\n \"start\",\n \"stddev\",\n \"string_agg\",\n \"subtotal\",\n \"sybase\",\n \"tims_from_timn\",\n \"tims_to_timn\",\n \"to_blob\",\n \"to_clob\",\n \"total\",\n \"trace-entry\",\n \"tstmp_to_dats\",\n \"tstmp_to_dst\",\n \"tstmp_to_tims\",\n \"tstmpl_from_utcl\",\n \"tstmpl_to_utcl\",\n \"unbounded\",\n \"utcl_add_seconds\",\n \"utcl_current\",\n \"utcl_seconds_between\",\n \"uuid\",\n \"var\",\n \"verbatim\"\n ],\n builtinFunctions: [\n \"abs\",\n \"acos\",\n \"asin\",\n \"atan\",\n \"bit-set\",\n \"boolc\",\n \"boolx\",\n \"ceil\",\n \"char_off\",\n \"charlen\",\n \"cmax\",\n \"cmin\",\n \"concat_lines_of\",\n \"contains\",\n \"contains_any_not_of\",\n \"contains_any_of\",\n \"cos\",\n \"cosh\",\n \"count\",\n \"count_any_not_of\",\n \"count_any_of\",\n \"dbmaxlen\",\n \"distance\",\n \"escape\",\n \"exp\",\n \"find_any_not_of\",\n \"find_any_of\",\n \"find_end\",\n \"floor\",\n \"frac\",\n \"from_mixed\",\n \"ipow\",\n \"line_exists\",\n \"line_index\",\n \"log\",\n \"log10\",\n \"matches\",\n \"nmax\",\n \"nmin\",\n \"numofchar\",\n \"repeat\",\n \"rescale\",\n \"reverse\",\n \"round\",\n \"segment\",\n \"shift_left\",\n \"shift_right\",\n \"sign\",\n \"sin\",\n \"sinh\",\n \"sqrt\",\n \"strlen\",\n \"substring\",\n \"substring_after\",\n \"substring_before\",\n \"substring_from\",\n \"substring_to\",\n \"tan\",\n \"tanh\",\n \"to_lower\",\n \"to_mixed\",\n \"to_upper\",\n \"trunc\",\n \"utclong_add\",\n \"utclong_current\",\n \"utclong_diff\",\n \"xsdbool\",\n \"xstrlen\"\n ],\n typeKeywords: [\n \"b\",\n \"c\",\n \"d\",\n \"decfloat16\",\n \"decfloat34\",\n \"f\",\n \"i\",\n \"int8\",\n \"n\",\n \"p\",\n \"s\",\n \"string\",\n \"t\",\n \"utclong\",\n \"x\",\n \"xstring\",\n \"any\",\n \"clike\",\n \"csequence\",\n \"decfloat\",\n \"numeric\",\n \"simple\",\n \"xsequence\",\n \"accp\",\n \"char\",\n \"clnt\",\n \"cuky\",\n \"curr\",\n \"datn\",\n \"dats\",\n \"d16d\",\n \"d16n\",\n \"d16r\",\n \"d34d\",\n \"d34n\",\n \"d34r\",\n \"dec\",\n \"df16_dec\",\n \"df16_raw\",\n \"df34_dec\",\n \"df34_raw\",\n \"fltp\",\n \"geom_ewkb\",\n \"int1\",\n \"int2\",\n \"int4\",\n \"lang\",\n \"lchr\",\n \"lraw\",\n \"numc\",\n \"quan\",\n \"raw\",\n \"rawstring\",\n \"sstring\",\n \"timn\",\n \"tims\",\n \"unit\",\n \"utcl\",\n \"df16_scl\",\n \"df34_scl\",\n \"prec\",\n \"varc\",\n \"abap_bool\",\n \"abap_false\",\n \"abap_true\",\n \"abap_undefined\",\n \"me\",\n \"screen\",\n \"space\",\n \"super\",\n \"sy\",\n \"syst\",\n \"table_line\",\n \"*sys*\"\n ],\n builtinMethods: [\"class_constructor\", \"constructor\"],\n derivedTypes: [\n \"%CID\",\n \"%CID_REF\",\n \"%CONTROL\",\n \"%DATA\",\n \"%ELEMENT\",\n \"%FAIL\",\n \"%KEY\",\n \"%MSG\",\n \"%PARAM\",\n \"%PID\",\n \"%PID_ASSOC\",\n \"%PID_PARENT\",\n \"%_HINTS\"\n ],\n cdsLanguage: [\n \"@AbapAnnotation\",\n \"@AbapCatalog\",\n \"@AccessControl\",\n \"@API\",\n \"@ClientDependent\",\n \"@ClientHandling\",\n \"@CompatibilityContract\",\n \"@DataAging\",\n \"@EndUserText\",\n \"@Environment\",\n \"@LanguageDependency\",\n \"@MappingRole\",\n \"@Metadata\",\n \"@MetadataExtension\",\n \"@ObjectModel\",\n \"@Scope\",\n \"@Semantics\",\n \"$EXTENSION\",\n \"$SELF\"\n ],\n selectors: [\"->\", \"->*\", \"=>\", \"~\", \"~*\"],\n operators: [\n \" +\",\n \" -\",\n \"/\",\n \"*\",\n \"**\",\n \"div\",\n \"mod\",\n \"=\",\n \"#\",\n \"@\",\n \"+=\",\n \"-=\",\n \"*=\",\n \"/=\",\n \"**=\",\n \"&&=\",\n \"?=\",\n \"&\",\n \"&&\",\n \"bit-and\",\n \"bit-not\",\n \"bit-or\",\n \"bit-xor\",\n \"m\",\n \"o\",\n \"z\",\n \"<\",\n \" >\",\n \"<=\",\n \">=\",\n \"<>\",\n \"><\",\n \"=<\",\n \"=>\",\n \"bt\",\n \"byte-ca\",\n \"byte-cn\",\n \"byte-co\",\n \"byte-cs\",\n \"byte-na\",\n \"byte-ns\",\n \"ca\",\n \"cn\",\n \"co\",\n \"cp\",\n \"cs\",\n \"eq\",\n \"ge\",\n \"gt\",\n \"le\",\n \"lt\",\n \"na\",\n \"nb\",\n \"ne\",\n \"np\",\n \"ns\",\n \"*/\",\n \"*:\",\n \"--\",\n \"/*\",\n \"//\"\n ],\n symbols: /[=>))*/,\n {\n cases: {\n \"@typeKeywords\": \"type\",\n \"@keywords\": \"keyword\",\n \"@cdsLanguage\": \"annotation\",\n \"@derivedTypes\": \"type\",\n \"@builtinFunctions\": \"type\",\n \"@builtinMethods\": \"type\",\n \"@operators\": \"key\",\n \"@default\": \"identifier\"\n }\n }\n ],\n [/<[\\w]+>/, \"identifier\"],\n [/##[\\w|_]+/, \"comment\"],\n { include: \"@whitespace\" },\n [/[:,.]/, \"delimiter\"],\n [/[{}()\\[\\]]/, \"@brackets\"],\n [\n /@symbols/,\n {\n cases: {\n \"@selectors\": \"tag\",\n \"@operators\": \"key\",\n \"@default\": \"\"\n }\n }\n ],\n [/'/, { token: \"string\", bracket: \"@open\", next: \"@stringquote\" }],\n [/`/, { token: \"string\", bracket: \"@open\", next: \"@stringping\" }],\n [/\\|/, { token: \"string\", bracket: \"@open\", next: \"@stringtemplate\" }],\n [/\\d+/, \"number\"]\n ],\n stringtemplate: [\n [/[^\\\\\\|]+/, \"string\"],\n [/\\\\\\|/, \"string\"],\n [/\\|/, { token: \"string\", bracket: \"@close\", next: \"@pop\" }]\n ],\n stringping: [\n [/[^\\\\`]+/, \"string\"],\n [/`/, { token: \"string\", bracket: \"@close\", next: \"@pop\" }]\n ],\n stringquote: [\n [/[^\\\\']+/, \"string\"],\n [/'/, { token: \"string\", bracket: \"@close\", next: \"@pop\" }]\n ],\n whitespace: [\n [/[ \\t\\r\\n]+/, \"\"],\n [/^\\*.*$/, \"comment\"],\n [/\\\".*$/, \"comment\"]\n ]\n }\n};\nexport {\n conf,\n language\n};\n"], + "mappings": ";;;AAQA,IAAI,OAAO;AAAA,EACT,UAAU;AAAA,IACR,aAAa;AAAA,EACf;AAAA,EACA,UAAU;AAAA,IACR,CAAC,KAAK,GAAG;AAAA,IACT,CAAC,KAAK,GAAG;AAAA,EACX;AACF;AACA,IAAI,WAAW;AAAA,EACb,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,UAAU;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,kBAAkB;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,cAAc;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,gBAAgB,CAAC,qBAAqB,aAAa;AAAA,EACnD,cAAc;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,WAAW,CAAC,MAAM,OAAO,MAAM,KAAK,IAAI;AAAA,EACxC,WAAW;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,SAAS;AAAA,EACT,WAAW;AAAA,IACT,MAAM;AAAA,MACJ;AAAA,QACE;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,iBAAiB;AAAA,YACjB,aAAa;AAAA,YACb,gBAAgB;AAAA,YAChB,iBAAiB;AAAA,YACjB,qBAAqB;AAAA,YACrB,mBAAmB;AAAA,YACnB,cAAc;AAAA,YACd,YAAY;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAAA,MACA,CAAC,WAAW,YAAY;AAAA,MACxB,CAAC,aAAa,SAAS;AAAA,MACvB,EAAE,SAAS,cAAc;AAAA,MACzB,CAAC,SAAS,WAAW;AAAA,MACrB,CAAC,cAAc,WAAW;AAAA,MAC1B;AAAA,QACE;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,cAAc;AAAA,YACd,cAAc;AAAA,YACd,YAAY;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAAA,MACA,CAAC,KAAK,EAAE,OAAO,UAAU,SAAS,SAAS,MAAM,eAAe,CAAC;AAAA,MACjE,CAAC,KAAK,EAAE,OAAO,UAAU,SAAS,SAAS,MAAM,cAAc,CAAC;AAAA,MAChE,CAAC,MAAM,EAAE,OAAO,UAAU,SAAS,SAAS,MAAM,kBAAkB,CAAC;AAAA,MACrE,CAAC,OAAO,QAAQ;AAAA,IAClB;AAAA,IACA,gBAAgB;AAAA,MACd,CAAC,YAAY,QAAQ;AAAA,MACrB,CAAC,QAAQ,QAAQ;AAAA,MACjB,CAAC,MAAM,EAAE,OAAO,UAAU,SAAS,UAAU,MAAM,OAAO,CAAC;AAAA,IAC7D;AAAA,IACA,YAAY;AAAA,MACV,CAAC,WAAW,QAAQ;AAAA,MACpB,CAAC,KAAK,EAAE,OAAO,UAAU,SAAS,UAAU,MAAM,OAAO,CAAC;AAAA,IAC5D;AAAA,IACA,aAAa;AAAA,MACX,CAAC,WAAW,QAAQ;AAAA,MACpB,CAAC,KAAK,EAAE,OAAO,UAAU,SAAS,UAAU,MAAM,OAAO,CAAC;AAAA,IAC5D;AAAA,IACA,YAAY;AAAA,MACV,CAAC,cAAc,EAAE;AAAA,MACjB,CAAC,UAAU,SAAS;AAAA,MACpB,CAAC,SAAS,SAAS;AAAA,IACrB;AAAA,EACF;AACF;", + "names": [] +} diff --git a/docs/.vitepress/cache/deps/adaptivecards.js b/docs/.vitepress/cache/deps/adaptivecards.js new file mode 100644 index 0000000..a3ce1d4 --- /dev/null +++ b/docs/.vitepress/cache/deps/adaptivecards.js @@ -0,0 +1,12302 @@ +import { + __commonJS +} from "./chunk-6PJEDKO5.js"; + +// node_modules/adaptivecards/lib/strings.js +var require_strings = __commonJS({ + "node_modules/adaptivecards/lib/strings.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.Strings = void 0; + var Strings = ( + /** @class */ + function() { + function Strings2() { + } + Strings2.errors = { + unknownElementType: function(typeName) { + return 'Unknown element type "'.concat(typeName, '". Fallback will be used if present.'); + }, + unknownActionType: function(typeName) { + return 'Unknown action type "'.concat(typeName, '". Fallback will be used if present.'); + }, + elementTypeNotAllowed: function(typeName) { + return 'Element type "'.concat(typeName, '" is not allowed in this context.'); + }, + actionTypeNotAllowed: function(typeName) { + return 'Action type "'.concat(typeName, '" is not allowed in this context.'); + }, + invalidPropertyValue: function(value, propertyName) { + return 'Invalid value "'.concat(value, '" for property "').concat(propertyName, '".'); + }, + showCardMustHaveCard: function() { + return '"An Action.ShowCard must have its "card" property set to a valid AdaptiveCard object.'; + }, + invalidColumnWidth: function(invalidWidth) { + return 'Invalid column width "'.concat(invalidWidth, '" - defaulting to "auto".'); + }, + invalidCardVersion: function(defaultingToVersion) { + return 'Invalid card version. Defaulting to "'.concat(defaultingToVersion, '".'); + }, + invalidVersionString: function(versionString) { + return 'Invalid version string "'.concat(versionString, '".'); + }, + propertyValueNotSupported: function(value, propertyName, supportedInVersion, versionUsed) { + return 'Value "'.concat(value, '" for property "').concat(propertyName, '" is supported in version ').concat(supportedInVersion, ", but you are using version ").concat(versionUsed, "."); + }, + propertyNotSupported: function(propertyName, supportedInVersion, versionUsed) { + return 'Property "'.concat(propertyName, '" is supported in version ').concat(supportedInVersion, ", but you are using version ").concat(versionUsed, "."); + }, + indexOutOfRange: function(index) { + return "Index out of range (".concat(index, ")."); + }, + elementCannotBeUsedAsInline: function() { + return "RichTextBlock.addInline: the specified card element cannot be used as a RichTextBlock inline."; + }, + inlineAlreadyParented: function() { + return "RichTextBlock.addInline: the specified inline already belongs to another RichTextBlock."; + }, + interactivityNotAllowed: function() { + return "Interactivity is not allowed."; + }, + inputsMustHaveUniqueId: function() { + return "All inputs must have a unique Id."; + }, + choiceSetMustHaveAtLeastOneChoice: function() { + return "An Input.ChoiceSet must have at least one choice defined."; + }, + choiceSetChoicesMustHaveTitleAndValue: function() { + return "All choices in an Input.ChoiceSet must have their title and value properties set."; + }, + propertyMustBeSet: function(propertyName) { + return 'Property "'.concat(propertyName, '" must be set.'); + }, + actionHttpHeadersMustHaveNameAndValue: function() { + return "All headers of an Action.Http must have their name and value properties set."; + }, + tooManyActions: function(maximumActions) { + return "Maximum number of actions exceeded (".concat(maximumActions, ")."); + }, + tooLittleTimeDelay: function(minAutoplayDelay) { + return "Autoplay Delay is too short (".concat(minAutoplayDelay, ")."); + }, + columnAlreadyBelongsToAnotherSet: function() { + return "This column already belongs to another ColumnSet."; + }, + invalidCardType: function() { + return `Invalid or missing card type. Make sure the card's type property is set to "AdaptiveCard".`; + }, + unsupportedCardVersion: function(version, maxSupportedVersion) { + return "The specified card version (".concat(version, ") is not supported or still in preview. The latest released card version is ").concat(maxSupportedVersion, "."); + }, + duplicateId: function(id) { + return 'Duplicate Id "'.concat(id, '".'); + }, + markdownProcessingNotEnabled: function() { + return "Markdown processing isn't enabled. Please see https://www.npmjs.com/package/adaptivecards#supporting-markdown"; + }, + processMarkdownEventRemoved: function() { + return "The processMarkdown event has been removed. Please update your code and set onProcessMarkdown instead."; + }, + elementAlreadyParented: function() { + return "The element already belongs to another container."; + }, + actionAlreadyParented: function() { + return "The action already belongs to another element."; + }, + elementTypeNotStandalone: function(typeName) { + return "Elements of type ".concat(typeName, " cannot be used as standalone elements."); + } + }; + Strings2.magicCodeInputCard = { + tryAgain: function() { + return "That didn't work... let's try again."; + }, + pleaseLogin: function() { + return 'Please login in the popup. You will obtain a magic code. Paste that code below and select "Submit"'; + }, + enterMagicCode: function() { + return "Enter magic code"; + }, + pleaseEnterMagicCodeYouReceived: function() { + return "Please enter the magic code you received."; + }, + submit: function() { + return "Submit"; + }, + cancel: function() { + return "Cancel"; + }, + somethingWentWrong: function() { + return "Something went wrong. This action can't be handled."; + }, + authenticationFailed: function() { + return "Authentication failed."; + } + }; + Strings2.runtime = { + automaticRefreshPaused: function() { + return "Automatic refresh paused."; + }, + clckToRestartAutomaticRefresh: function() { + return "Click to restart."; + }, + refreshThisCard: function() { + return "Refresh this card"; + } + }; + Strings2.hints = { + dontUseWeightedAndStrecthedColumnsInSameSet: function() { + return "It is not recommended to use weighted and stretched columns in the same ColumnSet, because in such a situation stretched columns will always get the minimum amount of space."; + } + }; + Strings2.defaults = { + inlineActionTitle: function() { + return "Inline Action"; + }, + overflowButtonText: function() { + return "..."; + }, + mediaPlayerAriaLabel: function() { + return "Media content"; + }, + mediaPlayerPlayMedia: function() { + return "Play media"; + }, + youTubeVideoPlayer: function() { + return "YouTube video player"; + }, + vimeoVideoPlayer: function() { + return "Vimeo video player"; + }, + dailymotionVideoPlayer: function() { + return "Dailymotion video player"; + } + }; + return Strings2; + }() + ); + exports.Strings = Strings; + } +}); + +// node_modules/adaptivecards/lib/enums.js +var require_enums = __commonJS({ + "node_modules/adaptivecards/lib/enums.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.LogLevel = exports.RefreshMode = exports.TypeErrorType = exports.ContainerFitStatus = exports.ValidationEvent = exports.ValidationPhase = exports.InputTextStyle = exports.ActionIconPlacement = exports.FillMode = exports.Orientation = exports.ShowCardActionMode = exports.ImageStyle = exports.ActionAlignment = exports.VerticalAlignment = exports.HorizontalAlignment = exports.TextColor = exports.Spacing = exports.FontType = exports.TextWeight = exports.TextSize = exports.SizeUnit = exports.ImageSize = exports.Size = exports.ActionMode = exports.ActionStyle = exports.ContainerStyle = void 0; + var ContainerStyle = ( + /** @class */ + function() { + function ContainerStyle2() { + } + ContainerStyle2.Default = "default"; + ContainerStyle2.Emphasis = "emphasis"; + ContainerStyle2.Accent = "accent"; + ContainerStyle2.Good = "good"; + ContainerStyle2.Attention = "attention"; + ContainerStyle2.Warning = "warning"; + return ContainerStyle2; + }() + ); + exports.ContainerStyle = ContainerStyle; + var ActionStyle = ( + /** @class */ + function() { + function ActionStyle2() { + } + ActionStyle2.Default = "default"; + ActionStyle2.Positive = "positive"; + ActionStyle2.Destructive = "destructive"; + return ActionStyle2; + }() + ); + exports.ActionStyle = ActionStyle; + var ActionMode = ( + /** @class */ + function() { + function ActionMode2() { + } + ActionMode2.Primary = "primary"; + ActionMode2.Secondary = "secondary"; + return ActionMode2; + }() + ); + exports.ActionMode = ActionMode; + var Size; + (function(Size2) { + Size2[Size2["Auto"] = 0] = "Auto"; + Size2[Size2["Stretch"] = 1] = "Stretch"; + Size2[Size2["Small"] = 2] = "Small"; + Size2[Size2["Medium"] = 3] = "Medium"; + Size2[Size2["Large"] = 4] = "Large"; + })(Size = exports.Size || (exports.Size = {})); + var ImageSize; + (function(ImageSize2) { + ImageSize2[ImageSize2["Small"] = 0] = "Small"; + ImageSize2[ImageSize2["Medium"] = 1] = "Medium"; + ImageSize2[ImageSize2["Large"] = 2] = "Large"; + })(ImageSize = exports.ImageSize || (exports.ImageSize = {})); + var SizeUnit; + (function(SizeUnit2) { + SizeUnit2[SizeUnit2["Weight"] = 0] = "Weight"; + SizeUnit2[SizeUnit2["Pixel"] = 1] = "Pixel"; + })(SizeUnit = exports.SizeUnit || (exports.SizeUnit = {})); + var TextSize; + (function(TextSize2) { + TextSize2[TextSize2["Small"] = 0] = "Small"; + TextSize2[TextSize2["Default"] = 1] = "Default"; + TextSize2[TextSize2["Medium"] = 2] = "Medium"; + TextSize2[TextSize2["Large"] = 3] = "Large"; + TextSize2[TextSize2["ExtraLarge"] = 4] = "ExtraLarge"; + })(TextSize = exports.TextSize || (exports.TextSize = {})); + var TextWeight; + (function(TextWeight2) { + TextWeight2[TextWeight2["Lighter"] = 0] = "Lighter"; + TextWeight2[TextWeight2["Default"] = 1] = "Default"; + TextWeight2[TextWeight2["Bolder"] = 2] = "Bolder"; + })(TextWeight = exports.TextWeight || (exports.TextWeight = {})); + var FontType; + (function(FontType2) { + FontType2[FontType2["Default"] = 0] = "Default"; + FontType2[FontType2["Monospace"] = 1] = "Monospace"; + })(FontType = exports.FontType || (exports.FontType = {})); + var Spacing; + (function(Spacing2) { + Spacing2[Spacing2["None"] = 0] = "None"; + Spacing2[Spacing2["Small"] = 1] = "Small"; + Spacing2[Spacing2["Default"] = 2] = "Default"; + Spacing2[Spacing2["Medium"] = 3] = "Medium"; + Spacing2[Spacing2["Large"] = 4] = "Large"; + Spacing2[Spacing2["ExtraLarge"] = 5] = "ExtraLarge"; + Spacing2[Spacing2["Padding"] = 6] = "Padding"; + })(Spacing = exports.Spacing || (exports.Spacing = {})); + var TextColor; + (function(TextColor2) { + TextColor2[TextColor2["Default"] = 0] = "Default"; + TextColor2[TextColor2["Dark"] = 1] = "Dark"; + TextColor2[TextColor2["Light"] = 2] = "Light"; + TextColor2[TextColor2["Accent"] = 3] = "Accent"; + TextColor2[TextColor2["Good"] = 4] = "Good"; + TextColor2[TextColor2["Warning"] = 5] = "Warning"; + TextColor2[TextColor2["Attention"] = 6] = "Attention"; + })(TextColor = exports.TextColor || (exports.TextColor = {})); + var HorizontalAlignment; + (function(HorizontalAlignment2) { + HorizontalAlignment2[HorizontalAlignment2["Left"] = 0] = "Left"; + HorizontalAlignment2[HorizontalAlignment2["Center"] = 1] = "Center"; + HorizontalAlignment2[HorizontalAlignment2["Right"] = 2] = "Right"; + })(HorizontalAlignment = exports.HorizontalAlignment || (exports.HorizontalAlignment = {})); + var VerticalAlignment; + (function(VerticalAlignment2) { + VerticalAlignment2[VerticalAlignment2["Top"] = 0] = "Top"; + VerticalAlignment2[VerticalAlignment2["Center"] = 1] = "Center"; + VerticalAlignment2[VerticalAlignment2["Bottom"] = 2] = "Bottom"; + })(VerticalAlignment = exports.VerticalAlignment || (exports.VerticalAlignment = {})); + var ActionAlignment; + (function(ActionAlignment2) { + ActionAlignment2[ActionAlignment2["Left"] = 0] = "Left"; + ActionAlignment2[ActionAlignment2["Center"] = 1] = "Center"; + ActionAlignment2[ActionAlignment2["Right"] = 2] = "Right"; + ActionAlignment2[ActionAlignment2["Stretch"] = 3] = "Stretch"; + })(ActionAlignment = exports.ActionAlignment || (exports.ActionAlignment = {})); + var ImageStyle; + (function(ImageStyle2) { + ImageStyle2[ImageStyle2["Default"] = 0] = "Default"; + ImageStyle2[ImageStyle2["Person"] = 1] = "Person"; + })(ImageStyle = exports.ImageStyle || (exports.ImageStyle = {})); + var ShowCardActionMode; + (function(ShowCardActionMode2) { + ShowCardActionMode2[ShowCardActionMode2["Inline"] = 0] = "Inline"; + ShowCardActionMode2[ShowCardActionMode2["Popup"] = 1] = "Popup"; + })(ShowCardActionMode = exports.ShowCardActionMode || (exports.ShowCardActionMode = {})); + var Orientation; + (function(Orientation2) { + Orientation2[Orientation2["Horizontal"] = 0] = "Horizontal"; + Orientation2[Orientation2["Vertical"] = 1] = "Vertical"; + })(Orientation = exports.Orientation || (exports.Orientation = {})); + var FillMode; + (function(FillMode2) { + FillMode2[FillMode2["Cover"] = 0] = "Cover"; + FillMode2[FillMode2["RepeatHorizontally"] = 1] = "RepeatHorizontally"; + FillMode2[FillMode2["RepeatVertically"] = 2] = "RepeatVertically"; + FillMode2[FillMode2["Repeat"] = 3] = "Repeat"; + })(FillMode = exports.FillMode || (exports.FillMode = {})); + var ActionIconPlacement; + (function(ActionIconPlacement2) { + ActionIconPlacement2[ActionIconPlacement2["LeftOfTitle"] = 0] = "LeftOfTitle"; + ActionIconPlacement2[ActionIconPlacement2["AboveTitle"] = 1] = "AboveTitle"; + })(ActionIconPlacement = exports.ActionIconPlacement || (exports.ActionIconPlacement = {})); + var InputTextStyle; + (function(InputTextStyle2) { + InputTextStyle2[InputTextStyle2["Text"] = 0] = "Text"; + InputTextStyle2[InputTextStyle2["Tel"] = 1] = "Tel"; + InputTextStyle2[InputTextStyle2["Url"] = 2] = "Url"; + InputTextStyle2[InputTextStyle2["Email"] = 3] = "Email"; + InputTextStyle2[InputTextStyle2["Password"] = 4] = "Password"; + })(InputTextStyle = exports.InputTextStyle || (exports.InputTextStyle = {})); + var ValidationPhase; + (function(ValidationPhase2) { + ValidationPhase2[ValidationPhase2["Parse"] = 0] = "Parse"; + ValidationPhase2[ValidationPhase2["ToJSON"] = 1] = "ToJSON"; + ValidationPhase2[ValidationPhase2["Validation"] = 2] = "Validation"; + })(ValidationPhase = exports.ValidationPhase || (exports.ValidationPhase = {})); + var ValidationEvent; + (function(ValidationEvent2) { + ValidationEvent2[ValidationEvent2["Hint"] = 0] = "Hint"; + ValidationEvent2[ValidationEvent2["ActionTypeNotAllowed"] = 1] = "ActionTypeNotAllowed"; + ValidationEvent2[ValidationEvent2["CollectionCantBeEmpty"] = 2] = "CollectionCantBeEmpty"; + ValidationEvent2[ValidationEvent2["Deprecated"] = 3] = "Deprecated"; + ValidationEvent2[ValidationEvent2["ElementTypeNotAllowed"] = 4] = "ElementTypeNotAllowed"; + ValidationEvent2[ValidationEvent2["InteractivityNotAllowed"] = 5] = "InteractivityNotAllowed"; + ValidationEvent2[ValidationEvent2["InvalidPropertyValue"] = 6] = "InvalidPropertyValue"; + ValidationEvent2[ValidationEvent2["MissingCardType"] = 7] = "MissingCardType"; + ValidationEvent2[ValidationEvent2["PropertyCantBeNull"] = 8] = "PropertyCantBeNull"; + ValidationEvent2[ValidationEvent2["TooManyActions"] = 9] = "TooManyActions"; + ValidationEvent2[ValidationEvent2["UnknownActionType"] = 10] = "UnknownActionType"; + ValidationEvent2[ValidationEvent2["UnknownElementType"] = 11] = "UnknownElementType"; + ValidationEvent2[ValidationEvent2["UnsupportedCardVersion"] = 12] = "UnsupportedCardVersion"; + ValidationEvent2[ValidationEvent2["DuplicateId"] = 13] = "DuplicateId"; + ValidationEvent2[ValidationEvent2["UnsupportedProperty"] = 14] = "UnsupportedProperty"; + ValidationEvent2[ValidationEvent2["RequiredInputsShouldHaveLabel"] = 15] = "RequiredInputsShouldHaveLabel"; + ValidationEvent2[ValidationEvent2["RequiredInputsShouldHaveErrorMessage"] = 16] = "RequiredInputsShouldHaveErrorMessage"; + ValidationEvent2[ValidationEvent2["Other"] = 17] = "Other"; + })(ValidationEvent = exports.ValidationEvent || (exports.ValidationEvent = {})); + var ContainerFitStatus; + (function(ContainerFitStatus2) { + ContainerFitStatus2[ContainerFitStatus2["FullyInContainer"] = 0] = "FullyInContainer"; + ContainerFitStatus2[ContainerFitStatus2["Overflowing"] = 1] = "Overflowing"; + ContainerFitStatus2[ContainerFitStatus2["FullyOutOfContainer"] = 2] = "FullyOutOfContainer"; + })(ContainerFitStatus = exports.ContainerFitStatus || (exports.ContainerFitStatus = {})); + var TypeErrorType; + (function(TypeErrorType2) { + TypeErrorType2[TypeErrorType2["UnknownType"] = 0] = "UnknownType"; + TypeErrorType2[TypeErrorType2["ForbiddenType"] = 1] = "ForbiddenType"; + })(TypeErrorType = exports.TypeErrorType || (exports.TypeErrorType = {})); + var RefreshMode; + (function(RefreshMode2) { + RefreshMode2[RefreshMode2["Disabled"] = 0] = "Disabled"; + RefreshMode2[RefreshMode2["Manual"] = 1] = "Manual"; + RefreshMode2[RefreshMode2["Automatic"] = 2] = "Automatic"; + })(RefreshMode = exports.RefreshMode || (exports.RefreshMode = {})); + var LogLevel; + (function(LogLevel2) { + LogLevel2[LogLevel2["Info"] = 0] = "Info"; + LogLevel2[LogLevel2["Warning"] = 1] = "Warning"; + LogLevel2[LogLevel2["Error"] = 2] = "Error"; + })(LogLevel = exports.LogLevel || (exports.LogLevel = {})); + } +}); + +// node_modules/adaptivecards/lib/shared.js +var require_shared = __commonJS({ + "node_modules/adaptivecards/lib/shared.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.UUID = exports.SizeAndUnit = exports.PaddingDefinition = exports.SpacingDefinition = exports.StringWithSubstitutions = exports.ContentTypes = exports.GlobalSettings = void 0; + var Enums = require_enums(); + var GlobalSettings = ( + /** @class */ + function() { + function GlobalSettings2() { + } + GlobalSettings2.useAdvancedTextBlockTruncation = true; + GlobalSettings2.useAdvancedCardBottomTruncation = false; + GlobalSettings2.useMarkdownInRadioButtonAndCheckbox = true; + GlobalSettings2.allowMarkForTextHighlighting = false; + GlobalSettings2.alwaysBleedSeparators = false; + GlobalSettings2.enableFullJsonRoundTrip = false; + GlobalSettings2.displayInputValidationErrors = true; + GlobalSettings2.allowPreProcessingPropertyValues = false; + GlobalSettings2.setTabIndexAtCardRoot = true; + GlobalSettings2.enableFallback = true; + GlobalSettings2.useWebkitLineClamp = true; + GlobalSettings2.allowMoreThanMaxActionsInOverflowMenu = false; + GlobalSettings2.removePaddingFromContainersWithBackgroundImage = false; + GlobalSettings2.resetInputsDirtyStateAfterActionExecution = true; + GlobalSettings2.applets = { + logEnabled: true, + logLevel: Enums.LogLevel.Error, + maximumRetryAttempts: 3, + defaultTimeBetweenRetryAttempts: 3e3, + authPromptWidth: 400, + authPromptHeight: 600, + refresh: { + mode: Enums.RefreshMode.Manual, + timeBetweenAutomaticRefreshes: 3e3, + maximumConsecutiveAutomaticRefreshes: 3, + allowManualRefreshesAfterAutomaticRefreshes: true + } + }; + return GlobalSettings2; + }() + ); + exports.GlobalSettings = GlobalSettings; + exports.ContentTypes = { + applicationJson: "application/json", + applicationXWwwFormUrlencoded: "application/x-www-form-urlencoded" + }; + var StringWithSubstitutions = ( + /** @class */ + function() { + function StringWithSubstitutions2() { + this._isProcessed = false; + } + StringWithSubstitutions2.prototype.getReferencedInputs = function(inputs, referencedInputs) { + if (!referencedInputs) { + throw new Error("The referencedInputs parameter cannot be null."); + } + if (this._original) { + for (var _i = 0, inputs_1 = inputs; _i < inputs_1.length; _i++) { + var input = inputs_1[_i]; + var matches = new RegExp("\\{{2}(" + input.id + ").value\\}{2}", "gi").exec(this._original); + if (matches != null && input.id) { + referencedInputs[input.id] = input; + } + } + } + }; + StringWithSubstitutions2.prototype.substituteInputValues = function(inputs, contentType) { + this._processed = this._original; + if (this._original) { + var regEx = /\{{2}([a-z0-9_$@]+).value\}{2}/gi; + var matches = void 0; + while ((matches = regEx.exec(this._original)) !== null && this._processed) { + for (var _i = 0, _a = Object.keys(inputs); _i < _a.length; _i++) { + var key = _a[_i]; + if (key.toLowerCase() === matches[1].toLowerCase()) { + var matchedInput = inputs[key]; + var valueForReplace = ""; + if (matchedInput.value) { + valueForReplace = matchedInput.value; + } + if (contentType === exports.ContentTypes.applicationJson) { + valueForReplace = JSON.stringify(valueForReplace); + valueForReplace = valueForReplace.slice(1, -1); + } else if (contentType === exports.ContentTypes.applicationXWwwFormUrlencoded) { + valueForReplace = encodeURIComponent(valueForReplace); + } + this._processed = this._processed.replace(matches[0], valueForReplace); + break; + } + } + } + } + this._isProcessed = true; + }; + StringWithSubstitutions2.prototype.getOriginal = function() { + return this._original; + }; + StringWithSubstitutions2.prototype.get = function() { + if (!this._isProcessed) { + return this._original; + } else { + return this._processed; + } + }; + StringWithSubstitutions2.prototype.set = function(value) { + this._original = value; + this._isProcessed = false; + }; + return StringWithSubstitutions2; + }() + ); + exports.StringWithSubstitutions = StringWithSubstitutions; + var SpacingDefinition = ( + /** @class */ + /* @__PURE__ */ function() { + function SpacingDefinition2(top, right, bottom, left) { + if (top === void 0) { + top = 0; + } + if (right === void 0) { + right = 0; + } + if (bottom === void 0) { + bottom = 0; + } + if (left === void 0) { + left = 0; + } + this.left = 0; + this.top = 0; + this.right = 0; + this.bottom = 0; + this.top = top; + this.right = right; + this.bottom = bottom; + this.left = left; + } + return SpacingDefinition2; + }() + ); + exports.SpacingDefinition = SpacingDefinition; + var PaddingDefinition = ( + /** @class */ + /* @__PURE__ */ function() { + function PaddingDefinition2(top, right, bottom, left) { + if (top === void 0) { + top = Enums.Spacing.None; + } + if (right === void 0) { + right = Enums.Spacing.None; + } + if (bottom === void 0) { + bottom = Enums.Spacing.None; + } + if (left === void 0) { + left = Enums.Spacing.None; + } + this.top = Enums.Spacing.None; + this.right = Enums.Spacing.None; + this.bottom = Enums.Spacing.None; + this.left = Enums.Spacing.None; + this.top = top; + this.right = right; + this.bottom = bottom; + this.left = left; + } + return PaddingDefinition2; + }() + ); + exports.PaddingDefinition = PaddingDefinition; + var SizeAndUnit = ( + /** @class */ + function() { + function SizeAndUnit2(physicalSize, unit) { + this.physicalSize = physicalSize; + this.unit = unit; + } + SizeAndUnit2.parse = function(input, requireUnitSpecifier) { + if (requireUnitSpecifier === void 0) { + requireUnitSpecifier = false; + } + var result = new SizeAndUnit2(0, Enums.SizeUnit.Weight); + if (typeof input === "number") { + result.physicalSize = input; + return result; + } else if (typeof input === "string") { + var regExp = /^([0-9]+)(px|\*)?$/g; + var matches = regExp.exec(input); + var expectedMatchCount = requireUnitSpecifier ? 3 : 2; + if (matches && matches.length >= expectedMatchCount) { + result.physicalSize = parseInt(matches[1]); + if (matches.length === 3) { + if (matches[2] === "px") { + result.unit = Enums.SizeUnit.Pixel; + } + } + return result; + } + } + throw new Error("Invalid size: " + input); + }; + return SizeAndUnit2; + }() + ); + exports.SizeAndUnit = SizeAndUnit; + var UUID = ( + /** @class */ + function() { + function UUID2() { + } + UUID2.generate = function() { + var d0 = Math.random() * 4294967295 | 0; + var d1 = Math.random() * 4294967295 | 0; + var d2 = Math.random() * 4294967295 | 0; + var d3 = Math.random() * 4294967295 | 0; + return UUID2.lut[d0 & 255] + UUID2.lut[d0 >> 8 & 255] + UUID2.lut[d0 >> 16 & 255] + UUID2.lut[d0 >> 24 & 255] + "-" + UUID2.lut[d1 & 255] + UUID2.lut[d1 >> 8 & 255] + "-" + UUID2.lut[d1 >> 16 & 15 | 64] + UUID2.lut[d1 >> 24 & 255] + "-" + UUID2.lut[d2 & 63 | 128] + UUID2.lut[d2 >> 8 & 255] + "-" + UUID2.lut[d2 >> 16 & 255] + UUID2.lut[d2 >> 24 & 255] + UUID2.lut[d3 & 255] + UUID2.lut[d3 >> 8 & 255] + UUID2.lut[d3 >> 16 & 255] + UUID2.lut[d3 >> 24 & 255]; + }; + UUID2.initialize = function() { + for (var i = 0; i < 256; i++) { + UUID2.lut[i] = (i < 16 ? "0" : "") + i.toString(16); + } + }; + UUID2.lut = []; + return UUID2; + }() + ); + exports.UUID = UUID; + UUID.initialize(); + } +}); + +// node_modules/adaptivecards/lib/utils.js +var require_utils = __commonJS({ + "node_modules/adaptivecards/lib/utils.js"(exports) { + "use strict"; + var _a; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.clearElementChildren = exports.getScrollY = exports.getScrollX = exports.getFitStatus = exports.truncate = exports.truncateText = exports.stringToCssColor = exports.parseEnum = exports.getEnumValueByName = exports.parseBool = exports.parseNumber = exports.parseString = exports.appendChild = exports.generateUniqueId = exports.isMobileOS = exports.isInternetExplorer = void 0; + var Enums = require_enums(); + var Shared = require_shared(); + function isInternetExplorer() { + return window.document.documentMode !== void 0; + } + exports.isInternetExplorer = isInternetExplorer; + function isMobileOS() { + var userAgent = window.navigator.userAgent; + return !!userAgent.match(/Android/i) || !!userAgent.match(/iPad/i) || !!userAgent.match(/iPhone/i); + } + exports.isMobileOS = isMobileOS; + function generateUniqueId() { + return "__ac-" + Shared.UUID.generate(); + } + exports.generateUniqueId = generateUniqueId; + function appendChild(node, child) { + if (child) { + node.appendChild(child); + } + } + exports.appendChild = appendChild; + function parseString(obj, defaultValue) { + return typeof obj === "string" ? obj : defaultValue; + } + exports.parseString = parseString; + function parseNumber(obj, defaultValue) { + return typeof obj === "number" ? obj : defaultValue; + } + exports.parseNumber = parseNumber; + function parseBool(value, defaultValue) { + if (typeof value === "boolean") { + return value; + } else if (typeof value === "string") { + switch (value.toLowerCase()) { + case "true": + return true; + case "false": + return false; + default: + return defaultValue; + } + } + return defaultValue; + } + exports.parseBool = parseBool; + function getEnumValueByName(enumType, name) { + for (var key in enumType) { + var keyAsNumber = parseInt(key, 10); + if (keyAsNumber >= 0) { + var value = enumType[key]; + if (value && typeof value === "string" && value.toLowerCase() === name.toLowerCase()) { + return keyAsNumber; + } + } + } + return void 0; + } + exports.getEnumValueByName = getEnumValueByName; + function parseEnum(enumType, name, defaultValue) { + if (!name) { + return defaultValue; + } + var enumValue = getEnumValueByName(enumType, name); + return enumValue !== void 0 ? enumValue : defaultValue; + } + exports.parseEnum = parseEnum; + function stringToCssColor(color) { + if (color) { + var regEx = /#([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})?/gi; + var matches = regEx.exec(color); + if (matches && matches[4]) { + var a = parseInt(matches[1], 16) / 255; + var r = parseInt(matches[2], 16); + var g = parseInt(matches[3], 16); + var b = parseInt(matches[4], 16); + return "rgba(" + r + "," + g + "," + b + "," + a + ")"; + } + } + return color; + } + exports.stringToCssColor = stringToCssColor; + function truncateWorker(element, maxHeight, fullText, truncateAt, lineHeight) { + var fits = function() { + return maxHeight - element.scrollHeight >= -1; + }; + if (fits()) { + return; + } + var breakableIndices = findBreakableIndices(fullText); + var lo = 0; + var hi = breakableIndices.length; + var bestBreakIdx = 0; + while (lo < hi) { + var mid = Math.floor((lo + hi) / 2); + truncateAt(fullText, breakableIndices[mid]); + if (fits()) { + bestBreakIdx = breakableIndices[mid]; + lo = mid + 1; + } else { + hi = mid; + } + } + truncateAt(fullText, bestBreakIdx); + if (lineHeight && maxHeight - element.scrollHeight >= lineHeight - 1) { + var idx = findNextCharacter(fullText, bestBreakIdx); + while (idx < fullText.length) { + truncateAt(fullText, idx); + if (fits()) { + bestBreakIdx = idx; + idx = findNextCharacter(fullText, idx); + } else { + break; + } + } + truncateAt(fullText, bestBreakIdx); + } + } + function truncateText(element, maxHeight, lineHeight) { + truncateWorker(element, maxHeight, element.innerText, function(text, idx) { + element.innerText = text.substring(0, idx) + "..."; + }, lineHeight); + } + exports.truncateText = truncateText; + var ttDeprecatedPolicy = typeof window === "undefined" ? void 0 : (_a = window.trustedTypes) === null || _a === void 0 ? void 0 : _a.createPolicy("adaptivecards#deprecatedExportedFunctionPolicy", { + createHTML: function(value) { + return value; + } + }); + function truncate(element, maxHeight, lineHeight) { + truncateWorker(element, maxHeight, element.innerHTML, function(text, idx) { + var _a2; + var truncatedString = text.substring(0, idx) + "..."; + var truncatedHTML = (_a2 = ttDeprecatedPolicy === null || ttDeprecatedPolicy === void 0 ? void 0 : ttDeprecatedPolicy.createHTML(truncatedString)) !== null && _a2 !== void 0 ? _a2 : truncatedString; + element.innerHTML = truncatedHTML; + }, lineHeight); + } + exports.truncate = truncate; + function findBreakableIndices(html) { + var results = []; + var idx = findNextCharacter(html, -1); + while (idx < html.length) { + if (html[idx] === " ") { + results.push(idx); + } + idx = findNextCharacter(html, idx); + } + return results; + } + function findNextCharacter(html, currIdx) { + currIdx += 1; + while (currIdx < html.length && html[currIdx] === "<") { + while (currIdx < html.length && html[currIdx++] !== ">") { + continue; + } + } + return currIdx; + } + function getFitStatus(element, containerEnd) { + var start = element.offsetTop; + var end = start + element.clientHeight; + if (end <= containerEnd) { + return Enums.ContainerFitStatus.FullyInContainer; + } else if (start < containerEnd) { + return Enums.ContainerFitStatus.Overflowing; + } else { + return Enums.ContainerFitStatus.FullyOutOfContainer; + } + } + exports.getFitStatus = getFitStatus; + function getScrollX() { + return window.pageXOffset; + } + exports.getScrollX = getScrollX; + function getScrollY() { + return window.pageYOffset; + } + exports.getScrollY = getScrollY; + function clearElementChildren(element) { + while (element.firstChild) { + element.removeChild(element.firstChild); + } + } + exports.clearElementChildren = clearElementChildren; + } +}); + +// node_modules/adaptivecards/lib/serialization.js +var require_serialization = __commonJS({ + "node_modules/adaptivecards/lib/serialization.js"(exports) { + "use strict"; + var __extends = exports && exports.__extends || /* @__PURE__ */ function() { + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { + d2.__proto__ = b2; + } || function(d2, b2) { + for (var p in b2) + if (Object.prototype.hasOwnProperty.call(b2, p)) + d2[p] = b2[p]; + }; + return extendStatics(d, b); + }; + return function(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { + this.constructor = d; + } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + }(); + Object.defineProperty(exports, "__esModule", { value: true }); + exports.SerializableObject = exports.property = exports.SerializableObjectSchema = exports.CustomProperty = exports.SerializableObjectCollectionProperty = exports.SerializableObjectProperty = exports.EnumProperty = exports.ValueSetProperty = exports.StringArrayProperty = exports.PixelSizeProperty = exports.NumProperty = exports.BoolProperty = exports.StringProperty = exports.PropertyDefinition = exports.BaseSerializationContext = exports.isVersionLessOrEqual = exports.Versions = exports.Version = void 0; + var shared_1 = require_shared(); + var Utils = require_utils(); + var Enums = require_enums(); + var strings_1 = require_strings(); + var Version = ( + /** @class */ + function() { + function Version2(major, minor, label) { + if (major === void 0) { + major = 1; + } + if (minor === void 0) { + minor = 1; + } + this._isValid = true; + this._major = major; + this._minor = minor; + this._label = label; + } + Version2.parse = function(versionString, context) { + if (!versionString) { + return void 0; + } + var result = new Version2(); + result._versionString = versionString; + var regEx = /(\d+).(\d+)/gi; + var matches = regEx.exec(versionString); + if (matches != null && matches.length === 3) { + result._major = parseInt(matches[1]); + result._minor = parseInt(matches[2]); + } else { + result._isValid = false; + } + if (!result._isValid) { + context.logParseEvent(void 0, Enums.ValidationEvent.InvalidPropertyValue, strings_1.Strings.errors.invalidVersionString(result._versionString)); + } + return result; + }; + Version2.prototype.toString = function() { + return !this._isValid ? this._versionString : this._major + "." + this._minor; + }; + Version2.prototype.toJSON = function() { + return this.toString(); + }; + Version2.prototype.compareTo = function(otherVersion) { + if (!this.isValid || !otherVersion.isValid) { + throw new Error("Cannot compare invalid version."); + } + if (this.major > otherVersion.major) { + return 1; + } else if (this.major < otherVersion.major) { + return -1; + } else if (this.minor > otherVersion.minor) { + return 1; + } else if (this.minor < otherVersion.minor) { + return -1; + } + return 0; + }; + Object.defineProperty(Version2.prototype, "label", { + get: function() { + return this._label ? this._label : this.toString(); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Version2.prototype, "major", { + get: function() { + return this._major; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Version2.prototype, "minor", { + get: function() { + return this._minor; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Version2.prototype, "isValid", { + get: function() { + return this._isValid; + }, + enumerable: false, + configurable: true + }); + return Version2; + }() + ); + exports.Version = Version; + var Versions = ( + /** @class */ + function() { + function Versions2() { + } + Versions2.getAllDeclaredVersions = function() { + var ctor = Versions2; + var properties = []; + for (var propertyName in ctor) { + if (propertyName.match(/^v[0-9_]*$/)) { + try { + var propertyValue = ctor[propertyName]; + if (propertyValue instanceof Version) { + properties.push(propertyValue); + } + } catch (_a) { + } + } + } + return properties.sort(function(v1, v2) { + return v1.compareTo(v2); + }); + }; + Versions2.v1_0 = new Version(1, 0); + Versions2.v1_1 = new Version(1, 1); + Versions2.v1_2 = new Version(1, 2); + Versions2.v1_3 = new Version(1, 3); + Versions2.v1_4 = new Version(1, 4); + Versions2.v1_5 = new Version(1, 5); + Versions2.v1_6 = new Version(1, 6, "1.6 Preview"); + Versions2.latest = Versions2.v1_5; + return Versions2; + }() + ); + exports.Versions = Versions; + function isVersionLessOrEqual(version, targetVersion) { + if (version instanceof Version) { + if (targetVersion instanceof Version) { + return targetVersion.compareTo(version) >= 0; + } else { + return true; + } + } else { + return true; + } + } + exports.isVersionLessOrEqual = isVersionLessOrEqual; + var BaseSerializationContext = ( + /** @class */ + function() { + function BaseSerializationContext2(targetVersion) { + if (targetVersion === void 0) { + targetVersion = Versions.latest; + } + this._validationEvents = []; + this.targetVersion = targetVersion; + } + BaseSerializationContext2.prototype.serializeValue = function(target, propertyName, propertyValue, defaultValue, forceDeleteIfNullOrDefault) { + if (defaultValue === void 0) { + defaultValue = void 0; + } + if (forceDeleteIfNullOrDefault === void 0) { + forceDeleteIfNullOrDefault = false; + } + if (propertyValue === null || propertyValue === void 0 || propertyValue === defaultValue) { + if (!shared_1.GlobalSettings.enableFullJsonRoundTrip || forceDeleteIfNullOrDefault) { + delete target[propertyName]; + } + } else if (propertyValue === defaultValue) { + delete target[propertyName]; + } else { + target[propertyName] = propertyValue; + } + }; + BaseSerializationContext2.prototype.serializeString = function(target, propertyName, propertyValue, defaultValue) { + if (propertyValue === null || propertyValue === void 0 || propertyValue === defaultValue) { + if (!shared_1.GlobalSettings.enableFullJsonRoundTrip) { + delete target[propertyName]; + } + } else { + target[propertyName] = propertyValue; + } + }; + BaseSerializationContext2.prototype.serializeBool = function(target, propertyName, propertyValue, defaultValue) { + if (propertyValue === null || propertyValue === void 0 || propertyValue === defaultValue) { + if (!shared_1.GlobalSettings.enableFullJsonRoundTrip) { + delete target[propertyName]; + } + } else { + target[propertyName] = propertyValue; + } + }; + BaseSerializationContext2.prototype.serializeNumber = function(target, propertyName, propertyValue, defaultValue) { + if (propertyValue === null || propertyValue === void 0 || propertyValue === defaultValue || isNaN(propertyValue)) { + if (!shared_1.GlobalSettings.enableFullJsonRoundTrip) { + delete target[propertyName]; + } + } else { + target[propertyName] = propertyValue; + } + }; + BaseSerializationContext2.prototype.serializeEnum = function(enumType, target, propertyName, propertyValue, defaultValue) { + if (defaultValue === void 0) { + defaultValue = void 0; + } + if (propertyValue === null || propertyValue === void 0 || propertyValue === defaultValue) { + if (!shared_1.GlobalSettings.enableFullJsonRoundTrip) { + delete target[propertyName]; + } + } else { + target[propertyName] = enumType[propertyValue]; + } + }; + BaseSerializationContext2.prototype.serializeArray = function(target, propertyName, propertyValue) { + var items = []; + if (propertyValue) { + for (var _i = 0, propertyValue_1 = propertyValue; _i < propertyValue_1.length; _i++) { + var item = propertyValue_1[_i]; + var serializedItem = void 0; + if (item instanceof SerializableObject) { + serializedItem = item.toJSON(this); + } else if (item.toJSON) { + serializedItem = item.toJSON(); + } else { + serializedItem = item; + } + if (serializedItem !== void 0) { + items.push(serializedItem); + } + } + } + if (items.length === 0) { + if (target.hasOwnProperty(propertyName) && Array.isArray(target[propertyName])) { + delete target[propertyName]; + } + } else { + this.serializeValue(target, propertyName, items); + } + }; + BaseSerializationContext2.prototype.clearEvents = function() { + this._validationEvents = []; + }; + BaseSerializationContext2.prototype.logEvent = function(source, phase, event, message) { + this._validationEvents.push({ + source, + phase, + event, + message + }); + }; + BaseSerializationContext2.prototype.logParseEvent = function(source, event, message) { + this.logEvent(source, Enums.ValidationPhase.Parse, event, message); + }; + BaseSerializationContext2.prototype.getEventAt = function(index) { + return this._validationEvents[index]; + }; + Object.defineProperty(BaseSerializationContext2.prototype, "eventCount", { + get: function() { + return this._validationEvents.length; + }, + enumerable: false, + configurable: true + }); + return BaseSerializationContext2; + }() + ); + exports.BaseSerializationContext = BaseSerializationContext; + var SimpleSerializationContext = ( + /** @class */ + function(_super) { + __extends(SimpleSerializationContext2, _super); + function SimpleSerializationContext2() { + return _super !== null && _super.apply(this, arguments) || this; + } + return SimpleSerializationContext2; + }(BaseSerializationContext) + ); + var PropertyDefinition = ( + /** @class */ + function() { + function PropertyDefinition2(targetVersion, name, defaultValue, onGetInitialValue) { + this.targetVersion = targetVersion; + this.name = name; + this.defaultValue = defaultValue; + this.onGetInitialValue = onGetInitialValue; + this.isSerializationEnabled = true; + this.sequentialNumber = PropertyDefinition2._sequentialNumber; + PropertyDefinition2._sequentialNumber++; + } + PropertyDefinition2.prototype.getInternalName = function() { + return this.name; + }; + PropertyDefinition2.prototype.parse = function(sender, source, context) { + return source[this.name]; + }; + PropertyDefinition2.prototype.toJSON = function(sender, target, value, context) { + context.serializeValue(target, this.name, value, this.defaultValue); + }; + PropertyDefinition2._sequentialNumber = 0; + return PropertyDefinition2; + }() + ); + exports.PropertyDefinition = PropertyDefinition; + var StringProperty = ( + /** @class */ + function(_super) { + __extends(StringProperty2, _super); + function StringProperty2(targetVersion, name, treatEmptyAsUndefined, regEx, defaultValue, onGetInitialValue) { + if (treatEmptyAsUndefined === void 0) { + treatEmptyAsUndefined = true; + } + var _this = _super.call(this, targetVersion, name, defaultValue, onGetInitialValue) || this; + _this.targetVersion = targetVersion; + _this.name = name; + _this.treatEmptyAsUndefined = treatEmptyAsUndefined; + _this.regEx = regEx; + _this.defaultValue = defaultValue; + _this.onGetInitialValue = onGetInitialValue; + return _this; + } + StringProperty2.prototype.parse = function(sender, source, context) { + var parsedValue = Utils.parseString(source[this.name], this.defaultValue); + var isUndefined = parsedValue === void 0 || parsedValue === "" && this.treatEmptyAsUndefined; + if (!isUndefined && this.regEx !== void 0) { + var matches = this.regEx.exec(parsedValue); + if (!matches) { + context.logParseEvent(sender, Enums.ValidationEvent.InvalidPropertyValue, strings_1.Strings.errors.invalidPropertyValue(parsedValue, this.name)); + return void 0; + } + } + return parsedValue; + }; + StringProperty2.prototype.toJSON = function(sender, target, value, context) { + context.serializeString(target, this.name, value === "" && this.treatEmptyAsUndefined ? void 0 : value, this.defaultValue); + }; + return StringProperty2; + }(PropertyDefinition) + ); + exports.StringProperty = StringProperty; + var BoolProperty = ( + /** @class */ + function(_super) { + __extends(BoolProperty2, _super); + function BoolProperty2(targetVersion, name, defaultValue, onGetInitialValue) { + var _this = _super.call(this, targetVersion, name, defaultValue, onGetInitialValue) || this; + _this.targetVersion = targetVersion; + _this.name = name; + _this.defaultValue = defaultValue; + _this.onGetInitialValue = onGetInitialValue; + return _this; + } + BoolProperty2.prototype.parse = function(sender, source, context) { + return Utils.parseBool(source[this.name], this.defaultValue); + }; + BoolProperty2.prototype.toJSON = function(sender, target, value, context) { + context.serializeBool(target, this.name, value, this.defaultValue); + }; + return BoolProperty2; + }(PropertyDefinition) + ); + exports.BoolProperty = BoolProperty; + var NumProperty = ( + /** @class */ + function(_super) { + __extends(NumProperty2, _super); + function NumProperty2(targetVersion, name, defaultValue, onGetInitialValue) { + var _this = _super.call(this, targetVersion, name, defaultValue, onGetInitialValue) || this; + _this.targetVersion = targetVersion; + _this.name = name; + _this.defaultValue = defaultValue; + _this.onGetInitialValue = onGetInitialValue; + return _this; + } + NumProperty2.prototype.parse = function(sender, source, context) { + return Utils.parseNumber(source[this.name], this.defaultValue); + }; + NumProperty2.prototype.toJSON = function(sender, target, value, context) { + context.serializeNumber(target, this.name, value, this.defaultValue); + }; + return NumProperty2; + }(PropertyDefinition) + ); + exports.NumProperty = NumProperty; + var PixelSizeProperty = ( + /** @class */ + function(_super) { + __extends(PixelSizeProperty2, _super); + function PixelSizeProperty2() { + return _super !== null && _super.apply(this, arguments) || this; + } + PixelSizeProperty2.prototype.parse = function(sender, source, context) { + var result = void 0; + var value = source[this.name]; + if (typeof value === "string") { + var isValid = false; + try { + var size = shared_1.SizeAndUnit.parse(value, true); + if (size.unit === Enums.SizeUnit.Pixel) { + result = size.physicalSize; + isValid = true; + } + } catch (_a) { + } + if (!isValid) { + context.logParseEvent(sender, Enums.ValidationEvent.InvalidPropertyValue, strings_1.Strings.errors.invalidPropertyValue(source[this.name], "minHeight")); + } + } + return result; + }; + PixelSizeProperty2.prototype.toJSON = function(sender, target, value, context) { + context.serializeValue(target, this.name, typeof value === "number" && !isNaN(value) ? value + "px" : void 0); + }; + return PixelSizeProperty2; + }(PropertyDefinition) + ); + exports.PixelSizeProperty = PixelSizeProperty; + var StringArrayProperty = ( + /** @class */ + function(_super) { + __extends(StringArrayProperty2, _super); + function StringArrayProperty2(targetVersion, name, defaultValue, onGetInitialValue) { + var _this = _super.call(this, targetVersion, name, defaultValue, onGetInitialValue) || this; + _this.targetVersion = targetVersion; + _this.name = name; + _this.defaultValue = defaultValue; + _this.onGetInitialValue = onGetInitialValue; + return _this; + } + StringArrayProperty2.prototype.parse = function(sender, source, context) { + var sourceValue = source[this.name]; + if (sourceValue === void 0 || !Array.isArray(sourceValue)) { + return this.defaultValue; + } + var result = []; + for (var _i = 0, sourceValue_1 = sourceValue; _i < sourceValue_1.length; _i++) { + var value = sourceValue_1[_i]; + if (typeof value === "string") { + result.push(value); + } else { + context.logParseEvent(sender, Enums.ValidationEvent.InvalidPropertyValue, 'Invalid array value "'.concat(JSON.stringify(value), '" of type "').concat(typeof value, '" ignored for "').concat(this.name, '".')); + } + } + return result; + }; + StringArrayProperty2.prototype.toJSON = function(sender, target, value, context) { + context.serializeArray(target, this.name, value); + }; + return StringArrayProperty2; + }(PropertyDefinition) + ); + exports.StringArrayProperty = StringArrayProperty; + var ValueSetProperty = ( + /** @class */ + function(_super) { + __extends(ValueSetProperty2, _super); + function ValueSetProperty2(targetVersion, name, values, defaultValue, onGetInitialValue) { + var _this = _super.call(this, targetVersion, name, defaultValue, onGetInitialValue) || this; + _this.targetVersion = targetVersion; + _this.name = name; + _this.values = values; + _this.defaultValue = defaultValue; + _this.onGetInitialValue = onGetInitialValue; + return _this; + } + ValueSetProperty2.prototype.isValidValue = function(value, context) { + for (var _i = 0, _a = this.values; _i < _a.length; _i++) { + var versionedValue = _a[_i]; + if (value.toLowerCase() === versionedValue.value.toLowerCase()) { + var targetVersion = versionedValue.targetVersion ? versionedValue.targetVersion : this.targetVersion; + return targetVersion.compareTo(context.targetVersion) <= 0; + } + } + return false; + }; + ValueSetProperty2.prototype.parse = function(sender, source, context) { + var sourceValue = source[this.name]; + if (sourceValue === void 0) { + return this.defaultValue; + } + if (typeof sourceValue === "string") { + for (var _i = 0, _a = this.values; _i < _a.length; _i++) { + var versionedValue = _a[_i]; + if (sourceValue.toLowerCase() === versionedValue.value.toLowerCase()) { + var targetVersion = versionedValue.targetVersion ? versionedValue.targetVersion : this.targetVersion; + if (targetVersion.compareTo(context.targetVersion) <= 0) { + return versionedValue.value; + } else { + context.logParseEvent(sender, Enums.ValidationEvent.InvalidPropertyValue, strings_1.Strings.errors.propertyValueNotSupported(sourceValue, this.name, targetVersion.toString(), context.targetVersion.toString())); + return this.defaultValue; + } + } + } + } + context.logParseEvent(sender, Enums.ValidationEvent.InvalidPropertyValue, strings_1.Strings.errors.invalidPropertyValue(sourceValue, this.name)); + return this.defaultValue; + }; + ValueSetProperty2.prototype.toJSON = function(sender, target, value, context) { + var invalidValue = false; + if (value !== void 0) { + invalidValue = true; + for (var _i = 0, _a = this.values; _i < _a.length; _i++) { + var versionedValue = _a[_i]; + if (versionedValue.value === value) { + var targetVersion = versionedValue.targetVersion ? versionedValue.targetVersion : this.targetVersion; + if (targetVersion.compareTo(context.targetVersion) <= 0) { + invalidValue = false; + break; + } else { + context.logEvent(sender, Enums.ValidationPhase.ToJSON, Enums.ValidationEvent.InvalidPropertyValue, strings_1.Strings.errors.propertyValueNotSupported(value, this.name, targetVersion.toString(), context.targetVersion.toString())); + } + } + } + } + if (!invalidValue) { + context.serializeValue(target, this.name, value, this.defaultValue, true); + } + }; + return ValueSetProperty2; + }(PropertyDefinition) + ); + exports.ValueSetProperty = ValueSetProperty; + var EnumProperty = ( + /** @class */ + function(_super) { + __extends(EnumProperty2, _super); + function EnumProperty2(targetVersion, name, enumType, defaultValue, values, onGetInitialValue) { + var _this = _super.call(this, targetVersion, name, defaultValue, onGetInitialValue) || this; + _this.targetVersion = targetVersion; + _this.name = name; + _this.enumType = enumType; + _this.defaultValue = defaultValue; + _this.onGetInitialValue = onGetInitialValue; + _this._values = []; + if (!values) { + for (var key in enumType) { + var keyAsNumber = parseInt(key, 10); + if (keyAsNumber >= 0) { + _this._values.push({ value: keyAsNumber }); + } + } + } else { + _this._values = values; + } + return _this; + } + EnumProperty2.prototype.parse = function(sender, source, context) { + var sourceValue = source[this.name]; + if (typeof sourceValue !== "string") { + return this.defaultValue; + } + var enumValue = Utils.getEnumValueByName(this.enumType, sourceValue); + if (enumValue !== void 0) { + for (var _i = 0, _a = this.values; _i < _a.length; _i++) { + var versionedValue = _a[_i]; + if (versionedValue.value === enumValue) { + var targetVersion = versionedValue.targetVersion ? versionedValue.targetVersion : this.targetVersion; + if (targetVersion.compareTo(context.targetVersion) <= 0) { + return enumValue; + } else { + context.logParseEvent(sender, Enums.ValidationEvent.InvalidPropertyValue, strings_1.Strings.errors.propertyValueNotSupported(sourceValue, this.name, targetVersion.toString(), context.targetVersion.toString())); + return this.defaultValue; + } + } + } + } + context.logParseEvent(sender, Enums.ValidationEvent.InvalidPropertyValue, strings_1.Strings.errors.invalidPropertyValue(sourceValue, this.name)); + return this.defaultValue; + }; + EnumProperty2.prototype.toJSON = function(sender, target, value, context) { + var invalidValue = false; + if (value !== void 0) { + invalidValue = true; + for (var _i = 0, _a = this.values; _i < _a.length; _i++) { + var versionedValue = _a[_i]; + if (versionedValue.value === value) { + var targetVersion = versionedValue.targetVersion ? versionedValue.targetVersion : this.targetVersion; + if (targetVersion.compareTo(context.targetVersion) <= 0) { + invalidValue = false; + break; + } else { + context.logEvent(sender, Enums.ValidationPhase.ToJSON, Enums.ValidationEvent.InvalidPropertyValue, strings_1.Strings.errors.invalidPropertyValue(value, this.name)); + } + } + } + } + if (!invalidValue) { + context.serializeEnum(this.enumType, target, this.name, value, this.defaultValue); + } + }; + Object.defineProperty(EnumProperty2.prototype, "values", { + get: function() { + return this._values; + }, + enumerable: false, + configurable: true + }); + return EnumProperty2; + }(PropertyDefinition) + ); + exports.EnumProperty = EnumProperty; + var SerializableObjectProperty = ( + /** @class */ + function(_super) { + __extends(SerializableObjectProperty2, _super); + function SerializableObjectProperty2(targetVersion, name, objectType, nullable, defaultValue) { + if (nullable === void 0) { + nullable = false; + } + var _this = _super.call(this, targetVersion, name, defaultValue, function(sender) { + return _this.nullable ? void 0 : new _this.objectType(); + }) || this; + _this.targetVersion = targetVersion; + _this.name = name; + _this.objectType = objectType; + _this.nullable = nullable; + return _this; + } + SerializableObjectProperty2.prototype.parse = function(sender, source, context) { + var sourceValue = source[this.name]; + if (sourceValue === void 0) { + return this.onGetInitialValue ? this.onGetInitialValue(sender) : this.defaultValue; + } + var result = new this.objectType(); + result.parse(sourceValue, context); + return result; + }; + SerializableObjectProperty2.prototype.toJSON = function(sender, target, value, context) { + var serializedValue = void 0; + if (value !== void 0 && !value.hasAllDefaultValues()) { + serializedValue = value.toJSON(context); + } + if (typeof serializedValue === "object" && Object.keys(serializedValue).length === 0) { + serializedValue = void 0; + } + context.serializeValue(target, this.name, serializedValue, this.defaultValue, true); + }; + return SerializableObjectProperty2; + }(PropertyDefinition) + ); + exports.SerializableObjectProperty = SerializableObjectProperty; + var SerializableObjectCollectionProperty = ( + /** @class */ + function(_super) { + __extends(SerializableObjectCollectionProperty2, _super); + function SerializableObjectCollectionProperty2(targetVersion, name, objectType, onItemAdded) { + var _this = _super.call(this, targetVersion, name, void 0, function(sender) { + return []; + }) || this; + _this.targetVersion = targetVersion; + _this.name = name; + _this.objectType = objectType; + _this.onItemAdded = onItemAdded; + return _this; + } + SerializableObjectCollectionProperty2.prototype.parse = function(sender, source, context) { + var result = []; + var sourceCollection = source[this.name]; + if (Array.isArray(sourceCollection)) { + for (var _i = 0, sourceCollection_1 = sourceCollection; _i < sourceCollection_1.length; _i++) { + var sourceItem = sourceCollection_1[_i]; + var item = new this.objectType(); + item.parse(sourceItem, context); + result.push(item); + if (this.onItemAdded) { + this.onItemAdded(sender, item); + } + } + } + return result.length > 0 ? result : this.onGetInitialValue ? this.onGetInitialValue(sender) : void 0; + }; + SerializableObjectCollectionProperty2.prototype.toJSON = function(sender, target, value, context) { + context.serializeArray(target, this.name, value); + }; + return SerializableObjectCollectionProperty2; + }(PropertyDefinition) + ); + exports.SerializableObjectCollectionProperty = SerializableObjectCollectionProperty; + var CustomProperty = ( + /** @class */ + function(_super) { + __extends(CustomProperty2, _super); + function CustomProperty2(targetVersion, name, onParse, onToJSON, defaultValue, onGetInitialValue) { + var _this = _super.call(this, targetVersion, name, defaultValue, onGetInitialValue) || this; + _this.targetVersion = targetVersion; + _this.name = name; + _this.onParse = onParse; + _this.onToJSON = onToJSON; + _this.defaultValue = defaultValue; + _this.onGetInitialValue = onGetInitialValue; + if (!_this.onParse) { + throw new Error("CustomPropertyDefinition instances must have an onParse handler."); + } + if (!_this.onToJSON) { + throw new Error("CustomPropertyDefinition instances must have an onToJSON handler."); + } + return _this; + } + CustomProperty2.prototype.parse = function(sender, source, context) { + return this.onParse(sender, this, source, context); + }; + CustomProperty2.prototype.toJSON = function(sender, target, value, context) { + this.onToJSON(sender, this, target, value, context); + }; + return CustomProperty2; + }(PropertyDefinition) + ); + exports.CustomProperty = CustomProperty; + var SerializableObjectSchema = ( + /** @class */ + function() { + function SerializableObjectSchema2() { + this._properties = []; + } + SerializableObjectSchema2.prototype.indexOf = function(prop) { + for (var i = 0; i < this._properties.length; i++) { + if (this._properties[i] === prop) { + return i; + } + } + return -1; + }; + SerializableObjectSchema2.prototype.add = function() { + var properties = []; + for (var _i = 0; _i < arguments.length; _i++) { + properties[_i] = arguments[_i]; + } + for (var _a = 0, properties_1 = properties; _a < properties_1.length; _a++) { + var prop = properties_1[_a]; + if (this.indexOf(prop) === -1) { + this._properties.push(prop); + } + } + }; + SerializableObjectSchema2.prototype.remove = function() { + var properties = []; + for (var _i = 0; _i < arguments.length; _i++) { + properties[_i] = arguments[_i]; + } + for (var _a = 0, properties_2 = properties; _a < properties_2.length; _a++) { + var prop = properties_2[_a]; + while (true) { + var index = this.indexOf(prop); + if (index >= 0) { + this._properties.splice(index, 1); + } else { + break; + } + } + } + }; + SerializableObjectSchema2.prototype.getItemAt = function(index) { + return this._properties[index]; + }; + SerializableObjectSchema2.prototype.getCount = function() { + return this._properties.length; + }; + return SerializableObjectSchema2; + }() + ); + exports.SerializableObjectSchema = SerializableObjectSchema; + function property(prop) { + return function(target, propertyKey) { + var descriptor = Object.getOwnPropertyDescriptor(target, propertyKey) || {}; + if (!descriptor.get && !descriptor.set) { + descriptor.get = function() { + return this.getValue(prop); + }; + descriptor.set = function(value) { + this.setValue(prop, value); + }; + Object.defineProperty(target, propertyKey, descriptor); + } + }; + } + exports.property = property; + var SerializableObject = ( + /** @class */ + function() { + function SerializableObject2() { + this._propertyBag = {}; + this._rawProperties = {}; + this.maxVersion = SerializableObject2.defaultMaxVersion; + var s = this.getSchema(); + for (var i = 0; i < s.getCount(); i++) { + var prop = s.getItemAt(i); + if (prop.onGetInitialValue) { + this.setValue(prop, prop.onGetInitialValue(this)); + } + } + } + SerializableObject2.prototype.getDefaultSerializationContext = function() { + return new SimpleSerializationContext(); + }; + SerializableObject2.prototype.populateSchema = function(schema) { + var ctor = this.constructor; + var properties = []; + for (var propertyName in ctor) { + try { + var propertyValue = ctor[propertyName]; + if (propertyValue instanceof PropertyDefinition) { + properties.push(propertyValue); + } + } catch (_a) { + } + } + if (properties.length > 0) { + var sortedProperties = properties.sort(function(p1, p2) { + if (p1.sequentialNumber > p2.sequentialNumber) { + return 1; + } else if (p1.sequentialNumber < p2.sequentialNumber) { + return -1; + } + return 0; + }); + schema.add.apply(schema, sortedProperties); + } + if (SerializableObject2.onRegisterCustomProperties) { + SerializableObject2.onRegisterCustomProperties(this, schema); + } + }; + SerializableObject2.prototype.getValue = function(prop) { + return this._propertyBag.hasOwnProperty(prop.getInternalName()) ? this._propertyBag[prop.getInternalName()] : prop.defaultValue; + }; + SerializableObject2.prototype.setValue = function(prop, value) { + if (value === void 0 || value === null) { + delete this._propertyBag[prop.getInternalName()]; + } else { + this._propertyBag[prop.getInternalName()] = value; + } + }; + SerializableObject2.prototype.internalParse = function(source, context) { + this._propertyBag = {}; + this._rawProperties = shared_1.GlobalSettings.enableFullJsonRoundTrip ? source ? source : {} : {}; + if (source) { + var s = this.getSchema(); + for (var i = 0; i < s.getCount(); i++) { + var prop = s.getItemAt(i); + if (prop.isSerializationEnabled) { + var propertyValue = prop.onGetInitialValue ? prop.onGetInitialValue(this) : void 0; + if (source.hasOwnProperty(prop.name)) { + if (prop.targetVersion.compareTo(context.targetVersion) <= 0) { + propertyValue = prop.parse(this, source, context); + } else { + context.logParseEvent(this, Enums.ValidationEvent.UnsupportedProperty, strings_1.Strings.errors.propertyNotSupported(prop.name, prop.targetVersion.toString(), context.targetVersion.toString())); + } + } + this.setValue(prop, propertyValue); + } + } + } else { + this.resetDefaultValues(); + } + }; + SerializableObject2.prototype.internalToJSON = function(target, context) { + var s = this.getSchema(); + var serializedProperties = []; + for (var i = 0; i < s.getCount(); i++) { + var prop = s.getItemAt(i); + if (prop.isSerializationEnabled && prop.targetVersion.compareTo(context.targetVersion) <= 0 && serializedProperties.indexOf(prop.name) === -1) { + prop.toJSON(this, target, this.getValue(prop), context); + serializedProperties.push(prop.name); + } + } + }; + SerializableObject2.prototype.shouldSerialize = function(_context) { + return true; + }; + SerializableObject2.prototype.parse = function(source, context) { + this.internalParse(source, context ? context : new SimpleSerializationContext()); + }; + SerializableObject2.prototype.toJSON = function(context) { + var effectiveContext; + if (context && context instanceof BaseSerializationContext) { + effectiveContext = context; + } else { + effectiveContext = this.getDefaultSerializationContext(); + effectiveContext.toJSONOriginalParam = context; + } + if (this.shouldSerialize(effectiveContext)) { + var result = void 0; + if (shared_1.GlobalSettings.enableFullJsonRoundTrip && this._rawProperties && typeof this._rawProperties === "object") { + result = this._rawProperties; + } else { + result = {}; + } + this.internalToJSON(result, effectiveContext); + return result; + } else { + return void 0; + } + }; + SerializableObject2.prototype.hasDefaultValue = function(prop) { + return this.getValue(prop) === prop.defaultValue; + }; + SerializableObject2.prototype.hasAllDefaultValues = function() { + var s = this.getSchema(); + for (var i = 0; i < s.getCount(); i++) { + var prop = s.getItemAt(i); + if (!this.hasDefaultValue(prop)) { + return false; + } + } + return true; + }; + SerializableObject2.prototype.resetDefaultValues = function() { + var s = this.getSchema(); + for (var i = 0; i < s.getCount(); i++) { + var prop = s.getItemAt(i); + this.setValue(prop, prop.defaultValue); + } + }; + SerializableObject2.prototype.setCustomProperty = function(name, value) { + var shouldDeleteProperty = typeof value === "string" && !value || value === void 0 || value === null; + if (shouldDeleteProperty) { + delete this._rawProperties[name]; + } else { + this._rawProperties[name] = value; + } + }; + SerializableObject2.prototype.getCustomProperty = function(name) { + return this._rawProperties[name]; + }; + SerializableObject2.prototype.getSchema = function() { + var schema = SerializableObject2._schemaCache[this.getSchemaKey()]; + if (!schema) { + schema = new SerializableObjectSchema(); + this.populateSchema(schema); + SerializableObject2._schemaCache[this.getSchemaKey()] = schema; + } + return schema; + }; + SerializableObject2.defaultMaxVersion = Versions.latest; + SerializableObject2._schemaCache = {}; + return SerializableObject2; + }() + ); + exports.SerializableObject = SerializableObject; + } +}); + +// node_modules/adaptivecards/lib/host-capabilities.js +var require_host_capabilities = __commonJS({ + "node_modules/adaptivecards/lib/host-capabilities.js"(exports) { + "use strict"; + var __extends = exports && exports.__extends || /* @__PURE__ */ function() { + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { + d2.__proto__ = b2; + } || function(d2, b2) { + for (var p in b2) + if (Object.prototype.hasOwnProperty.call(b2, p)) + d2[p] = b2[p]; + }; + return extendStatics(d, b); + }; + return function(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { + this.constructor = d; + } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + }(); + Object.defineProperty(exports, "__esModule", { value: true }); + exports.HostCapabilities = void 0; + var serialization_1 = require_serialization(); + var HostCapabilities = ( + /** @class */ + function(_super) { + __extends(HostCapabilities2, _super); + function HostCapabilities2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this._capabilities = {}; + return _this; + } + HostCapabilities2.prototype.getSchemaKey = function() { + return "HostCapabilities"; + }; + HostCapabilities2.prototype.internalParse = function(source, context) { + _super.prototype.internalParse.call(this, source, context); + if (source) { + for (var name_1 in source) { + var jsonVersion = source[name_1]; + if (typeof jsonVersion === "string") { + if (jsonVersion === "*") { + this.addCapability(name_1, "*"); + } else { + var version = serialization_1.Version.parse(jsonVersion, context); + if (version === null || version === void 0 ? void 0 : version.isValid) { + this.addCapability(name_1, version); + } + } + } + } + } + }; + HostCapabilities2.prototype.internalToJSON = function(target, context) { + _super.prototype.internalToJSON.call(this, target, context); + for (var key in this._capabilities) { + target[key] = this._capabilities[key]; + } + }; + HostCapabilities2.prototype.addCapability = function(name, version) { + this._capabilities[name] = version; + }; + HostCapabilities2.prototype.removeCapability = function(name) { + delete this._capabilities[name]; + }; + HostCapabilities2.prototype.clear = function() { + this._capabilities = {}; + }; + HostCapabilities2.prototype.hasCapability = function(name, version) { + if (this._capabilities.hasOwnProperty(name)) { + if (version === "*" || this._capabilities[name] === "*") { + return true; + } + return version.compareTo(this._capabilities[name]) <= 0; + } + return false; + }; + HostCapabilities2.prototype.areAllMet = function(hostCapabilities) { + for (var capabilityName in this._capabilities) { + if (!hostCapabilities.hasCapability(capabilityName, this._capabilities[capabilityName])) { + return false; + } + } + return true; + }; + return HostCapabilities2; + }(serialization_1.SerializableObject) + ); + exports.HostCapabilities = HostCapabilities; + } +}); + +// node_modules/adaptivecards/lib/host-config.js +var require_host_config = __commonJS({ + "node_modules/adaptivecards/lib/host-config.js"(exports) { + "use strict"; + var __extends = exports && exports.__extends || /* @__PURE__ */ function() { + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { + d2.__proto__ = b2; + } || function(d2, b2) { + for (var p in b2) + if (Object.prototype.hasOwnProperty.call(b2, p)) + d2[p] = b2[p]; + }; + return extendStatics(d, b); + }; + return function(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { + this.constructor = d; + } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + }(); + Object.defineProperty(exports, "__esModule", { value: true }); + exports.defaultHostConfig = exports.HostConfig = exports.FontTypeSet = exports.FontTypeDefinition = exports.ContainerStyleSet = exports.ContainerStyleDefinition = exports.ColorSetDefinition = exports.ActionsConfig = exports.ShowCardActionConfig = exports.FactSetConfig = exports.FactTitleDefinition = exports.FactTextDefinition = exports.InputConfig = exports.InputLabelConfig = exports.RequiredInputLabelTextDefinition = exports.TextBlockConfig = exports.TextStyleSet = exports.TextStyleDefinition = exports.BaseTextDefinition = exports.TableConfig = exports.MediaConfig = exports.ImageSetConfig = exports.AdaptiveCardConfig = exports.TextColorDefinition = exports.ColorDefinition = void 0; + var Enums = require_enums(); + var Utils = require_utils(); + var Shared = require_shared(); + var host_capabilities_1 = require_host_capabilities(); + function parseHostConfigEnum(targetEnum, value, defaultValue) { + if (typeof value === "string") { + var parsedValue = Utils.parseEnum(targetEnum, value, defaultValue); + return parsedValue !== void 0 ? parsedValue : defaultValue; + } else if (typeof value === "number") { + return value; + } else { + return defaultValue; + } + } + var ColorDefinition = ( + /** @class */ + function() { + function ColorDefinition2(defaultColor, subtleColor) { + this.default = "#000000"; + this.subtle = "#666666"; + if (defaultColor) { + this.default = defaultColor; + } + if (subtleColor) { + this.subtle = subtleColor; + } + } + ColorDefinition2.prototype.parse = function(obj) { + if (obj) { + this.default = obj["default"] || this.default; + this.subtle = obj["subtle"] || this.subtle; + } + }; + return ColorDefinition2; + }() + ); + exports.ColorDefinition = ColorDefinition; + var TextColorDefinition = ( + /** @class */ + function(_super) { + __extends(TextColorDefinition2, _super); + function TextColorDefinition2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.highlightColors = new ColorDefinition("#22000000", "#11000000"); + return _this; + } + TextColorDefinition2.prototype.parse = function(obj) { + _super.prototype.parse.call(this, obj); + if (obj) { + this.highlightColors.parse(obj["highlightColors"]); + } + }; + return TextColorDefinition2; + }(ColorDefinition) + ); + exports.TextColorDefinition = TextColorDefinition; + var AdaptiveCardConfig = ( + /** @class */ + /* @__PURE__ */ function() { + function AdaptiveCardConfig2(obj) { + this.allowCustomStyle = false; + if (obj) { + this.allowCustomStyle = obj["allowCustomStyle"] || this.allowCustomStyle; + } + } + return AdaptiveCardConfig2; + }() + ); + exports.AdaptiveCardConfig = AdaptiveCardConfig; + var ImageSetConfig = ( + /** @class */ + function() { + function ImageSetConfig2(obj) { + this.imageSize = Enums.Size.Medium; + this.maxImageHeight = 100; + if (obj) { + this.imageSize = obj["imageSize"] != null ? obj["imageSize"] : this.imageSize; + this.maxImageHeight = Utils.parseNumber(obj["maxImageHeight"], 100); + } + } + ImageSetConfig2.prototype.toJSON = function() { + return { + imageSize: Enums.Size[this.imageSize], + maxImageHeight: this.maxImageHeight + }; + }; + return ImageSetConfig2; + }() + ); + exports.ImageSetConfig = ImageSetConfig; + var MediaConfig = ( + /** @class */ + function() { + function MediaConfig2(obj) { + this.allowInlinePlayback = true; + if (obj) { + this.defaultPoster = obj["defaultPoster"]; + this.allowInlinePlayback = obj["allowInlinePlayback"] || this.allowInlinePlayback; + } + } + MediaConfig2.prototype.toJSON = function() { + return { + defaultPoster: this.defaultPoster, + allowInlinePlayback: this.allowInlinePlayback + }; + }; + return MediaConfig2; + }() + ); + exports.MediaConfig = MediaConfig; + var TableConfig = ( + /** @class */ + function() { + function TableConfig2(obj) { + this.cellSpacing = 8; + if (obj) { + this.cellSpacing = obj.cellSpacing && typeof obj.cellSpacing === "number" ? obj.cellSpacing : this.cellSpacing; + } + } + TableConfig2.prototype.toJSON = function() { + return { + cellSpacing: this.cellSpacing + }; + }; + return TableConfig2; + }() + ); + exports.TableConfig = TableConfig; + var BaseTextDefinition = ( + /** @class */ + function() { + function BaseTextDefinition2(obj) { + this.size = Enums.TextSize.Default; + this.color = Enums.TextColor.Default; + this.isSubtle = false; + this.weight = Enums.TextWeight.Default; + this.parse(obj); + } + BaseTextDefinition2.prototype.parse = function(obj) { + if (obj) { + this.size = parseHostConfigEnum(Enums.TextSize, obj["size"], this.size); + this.color = parseHostConfigEnum(Enums.TextColor, obj["color"], this.color); + this.isSubtle = obj.isSubtle !== void 0 && typeof obj.isSubtle === "boolean" ? obj.isSubtle : this.isSubtle; + this.weight = parseHostConfigEnum(Enums.TextWeight, obj["weight"], this.getDefaultWeight()); + } + }; + BaseTextDefinition2.prototype.getDefaultWeight = function() { + return Enums.TextWeight.Default; + }; + BaseTextDefinition2.prototype.toJSON = function() { + return { + size: Enums.TextSize[this.size], + color: Enums.TextColor[this.color], + isSubtle: this.isSubtle, + weight: Enums.TextWeight[this.weight] + }; + }; + return BaseTextDefinition2; + }() + ); + exports.BaseTextDefinition = BaseTextDefinition; + var TextStyleDefinition = ( + /** @class */ + function(_super) { + __extends(TextStyleDefinition2, _super); + function TextStyleDefinition2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.fontType = Enums.FontType.Default; + return _this; + } + TextStyleDefinition2.prototype.parse = function(obj) { + _super.prototype.parse.call(this, obj); + if (obj) { + this.fontType = parseHostConfigEnum(Enums.FontType, obj.fontType, this.fontType); + } + }; + return TextStyleDefinition2; + }(BaseTextDefinition) + ); + exports.TextStyleDefinition = TextStyleDefinition; + var TextStyleSet = ( + /** @class */ + function() { + function TextStyleSet2(obj) { + this.default = new TextStyleDefinition(); + this.heading = new TextStyleDefinition({ + size: "Large", + weight: "Bolder" + }); + this.columnHeader = new TextStyleDefinition({ + weight: "Bolder" + }); + if (obj) { + this.heading.parse(obj.heading); + this.columnHeader.parse(obj.columnHeader); + } + } + TextStyleSet2.prototype.getStyleByName = function(name) { + switch (name.toLowerCase()) { + case "heading": + return this.heading; + case "columnHeader": + return this.columnHeader; + default: + return this.default; + } + }; + return TextStyleSet2; + }() + ); + exports.TextStyleSet = TextStyleSet; + var TextBlockConfig = ( + /** @class */ + /* @__PURE__ */ function() { + function TextBlockConfig2(obj) { + if (obj) { + this.headingLevel = Utils.parseNumber(obj.headingLevel); + } + } + return TextBlockConfig2; + }() + ); + exports.TextBlockConfig = TextBlockConfig; + var RequiredInputLabelTextDefinition = ( + /** @class */ + function(_super) { + __extends(RequiredInputLabelTextDefinition2, _super); + function RequiredInputLabelTextDefinition2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.suffix = " *"; + _this.suffixColor = Enums.TextColor.Attention; + return _this; + } + RequiredInputLabelTextDefinition2.prototype.parse = function(obj) { + _super.prototype.parse.call(this, obj); + if (obj) { + this.suffix = obj["suffix"] || this.suffix; + this.suffixColor = parseHostConfigEnum(Enums.TextColor, obj["suffixColor"], this.suffixColor); + } + }; + RequiredInputLabelTextDefinition2.prototype.toJSON = function() { + var result = _super.prototype.toJSON.call(this); + result["suffix"] = this.suffix; + result["suffixColor"] = Enums.TextColor[this.suffixColor]; + return result; + }; + return RequiredInputLabelTextDefinition2; + }(BaseTextDefinition) + ); + exports.RequiredInputLabelTextDefinition = RequiredInputLabelTextDefinition; + var InputLabelConfig = ( + /** @class */ + /* @__PURE__ */ function() { + function InputLabelConfig2(obj) { + this.inputSpacing = Enums.Spacing.Small; + this.requiredInputs = new RequiredInputLabelTextDefinition(); + this.optionalInputs = new BaseTextDefinition(); + if (obj) { + this.inputSpacing = parseHostConfigEnum(Enums.Spacing, obj["inputSpacing"], this.inputSpacing); + this.requiredInputs = new RequiredInputLabelTextDefinition(obj["requiredInputs"]); + this.optionalInputs = new BaseTextDefinition(obj["optionalInputs"]); + } + } + return InputLabelConfig2; + }() + ); + exports.InputLabelConfig = InputLabelConfig; + var InputConfig = ( + /** @class */ + /* @__PURE__ */ function() { + function InputConfig2(obj) { + this.label = new InputLabelConfig(); + this.errorMessage = new BaseTextDefinition({ + color: Enums.TextColor.Attention + }); + if (obj) { + this.label = new InputLabelConfig(obj["label"]); + this.errorMessage = new BaseTextDefinition(obj["errorMessage"]); + } + } + return InputConfig2; + }() + ); + exports.InputConfig = InputConfig; + var FactTextDefinition = ( + /** @class */ + function(_super) { + __extends(FactTextDefinition2, _super); + function FactTextDefinition2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.wrap = true; + return _this; + } + FactTextDefinition2.prototype.parse = function(obj) { + _super.prototype.parse.call(this, obj); + if (obj) { + this.wrap = obj["wrap"] != null ? obj["wrap"] : this.wrap; + } + }; + FactTextDefinition2.prototype.toJSON = function() { + var result = _super.prototype.toJSON.call(this); + result["wrap"] = this.wrap; + return result; + }; + return FactTextDefinition2; + }(BaseTextDefinition) + ); + exports.FactTextDefinition = FactTextDefinition; + var FactTitleDefinition = ( + /** @class */ + function(_super) { + __extends(FactTitleDefinition2, _super); + function FactTitleDefinition2(obj) { + var _this = _super.call(this, obj) || this; + _this.maxWidth = 150; + _this.weight = Enums.TextWeight.Bolder; + if (obj) { + _this.maxWidth = obj["maxWidth"] != null ? obj["maxWidth"] : _this.maxWidth; + _this.weight = parseHostConfigEnum(Enums.TextWeight, obj["weight"], Enums.TextWeight.Bolder); + } + return _this; + } + FactTitleDefinition2.prototype.getDefaultWeight = function() { + return Enums.TextWeight.Bolder; + }; + return FactTitleDefinition2; + }(FactTextDefinition) + ); + exports.FactTitleDefinition = FactTitleDefinition; + var FactSetConfig = ( + /** @class */ + /* @__PURE__ */ function() { + function FactSetConfig2(obj) { + this.title = new FactTitleDefinition(); + this.value = new FactTextDefinition(); + this.spacing = 10; + if (obj) { + this.title = new FactTitleDefinition(obj["title"]); + this.value = new FactTextDefinition(obj["value"]); + this.spacing = obj.spacing && obj.spacing != null ? obj.spacing && obj.spacing : this.spacing; + } + } + return FactSetConfig2; + }() + ); + exports.FactSetConfig = FactSetConfig; + var ShowCardActionConfig = ( + /** @class */ + function() { + function ShowCardActionConfig2(obj) { + this.actionMode = Enums.ShowCardActionMode.Inline; + this.inlineTopMargin = 16; + this.style = Enums.ContainerStyle.Emphasis; + if (obj) { + this.actionMode = parseHostConfigEnum(Enums.ShowCardActionMode, obj["actionMode"], Enums.ShowCardActionMode.Inline); + this.inlineTopMargin = obj["inlineTopMargin"] != null ? obj["inlineTopMargin"] : this.inlineTopMargin; + this.style = obj["style"] && typeof obj["style"] === "string" ? obj["style"] : Enums.ContainerStyle.Emphasis; + } + } + ShowCardActionConfig2.prototype.toJSON = function() { + return { + actionMode: Enums.ShowCardActionMode[this.actionMode], + inlineTopMargin: this.inlineTopMargin, + style: this.style + }; + }; + return ShowCardActionConfig2; + }() + ); + exports.ShowCardActionConfig = ShowCardActionConfig; + var ActionsConfig = ( + /** @class */ + function() { + function ActionsConfig2(obj) { + this.maxActions = 5; + this.spacing = Enums.Spacing.Default; + this.buttonSpacing = 20; + this.showCard = new ShowCardActionConfig(); + this.preExpandSingleShowCardAction = false; + this.actionsOrientation = Enums.Orientation.Horizontal; + this.actionAlignment = Enums.ActionAlignment.Left; + this.iconPlacement = Enums.ActionIconPlacement.LeftOfTitle; + this.allowTitleToWrap = false; + this.iconSize = 16; + if (obj) { + this.maxActions = obj["maxActions"] != null ? obj["maxActions"] : this.maxActions; + this.spacing = parseHostConfigEnum(Enums.Spacing, obj.spacing && obj.spacing, Enums.Spacing.Default); + this.buttonSpacing = obj["buttonSpacing"] != null ? obj["buttonSpacing"] : this.buttonSpacing; + this.showCard = new ShowCardActionConfig(obj["showCard"]); + this.preExpandSingleShowCardAction = Utils.parseBool(obj["preExpandSingleShowCardAction"], false); + this.actionsOrientation = parseHostConfigEnum(Enums.Orientation, obj["actionsOrientation"], Enums.Orientation.Horizontal); + this.actionAlignment = parseHostConfigEnum(Enums.ActionAlignment, obj["actionAlignment"], Enums.ActionAlignment.Left); + this.iconPlacement = parseHostConfigEnum(Enums.ActionIconPlacement, obj["iconPlacement"], Enums.ActionIconPlacement.LeftOfTitle); + this.allowTitleToWrap = obj["allowTitleToWrap"] != null ? obj["allowTitleToWrap"] : this.allowTitleToWrap; + try { + var sizeAndUnit = Shared.SizeAndUnit.parse(obj["iconSize"]); + if (sizeAndUnit.unit === Enums.SizeUnit.Pixel) { + this.iconSize = sizeAndUnit.physicalSize; + } + } catch (e) { + } + } + } + ActionsConfig2.prototype.toJSON = function() { + return { + maxActions: this.maxActions, + spacing: Enums.Spacing[this.spacing], + buttonSpacing: this.buttonSpacing, + showCard: this.showCard, + preExpandSingleShowCardAction: this.preExpandSingleShowCardAction, + actionsOrientation: Enums.Orientation[this.actionsOrientation], + actionAlignment: Enums.ActionAlignment[this.actionAlignment] + }; + }; + return ActionsConfig2; + }() + ); + exports.ActionsConfig = ActionsConfig; + var ColorSetDefinition = ( + /** @class */ + function() { + function ColorSetDefinition2(obj) { + this.default = new TextColorDefinition(); + this.dark = new TextColorDefinition(); + this.light = new TextColorDefinition(); + this.accent = new TextColorDefinition(); + this.good = new TextColorDefinition(); + this.warning = new TextColorDefinition(); + this.attention = new TextColorDefinition(); + this.parse(obj); + } + ColorSetDefinition2.prototype.parseSingleColor = function(obj, propertyName) { + if (obj) { + this[propertyName].parse(obj[propertyName]); + } + }; + ColorSetDefinition2.prototype.parse = function(obj) { + if (obj) { + this.parseSingleColor(obj, "default"); + this.parseSingleColor(obj, "dark"); + this.parseSingleColor(obj, "light"); + this.parseSingleColor(obj, "accent"); + this.parseSingleColor(obj, "good"); + this.parseSingleColor(obj, "warning"); + this.parseSingleColor(obj, "attention"); + } + }; + return ColorSetDefinition2; + }() + ); + exports.ColorSetDefinition = ColorSetDefinition; + var ContainerStyleDefinition = ( + /** @class */ + function() { + function ContainerStyleDefinition2(obj) { + this.foregroundColors = new ColorSetDefinition({ + "default": { default: "#333333", subtle: "#EE333333" }, + "dark": { default: "#000000", subtle: "#66000000" }, + "light": { default: "#FFFFFF", subtle: "#33000000" }, + "accent": { default: "#2E89FC", subtle: "#882E89FC" }, + "good": { default: "#028A02", subtle: "#DD027502" }, + "warning": { default: "#E69500", subtle: "#DDE69500" }, + "attention": { default: "#CC3300", subtle: "#DDCC3300" } + }); + this.parse(obj); + } + ContainerStyleDefinition2.prototype.parse = function(obj) { + if (obj) { + this.backgroundColor = obj["backgroundColor"]; + this.foregroundColors.parse(obj["foregroundColors"]); + this.highlightBackgroundColor = obj["highlightBackgroundColor"]; + this.highlightForegroundColor = obj["highlightForegroundColor"]; + this.borderColor = obj["borderColor"]; + } + }; + Object.defineProperty(ContainerStyleDefinition2.prototype, "isBuiltIn", { + get: function() { + return false; + }, + enumerable: false, + configurable: true + }); + return ContainerStyleDefinition2; + }() + ); + exports.ContainerStyleDefinition = ContainerStyleDefinition; + var BuiltInContainerStyleDefinition = ( + /** @class */ + function(_super) { + __extends(BuiltInContainerStyleDefinition2, _super); + function BuiltInContainerStyleDefinition2() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(BuiltInContainerStyleDefinition2.prototype, "isBuiltIn", { + get: function() { + return true; + }, + enumerable: false, + configurable: true + }); + return BuiltInContainerStyleDefinition2; + }(ContainerStyleDefinition) + ); + var ContainerStyleSet = ( + /** @class */ + function() { + function ContainerStyleSet2(obj) { + this._allStyles = {}; + this._allStyles[Enums.ContainerStyle.Default] = new BuiltInContainerStyleDefinition(); + this._allStyles[Enums.ContainerStyle.Emphasis] = new BuiltInContainerStyleDefinition(); + this._allStyles[Enums.ContainerStyle.Accent] = new BuiltInContainerStyleDefinition(); + this._allStyles[Enums.ContainerStyle.Good] = new BuiltInContainerStyleDefinition(); + this._allStyles[Enums.ContainerStyle.Attention] = new BuiltInContainerStyleDefinition(); + this._allStyles[Enums.ContainerStyle.Warning] = new BuiltInContainerStyleDefinition(); + if (obj) { + this._allStyles[Enums.ContainerStyle.Default].parse(obj[Enums.ContainerStyle.Default]); + this._allStyles[Enums.ContainerStyle.Emphasis].parse(obj[Enums.ContainerStyle.Emphasis]); + this._allStyles[Enums.ContainerStyle.Accent].parse(obj[Enums.ContainerStyle.Accent]); + this._allStyles[Enums.ContainerStyle.Good].parse(obj[Enums.ContainerStyle.Good]); + this._allStyles[Enums.ContainerStyle.Attention].parse(obj[Enums.ContainerStyle.Attention]); + this._allStyles[Enums.ContainerStyle.Warning].parse(obj[Enums.ContainerStyle.Warning]); + var customStyleArray = obj["customStyles"]; + if (customStyleArray && Array.isArray(customStyleArray)) { + for (var _i = 0, customStyleArray_1 = customStyleArray; _i < customStyleArray_1.length; _i++) { + var customStyle = customStyleArray_1[_i]; + if (customStyle) { + var styleName = customStyle["name"]; + if (styleName && typeof styleName === "string") { + if (this._allStyles.hasOwnProperty(styleName)) { + this._allStyles[styleName].parse(customStyle["style"]); + } else { + this._allStyles[styleName] = new ContainerStyleDefinition(customStyle["style"]); + } + } + } + } + } + } + } + ContainerStyleSet2.prototype.toJSON = function() { + var _this = this; + var customStyleArray = []; + Object.keys(this._allStyles).forEach(function(key) { + if (!_this._allStyles[key].isBuiltIn) { + customStyleArray.push({ + name: key, + style: _this._allStyles[key] + }); + } + }); + var result = { + default: this.default, + emphasis: this.emphasis + }; + if (customStyleArray.length > 0) { + result.customStyles = customStyleArray; + } + return result; + }; + ContainerStyleSet2.prototype.getStyleByName = function(name, defaultValue) { + if (name && this._allStyles.hasOwnProperty(name)) { + return this._allStyles[name]; + } else { + return defaultValue ? defaultValue : this._allStyles[Enums.ContainerStyle.Default]; + } + }; + Object.defineProperty(ContainerStyleSet2.prototype, "default", { + get: function() { + return this._allStyles[Enums.ContainerStyle.Default]; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(ContainerStyleSet2.prototype, "emphasis", { + get: function() { + return this._allStyles[Enums.ContainerStyle.Emphasis]; + }, + enumerable: false, + configurable: true + }); + return ContainerStyleSet2; + }() + ); + exports.ContainerStyleSet = ContainerStyleSet; + var FontTypeDefinition = ( + /** @class */ + function() { + function FontTypeDefinition2(fontFamily) { + this.fontFamily = "Segoe UI,Segoe,Segoe WP,Helvetica Neue,Helvetica,sans-serif"; + this.fontSizes = { + small: 12, + default: 14, + medium: 17, + large: 21, + extraLarge: 26 + }; + this.fontWeights = { + lighter: 200, + default: 400, + bolder: 600 + }; + if (fontFamily) { + this.fontFamily = fontFamily; + } + } + FontTypeDefinition2.prototype.parse = function(obj) { + this.fontFamily = obj["fontFamily"] || this.fontFamily; + this.fontSizes = { + small: obj.fontSizes && obj.fontSizes["small"] || this.fontSizes.small, + default: obj.fontSizes && obj.fontSizes["default"] || this.fontSizes.default, + medium: obj.fontSizes && obj.fontSizes["medium"] || this.fontSizes.medium, + large: obj.fontSizes && obj.fontSizes["large"] || this.fontSizes.large, + extraLarge: obj.fontSizes && obj.fontSizes["extraLarge"] || this.fontSizes.extraLarge + }; + this.fontWeights = { + lighter: obj.fontWeights && obj.fontWeights["lighter"] || this.fontWeights.lighter, + default: obj.fontWeights && obj.fontWeights["default"] || this.fontWeights.default, + bolder: obj.fontWeights && obj.fontWeights["bolder"] || this.fontWeights.bolder + }; + }; + FontTypeDefinition2.monospace = new FontTypeDefinition2("'Courier New', Courier, monospace"); + return FontTypeDefinition2; + }() + ); + exports.FontTypeDefinition = FontTypeDefinition; + var FontTypeSet = ( + /** @class */ + function() { + function FontTypeSet2(obj) { + this.default = new FontTypeDefinition(); + this.monospace = new FontTypeDefinition("'Courier New', Courier, monospace"); + if (obj) { + this.default.parse(obj["default"]); + this.monospace.parse(obj["monospace"]); + } + } + FontTypeSet2.prototype.getStyleDefinition = function(style) { + switch (style) { + case Enums.FontType.Monospace: + return this.monospace; + case Enums.FontType.Default: + default: + return this.default; + } + }; + return FontTypeSet2; + }() + ); + exports.FontTypeSet = FontTypeSet; + var HostConfig = ( + /** @class */ + function() { + function HostConfig2(obj) { + this.hostCapabilities = new host_capabilities_1.HostCapabilities(); + this.choiceSetInputValueSeparator = ","; + this.supportsInteractivity = true; + this.spacing = { + small: 3, + default: 8, + medium: 20, + large: 30, + extraLarge: 40, + padding: 15 + }; + this.separator = { + lineThickness: 1, + lineColor: "#EEEEEE" + }; + this.imageSizes = { + small: 40, + medium: 80, + large: 160 + }; + this.containerStyles = new ContainerStyleSet(); + this.inputs = new InputConfig(); + this.actions = new ActionsConfig(); + this.adaptiveCard = new AdaptiveCardConfig(); + this.imageSet = new ImageSetConfig(); + this.media = new MediaConfig(); + this.factSet = new FactSetConfig(); + this.table = new TableConfig(); + this.textStyles = new TextStyleSet(); + this.textBlock = new TextBlockConfig(); + this.alwaysAllowBleed = false; + if (obj) { + if (typeof obj === "string" || obj instanceof String) { + obj = JSON.parse(obj); + } + this.choiceSetInputValueSeparator = obj && typeof obj["choiceSetInputValueSeparator"] === "string" ? obj["choiceSetInputValueSeparator"] : this.choiceSetInputValueSeparator; + this.supportsInteractivity = obj && typeof obj["supportsInteractivity"] === "boolean" ? obj["supportsInteractivity"] : this.supportsInteractivity; + this._legacyFontType = new FontTypeDefinition(); + this._legacyFontType.parse(obj); + if (obj.fontTypes) { + this.fontTypes = new FontTypeSet(obj.fontTypes); + } + if (obj.lineHeights) { + this.lineHeights = { + small: obj.lineHeights["small"], + default: obj.lineHeights["default"], + medium: obj.lineHeights["medium"], + large: obj.lineHeights["large"], + extraLarge: obj.lineHeights["extraLarge"] + }; + } + this.imageSizes = { + small: obj.imageSizes && obj.imageSizes["small"] || this.imageSizes.small, + medium: obj.imageSizes && obj.imageSizes["medium"] || this.imageSizes.medium, + large: obj.imageSizes && obj.imageSizes["large"] || this.imageSizes.large + }; + this.containerStyles = new ContainerStyleSet(obj["containerStyles"]); + this.spacing = { + small: obj.spacing && obj.spacing["small"] || this.spacing.small, + default: obj.spacing && obj.spacing["default"] || this.spacing.default, + medium: obj.spacing && obj.spacing["medium"] || this.spacing.medium, + large: obj.spacing && obj.spacing["large"] || this.spacing.large, + extraLarge: obj.spacing && obj.spacing["extraLarge"] || this.spacing.extraLarge, + padding: obj.spacing && obj.spacing["padding"] || this.spacing.padding + }; + this.separator = { + lineThickness: obj.separator && obj.separator["lineThickness"] || this.separator.lineThickness, + lineColor: obj.separator && obj.separator["lineColor"] || this.separator.lineColor + }; + this.inputs = new InputConfig(obj.inputs || this.inputs); + this.actions = new ActionsConfig(obj.actions || this.actions); + this.adaptiveCard = new AdaptiveCardConfig(obj.adaptiveCard || this.adaptiveCard); + this.imageSet = new ImageSetConfig(obj["imageSet"]); + this.factSet = new FactSetConfig(obj["factSet"]); + this.textStyles = new TextStyleSet(obj["textStyles"]); + this.textBlock = new TextBlockConfig(obj["textBlock"]); + } + } + HostConfig2.prototype.getFontTypeDefinition = function(style) { + if (this.fontTypes) { + return this.fontTypes.getStyleDefinition(style); + } else { + return style === Enums.FontType.Monospace ? FontTypeDefinition.monospace : this._legacyFontType; + } + }; + HostConfig2.prototype.getEffectiveSpacing = function(spacing) { + switch (spacing) { + case Enums.Spacing.Small: + return this.spacing.small; + case Enums.Spacing.Default: + return this.spacing.default; + case Enums.Spacing.Medium: + return this.spacing.medium; + case Enums.Spacing.Large: + return this.spacing.large; + case Enums.Spacing.ExtraLarge: + return this.spacing.extraLarge; + case Enums.Spacing.Padding: + return this.spacing.padding; + default: + return 0; + } + }; + HostConfig2.prototype.paddingDefinitionToSpacingDefinition = function(paddingDefinition) { + return new Shared.SpacingDefinition(this.getEffectiveSpacing(paddingDefinition.top), this.getEffectiveSpacing(paddingDefinition.right), this.getEffectiveSpacing(paddingDefinition.bottom), this.getEffectiveSpacing(paddingDefinition.left)); + }; + HostConfig2.prototype.makeCssClassNames = function() { + var classNames = []; + for (var _i = 0; _i < arguments.length; _i++) { + classNames[_i] = arguments[_i]; + } + var result = []; + for (var _a = 0, classNames_1 = classNames; _a < classNames_1.length; _a++) { + var className = classNames_1[_a]; + result.push((this.cssClassNamePrefix ? this.cssClassNamePrefix + "-" : "") + className); + } + return result; + }; + HostConfig2.prototype.makeCssClassName = function() { + var classNames = []; + for (var _i = 0; _i < arguments.length; _i++) { + classNames[_i] = arguments[_i]; + } + var result = this.makeCssClassNames.apply(this, classNames).join(" "); + return result ? result : ""; + }; + Object.defineProperty(HostConfig2.prototype, "fontFamily", { + get: function() { + return this._legacyFontType.fontFamily; + }, + set: function(value) { + this._legacyFontType.fontFamily = value; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(HostConfig2.prototype, "fontSizes", { + get: function() { + return this._legacyFontType.fontSizes; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(HostConfig2.prototype, "fontWeights", { + get: function() { + return this._legacyFontType.fontWeights; + }, + enumerable: false, + configurable: true + }); + return HostConfig2; + }() + ); + exports.HostConfig = HostConfig; + exports.defaultHostConfig = new HostConfig({ + supportsInteractivity: true, + spacing: { + small: 10, + default: 20, + medium: 30, + large: 40, + extraLarge: 50, + padding: 20 + }, + separator: { + lineThickness: 1, + lineColor: "#EEEEEE" + }, + fontTypes: { + default: { + fontFamily: "'Segoe UI', Tahoma, Geneva, Verdana, sans-serif", + fontSizes: { + small: 12, + default: 14, + medium: 17, + large: 21, + extraLarge: 26 + }, + fontWeights: { + lighter: 200, + default: 400, + bolder: 600 + } + }, + monospace: { + fontFamily: "'Courier New', Courier, monospace", + fontSizes: { + small: 12, + default: 14, + medium: 17, + large: 21, + extraLarge: 26 + }, + fontWeights: { + lighter: 200, + default: 400, + bolder: 600 + } + } + }, + imageSizes: { + small: 40, + medium: 80, + large: 160 + }, + containerStyles: { + default: { + backgroundColor: "#FFFFFF", + foregroundColors: { + default: { + default: "#333333", + subtle: "#EE333333" + }, + dark: { + default: "#000000", + subtle: "#66000000" + }, + light: { + default: "#FFFFFF", + subtle: "#33000000" + }, + accent: { + default: "#2E89FC", + subtle: "#882E89FC" + }, + attention: { + default: "#cc3300", + subtle: "#DDcc3300" + }, + good: { + default: "#028A02", + subtle: "#DD027502" + }, + warning: { + default: "#e69500", + subtle: "#DDe69500" + } + } + }, + emphasis: { + backgroundColor: "#08000000", + foregroundColors: { + default: { + default: "#333333", + subtle: "#EE333333" + }, + dark: { + default: "#000000", + subtle: "#66000000" + }, + light: { + default: "#FFFFFF", + subtle: "#33000000" + }, + accent: { + default: "#2E89FC", + subtle: "#882E89FC" + }, + attention: { + default: "#cc3300", + subtle: "#DDcc3300" + }, + good: { + default: "#028A02", + subtle: "#DD027502" + }, + warning: { + default: "#e69500", + subtle: "#DDe69500" + } + } + }, + accent: { + backgroundColor: "#C7DEF9", + foregroundColors: { + default: { + default: "#333333", + subtle: "#EE333333" + }, + dark: { + default: "#000000", + subtle: "#66000000" + }, + light: { + default: "#FFFFFF", + subtle: "#33000000" + }, + accent: { + default: "#2E89FC", + subtle: "#882E89FC" + }, + attention: { + default: "#cc3300", + subtle: "#DDcc3300" + }, + good: { + default: "#028A02", + subtle: "#DD027502" + }, + warning: { + default: "#e69500", + subtle: "#DDe69500" + } + } + }, + good: { + backgroundColor: "#CCFFCC", + foregroundColors: { + default: { + default: "#333333", + subtle: "#EE333333" + }, + dark: { + default: "#000000", + subtle: "#66000000" + }, + light: { + default: "#FFFFFF", + subtle: "#33000000" + }, + accent: { + default: "#2E89FC", + subtle: "#882E89FC" + }, + attention: { + default: "#cc3300", + subtle: "#DDcc3300" + }, + good: { + default: "#028A02", + subtle: "#DD027502" + }, + warning: { + default: "#e69500", + subtle: "#DDe69500" + } + } + }, + attention: { + backgroundColor: "#FFC5B2", + foregroundColors: { + default: { + default: "#333333", + subtle: "#EE333333" + }, + dark: { + default: "#000000", + subtle: "#66000000" + }, + light: { + default: "#FFFFFF", + subtle: "#33000000" + }, + accent: { + default: "#2E89FC", + subtle: "#882E89FC" + }, + attention: { + default: "#cc3300", + subtle: "#DDcc3300" + }, + good: { + default: "#028A02", + subtle: "#DD027502" + }, + warning: { + default: "#e69500", + subtle: "#DDe69500" + } + } + }, + warning: { + backgroundColor: "#FFE2B2", + foregroundColors: { + default: { + default: "#333333", + subtle: "#EE333333" + }, + dark: { + default: "#000000", + subtle: "#66000000" + }, + light: { + default: "#FFFFFF", + subtle: "#33000000" + }, + accent: { + default: "#2E89FC", + subtle: "#882E89FC" + }, + attention: { + default: "#cc3300", + subtle: "#DDcc3300" + }, + good: { + default: "#028A02", + subtle: "#DD027502" + }, + warning: { + default: "#e69500", + subtle: "#DDe69500" + } + } + } + }, + inputs: { + label: { + requiredInputs: { + weight: Enums.TextWeight.Bolder, + suffix: " *", + suffixColor: Enums.TextColor.Attention + }, + optionalInputs: { + weight: Enums.TextWeight.Bolder + } + }, + errorMessage: { + color: Enums.TextColor.Attention, + weight: Enums.TextWeight.Bolder + } + }, + actions: { + maxActions: 5, + spacing: Enums.Spacing.Default, + buttonSpacing: 10, + showCard: { + actionMode: Enums.ShowCardActionMode.Inline, + inlineTopMargin: 16 + }, + actionsOrientation: Enums.Orientation.Horizontal, + actionAlignment: Enums.ActionAlignment.Left + }, + adaptiveCard: { + allowCustomStyle: false + }, + imageSet: { + imageSize: Enums.Size.Medium, + maxImageHeight: 100 + }, + factSet: { + title: { + color: Enums.TextColor.Default, + size: Enums.TextSize.Default, + isSubtle: false, + weight: Enums.TextWeight.Bolder, + wrap: true, + maxWidth: 150 + }, + value: { + color: Enums.TextColor.Default, + size: Enums.TextSize.Default, + isSubtle: false, + weight: Enums.TextWeight.Default, + wrap: true + }, + spacing: 10 + } + }); + } +}); + +// node_modules/adaptivecards/lib/registry.js +var require_registry = __commonJS({ + "node_modules/adaptivecards/lib/registry.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.GlobalRegistry = exports.CardObjectRegistry = exports.ElementSingletonBehavior = void 0; + var serialization_1 = require_serialization(); + var ElementSingletonBehavior; + (function(ElementSingletonBehavior2) { + ElementSingletonBehavior2[ElementSingletonBehavior2["Only"] = 0] = "Only"; + ElementSingletonBehavior2[ElementSingletonBehavior2["Allowed"] = 1] = "Allowed"; + ElementSingletonBehavior2[ElementSingletonBehavior2["NotAllowed"] = 2] = "NotAllowed"; + })(ElementSingletonBehavior = exports.ElementSingletonBehavior || (exports.ElementSingletonBehavior = {})); + var CardObjectRegistry = ( + /** @class */ + function() { + function CardObjectRegistry2() { + this._items = {}; + } + CardObjectRegistry2.prototype.findByName = function(typeName) { + return this._items.hasOwnProperty(typeName) ? this._items[typeName] : void 0; + }; + CardObjectRegistry2.prototype.clear = function() { + this._items = {}; + }; + CardObjectRegistry2.prototype.copyTo = function(target) { + var keys = Object.keys(this._items); + for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) { + var key = keys_1[_i]; + var typeRegistration = this._items[key]; + target.register(typeRegistration.typeName, typeRegistration.objectType, typeRegistration.schemaVersion, typeRegistration.singletonBehavior); + } + }; + CardObjectRegistry2.prototype.register = function(typeName, objectType, schemaVersion, singletonBehavior) { + if (schemaVersion === void 0) { + schemaVersion = serialization_1.Versions.v1_0; + } + if (singletonBehavior === void 0) { + singletonBehavior = ElementSingletonBehavior.NotAllowed; + } + var registrationInfo = this.findByName(typeName); + if (registrationInfo !== void 0) { + registrationInfo.objectType = objectType; + } else { + registrationInfo = { + typeName, + objectType, + schemaVersion, + singletonBehavior + }; + } + this._items[typeName] = registrationInfo; + }; + CardObjectRegistry2.prototype.unregister = function(typeName) { + delete this._items[typeName]; + }; + CardObjectRegistry2.prototype.createInstance = function(typeName, targetVersion) { + var registrationInfo = this.findByName(typeName); + return registrationInfo && registrationInfo.schemaVersion.compareTo(targetVersion) <= 0 ? new registrationInfo.objectType() : void 0; + }; + CardObjectRegistry2.prototype.getItemCount = function() { + return Object.keys(this._items).length; + }; + CardObjectRegistry2.prototype.getItemAt = function(index) { + var _this = this; + return Object.keys(this._items).map(function(e) { + return _this._items[e]; + })[index]; + }; + return CardObjectRegistry2; + }() + ); + exports.CardObjectRegistry = CardObjectRegistry; + var GlobalRegistry = ( + /** @class */ + function() { + function GlobalRegistry2() { + } + GlobalRegistry2.populateWithDefaultElements = function(registry) { + registry.clear(); + GlobalRegistry2.defaultElements.copyTo(registry); + }; + GlobalRegistry2.populateWithDefaultActions = function(registry) { + registry.clear(); + GlobalRegistry2.defaultActions.copyTo(registry); + }; + Object.defineProperty(GlobalRegistry2, "elements", { + get: function() { + if (!GlobalRegistry2._elements) { + GlobalRegistry2._elements = new CardObjectRegistry(); + GlobalRegistry2.populateWithDefaultElements(GlobalRegistry2._elements); + } + return GlobalRegistry2._elements; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(GlobalRegistry2, "actions", { + get: function() { + if (!GlobalRegistry2._actions) { + GlobalRegistry2._actions = new CardObjectRegistry(); + GlobalRegistry2.populateWithDefaultActions(GlobalRegistry2._actions); + } + return GlobalRegistry2._actions; + }, + enumerable: false, + configurable: true + }); + GlobalRegistry2.reset = function() { + GlobalRegistry2._elements = void 0; + GlobalRegistry2._actions = void 0; + }; + GlobalRegistry2.defaultElements = new CardObjectRegistry(); + GlobalRegistry2.defaultActions = new CardObjectRegistry(); + return GlobalRegistry2; + }() + ); + exports.GlobalRegistry = GlobalRegistry; + } +}); + +// node_modules/adaptivecards/lib/card-object.js +var require_card_object = __commonJS({ + "node_modules/adaptivecards/lib/card-object.js"(exports) { + "use strict"; + var __extends = exports && exports.__extends || /* @__PURE__ */ function() { + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { + d2.__proto__ = b2; + } || function(d2, b2) { + for (var p in b2) + if (Object.prototype.hasOwnProperty.call(b2, p)) + d2[p] = b2[p]; + }; + return extendStatics(d, b); + }; + return function(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { + this.constructor = d; + } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + }(); + var __decorate = exports && exports.__decorate || function(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") + r = Reflect.decorate(decorators, target, key, desc); + else + for (var i = decorators.length - 1; i >= 0; i--) + if (d = decorators[i]) + r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; + }; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.CardObject = exports.ValidationResults = void 0; + var Enums = require_enums(); + var strings_1 = require_strings(); + var shared_1 = require_shared(); + var host_capabilities_1 = require_host_capabilities(); + var serialization_1 = require_serialization(); + var ValidationResults = ( + /** @class */ + function() { + function ValidationResults2() { + this.allIds = {}; + this.validationEvents = []; + } + ValidationResults2.prototype.addFailure = function(cardObject, event, message) { + this.validationEvents.push({ + phase: Enums.ValidationPhase.Validation, + source: cardObject, + event, + message + }); + }; + return ValidationResults2; + }() + ); + exports.ValidationResults = ValidationResults; + var CardObject = ( + /** @class */ + function(_super) { + __extends(CardObject2, _super); + function CardObject2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this._shouldFallback = false; + return _this; + } + CardObject2.prototype.getSchemaKey = function() { + return this.getJsonTypeName(); + }; + Object.defineProperty(CardObject2.prototype, "requires", { + get: function() { + return this.getValue(CardObject2.requiresProperty); + }, + enumerable: false, + configurable: true + }); + CardObject2.prototype.contains = function(node) { + if (this._renderedElement) { + return this._renderedElement.contains(node); + } + return false; + }; + CardObject2.prototype.preProcessPropertyValue = function(prop, propertyValue) { + var value = propertyValue === void 0 ? this.getValue(prop) : propertyValue; + if (shared_1.GlobalSettings.allowPreProcessingPropertyValues) { + var currentObject = this; + while (currentObject && !currentObject.onPreProcessPropertyValue) { + currentObject = currentObject.parent; + } + if (currentObject && currentObject.onPreProcessPropertyValue) { + return currentObject.onPreProcessPropertyValue(this, prop, value); + } + } + return value; + }; + CardObject2.prototype.setParent = function(value) { + this._parent = value; + }; + CardObject2.prototype.setShouldFallback = function(value) { + this._shouldFallback = value; + }; + CardObject2.prototype.shouldFallback = function() { + return this._shouldFallback || !this.requires.areAllMet(this.hostConfig.hostCapabilities); + }; + CardObject2.prototype.getRootObject = function() { + var currentObject = this; + while (currentObject.parent) { + currentObject = currentObject.parent; + } + return currentObject; + }; + CardObject2.prototype.internalValidateProperties = function(context) { + if (this.id) { + if (context.allIds.hasOwnProperty(this.id)) { + if (context.allIds[this.id] === 1) { + context.addFailure(this, Enums.ValidationEvent.DuplicateId, strings_1.Strings.errors.duplicateId(this.id)); + } + context.allIds[this.id] += 1; + } else { + context.allIds[this.id] = 1; + } + } + }; + CardObject2.prototype.validateProperties = function() { + var result = new ValidationResults(); + this.internalValidateProperties(result); + return result; + }; + CardObject2.prototype.findDOMNodeOwner = function(node) { + return this.contains(node) ? this : void 0; + }; + CardObject2.prototype.releaseDOMResources = function() { + }; + Object.defineProperty(CardObject2.prototype, "parent", { + get: function() { + return this._parent; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(CardObject2.prototype, "renderedElement", { + get: function() { + return this._renderedElement; + }, + enumerable: false, + configurable: true + }); + CardObject2.typeNameProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "type", void 0, void 0, void 0, function(sender) { + return sender.getJsonTypeName(); + }); + CardObject2.idProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "id"); + CardObject2.requiresProperty = new serialization_1.SerializableObjectProperty(serialization_1.Versions.v1_2, "requires", host_capabilities_1.HostCapabilities, false, new host_capabilities_1.HostCapabilities()); + __decorate([ + (0, serialization_1.property)(CardObject2.idProperty) + ], CardObject2.prototype, "id", void 0); + __decorate([ + (0, serialization_1.property)(CardObject2.requiresProperty) + ], CardObject2.prototype, "requires", null); + return CardObject2; + }(serialization_1.SerializableObject) + ); + exports.CardObject = CardObject; + } +}); + +// node_modules/adaptivecards/lib/text-formatters.js +var require_text_formatters = __commonJS({ + "node_modules/adaptivecards/lib/text-formatters.js"(exports) { + "use strict"; + var __extends = exports && exports.__extends || /* @__PURE__ */ function() { + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { + d2.__proto__ = b2; + } || function(d2, b2) { + for (var p in b2) + if (Object.prototype.hasOwnProperty.call(b2, p)) + d2[p] = b2[p]; + }; + return extendStatics(d, b); + }; + return function(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { + this.constructor = d; + } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + }(); + Object.defineProperty(exports, "__esModule", { value: true }); + exports.formatText = void 0; + var AbstractTextFormatter = ( + /** @class */ + function() { + function AbstractTextFormatter2(regularExpression) { + this._regularExpression = regularExpression; + } + AbstractTextFormatter2.prototype.format = function(lang, input) { + var matches; + if (input) { + var result = input; + while ((matches = this._regularExpression.exec(input)) != null) { + result = result.replace(matches[0], this.internalFormat(lang, matches)); + } + return result; + } else { + return input; + } + }; + return AbstractTextFormatter2; + }() + ); + var DateFormatter = ( + /** @class */ + function(_super) { + __extends(DateFormatter2, _super); + function DateFormatter2() { + return _super !== null && _super.apply(this, arguments) || this; + } + DateFormatter2.prototype.internalFormat = function(lang, matches) { + var date = new Date(Date.parse(matches[1])); + var format = matches[2] !== void 0 ? matches[2].toLowerCase() : "compact"; + if (format !== "compact") { + return date.toLocaleDateString(lang, { + day: "numeric", + weekday: format, + month: format, + year: "numeric" + }); + } else { + return date.toLocaleDateString(); + } + }; + return DateFormatter2; + }(AbstractTextFormatter) + ); + var TimeFormatter = ( + /** @class */ + function(_super) { + __extends(TimeFormatter2, _super); + function TimeFormatter2() { + return _super !== null && _super.apply(this, arguments) || this; + } + TimeFormatter2.prototype.internalFormat = function(lang, matches) { + var date = new Date(Date.parse(matches[1])); + return date.toLocaleTimeString(lang, { hour: "numeric", minute: "2-digit" }); + }; + return TimeFormatter2; + }(AbstractTextFormatter) + ); + function formatText(lang, text) { + var formatters = [ + new DateFormatter(/\{{2}DATE\((\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:Z|(?:(?:-|\+)\d{2}:\d{2})))(?:, ?(COMPACT|LONG|SHORT))?\)\}{2}/g), + new TimeFormatter(/\{{2}TIME\((\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:Z|(?:(?:-|\+)\d{2}:\d{2})))\)\}{2}/g) + ]; + var result = text; + for (var _i = 0, formatters_1 = formatters; _i < formatters_1.length; _i++) { + var formatter = formatters_1[_i]; + result = formatter.format(lang, result); + } + return result; + } + exports.formatText = formatText; + } +}); + +// node_modules/adaptivecards/lib/controls/constants.js +var require_constants = __commonJS({ + "node_modules/adaptivecards/lib/controls/constants.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.Constants = void 0; + var Constants = ( + /** @class */ + function() { + function Constants2() { + } + Constants2.keys = { + tab: "Tab", + enter: "Enter", + escape: "Escape", + space: " ", + up: "ArrowUp", + down: "ArrowDown", + delete: "Delete" + }; + return Constants2; + }() + ); + exports.Constants = Constants; + } +}); + +// node_modules/adaptivecards/lib/controls/menu-item.js +var require_menu_item = __commonJS({ + "node_modules/adaptivecards/lib/controls/menu-item.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.MenuItem = void 0; + var host_config_1 = require_host_config(); + var constants_1 = require_constants(); + var MenuItem = ( + /** @class */ + function() { + function MenuItem2(key, value) { + this._isEnabled = true; + this.key = key; + this._value = value; + } + MenuItem2.prototype.click = function() { + if (this.isEnabled && this.onClick) { + this.onClick(this); + } + }; + MenuItem2.prototype.updateCssClasses = function() { + if (this._element) { + var effectiveHostConfig = this._hostConfig ? this._hostConfig : host_config_1.defaultHostConfig; + this._element.className = effectiveHostConfig.makeCssClassName("ac-ctrl"); + this._element.classList.add(effectiveHostConfig.makeCssClassName(this.isEnabled ? "ac-ctrl-dropdown-item" : "ac-ctrl-dropdown-item-disabled")); + if (!this.isEnabled) { + this._element.classList.add(effectiveHostConfig.makeCssClassName("ac-disabled")); + } + } + }; + MenuItem2.prototype.toString = function() { + return this.value; + }; + MenuItem2.prototype.render = function(hostConfig) { + var _this = this; + this._hostConfig = hostConfig; + if (!this._element) { + this._element = document.createElement("span"); + this._element.innerText = this.value; + this._element.setAttribute("role", "menuitem"); + if (!this.isEnabled) { + this._element.setAttribute("aria-disabled", "true"); + } + this._element.setAttribute("aria-current", "false"); + this._element.onmouseup = function(_e) { + _this.click(); + }; + this._element.onkeydown = function(e) { + if (e.key === constants_1.Constants.keys.enter) { + e.cancelBubble = true; + _this.click(); + } + }; + this.updateCssClasses(); + } + return this._element; + }; + Object.defineProperty(MenuItem2.prototype, "value", { + get: function() { + return this._value; + }, + set: function(newValue) { + this._value = newValue; + if (this._element) { + this._element.innerText = newValue; + } + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MenuItem2.prototype, "isEnabled", { + get: function() { + return this._isEnabled; + }, + set: function(value) { + if (this._isEnabled !== value) { + this._isEnabled = value; + this.updateCssClasses(); + } + }, + enumerable: false, + configurable: true + }); + return MenuItem2; + }() + ); + exports.MenuItem = MenuItem; + } +}); + +// node_modules/adaptivecards/lib/controls/collection.js +var require_collection = __commonJS({ + "node_modules/adaptivecards/lib/controls/collection.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.Collection = void 0; + var Collection = ( + /** @class */ + function() { + function Collection2() { + this._items = []; + } + Collection2.prototype.get = function(index) { + return this._items[index]; + }; + Collection2.prototype.add = function(item) { + this._items.push(item); + if (this.onItemAdded) { + this.onItemAdded(item); + } + }; + Collection2.prototype.remove = function(item) { + var i = this._items.indexOf(item); + if (i >= 0) { + this._items = this._items.splice(i, 1); + if (this.onItemRemoved) { + this.onItemRemoved(item); + } + } + }; + Collection2.prototype.indexOf = function(item) { + return this._items.indexOf(item); + }; + Object.defineProperty(Collection2.prototype, "length", { + get: function() { + return this._items.length; + }, + enumerable: false, + configurable: true + }); + return Collection2; + }() + ); + exports.Collection = Collection; + } +}); + +// node_modules/adaptivecards/lib/controls/popup-control.js +var require_popup_control = __commonJS({ + "node_modules/adaptivecards/lib/controls/popup-control.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.PopupControl = void 0; + var constants_1 = require_constants(); + var Utils = require_utils(); + var host_config_1 = require_host_config(); + var PopupControl = ( + /** @class */ + function() { + function PopupControl2() { + this._isOpen = false; + } + PopupControl2.prototype.keyDown = function(e) { + switch (e.key) { + case constants_1.Constants.keys.escape: + this.closePopup(true); + break; + } + }; + PopupControl2.prototype.render = function(_rootElementBounds) { + var _this = this; + var element = document.createElement("div"); + element.tabIndex = 0; + element.className = this.hostConfig.makeCssClassName("ac-ctrl", "ac-ctrl-popup-container"); + element.setAttribute("role", "dialog"); + element.setAttribute("aria-modal", "true"); + element.onkeydown = function(e) { + _this.keyDown(e); + return !e.cancelBubble; + }; + element.appendChild(this.renderContent()); + return element; + }; + PopupControl2.prototype.focus = function() { + if (this._popupElement) { + this._popupElement.firstElementChild.focus(); + } + }; + PopupControl2.prototype.popup = function(rootElement) { + var _a, _b, _c, _d, _f; + var _this = this; + if (!this._isOpen) { + this._overlayElement = document.createElement("div"); + this._overlayElement.className = this.hostConfig.makeCssClassName("ac-ctrl-overlay"); + this._overlayElement.tabIndex = 0; + this._overlayElement.style.width = document.documentElement.scrollWidth + "px"; + this._overlayElement.style.height = document.documentElement.scrollHeight + "px"; + this._overlayElement.onfocus = function(_e) { + _this.closePopup(true); + }; + document.body.appendChild(this._overlayElement); + var rootElementBounds = rootElement.getBoundingClientRect(); + this._popupElement = this.render(rootElementBounds); + (_a = this._popupElement.classList).remove.apply(_a, this.hostConfig.makeCssClassNames("ac-ctrl-slide", "ac-ctrl-slideLeftToRight", "ac-ctrl-slideRightToLeft", "ac-ctrl-slideTopToBottom", "ac-ctrl-slideRightToLeft")); + window.addEventListener("resize", function(_e) { + _this.closePopup(true); + }); + var rootElementLabel = rootElement.getAttribute("aria-label"); + if (rootElementLabel) { + this._popupElement.setAttribute("aria-label", rootElementLabel); + } + this._overlayElement.appendChild(this._popupElement); + var popupElementBounds = this._popupElement.getBoundingClientRect(); + var availableSpaceBelow = window.innerHeight - rootElementBounds.bottom; + var availableSpaceAbove = rootElementBounds.top; + var availableSpaceRight = window.innerWidth - rootElementBounds.right; + var availableSpaceLeft = rootElementBounds.left; + var left = rootElementBounds.left + Utils.getScrollX(); + var top_1; + if (availableSpaceAbove < popupElementBounds.height && availableSpaceBelow < popupElementBounds.height) { + var actualPopupHeight = Math.min(popupElementBounds.height, window.innerHeight); + this._popupElement.style.maxHeight = actualPopupHeight + "px"; + if (actualPopupHeight < popupElementBounds.height) { + top_1 = Utils.getScrollY(); + } else { + top_1 = Utils.getScrollY() + rootElementBounds.top + (rootElementBounds.height - actualPopupHeight) / 2; + } + if (availableSpaceLeft < popupElementBounds.width && availableSpaceRight < popupElementBounds.width) { + var actualPopupWidth = Math.min(popupElementBounds.width, window.innerWidth); + this._popupElement.style.maxWidth = actualPopupWidth + "px"; + if (actualPopupWidth < popupElementBounds.width) { + left = Utils.getScrollX(); + } else { + left = Utils.getScrollX() + rootElementBounds.left + (rootElementBounds.width - actualPopupWidth) / 2; + } + } else { + if (availableSpaceRight >= popupElementBounds.width) { + left = Utils.getScrollX() + rootElementBounds.right; + (_b = this._popupElement.classList).add.apply(_b, this.hostConfig.makeCssClassNames("ac-ctrl-slide", "ac-ctrl-slideLeftToRight")); + } else { + left = Utils.getScrollX() + rootElementBounds.left - popupElementBounds.width; + (_c = this._popupElement.classList).add.apply(_c, this.hostConfig.makeCssClassNames("ac-ctrl-slide", "ac-ctrl-slideRightToLeft")); + } + } + } else { + if (availableSpaceBelow >= popupElementBounds.height) { + top_1 = Utils.getScrollY() + rootElementBounds.bottom; + (_d = this._popupElement.classList).add.apply(_d, this.hostConfig.makeCssClassNames("ac-ctrl-slide", "ac-ctrl-slideTopToBottom")); + } else { + top_1 = Utils.getScrollY() + rootElementBounds.top - popupElementBounds.height; + (_f = this._popupElement.classList).add.apply(_f, this.hostConfig.makeCssClassNames("ac-ctrl-slide", "ac-ctrl-slideBottomToTop")); + } + if (availableSpaceRight < popupElementBounds.width) { + left = Utils.getScrollX() + rootElementBounds.right - popupElementBounds.width; + } + } + this._popupElement.style.left = left + "px"; + this._popupElement.style.top = top_1 + "px"; + this._popupElement.focus(); + this._isOpen = true; + } + }; + PopupControl2.prototype.closePopup = function(wasCancelled) { + if (this._isOpen) { + document.body.removeChild(this._overlayElement); + this._isOpen = false; + if (this.onClose) { + this.onClose(this, wasCancelled); + } + } + }; + Object.defineProperty(PopupControl2.prototype, "hostConfig", { + get: function() { + return this._hostConfig ? this._hostConfig : host_config_1.defaultHostConfig; + }, + set: function(value) { + this._hostConfig = value; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(PopupControl2.prototype, "isOpen", { + get: function() { + return this._isOpen; + }, + enumerable: false, + configurable: true + }); + return PopupControl2; + }() + ); + exports.PopupControl = PopupControl; + } +}); + +// node_modules/adaptivecards/lib/controls/popup-menu.js +var require_popup_menu = __commonJS({ + "node_modules/adaptivecards/lib/controls/popup-menu.js"(exports) { + "use strict"; + var __extends = exports && exports.__extends || /* @__PURE__ */ function() { + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { + d2.__proto__ = b2; + } || function(d2, b2) { + for (var p in b2) + if (Object.prototype.hasOwnProperty.call(b2, p)) + d2[p] = b2[p]; + }; + return extendStatics(d, b); + }; + return function(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { + this.constructor = d; + } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + }(); + Object.defineProperty(exports, "__esModule", { value: true }); + exports.PopupMenu = void 0; + var constants_1 = require_constants(); + var collection_1 = require_collection(); + var popup_control_1 = require_popup_control(); + var PopupMenu = ( + /** @class */ + function(_super) { + __extends(PopupMenu2, _super); + function PopupMenu2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this._items = new collection_1.Collection(); + _this._renderedItems = []; + _this._selectedIndex = -1; + return _this; + } + PopupMenu2.prototype.renderContent = function() { + var element = document.createElement("div"); + element.className = this.hostConfig.makeCssClassName("ac-ctrl ac-popup"); + element.setAttribute("role", "listbox"); + for (var i = 0; i < this._items.length; i++) { + var renderedItem = this._items.get(i).render(this.hostConfig); + renderedItem.tabIndex = 0; + element.appendChild(renderedItem); + if (i === this.selectedIndex) { + renderedItem.focus(); + } + this._renderedItems.push(renderedItem); + } + return element; + }; + PopupMenu2.prototype.keyDown = function(e) { + _super.prototype.keyDown.call(this, e); + var selectedItemIndex = this._selectedIndex; + switch (e.key) { + case constants_1.Constants.keys.tab: + this.closePopup(true); + break; + case constants_1.Constants.keys.up: + if (selectedItemIndex <= 0) { + selectedItemIndex = this._renderedItems.length - 1; + } else { + selectedItemIndex--; + if (selectedItemIndex < 0) { + selectedItemIndex = this._renderedItems.length - 1; + } + } + this.selectedIndex = selectedItemIndex; + e.cancelBubble = true; + break; + case constants_1.Constants.keys.down: + if (selectedItemIndex < 0) { + selectedItemIndex = 0; + } else { + selectedItemIndex++; + if (selectedItemIndex >= this._renderedItems.length) { + selectedItemIndex = 0; + } + } + this.selectedIndex = selectedItemIndex; + e.cancelBubble = true; + break; + } + }; + Object.defineProperty(PopupMenu2.prototype, "items", { + get: function() { + return this._items; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(PopupMenu2.prototype, "selectedIndex", { + get: function() { + return this._selectedIndex; + }, + set: function(index) { + if (index >= 0 && index < this._renderedItems.length) { + this._renderedItems[index].focus(); + this._selectedIndex = index; + } + }, + enumerable: false, + configurable: true + }); + return PopupMenu2; + }(popup_control_1.PopupControl) + ); + exports.PopupMenu = PopupMenu; + } +}); + +// node_modules/adaptivecards/lib/controls/index.js +var require_controls = __commonJS({ + "node_modules/adaptivecards/lib/controls/index.js"(exports) { + "use strict"; + var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { + if (k2 === void 0) + k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { + return m[k]; + } }; + } + Object.defineProperty(o, k2, desc); + } : function(o, m, k, k2) { + if (k2 === void 0) + k2 = k; + o[k2] = m[k]; + }); + var __exportStar = exports && exports.__exportStar || function(m, exports2) { + for (var p in m) + if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) + __createBinding(exports2, m, p); + }; + Object.defineProperty(exports, "__esModule", { value: true }); + __exportStar(require_menu_item(), exports); + __exportStar(require_popup_menu(), exports); + } +}); + +// node_modules/adaptivecards/lib/card-elements.js +var require_card_elements = __commonJS({ + "node_modules/adaptivecards/lib/card-elements.js"(exports) { + "use strict"; + var __extends = exports && exports.__extends || /* @__PURE__ */ function() { + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { + d2.__proto__ = b2; + } || function(d2, b2) { + for (var p in b2) + if (Object.prototype.hasOwnProperty.call(b2, p)) + d2[p] = b2[p]; + }; + return extendStatics(d, b); + }; + return function(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { + this.constructor = d; + } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + }(); + var __decorate = exports && exports.__decorate || function(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") + r = Reflect.decorate(decorators, target, key, desc); + else + for (var i = decorators.length - 1; i >= 0; i--) + if (d = decorators[i]) + r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; + }; + var __awaiter = exports && exports.__awaiter || function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve) { + resolve(value); + }); + } + return new (P || (P = Promise))(function(resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e) { + reject(e); + } + } + function step(result) { + result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + }; + var __generator = exports && exports.__generator || function(thisArg, body) { + var _ = { label: 0, sent: function() { + if (t[0] & 1) + throw t[1]; + return t[1]; + }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { + return this; + }), g; + function verb(n) { + return function(v) { + return step([n, v]); + }; + } + function step(op) { + if (f) + throw new TypeError("Generator is already executing."); + while (_) + try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) + return t; + if (y = 0, t) + op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: + case 1: + t = op; + break; + case 4: + _.label++; + return { value: op[1], done: false }; + case 5: + _.label++; + y = op[1]; + op = [0]; + continue; + case 7: + op = _.ops.pop(); + _.trys.pop(); + continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { + _ = 0; + continue; + } + if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) { + _.label = op[1]; + break; + } + if (op[0] === 6 && _.label < t[1]) { + _.label = t[1]; + t = op; + break; + } + if (t && _.label < t[2]) { + _.label = t[2]; + _.ops.push(op); + break; + } + if (t[2]) + _.ops.pop(); + _.trys.pop(); + continue; + } + op = body.call(thisArg, _); + } catch (e) { + op = [6, e]; + y = 0; + } finally { + f = t = 0; + } + if (op[0] & 5) + throw op[1]; + return { value: op[0] ? op[1] : void 0, done: true }; + } + }; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.ContainerWithActions = exports.ColumnSet = exports.Column = exports.Container = exports.BackgroundImage = exports.ContainerBase = exports.StylableCardElementContainer = exports.ContainerStyleProperty = exports.ActionSet = exports.ShowCardAction = exports.HttpAction = exports.HttpHeader = exports.ToggleVisibilityAction = exports.OpenUrlAction = exports.ExecuteAction = exports.SubmitAction = exports.SubmitActionBase = exports.Action = exports.TimeInput = exports.TimeProperty = exports.DateInput = exports.NumberInput = exports.ChoiceSetInput = exports.Choice = exports.ToggleInput = exports.TextInput = exports.Input = exports.Media = exports.YouTubePlayer = exports.DailymotionPlayer = exports.VimeoPlayer = exports.IFrameMediaMediaPlayer = exports.CustomMediaPlayer = exports.HTML5MediaPlayer = exports.MediaPlayer = exports.MediaSource = exports.CaptionSource = exports.ContentSource = exports.ImageSet = exports.CardElementContainer = exports.Image = exports.FactSet = exports.Fact = exports.RichTextBlock = exports.TextRun = exports.TextBlock = exports.BaseTextBlock = exports.ActionProperty = exports.CardElement = exports.renderSeparation = void 0; + exports.SerializationContext = exports.AdaptiveCard = exports.Authentication = exports.TokenExchangeResource = exports.AuthCardButton = exports.RefreshDefinition = exports.RefreshActionProperty = void 0; + var Enums = require_enums(); + var shared_1 = require_shared(); + var Utils = require_utils(); + var host_config_1 = require_host_config(); + var TextFormatters = require_text_formatters(); + var card_object_1 = require_card_object(); + var serialization_1 = require_serialization(); + var registry_1 = require_registry(); + var strings_1 = require_strings(); + var controls_1 = require_controls(); + function clearElement(element) { + var _a, _b; + var trustedHtml = typeof window === "undefined" ? "" : (_b = (_a = window.trustedTypes) === null || _a === void 0 ? void 0 : _a.emptyHTML) !== null && _b !== void 0 ? _b : ""; + element.innerHTML = trustedHtml; + } + function renderSeparation(hostConfig, separationDefinition, orientation) { + if (separationDefinition.spacing > 0 || separationDefinition.lineThickness && separationDefinition.lineThickness > 0) { + var separator = document.createElement("div"); + separator.className = hostConfig.makeCssClassName("ac-" + (orientation === Enums.Orientation.Horizontal ? "horizontal" : "vertical") + "-separator"); + separator.setAttribute("aria-hidden", "true"); + var color = separationDefinition.lineColor ? Utils.stringToCssColor(separationDefinition.lineColor) : ""; + if (orientation === Enums.Orientation.Horizontal) { + if (separationDefinition.lineThickness) { + separator.style.paddingTop = separationDefinition.spacing / 2 + "px"; + separator.style.marginBottom = separationDefinition.spacing / 2 + "px"; + separator.style.borderBottom = separationDefinition.lineThickness + "px solid " + color; + } else { + separator.style.height = separationDefinition.spacing + "px"; + } + } else { + if (separationDefinition.lineThickness) { + separator.style.paddingLeft = separationDefinition.spacing / 2 + "px"; + separator.style.marginRight = separationDefinition.spacing / 2 + "px"; + separator.style.borderRight = separationDefinition.lineThickness + "px solid " + color; + } else { + separator.style.width = separationDefinition.spacing + "px"; + } + } + separator.style.overflow = "hidden"; + separator.style.flex = "0 0 auto"; + return separator; + } else { + return void 0; + } + } + exports.renderSeparation = renderSeparation; + var CardElement = ( + /** @class */ + function(_super) { + __extends(CardElement2, _super); + function CardElement2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this._truncatedDueToOverflow = false; + return _this; + } + Object.defineProperty(CardElement2.prototype, "lang", { + get: function() { + var lang = this.getValue(CardElement2.langProperty); + if (lang) { + return lang; + } else { + if (this.parent) { + return this.parent.lang; + } else { + return void 0; + } + } + }, + set: function(value) { + this.setValue(CardElement2.langProperty, value); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(CardElement2.prototype, "isVisible", { + get: function() { + return this.getValue(CardElement2.isVisibleProperty); + }, + set: function(value) { + if (shared_1.GlobalSettings.useAdvancedCardBottomTruncation && !value) { + this.undoOverflowTruncation(); + } + if (this.isVisible !== value) { + this.setValue(CardElement2.isVisibleProperty, value); + this.updateRenderedElementVisibility(); + if (this._renderedElement) { + raiseElementVisibilityChangedEvent(this); + } + } + if (this._renderedElement) { + this._renderedElement.setAttribute("aria-expanded", value.toString()); + } + }, + enumerable: false, + configurable: true + }); + CardElement2.prototype.internalRenderSeparator = function() { + var renderedSeparator = renderSeparation(this.hostConfig, { + spacing: this.hostConfig.getEffectiveSpacing(this.spacing), + lineThickness: this.separator ? this.hostConfig.separator.lineThickness : void 0, + lineColor: this.separator ? this.hostConfig.separator.lineColor : void 0 + }, this.separatorOrientation); + if (shared_1.GlobalSettings.alwaysBleedSeparators && renderedSeparator && this.separatorOrientation === Enums.Orientation.Horizontal) { + var parentContainer = this.getParentContainer(); + if (parentContainer && parentContainer.getEffectivePadding()) { + var parentPhysicalPadding = this.hostConfig.paddingDefinitionToSpacingDefinition(parentContainer.getEffectivePadding()); + renderedSeparator.style.marginLeft = "-" + parentPhysicalPadding.left + "px"; + renderedSeparator.style.marginRight = "-" + parentPhysicalPadding.right + "px"; + } + } + return renderedSeparator; + }; + CardElement2.prototype.updateRenderedElementVisibility = function() { + var displayMode = this.isDesignMode() || this.isVisible ? this._defaultRenderedElementDisplayMode : "none"; + if (this._renderedElement) { + if (displayMode) { + this._renderedElement.style.display = displayMode; + } else { + this._renderedElement.style.removeProperty("display"); + } + } + if (this._separatorElement) { + if (this.parent && this.parent.isFirstElement(this)) { + this._separatorElement.style.display = "none"; + } else { + if (displayMode) { + this._separatorElement.style.display = displayMode; + } else { + this._separatorElement.style.removeProperty("display"); + } + } + } + }; + CardElement2.prototype.hideElementDueToOverflow = function() { + if (this._renderedElement && this.isVisible) { + this._renderedElement.style.visibility = "hidden"; + this.isVisible = false; + raiseElementVisibilityChangedEvent(this, false); + } + }; + CardElement2.prototype.showElementHiddenDueToOverflow = function() { + if (this._renderedElement && !this.isVisible) { + this._renderedElement.style.removeProperty("visibility"); + this.isVisible = true; + raiseElementVisibilityChangedEvent(this, false); + } + }; + CardElement2.prototype.handleOverflow = function(maxHeight) { + if (this.isVisible || this.isHiddenDueToOverflow()) { + var handled = this.truncateOverflow(maxHeight); + this._truncatedDueToOverflow = handled || this._truncatedDueToOverflow; + if (!handled) { + this.hideElementDueToOverflow(); + } else if (handled && !this.isVisible) { + this.showElementHiddenDueToOverflow(); + } + } + }; + CardElement2.prototype.resetOverflow = function() { + var sizeChanged = false; + if (this._truncatedDueToOverflow) { + this.undoOverflowTruncation(); + this._truncatedDueToOverflow = false; + sizeChanged = true; + } + if (this.isHiddenDueToOverflow()) { + this.showElementHiddenDueToOverflow(); + } + return sizeChanged; + }; + CardElement2.prototype.getDefaultSerializationContext = function() { + return new SerializationContext(); + }; + CardElement2.prototype.createPlaceholderElement = function() { + var styleDefinition = this.getEffectiveStyleDefinition(); + var foregroundCssColor = Utils.stringToCssColor(styleDefinition.foregroundColors.default.subtle); + var element = document.createElement("div"); + element.style.border = "1px dashed " + foregroundCssColor; + element.style.padding = "4px"; + element.style.minHeight = "32px"; + element.style.fontSize = "10px"; + if (foregroundCssColor) { + element.style.color = foregroundCssColor; + } + element.innerText = "Empty " + this.getJsonTypeName(); + return element; + }; + CardElement2.prototype.adjustRenderedElementSize = function(renderedElement) { + if (this.height === "auto") { + renderedElement.style.flex = "0 0 auto"; + } else { + renderedElement.style.flex = "1 1 auto"; + } + }; + CardElement2.prototype.isDisplayed = function() { + return this._renderedElement !== void 0 && this.isVisible && this._renderedElement.offsetHeight > 0; + }; + CardElement2.prototype.overrideInternalRender = function() { + return this.internalRender(); + }; + CardElement2.prototype.applyPadding = function() { + if (this.separatorElement && this.separatorOrientation === Enums.Orientation.Horizontal) { + if (shared_1.GlobalSettings.alwaysBleedSeparators && !this.isBleeding()) { + var padding = new shared_1.PaddingDefinition(); + this.getImmediateSurroundingPadding(padding); + var physicalPadding = this.hostConfig.paddingDefinitionToSpacingDefinition(padding); + this.separatorElement.style.marginLeft = "-" + physicalPadding.left + "px"; + this.separatorElement.style.marginRight = "-" + physicalPadding.right + "px"; + } else { + this.separatorElement.style.marginRight = "0"; + this.separatorElement.style.marginLeft = "0"; + } + } + }; + CardElement2.prototype.truncateOverflow = function(_maxHeight) { + return false; + }; + CardElement2.prototype.undoOverflowTruncation = function() { + return; + }; + CardElement2.prototype.getDefaultPadding = function() { + return new shared_1.PaddingDefinition(); + }; + CardElement2.prototype.getHasBackground = function(ignoreBackgroundImages) { + if (ignoreBackgroundImages === void 0) { + ignoreBackgroundImages = false; + } + return false; + }; + CardElement2.prototype.getHasBorder = function() { + return false; + }; + CardElement2.prototype.getPadding = function() { + return this._padding; + }; + CardElement2.prototype.setPadding = function(value) { + this._padding = value; + }; + CardElement2.prototype.shouldSerialize = function(context) { + return context.elementRegistry.findByName(this.getJsonTypeName()) !== void 0; + }; + Object.defineProperty(CardElement2.prototype, "useDefaultSizing", { + get: function() { + return true; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(CardElement2.prototype, "separatorOrientation", { + get: function() { + return Enums.Orientation.Horizontal; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(CardElement2.prototype, "defaultStyle", { + get: function() { + return Enums.ContainerStyle.Default; + }, + enumerable: false, + configurable: true + }); + CardElement2.prototype.parse = function(source, context) { + _super.prototype.parse.call(this, source, context ? context : new SerializationContext()); + }; + CardElement2.prototype.asString = function() { + return ""; + }; + CardElement2.prototype.isBleeding = function() { + return false; + }; + CardElement2.prototype.getEffectiveStyle = function() { + if (this.parent) { + return this.parent.getEffectiveStyle(); + } + return this.defaultStyle; + }; + CardElement2.prototype.getEffectiveStyleDefinition = function() { + return this.hostConfig.containerStyles.getStyleByName(this.getEffectiveStyle()); + }; + CardElement2.prototype.getEffectiveTextStyleDefinition = function() { + if (this.parent) { + return this.parent.getEffectiveTextStyleDefinition(); + } + return this.hostConfig.textStyles.default; + }; + CardElement2.prototype.getForbiddenActionTypes = function() { + return []; + }; + CardElement2.prototype.getImmediateSurroundingPadding = function(result, processTop, processRight, processBottom, processLeft) { + if (processTop === void 0) { + processTop = true; + } + if (processRight === void 0) { + processRight = true; + } + if (processBottom === void 0) { + processBottom = true; + } + if (processLeft === void 0) { + processLeft = true; + } + if (this.parent) { + var doProcessTop = processTop && this.parent.isTopElement(this); + var doProcessRight = processRight && this.parent.isRightMostElement(this); + var doProcessBottom = processBottom && this.parent.isBottomElement(this); + var doProcessLeft = processLeft && this.parent.isLeftMostElement(this); + var effectivePadding = this.parent.getEffectivePadding(); + if (effectivePadding) { + if (doProcessTop && effectivePadding.top !== Enums.Spacing.None) { + result.top = effectivePadding.top; + doProcessTop = false; + } + if (doProcessRight && effectivePadding.right !== Enums.Spacing.None) { + result.right = effectivePadding.right; + doProcessRight = false; + } + if (doProcessBottom && effectivePadding.bottom !== Enums.Spacing.None) { + result.bottom = effectivePadding.bottom; + doProcessBottom = false; + } + if (doProcessLeft && effectivePadding.left !== Enums.Spacing.None) { + result.left = effectivePadding.left; + doProcessLeft = false; + } + } + if (doProcessTop || doProcessRight || doProcessBottom || doProcessLeft) { + this.parent.getImmediateSurroundingPadding(result, doProcessTop, doProcessRight, doProcessBottom, doProcessLeft); + } + } + }; + CardElement2.prototype.getActionCount = function() { + return 0; + }; + CardElement2.prototype.getActionAt = function(index) { + throw new Error(strings_1.Strings.errors.indexOutOfRange(index)); + }; + CardElement2.prototype.indexOfAction = function(action) { + for (var i = 0; i < this.getActionCount(); i++) { + if (this.getActionAt(i) === action) { + return i; + } + } + return -1; + }; + CardElement2.prototype.remove = function() { + if (this.parent && this.parent instanceof CardElementContainer) { + return this.parent.removeItem(this); + } + return false; + }; + CardElement2.prototype.render = function() { + this._renderedElement = this.overrideInternalRender(); + this._separatorElement = this.internalRenderSeparator(); + if (this._renderedElement) { + if (this.id) { + this._renderedElement.id = this.id; + } + if (this.customCssSelector) { + this._renderedElement.classList.add(this.customCssSelector); + } + this._renderedElement.style.boxSizing = "border-box"; + this._defaultRenderedElementDisplayMode = this._renderedElement.style.display ? this._renderedElement.style.display : void 0; + this.adjustRenderedElementSize(this._renderedElement); + this.updateLayout(false); + } else if (this.isDesignMode()) { + this._renderedElement = this.createPlaceholderElement(); + } + this.getRootElement().updateActionsEnabledState(); + return this._renderedElement; + }; + CardElement2.prototype.updateLayout = function(_processChildren) { + if (_processChildren === void 0) { + _processChildren = true; + } + this.updateRenderedElementVisibility(); + this.applyPadding(); + }; + CardElement2.prototype.updateActionsEnabledState = function() { + var allActions = this.getRootElement().getAllActions(); + for (var _i = 0, allActions_1 = allActions; _i < allActions_1.length; _i++) { + var action = allActions_1[_i]; + action.updateEnabledState(); + } + }; + CardElement2.prototype.indexOf = function(_cardElement) { + return -1; + }; + CardElement2.prototype.isDesignMode = function() { + var rootElement = this.getRootElement(); + return rootElement instanceof AdaptiveCard && rootElement.designMode; + }; + CardElement2.prototype.isFirstElement = function(_element) { + return true; + }; + CardElement2.prototype.isLastElement = function(_element) { + return true; + }; + CardElement2.prototype.isAtTheVeryLeft = function() { + return this.parent ? this.parent.isLeftMostElement(this) && this.parent.isAtTheVeryLeft() : true; + }; + CardElement2.prototype.isAtTheVeryRight = function() { + return this.parent ? this.parent.isRightMostElement(this) && this.parent.isAtTheVeryRight() : true; + }; + CardElement2.prototype.isAtTheVeryTop = function() { + return this.parent ? this.parent.isFirstElement(this) && this.parent.isAtTheVeryTop() : true; + }; + CardElement2.prototype.isAtTheVeryBottom = function() { + return this.parent ? this.parent.isLastElement(this) && this.parent.isAtTheVeryBottom() : true; + }; + CardElement2.prototype.isBleedingAtTop = function() { + return false; + }; + CardElement2.prototype.isBleedingAtBottom = function() { + return false; + }; + CardElement2.prototype.isLeftMostElement = function(_element) { + return true; + }; + CardElement2.prototype.isRightMostElement = function(_element) { + return true; + }; + CardElement2.prototype.isTopElement = function(element) { + return this.isFirstElement(element); + }; + CardElement2.prototype.isBottomElement = function(element) { + return this.isLastElement(element); + }; + CardElement2.prototype.isHiddenDueToOverflow = function() { + return this._renderedElement !== void 0 && this._renderedElement.style.visibility === "hidden"; + }; + CardElement2.prototype.getRootElement = function() { + return this.getRootObject(); + }; + CardElement2.prototype.getParentContainer = function() { + var currentElement = this.parent; + while (currentElement) { + if (currentElement instanceof Container) { + return currentElement; + } + currentElement = currentElement.parent; + } + return void 0; + }; + CardElement2.prototype.getAllInputs = function(processActions) { + if (processActions === void 0) { + processActions = true; + } + return []; + }; + CardElement2.prototype.getAllActions = function() { + var result = []; + for (var i = 0; i < this.getActionCount(); i++) { + var action = this.getActionAt(i); + if (action) { + result.push(action); + } + } + return result; + }; + CardElement2.prototype.getResourceInformation = function() { + return []; + }; + CardElement2.prototype.getElementById = function(id) { + return this.id === id ? this : void 0; + }; + CardElement2.prototype.getActionById = function(_id) { + return void 0; + }; + CardElement2.prototype.getEffectivePadding = function() { + var padding = this.getPadding(); + return padding ? padding : this.getDefaultPadding(); + }; + CardElement2.prototype.getEffectiveHorizontalAlignment = function() { + if (this.horizontalAlignment !== void 0) { + return this.horizontalAlignment; + } + if (this.parent) { + return this.parent.getEffectiveHorizontalAlignment(); + } + return Enums.HorizontalAlignment.Left; + }; + Object.defineProperty(CardElement2.prototype, "hostConfig", { + get: function() { + if (this._hostConfig) { + return this._hostConfig; + } else { + if (this.parent) { + return this.parent.hostConfig; + } else { + return host_config_1.defaultHostConfig; + } + } + }, + set: function(value) { + this._hostConfig = value; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(CardElement2.prototype, "index", { + get: function() { + if (this.parent) { + return this.parent.indexOf(this); + } else { + return 0; + } + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(CardElement2.prototype, "isInteractive", { + get: function() { + return false; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(CardElement2.prototype, "isStandalone", { + get: function() { + return true; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(CardElement2.prototype, "isInline", { + get: function() { + return false; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(CardElement2.prototype, "hasVisibleSeparator", { + get: function() { + if (this.parent && this.separatorElement) { + return !this.parent.isFirstElement(this) && (this.isVisible || this.isDesignMode()); + } else { + return false; + } + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(CardElement2.prototype, "separatorElement", { + get: function() { + return this._separatorElement; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(CardElement2.prototype, "parent", { + get: function() { + return this._parent; + }, + enumerable: false, + configurable: true + }); + CardElement2.prototype.getElementSingletonBehavior = function() { + return registry_1.ElementSingletonBehavior.NotAllowed; + }; + CardElement2.langProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_1, "lang", true, /^[a-z]{2,3}$/gi); + CardElement2.isVisibleProperty = new serialization_1.BoolProperty(serialization_1.Versions.v1_2, "isVisible", true); + CardElement2.separatorProperty = new serialization_1.BoolProperty(serialization_1.Versions.v1_0, "separator", false); + CardElement2.heightProperty = new serialization_1.ValueSetProperty(serialization_1.Versions.v1_1, "height", [{ value: "auto" }, { value: "stretch" }], "auto"); + CardElement2.horizontalAlignmentProperty = new serialization_1.EnumProperty(serialization_1.Versions.v1_0, "horizontalAlignment", Enums.HorizontalAlignment); + CardElement2.spacingProperty = new serialization_1.EnumProperty(serialization_1.Versions.v1_0, "spacing", Enums.Spacing, Enums.Spacing.Default); + __decorate([ + (0, serialization_1.property)(CardElement2.horizontalAlignmentProperty) + ], CardElement2.prototype, "horizontalAlignment", void 0); + __decorate([ + (0, serialization_1.property)(CardElement2.spacingProperty) + ], CardElement2.prototype, "spacing", void 0); + __decorate([ + (0, serialization_1.property)(CardElement2.separatorProperty) + ], CardElement2.prototype, "separator", void 0); + __decorate([ + (0, serialization_1.property)(CardElement2.heightProperty) + ], CardElement2.prototype, "height", void 0); + __decorate([ + (0, serialization_1.property)(CardElement2.langProperty) + ], CardElement2.prototype, "lang", null); + __decorate([ + (0, serialization_1.property)(CardElement2.isVisibleProperty) + ], CardElement2.prototype, "isVisible", null); + return CardElement2; + }(card_object_1.CardObject) + ); + exports.CardElement = CardElement; + var ActionProperty = ( + /** @class */ + function(_super) { + __extends(ActionProperty2, _super); + function ActionProperty2(targetVersion, name, forbiddenActionTypes) { + if (forbiddenActionTypes === void 0) { + forbiddenActionTypes = []; + } + var _this = _super.call(this, targetVersion, name, void 0) || this; + _this.targetVersion = targetVersion; + _this.name = name; + _this.forbiddenActionTypes = forbiddenActionTypes; + return _this; + } + ActionProperty2.prototype.parse = function(sender, source, context) { + var parent = sender; + return context.parseAction(parent, source[this.name], this.forbiddenActionTypes, parent.isDesignMode()); + }; + ActionProperty2.prototype.toJSON = function(sender, target, value, context) { + context.serializeValue(target, this.name, value ? value.toJSON(context) : void 0, void 0, true); + }; + return ActionProperty2; + }(serialization_1.PropertyDefinition) + ); + exports.ActionProperty = ActionProperty; + var BaseTextBlock = ( + /** @class */ + function(_super) { + __extends(BaseTextBlock2, _super); + function BaseTextBlock2(text) { + var _this = _super.call(this) || this; + _this.ariaHidden = false; + if (text) { + _this.text = text; + } + return _this; + } + BaseTextBlock2.prototype.populateSchema = function(schema) { + _super.prototype.populateSchema.call(this, schema); + schema.remove(BaseTextBlock2.selectActionProperty); + }; + Object.defineProperty(BaseTextBlock2.prototype, "text", { + get: function() { + return this.getValue(BaseTextBlock2.textProperty); + }, + set: function(value) { + this.setText(value); + }, + enumerable: false, + configurable: true + }); + BaseTextBlock2.prototype.getFontSize = function(fontType) { + switch (this.effectiveSize) { + case Enums.TextSize.Small: + return fontType.fontSizes.small; + case Enums.TextSize.Medium: + return fontType.fontSizes.medium; + case Enums.TextSize.Large: + return fontType.fontSizes.large; + case Enums.TextSize.ExtraLarge: + return fontType.fontSizes.extraLarge; + default: + return fontType.fontSizes.default; + } + }; + BaseTextBlock2.prototype.getColorDefinition = function(colorSet, color) { + switch (color) { + case Enums.TextColor.Accent: + return colorSet.accent; + case Enums.TextColor.Dark: + return colorSet.dark; + case Enums.TextColor.Light: + return colorSet.light; + case Enums.TextColor.Good: + return colorSet.good; + case Enums.TextColor.Warning: + return colorSet.warning; + case Enums.TextColor.Attention: + return colorSet.attention; + default: + return colorSet.default; + } + }; + BaseTextBlock2.prototype.setText = function(value) { + this.setValue(BaseTextBlock2.textProperty, value); + }; + BaseTextBlock2.prototype.init = function(textDefinition) { + this.size = textDefinition.size; + this.weight = textDefinition.weight; + this.color = textDefinition.color; + this.isSubtle = textDefinition.isSubtle; + }; + BaseTextBlock2.prototype.asString = function() { + return this.text; + }; + BaseTextBlock2.prototype.applyStylesTo = function(targetElement) { + var fontType = this.hostConfig.getFontTypeDefinition(this.effectiveFontType); + if (fontType.fontFamily) { + targetElement.style.fontFamily = fontType.fontFamily; + } + var fontSize; + switch (this.effectiveSize) { + case Enums.TextSize.Small: + fontSize = fontType.fontSizes.small; + break; + case Enums.TextSize.Medium: + fontSize = fontType.fontSizes.medium; + break; + case Enums.TextSize.Large: + fontSize = fontType.fontSizes.large; + break; + case Enums.TextSize.ExtraLarge: + fontSize = fontType.fontSizes.extraLarge; + break; + default: + fontSize = fontType.fontSizes.default; + break; + } + targetElement.style.fontSize = fontSize + "px"; + var colorDefinition = this.getColorDefinition(this.getEffectiveStyleDefinition().foregroundColors, this.effectiveColor); + var targetColor = Utils.stringToCssColor(this.effectiveIsSubtle ? colorDefinition.subtle : colorDefinition.default); + if (targetColor) { + targetElement.style.color = targetColor; + } + var fontWeight; + switch (this.effectiveWeight) { + case Enums.TextWeight.Lighter: + fontWeight = fontType.fontWeights.lighter; + break; + case Enums.TextWeight.Bolder: + fontWeight = fontType.fontWeights.bolder; + break; + default: + fontWeight = fontType.fontWeights.default; + break; + } + targetElement.style.fontWeight = fontWeight.toString(); + if (this.ariaHidden) { + targetElement.setAttribute("aria-hidden", "true"); + } + }; + BaseTextBlock2.prototype.getAllActions = function() { + var result = _super.prototype.getAllActions.call(this); + if (this.selectAction) { + result.push(this.selectAction); + } + return result; + }; + Object.defineProperty(BaseTextBlock2.prototype, "effectiveColor", { + get: function() { + return this.color !== void 0 ? this.color : this.getEffectiveTextStyleDefinition().color; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(BaseTextBlock2.prototype, "effectiveFontType", { + get: function() { + return this.fontType !== void 0 ? this.fontType : this.getEffectiveTextStyleDefinition().fontType; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(BaseTextBlock2.prototype, "effectiveIsSubtle", { + get: function() { + return this.isSubtle !== void 0 ? this.isSubtle : this.getEffectiveTextStyleDefinition().isSubtle; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(BaseTextBlock2.prototype, "effectiveSize", { + get: function() { + return this.size !== void 0 ? this.size : this.getEffectiveTextStyleDefinition().size; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(BaseTextBlock2.prototype, "effectiveWeight", { + get: function() { + return this.weight !== void 0 ? this.weight : this.getEffectiveTextStyleDefinition().weight; + }, + enumerable: false, + configurable: true + }); + BaseTextBlock2.textProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "text", true); + BaseTextBlock2.sizeProperty = new serialization_1.EnumProperty(serialization_1.Versions.v1_0, "size", Enums.TextSize); + BaseTextBlock2.weightProperty = new serialization_1.EnumProperty(serialization_1.Versions.v1_0, "weight", Enums.TextWeight); + BaseTextBlock2.colorProperty = new serialization_1.EnumProperty(serialization_1.Versions.v1_0, "color", Enums.TextColor); + BaseTextBlock2.isSubtleProperty = new serialization_1.BoolProperty(serialization_1.Versions.v1_0, "isSubtle"); + BaseTextBlock2.fontTypeProperty = new serialization_1.EnumProperty(serialization_1.Versions.v1_2, "fontType", Enums.FontType); + BaseTextBlock2.selectActionProperty = new ActionProperty(serialization_1.Versions.v1_1, "selectAction", [ + "Action.ShowCard" + ]); + __decorate([ + (0, serialization_1.property)(BaseTextBlock2.sizeProperty) + ], BaseTextBlock2.prototype, "size", void 0); + __decorate([ + (0, serialization_1.property)(BaseTextBlock2.weightProperty) + ], BaseTextBlock2.prototype, "weight", void 0); + __decorate([ + (0, serialization_1.property)(BaseTextBlock2.colorProperty) + ], BaseTextBlock2.prototype, "color", void 0); + __decorate([ + (0, serialization_1.property)(BaseTextBlock2.fontTypeProperty) + ], BaseTextBlock2.prototype, "fontType", void 0); + __decorate([ + (0, serialization_1.property)(BaseTextBlock2.isSubtleProperty) + ], BaseTextBlock2.prototype, "isSubtle", void 0); + __decorate([ + (0, serialization_1.property)(BaseTextBlock2.textProperty) + ], BaseTextBlock2.prototype, "text", null); + __decorate([ + (0, serialization_1.property)(BaseTextBlock2.selectActionProperty) + ], BaseTextBlock2.prototype, "selectAction", void 0); + return BaseTextBlock2; + }(CardElement) + ); + exports.BaseTextBlock = BaseTextBlock; + var TextBlock = ( + /** @class */ + function(_super) { + __extends(TextBlock2, _super); + function TextBlock2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.wrap = false; + _this._treatAsPlainText = true; + _this.useMarkdown = true; + return _this; + } + TextBlock2.prototype.restoreOriginalContent = function() { + var _a2, _b2; + if (this.renderedElement !== void 0) { + if (this.maxLines && this.maxLines > 0) { + this.renderedElement.style.maxHeight = this._computedLineHeight * this.maxLines + "px"; + } + var originalHtml = (_b2 = (_a2 = TextBlock2._ttRoundtripPolicy) === null || _a2 === void 0 ? void 0 : _a2.createHTML(this._originalInnerHtml)) !== null && _b2 !== void 0 ? _b2 : this._originalInnerHtml; + this.renderedElement.innerHTML = originalHtml; + } + }; + TextBlock2.prototype.truncateIfSupported = function(maxHeight) { + if (this.renderedElement !== void 0) { + var children = this.renderedElement.children; + var isTextOnly = !children.length; + var truncationSupported = isTextOnly || children.length === 1 && children[0].tagName.toLowerCase() === "p" && !children[0].children.length; + if (truncationSupported) { + var element = isTextOnly ? this.renderedElement : children[0]; + Utils.truncateText(element, maxHeight, this._computedLineHeight); + return true; + } + } + return false; + }; + TextBlock2.prototype.setText = function(value) { + _super.prototype.setText.call(this, value); + this._processedText = void 0; + }; + TextBlock2.prototype.internalRender = function() { + var _this = this; + var _a2, _b2; + this._processedText = void 0; + if (this.text) { + var preProcessedText = this.preProcessPropertyValue(BaseTextBlock.textProperty); + var hostConfig = this.hostConfig; + var element = void 0; + if (this.forElementId) { + var labelElement = document.createElement("label"); + labelElement.htmlFor = this.forElementId; + element = labelElement; + } else { + element = document.createElement("div"); + } + element.classList.add(hostConfig.makeCssClassName("ac-textBlock")); + element.style.overflow = "hidden"; + this.applyStylesTo(element); + if (this.style === "heading") { + element.setAttribute("role", "heading"); + var headingLevel = this.hostConfig.textBlock.headingLevel; + if (headingLevel !== void 0 && headingLevel > 0) { + element.setAttribute("aria-level", headingLevel.toString()); + } + } + if (this.selectAction && hostConfig.supportsInteractivity) { + element.onclick = function(e) { + if (_this.selectAction && _this.selectAction.isEffectivelyEnabled()) { + e.preventDefault(); + e.cancelBubble = true; + _this.selectAction.execute(); + } + }; + this.selectAction.setupElementForAccessibility(element); + if (this.selectAction.isEffectivelyEnabled()) { + element.classList.add(hostConfig.makeCssClassName("ac-selectable")); + } + } + if (!this._processedText) { + this._treatAsPlainText = true; + var formattedText = TextFormatters.formatText(this.lang, preProcessedText); + if (this.useMarkdown && formattedText) { + if (shared_1.GlobalSettings.allowMarkForTextHighlighting) { + formattedText = formattedText.replace(//g, "===").replace(/<\/mark>/g, "/==/"); + } + var markdownProcessingResult = AdaptiveCard.applyMarkdown(formattedText); + if (markdownProcessingResult.didProcess && markdownProcessingResult.outputHtml) { + this._processedText = markdownProcessingResult.outputHtml; + this._treatAsPlainText = false; + if (shared_1.GlobalSettings.allowMarkForTextHighlighting && this._processedText) { + var markStyle = ""; + var effectiveStyle = this.getEffectiveStyleDefinition(); + if (effectiveStyle.highlightBackgroundColor) { + markStyle += "background-color: " + effectiveStyle.highlightBackgroundColor + ";"; + } + if (effectiveStyle.highlightForegroundColor) { + markStyle += "color: " + effectiveStyle.highlightForegroundColor + ";"; + } + if (markStyle) { + markStyle = 'style="' + markStyle + '"'; + } + this._processedText = this._processedText.replace(/===/g, "").replace(/\/==\//g, ""); + } + } else { + this._processedText = formattedText; + this._treatAsPlainText = true; + } + } else { + this._processedText = formattedText; + this._treatAsPlainText = true; + } + } + if (!this._processedText) { + this._processedText = ""; + } + if (this._treatAsPlainText) { + element.innerText = this._processedText; + } else { + var processedHtml = (_b2 = (_a2 = TextBlock2._ttMarkdownPolicy) === null || _a2 === void 0 ? void 0 : _a2.createHTML(this._processedText)) !== null && _b2 !== void 0 ? _b2 : this._processedText; + element.innerHTML = processedHtml; + } + if (element.firstElementChild instanceof HTMLElement) { + var firstElementChild = element.firstElementChild; + firstElementChild.style.marginTop = "0px"; + firstElementChild.style.width = "100%"; + if (!this.wrap) { + firstElementChild.style.overflow = "hidden"; + firstElementChild.style.textOverflow = "ellipsis"; + } + } + if (element.lastElementChild instanceof HTMLElement) { + element.lastElementChild.style.marginBottom = "0px"; + } + var anchors = element.getElementsByTagName("a"); + var _loop_1 = function(anchor2) { + anchor2.classList.add(hostConfig.makeCssClassName("ac-anchor")); + anchor2.target = "_blank"; + anchor2.onclick = function(e) { + if (raiseAnchorClickedEvent(_this, anchor2, e)) { + e.preventDefault(); + e.cancelBubble = true; + } + }; + anchor2.oncontextmenu = function(e) { + if (raiseAnchorClickedEvent(_this, anchor2, e)) { + e.preventDefault(); + e.cancelBubble = true; + return false; + } + return true; + }; + }; + for (var _i = 0, _c = Array.from(anchors); _i < _c.length; _i++) { + var anchor = _c[_i]; + _loop_1(anchor); + } + if (this.wrap) { + element.style.wordWrap = "break-word"; + if (this.maxLines && this.maxLines > 0) { + element.style.overflow = "hidden"; + if (Utils.isInternetExplorer() || !shared_1.GlobalSettings.useWebkitLineClamp) { + element.style.maxHeight = this._computedLineHeight * this.maxLines + "px"; + } else { + element.style.removeProperty("line-height"); + element.style.display = "-webkit-box"; + element.style.webkitBoxOrient = "vertical"; + element.style.webkitLineClamp = this.maxLines.toString(); + } + } + } else { + element.style.whiteSpace = "nowrap"; + element.style.textOverflow = "ellipsis"; + } + if (shared_1.GlobalSettings.useAdvancedTextBlockTruncation || shared_1.GlobalSettings.useAdvancedCardBottomTruncation) { + this._originalInnerHtml = element.innerHTML; + } + return element; + } else { + return void 0; + } + }; + TextBlock2.prototype.truncateOverflow = function(maxHeight) { + if (maxHeight >= this._computedLineHeight) { + return this.truncateIfSupported(maxHeight); + } + return false; + }; + TextBlock2.prototype.undoOverflowTruncation = function() { + this.restoreOriginalContent(); + if (shared_1.GlobalSettings.useAdvancedTextBlockTruncation && this.maxLines) { + var maxHeight = this._computedLineHeight * this.maxLines; + this.truncateIfSupported(maxHeight); + } + }; + TextBlock2.prototype.applyStylesTo = function(targetElement) { + _super.prototype.applyStylesTo.call(this, targetElement); + switch (this.getEffectiveHorizontalAlignment()) { + case Enums.HorizontalAlignment.Center: + targetElement.style.textAlign = "center"; + break; + case Enums.HorizontalAlignment.Right: + targetElement.style.textAlign = "end"; + break; + default: + targetElement.style.textAlign = "start"; + break; + } + var lineHeights = this.hostConfig.lineHeights; + if (lineHeights) { + switch (this.effectiveSize) { + case Enums.TextSize.Small: + this._computedLineHeight = lineHeights.small; + break; + case Enums.TextSize.Medium: + this._computedLineHeight = lineHeights.medium; + break; + case Enums.TextSize.Large: + this._computedLineHeight = lineHeights.large; + break; + case Enums.TextSize.ExtraLarge: + this._computedLineHeight = lineHeights.extraLarge; + break; + default: + this._computedLineHeight = lineHeights.default; + break; + } + } else { + this._computedLineHeight = this.getFontSize(this.hostConfig.getFontTypeDefinition(this.effectiveFontType)) * 1.33; + } + targetElement.style.lineHeight = this._computedLineHeight + "px"; + }; + TextBlock2.prototype.getJsonTypeName = function() { + return "TextBlock"; + }; + TextBlock2.prototype.getEffectiveTextStyleDefinition = function() { + if (this.style) { + return this.hostConfig.textStyles.getStyleByName(this.style); + } + return _super.prototype.getEffectiveTextStyleDefinition.call(this); + }; + TextBlock2.prototype.updateLayout = function(processChildren) { + if (processChildren === void 0) { + processChildren = false; + } + _super.prototype.updateLayout.call(this, processChildren); + if (shared_1.GlobalSettings.useAdvancedTextBlockTruncation && this.maxLines && this.isDisplayed()) { + this.restoreOriginalContent(); + this.truncateIfSupported(this._computedLineHeight * this.maxLines); + } + }; + var _a, _b; + TextBlock2.wrapProperty = new serialization_1.BoolProperty(serialization_1.Versions.v1_0, "wrap", false); + TextBlock2.maxLinesProperty = new serialization_1.NumProperty(serialization_1.Versions.v1_0, "maxLines"); + TextBlock2.styleProperty = new serialization_1.ValueSetProperty(serialization_1.Versions.v1_5, "style", [ + { value: "default" }, + { value: "columnHeader" }, + { value: "heading" } + ]); + TextBlock2._ttMarkdownPolicy = typeof window === "undefined" ? void 0 : (_a = window.trustedTypes) === null || _a === void 0 ? void 0 : _a.createPolicy("adaptivecards#markdownPassthroughPolicy", { createHTML: function(value) { + return value; + } }); + TextBlock2._ttRoundtripPolicy = typeof window === "undefined" ? void 0 : (_b = window.trustedTypes) === null || _b === void 0 ? void 0 : _b.createPolicy("adaptivecards#restoreContentsPolicy", { createHTML: function(value) { + return value; + } }); + __decorate([ + (0, serialization_1.property)(TextBlock2.wrapProperty) + ], TextBlock2.prototype, "wrap", void 0); + __decorate([ + (0, serialization_1.property)(TextBlock2.maxLinesProperty) + ], TextBlock2.prototype, "maxLines", void 0); + __decorate([ + (0, serialization_1.property)(TextBlock2.styleProperty) + ], TextBlock2.prototype, "style", void 0); + return TextBlock2; + }(BaseTextBlock) + ); + exports.TextBlock = TextBlock; + var TextRun = ( + /** @class */ + function(_super) { + __extends(TextRun2, _super); + function TextRun2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.italic = false; + _this.strikethrough = false; + _this.highlight = false; + _this.underline = false; + return _this; + } + TextRun2.prototype.populateSchema = function(schema) { + _super.prototype.populateSchema.call(this, schema); + schema.add(BaseTextBlock.selectActionProperty); + }; + TextRun2.prototype.internalRender = function() { + var _this = this; + if (this.text) { + var preProcessedText = this.preProcessPropertyValue(BaseTextBlock.textProperty); + var hostConfig = this.hostConfig; + var formattedText = TextFormatters.formatText(this.lang, preProcessedText); + if (!formattedText) { + formattedText = ""; + } + var element = document.createElement("span"); + element.classList.add(hostConfig.makeCssClassName("ac-textRun")); + this.applyStylesTo(element); + if (this.selectAction && hostConfig.supportsInteractivity) { + var anchor = document.createElement("a"); + anchor.classList.add(hostConfig.makeCssClassName("ac-anchor")); + var href = this.selectAction.getHref(); + anchor.href = href ? href : ""; + anchor.target = "_blank"; + anchor.onclick = function(e) { + if (_this.selectAction && _this.selectAction.isEffectivelyEnabled()) { + e.preventDefault(); + e.cancelBubble = true; + _this.selectAction.execute(); + } + }; + this.selectAction.setupElementForAccessibility(anchor); + anchor.innerText = formattedText; + element.appendChild(anchor); + } else { + element.innerText = formattedText; + } + return element; + } else { + return void 0; + } + }; + TextRun2.prototype.applyStylesTo = function(targetElement) { + _super.prototype.applyStylesTo.call(this, targetElement); + if (this.italic) { + targetElement.style.fontStyle = "italic"; + } + if (this.strikethrough) { + targetElement.style.textDecoration = "line-through"; + } + if (this.highlight) { + var colorDefinition = this.getColorDefinition(this.getEffectiveStyleDefinition().foregroundColors, this.effectiveColor); + var backgroundColor = Utils.stringToCssColor(this.effectiveIsSubtle ? colorDefinition.highlightColors.subtle : colorDefinition.highlightColors.default); + if (backgroundColor) { + targetElement.style.backgroundColor = backgroundColor; + } + } + if (this.underline) { + targetElement.style.textDecoration = "underline"; + } + }; + TextRun2.prototype.getJsonTypeName = function() { + return "TextRun"; + }; + Object.defineProperty(TextRun2.prototype, "isStandalone", { + get: function() { + return false; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(TextRun2.prototype, "isInline", { + get: function() { + return true; + }, + enumerable: false, + configurable: true + }); + TextRun2.italicProperty = new serialization_1.BoolProperty(serialization_1.Versions.v1_2, "italic", false); + TextRun2.strikethroughProperty = new serialization_1.BoolProperty(serialization_1.Versions.v1_2, "strikethrough", false); + TextRun2.highlightProperty = new serialization_1.BoolProperty(serialization_1.Versions.v1_2, "highlight", false); + TextRun2.underlineProperty = new serialization_1.BoolProperty(serialization_1.Versions.v1_3, "underline", false); + __decorate([ + (0, serialization_1.property)(TextRun2.italicProperty) + ], TextRun2.prototype, "italic", void 0); + __decorate([ + (0, serialization_1.property)(TextRun2.strikethroughProperty) + ], TextRun2.prototype, "strikethrough", void 0); + __decorate([ + (0, serialization_1.property)(TextRun2.highlightProperty) + ], TextRun2.prototype, "highlight", void 0); + __decorate([ + (0, serialization_1.property)(TextRun2.underlineProperty) + ], TextRun2.prototype, "underline", void 0); + return TextRun2; + }(BaseTextBlock) + ); + exports.TextRun = TextRun; + var RichTextBlock = ( + /** @class */ + function(_super) { + __extends(RichTextBlock2, _super); + function RichTextBlock2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this._inlines = []; + return _this; + } + RichTextBlock2.prototype.internalAddInline = function(inline, forceAdd) { + if (forceAdd === void 0) { + forceAdd = false; + } + if (!inline.isInline) { + throw new Error(strings_1.Strings.errors.elementCannotBeUsedAsInline()); + } + var doAdd = inline.parent === void 0 || forceAdd; + if (!doAdd && inline.parent !== this) { + throw new Error(strings_1.Strings.errors.inlineAlreadyParented()); + } else { + inline.setParent(this); + this._inlines.push(inline); + } + }; + RichTextBlock2.prototype.internalParse = function(source, context) { + _super.prototype.internalParse.call(this, source, context); + this._inlines = []; + if (Array.isArray(source["inlines"])) { + for (var _i = 0, _a = source["inlines"]; _i < _a.length; _i++) { + var jsonInline = _a[_i]; + var inline = void 0; + if (typeof jsonInline === "string") { + var textRun = new TextRun(); + textRun.text = jsonInline; + inline = textRun; + } else { + inline = context.parseElement(this, jsonInline, [], false); + } + if (inline) { + this.internalAddInline(inline, true); + } + } + } + }; + RichTextBlock2.prototype.internalToJSON = function(target, context) { + _super.prototype.internalToJSON.call(this, target, context); + if (this._inlines.length > 0) { + var jsonInlines = []; + for (var _i = 0, _a = this._inlines; _i < _a.length; _i++) { + var inline = _a[_i]; + jsonInlines.push(inline.toJSON(context)); + } + context.serializeValue(target, "inlines", jsonInlines); + } + }; + RichTextBlock2.prototype.internalRender = function() { + if (this._inlines.length > 0) { + var element = void 0; + if (this.forElementId) { + var labelElement = document.createElement("label"); + labelElement.htmlFor = this.forElementId; + element = labelElement; + } else { + element = document.createElement("div"); + } + element.className = this.hostConfig.makeCssClassName("ac-richTextBlock"); + switch (this.getEffectiveHorizontalAlignment()) { + case Enums.HorizontalAlignment.Center: + element.style.textAlign = "center"; + break; + case Enums.HorizontalAlignment.Right: + element.style.textAlign = "end"; + break; + default: + element.style.textAlign = "start"; + break; + } + var renderedInlines = 0; + for (var _i = 0, _a = this._inlines; _i < _a.length; _i++) { + var inline = _a[_i]; + var renderedInline = inline.render(); + if (renderedInline) { + element.appendChild(renderedInline); + renderedInlines++; + } + } + if (renderedInlines > 0) { + return element; + } + } + return void 0; + }; + RichTextBlock2.prototype.asString = function() { + var result = ""; + for (var _i = 0, _a = this._inlines; _i < _a.length; _i++) { + var inline = _a[_i]; + result += inline.asString(); + } + return result; + }; + RichTextBlock2.prototype.getJsonTypeName = function() { + return "RichTextBlock"; + }; + RichTextBlock2.prototype.getInlineCount = function() { + return this._inlines.length; + }; + RichTextBlock2.prototype.getInlineAt = function(index) { + if (index >= 0 && index < this._inlines.length) { + return this._inlines[index]; + } else { + throw new Error(strings_1.Strings.errors.indexOutOfRange(index)); + } + }; + RichTextBlock2.prototype.addInline = function(inline) { + if (typeof inline === "string") { + this.internalAddInline(new TextRun(inline)); + } else { + this.internalAddInline(inline); + } + }; + RichTextBlock2.prototype.removeInline = function(inline) { + var index = this._inlines.indexOf(inline); + if (index >= 0) { + this._inlines[index].setParent(void 0); + this._inlines.splice(index, 1); + return true; + } + return false; + }; + return RichTextBlock2; + }(CardElement) + ); + exports.RichTextBlock = RichTextBlock; + var Fact = ( + /** @class */ + function(_super) { + __extends(Fact2, _super); + function Fact2(name, value) { + var _this = _super.call(this) || this; + _this.name = name; + _this.value = value; + return _this; + } + Fact2.prototype.getSchemaKey = function() { + return "Fact"; + }; + Fact2.titleProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "title"); + Fact2.valueProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "value"); + __decorate([ + (0, serialization_1.property)(Fact2.titleProperty) + ], Fact2.prototype, "name", void 0); + __decorate([ + (0, serialization_1.property)(Fact2.valueProperty) + ], Fact2.prototype, "value", void 0); + return Fact2; + }(serialization_1.SerializableObject) + ); + exports.Fact = Fact; + var FactSet = ( + /** @class */ + function(_super) { + __extends(FactSet2, _super); + function FactSet2() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(FactSet2.prototype, "useDefaultSizing", { + //#endregion + get: function() { + return false; + }, + enumerable: false, + configurable: true + }); + FactSet2.prototype.internalRender = function() { + var element = void 0; + var hostConfig = this.hostConfig; + if (this.facts.length > 0) { + element = document.createElement("table"); + element.style.borderWidth = "0px"; + element.style.borderSpacing = "0px"; + element.style.borderStyle = "none"; + element.style.borderCollapse = "collapse"; + element.style.display = "block"; + element.style.overflow = "hidden"; + element.classList.add(hostConfig.makeCssClassName("ac-factset")); + element.setAttribute("role", "presentation"); + for (var i = 0; i < this.facts.length; i++) { + var trElement = document.createElement("tr"); + if (i > 0) { + trElement.style.marginTop = hostConfig.factSet.spacing + "px"; + } + var tdElement = document.createElement("td"); + tdElement.style.padding = "0"; + tdElement.classList.add(hostConfig.makeCssClassName("ac-fact-title")); + if (hostConfig.factSet.title.maxWidth) { + tdElement.style.maxWidth = hostConfig.factSet.title.maxWidth + "px"; + } + tdElement.style.verticalAlign = "top"; + var textBlock = new TextBlock(); + textBlock.setParent(this); + textBlock.text = !this.facts[i].name && this.isDesignMode() ? "Title" : this.facts[i].name; + textBlock.size = hostConfig.factSet.title.size; + textBlock.color = hostConfig.factSet.title.color; + textBlock.isSubtle = hostConfig.factSet.title.isSubtle; + textBlock.weight = hostConfig.factSet.title.weight; + textBlock.wrap = hostConfig.factSet.title.wrap; + textBlock.spacing = Enums.Spacing.None; + Utils.appendChild(tdElement, textBlock.render()); + Utils.appendChild(trElement, tdElement); + tdElement = document.createElement("td"); + tdElement.style.width = "10px"; + Utils.appendChild(trElement, tdElement); + tdElement = document.createElement("td"); + tdElement.style.padding = "0"; + tdElement.style.verticalAlign = "top"; + tdElement.classList.add(hostConfig.makeCssClassName("ac-fact-value")); + textBlock = new TextBlock(); + textBlock.setParent(this); + textBlock.text = this.facts[i].value; + textBlock.size = hostConfig.factSet.value.size; + textBlock.color = hostConfig.factSet.value.color; + textBlock.isSubtle = hostConfig.factSet.value.isSubtle; + textBlock.weight = hostConfig.factSet.value.weight; + textBlock.wrap = hostConfig.factSet.value.wrap; + textBlock.spacing = Enums.Spacing.None; + Utils.appendChild(tdElement, textBlock.render()); + Utils.appendChild(trElement, tdElement); + Utils.appendChild(element, trElement); + } + } + return element; + }; + FactSet2.prototype.getJsonTypeName = function() { + return "FactSet"; + }; + FactSet2.factsProperty = new serialization_1.SerializableObjectCollectionProperty(serialization_1.Versions.v1_0, "facts", Fact); + __decorate([ + (0, serialization_1.property)(FactSet2.factsProperty) + ], FactSet2.prototype, "facts", void 0); + return FactSet2; + }(CardElement) + ); + exports.FactSet = FactSet; + var ImageDimensionProperty = ( + /** @class */ + function(_super) { + __extends(ImageDimensionProperty2, _super); + function ImageDimensionProperty2(targetVersion, name, internalName, fallbackProperty) { + var _this = _super.call(this, targetVersion, name) || this; + _this.targetVersion = targetVersion; + _this.name = name; + _this.internalName = internalName; + _this.fallbackProperty = fallbackProperty; + return _this; + } + ImageDimensionProperty2.prototype.getInternalName = function() { + return this.internalName; + }; + ImageDimensionProperty2.prototype.parse = function(sender, source, context) { + var result = void 0; + var sourceValue = source[this.name]; + if (sourceValue === void 0) { + return this.defaultValue; + } + var isValid = false; + if (typeof sourceValue === "string") { + try { + var size = shared_1.SizeAndUnit.parse(sourceValue, true); + if (size.unit === Enums.SizeUnit.Pixel) { + result = size.physicalSize; + isValid = true; + } + } catch (_a) { + } + if (!isValid && this.fallbackProperty) { + isValid = this.fallbackProperty.isValidValue(sourceValue, context); + } + } + if (!isValid) { + context.logParseEvent(sender, Enums.ValidationEvent.InvalidPropertyValue, strings_1.Strings.errors.invalidPropertyValue(sourceValue, this.name)); + } + return result; + }; + ImageDimensionProperty2.prototype.toJSON = function(sender, target, value, context) { + context.serializeValue(target, this.name, typeof value === "number" && !isNaN(value) ? value + "px" : void 0); + }; + return ImageDimensionProperty2; + }(serialization_1.PropertyDefinition) + ); + var Image = ( + /** @class */ + function(_super) { + __extends(Image2, _super); + function Image2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.size = Enums.Size.Auto; + _this.style = Enums.ImageStyle.Default; + return _this; + } + Image2.prototype.populateSchema = function(schema) { + _super.prototype.populateSchema.call(this, schema); + schema.remove(CardElement.heightProperty); + }; + Image2.prototype.applySize = function(element) { + if (this.pixelWidth || this.pixelHeight) { + if (this.pixelWidth) { + element.style.width = this.pixelWidth + "px"; + } + if (this.pixelHeight) { + element.style.height = this.pixelHeight + "px"; + } + } else { + if (this.maxHeight) { + switch (this.size) { + case Enums.Size.Small: + element.style.height = this.hostConfig.imageSizes.small + "px"; + break; + case Enums.Size.Large: + element.style.height = this.hostConfig.imageSizes.large + "px"; + break; + default: + element.style.height = this.hostConfig.imageSizes.medium + "px"; + break; + } + element.style.maxHeight = this.maxHeight + "px"; + } else { + switch (this.size) { + case Enums.Size.Stretch: + element.style.width = "100%"; + break; + case Enums.Size.Auto: + element.style.maxWidth = "100%"; + break; + case Enums.Size.Small: + element.style.width = this.hostConfig.imageSizes.small + "px"; + break; + case Enums.Size.Large: + element.style.width = this.hostConfig.imageSizes.large + "px"; + break; + case Enums.Size.Medium: + element.style.width = this.hostConfig.imageSizes.medium + "px"; + break; + } + element.style.maxHeight = "100%"; + } + } + }; + Object.defineProperty(Image2.prototype, "useDefaultSizing", { + get: function() { + return false; + }, + enumerable: false, + configurable: true + }); + Image2.prototype.internalRender = function() { + var _this = this; + var element = void 0; + if (this.url) { + element = document.createElement("div"); + element.style.display = "flex"; + element.style.alignItems = "flex-start"; + var hostConfig = this.hostConfig; + switch (this.getEffectiveHorizontalAlignment()) { + case Enums.HorizontalAlignment.Center: + element.style.justifyContent = "center"; + break; + case Enums.HorizontalAlignment.Right: + element.style.justifyContent = "flex-end"; + break; + default: + element.style.justifyContent = "flex-start"; + break; + } + var imageElement = document.createElement("img"); + imageElement.onload = function(_e) { + raiseImageLoadedEvent(_this); + }; + imageElement.onerror = function(_e) { + if (_this.renderedElement) { + var card = _this.getRootElement(); + _this.renderedElement; + if (card && card.designMode) { + var errorElement = document.createElement("div"); + errorElement.style.display = "flex"; + errorElement.style.alignItems = "center"; + errorElement.style.justifyContent = "center"; + errorElement.style.backgroundColor = "#EEEEEE"; + errorElement.style.color = "black"; + errorElement.innerText = ":-("; + errorElement.style.padding = "10px"; + _this.applySize(errorElement); + _this.renderedElement.appendChild(errorElement); + } + } + raiseImageLoadedEvent(_this); + }; + imageElement.style.minWidth = "0"; + imageElement.classList.add(hostConfig.makeCssClassName("ac-image")); + if (this.selectAction && hostConfig.supportsInteractivity) { + imageElement.onkeypress = function(e) { + if (_this.selectAction && _this.selectAction.isEffectivelyEnabled() && (e.code === "Enter" || e.code === "Space")) { + e.preventDefault(); + e.cancelBubble = true; + _this.selectAction.execute(); + } + }; + imageElement.onclick = function(e) { + if (_this.selectAction && _this.selectAction.isEffectivelyEnabled()) { + e.preventDefault(); + e.cancelBubble = true; + _this.selectAction.execute(); + } + }; + this.selectAction.setupElementForAccessibility(imageElement); + if (this.selectAction.isEffectivelyEnabled()) { + imageElement.classList.add(hostConfig.makeCssClassName("ac-selectable")); + } + } + this.applySize(imageElement); + if (this.style === Enums.ImageStyle.Person) { + imageElement.style.borderRadius = "50%"; + imageElement.style.backgroundPosition = "50% 50%"; + imageElement.style.backgroundRepeat = "no-repeat"; + } + var backgroundColor = Utils.stringToCssColor(this.backgroundColor); + if (backgroundColor) { + imageElement.style.backgroundColor = backgroundColor; + } + imageElement.src = this.preProcessPropertyValue(Image2.urlProperty); + var altTextProperty = this.preProcessPropertyValue(Image2.altTextProperty); + if (altTextProperty) { + imageElement.alt = altTextProperty; + } + element.appendChild(imageElement); + } + return element; + }; + Image2.prototype.getJsonTypeName = function() { + return "Image"; + }; + Image2.prototype.getAllActions = function() { + var result = _super.prototype.getAllActions.call(this); + if (this.selectAction) { + result.push(this.selectAction); + } + return result; + }; + Image2.prototype.getActionById = function(id) { + var result = _super.prototype.getActionById.call(this, id); + if (!result && this.selectAction) { + result = this.selectAction.getActionById(id); + } + return result; + }; + Image2.prototype.getResourceInformation = function() { + return this.url ? [{ url: this.url, mimeType: "image" }] : []; + }; + Image2.urlProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "url"); + Image2.altTextProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "altText"); + Image2.backgroundColorProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_1, "backgroundColor"); + Image2.styleProperty = new serialization_1.EnumProperty(serialization_1.Versions.v1_0, "style", Enums.ImageStyle, Enums.ImageStyle.Default); + Image2.sizeProperty = new serialization_1.EnumProperty(serialization_1.Versions.v1_0, "size", Enums.Size, Enums.Size.Auto); + Image2.pixelWidthProperty = new ImageDimensionProperty(serialization_1.Versions.v1_1, "width", "pixelWidth"); + Image2.pixelHeightProperty = new ImageDimensionProperty(serialization_1.Versions.v1_1, "height", "pixelHeight", CardElement.heightProperty); + Image2.selectActionProperty = new ActionProperty(serialization_1.Versions.v1_1, "selectAction", [ + "Action.ShowCard" + ]); + __decorate([ + (0, serialization_1.property)(Image2.urlProperty) + ], Image2.prototype, "url", void 0); + __decorate([ + (0, serialization_1.property)(Image2.altTextProperty) + ], Image2.prototype, "altText", void 0); + __decorate([ + (0, serialization_1.property)(Image2.backgroundColorProperty) + ], Image2.prototype, "backgroundColor", void 0); + __decorate([ + (0, serialization_1.property)(Image2.sizeProperty) + ], Image2.prototype, "size", void 0); + __decorate([ + (0, serialization_1.property)(Image2.styleProperty) + ], Image2.prototype, "style", void 0); + __decorate([ + (0, serialization_1.property)(Image2.pixelWidthProperty) + ], Image2.prototype, "pixelWidth", void 0); + __decorate([ + (0, serialization_1.property)(Image2.pixelHeightProperty) + ], Image2.prototype, "pixelHeight", void 0); + __decorate([ + (0, serialization_1.property)(Image2.selectActionProperty) + ], Image2.prototype, "selectAction", void 0); + return Image2; + }(CardElement) + ); + exports.Image = Image; + var CardElementContainer = ( + /** @class */ + function(_super) { + __extends(CardElementContainer2, _super); + function CardElementContainer2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.allowVerticalOverflow = false; + return _this; + } + CardElementContainer2.prototype.populateSchema = function(schema) { + _super.prototype.populateSchema.call(this, schema); + if (!this.isSelectable) { + schema.remove(CardElementContainer2.selectActionProperty); + } + }; + CardElementContainer2.prototype.isElementAllowed = function(element) { + return this.hostConfig.supportsInteractivity || !element.isInteractive; + }; + CardElementContainer2.prototype.applyPadding = function() { + _super.prototype.applyPadding.call(this); + if (!this.renderedElement) { + return; + } + var physicalPadding = new shared_1.SpacingDefinition(); + if (this.getEffectivePadding()) { + physicalPadding = this.hostConfig.paddingDefinitionToSpacingDefinition(this.getEffectivePadding()); + } + this.renderedElement.style.paddingTop = physicalPadding.top + "px"; + this.renderedElement.style.paddingRight = physicalPadding.right + "px"; + this.renderedElement.style.paddingBottom = physicalPadding.bottom + "px"; + this.renderedElement.style.paddingLeft = physicalPadding.left + "px"; + this.renderedElement.style.marginRight = "0"; + this.renderedElement.style.marginLeft = "0"; + }; + Object.defineProperty(CardElementContainer2.prototype, "isSelectable", { + get: function() { + return false; + }, + enumerable: false, + configurable: true + }); + CardElementContainer2.prototype.forbiddenChildElements = function() { + return []; + }; + CardElementContainer2.prototype.releaseDOMResources = function() { + _super.prototype.releaseDOMResources.call(this); + for (var i = 0; i < this.getItemCount(); i++) { + this.getItemAt(i).releaseDOMResources(); + } + }; + CardElementContainer2.prototype.internalValidateProperties = function(context) { + _super.prototype.internalValidateProperties.call(this, context); + for (var i = 0; i < this.getItemCount(); i++) { + var item = this.getItemAt(i); + if (!this.hostConfig.supportsInteractivity && item.isInteractive) { + context.addFailure(this, Enums.ValidationEvent.InteractivityNotAllowed, strings_1.Strings.errors.interactivityNotAllowed()); + } + if (!this.isElementAllowed(item)) { + context.addFailure(this, Enums.ValidationEvent.InteractivityNotAllowed, strings_1.Strings.errors.elementTypeNotAllowed(item.getJsonTypeName())); + } + item.internalValidateProperties(context); + } + if (this._selectAction) { + this._selectAction.internalValidateProperties(context); + } + }; + CardElementContainer2.prototype.render = function() { + var _this = this; + var element = _super.prototype.render.call(this); + if (element) { + var hostConfig = this.hostConfig; + if (this.allowVerticalOverflow) { + element.style.overflowX = "hidden"; + element.style.overflowY = "auto"; + } + if (element && this.isSelectable && this._selectAction && hostConfig.supportsInteractivity) { + element.onclick = function(e) { + if (_this._selectAction && _this._selectAction.isEffectivelyEnabled()) { + e.preventDefault(); + e.cancelBubble = true; + _this._selectAction.execute(); + } + }; + element.onkeypress = function(e) { + if (_this._selectAction && _this._selectAction.isEffectivelyEnabled() && (e.code === "Enter" || e.code === "Space")) { + e.preventDefault(); + e.cancelBubble = true; + _this._selectAction.execute(); + } + }; + this._selectAction.setupElementForAccessibility(element); + if (this._selectAction.isEffectivelyEnabled()) { + element.classList.add(hostConfig.makeCssClassName("ac-selectable")); + } + } + } + return element; + }; + CardElementContainer2.prototype.updateLayout = function(processChildren) { + if (processChildren === void 0) { + processChildren = true; + } + _super.prototype.updateLayout.call(this, processChildren); + if (processChildren) { + for (var i = 0; i < this.getItemCount(); i++) { + this.getItemAt(i).updateLayout(); + } + } + }; + CardElementContainer2.prototype.getAllInputs = function(processActions) { + if (processActions === void 0) { + processActions = true; + } + var result = []; + for (var i = 0; i < this.getItemCount(); i++) { + result.push.apply(result, this.getItemAt(i).getAllInputs(processActions)); + } + return result; + }; + CardElementContainer2.prototype.getAllActions = function() { + var result = _super.prototype.getAllActions.call(this); + for (var i = 0; i < this.getItemCount(); i++) { + result.push.apply(result, this.getItemAt(i).getAllActions()); + } + if (this._selectAction) { + result.push(this._selectAction); + } + return result; + }; + CardElementContainer2.prototype.getResourceInformation = function() { + var result = []; + for (var i = 0; i < this.getItemCount(); i++) { + result.push.apply(result, this.getItemAt(i).getResourceInformation()); + } + return result; + }; + CardElementContainer2.prototype.getElementById = function(id) { + var result = _super.prototype.getElementById.call(this, id); + if (!result) { + for (var i = 0; i < this.getItemCount(); i++) { + result = this.getItemAt(i).getElementById(id); + if (result) { + break; + } + } + } + return result; + }; + CardElementContainer2.prototype.findDOMNodeOwner = function(node) { + var _a; + var target = void 0; + for (var i = 0; i < this.getItemCount(); i++) { + target = this.getItemAt(i).findDOMNodeOwner(node); + if (target) { + return target; + } + } + for (var i = 0; i < this.getActionCount(); i++) { + target = (_a = this.getActionAt(i)) === null || _a === void 0 ? void 0 : _a.findDOMNodeOwner(node); + if (target) { + return target; + } + } + return _super.prototype.findDOMNodeOwner.call(this, node); + }; + CardElementContainer2.selectActionProperty = new ActionProperty(serialization_1.Versions.v1_1, "selectAction", [ + "Action.ShowCard" + ]); + __decorate([ + (0, serialization_1.property)(CardElementContainer2.selectActionProperty) + ], CardElementContainer2.prototype, "_selectAction", void 0); + return CardElementContainer2; + }(CardElement) + ); + exports.CardElementContainer = CardElementContainer; + var ImageSet = ( + /** @class */ + function(_super) { + __extends(ImageSet2, _super); + function ImageSet2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this._images = []; + _this.imageSize = Enums.ImageSize.Medium; + return _this; + } + ImageSet2.prototype.internalRender = function() { + var element = void 0; + if (this._images.length > 0) { + element = document.createElement("div"); + element.style.display = "flex"; + element.style.flexWrap = "wrap"; + for (var _i = 0, _a = this._images; _i < _a.length; _i++) { + var image = _a[_i]; + switch (this.imageSize) { + case Enums.ImageSize.Small: + image.size = Enums.Size.Small; + break; + case Enums.ImageSize.Large: + image.size = Enums.Size.Large; + break; + default: + image.size = Enums.Size.Medium; + break; + } + image.maxHeight = this.hostConfig.imageSet.maxImageHeight; + var renderedImage = image.render(); + if (renderedImage) { + renderedImage.style.display = "inline-flex"; + renderedImage.style.margin = "0px"; + renderedImage.style.marginRight = "10px"; + Utils.appendChild(element, renderedImage); + } + } + } + return element; + }; + ImageSet2.prototype.getItemCount = function() { + return this._images.length; + }; + ImageSet2.prototype.getItemAt = function(index) { + return this._images[index]; + }; + ImageSet2.prototype.getFirstVisibleRenderedItem = function() { + return this._images && this._images.length > 0 ? this._images[0] : void 0; + }; + ImageSet2.prototype.getLastVisibleRenderedItem = function() { + return this._images && this._images.length > 0 ? this._images[this._images.length - 1] : void 0; + }; + ImageSet2.prototype.removeItem = function(item) { + if (item instanceof Image) { + var itemIndex = this._images.indexOf(item); + if (itemIndex >= 0) { + this._images.splice(itemIndex, 1); + item.setParent(void 0); + this.updateLayout(); + return true; + } + } + return false; + }; + ImageSet2.prototype.getJsonTypeName = function() { + return "ImageSet"; + }; + ImageSet2.prototype.addImage = function(image) { + if (!image.parent) { + this._images.push(image); + image.setParent(this); + } else { + throw new Error("This image already belongs to another ImageSet"); + } + }; + ImageSet2.prototype.indexOf = function(cardElement) { + return cardElement instanceof Image ? this._images.indexOf(cardElement) : -1; + }; + ImageSet2.imagesProperty = new serialization_1.SerializableObjectCollectionProperty(serialization_1.Versions.v1_0, "images", Image, function(sender, item) { + item.setParent(sender); + }); + ImageSet2.imageSizeProperty = new serialization_1.EnumProperty(serialization_1.Versions.v1_0, "imageSize", Enums.ImageSize, Enums.ImageSize.Medium); + __decorate([ + (0, serialization_1.property)(ImageSet2.imagesProperty) + ], ImageSet2.prototype, "_images", void 0); + __decorate([ + (0, serialization_1.property)(ImageSet2.imageSizeProperty) + ], ImageSet2.prototype, "imageSize", void 0); + return ImageSet2; + }(CardElementContainer) + ); + exports.ImageSet = ImageSet; + var ContentSource = ( + /** @class */ + function(_super) { + __extends(ContentSource2, _super); + function ContentSource2(url, mimeType) { + var _this = _super.call(this) || this; + _this.url = url; + _this.mimeType = mimeType; + return _this; + } + ContentSource2.prototype.isValid = function() { + return this.mimeType && this.url ? true : false; + }; + ContentSource2.mimeTypeProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_1, "mimeType"); + ContentSource2.urlProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_1, "url"); + __decorate([ + (0, serialization_1.property)(ContentSource2.mimeTypeProperty) + ], ContentSource2.prototype, "mimeType", void 0); + __decorate([ + (0, serialization_1.property)(ContentSource2.urlProperty) + ], ContentSource2.prototype, "url", void 0); + return ContentSource2; + }(serialization_1.SerializableObject) + ); + exports.ContentSource = ContentSource; + var CaptionSource = ( + /** @class */ + function(_super) { + __extends(CaptionSource2, _super); + function CaptionSource2(url, mimeType, label) { + var _this = _super.call(this, url, mimeType) || this; + _this.label = label; + return _this; + } + CaptionSource2.prototype.getSchemaKey = function() { + return "CaptionSource"; + }; + CaptionSource2.prototype.render = function() { + var result = void 0; + if (this.isValid()) { + result = document.createElement("track"); + result.src = this.url; + result.kind = "captions"; + result.label = this.label; + } + return result; + }; + CaptionSource2.labelProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_6, "label"); + __decorate([ + (0, serialization_1.property)(CaptionSource2.labelProperty) + ], CaptionSource2.prototype, "label", void 0); + return CaptionSource2; + }(ContentSource) + ); + exports.CaptionSource = CaptionSource; + var MediaSource = ( + /** @class */ + function(_super) { + __extends(MediaSource2, _super); + function MediaSource2() { + return _super !== null && _super.apply(this, arguments) || this; + } + MediaSource2.prototype.getSchemaKey = function() { + return "MediaSource"; + }; + MediaSource2.prototype.render = function() { + var result = void 0; + if (this.isValid()) { + result = document.createElement("source"); + result.src = this.url; + result.type = this.mimeType; + } + return result; + }; + return MediaSource2; + }(ContentSource) + ); + exports.MediaSource = MediaSource; + var MediaPlayer = ( + /** @class */ + function() { + function MediaPlayer2() { + } + MediaPlayer2.prototype.play = function() { + }; + Object.defineProperty(MediaPlayer2.prototype, "posterUrl", { + get: function() { + return this._posterUrl; + }, + set: function(value) { + this._posterUrl = value; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MediaPlayer2.prototype, "selectedMediaType", { + get: function() { + return void 0; + }, + enumerable: false, + configurable: true + }); + return MediaPlayer2; + }() + ); + exports.MediaPlayer = MediaPlayer; + var HTML5MediaPlayer = ( + /** @class */ + function(_super) { + __extends(HTML5MediaPlayer2, _super); + function HTML5MediaPlayer2(owner) { + var _this = _super.call(this) || this; + _this.owner = owner; + _this._selectedSources = []; + _this._captionSources = []; + _this.processSources(); + return _this; + } + HTML5MediaPlayer2.prototype.processSources = function() { + var _a; + this._selectedSources = []; + this._captionSources = []; + this._selectedMediaType = void 0; + for (var _i = 0, _b = this.owner.sources; _i < _b.length; _i++) { + var source = _b[_i]; + var mimeComponents = source.mimeType ? source.mimeType.split("/") : []; + if (mimeComponents.length === 2) { + if (!this._selectedMediaType) { + var index = HTML5MediaPlayer2.supportedMediaTypes.indexOf(mimeComponents[0]); + if (index >= 0) { + this._selectedMediaType = HTML5MediaPlayer2.supportedMediaTypes[index]; + } + } + if (mimeComponents[0] === this._selectedMediaType) { + this._selectedSources.push(source); + } + } + } + (_a = this._captionSources).push.apply(_a, this.owner.captionSources); + }; + HTML5MediaPlayer2.prototype.canPlay = function() { + return this._selectedSources.length > 0; + }; + HTML5MediaPlayer2.prototype.fetchVideoDetails = function() { + return __awaiter(this, void 0, void 0, function() { + return __generator(this, function(_a) { + return [ + 2 + /*return*/ + ]; + }); + }); + }; + HTML5MediaPlayer2.prototype.render = function() { + if (this._selectedMediaType === "video") { + this._mediaElement = document.createElement("video"); + } else { + this._mediaElement = document.createElement("audio"); + } + this._mediaElement.setAttribute("aria-label", this.owner.altText ? this.owner.altText : strings_1.Strings.defaults.mediaPlayerAriaLabel()); + this._mediaElement.setAttribute("webkit-playsinline", ""); + this._mediaElement.setAttribute("playsinline", ""); + this._mediaElement.setAttribute("crossorigin", ""); + this._mediaElement.autoplay = true; + this._mediaElement.controls = true; + if (Utils.isMobileOS()) { + this._mediaElement.muted = true; + } + this._mediaElement.preload = "none"; + this._mediaElement.style.width = "100%"; + for (var _i = 0, _a = this.owner.sources; _i < _a.length; _i++) { + var source = _a[_i]; + var renderedSource = source.render(); + Utils.appendChild(this._mediaElement, renderedSource); + } + for (var _b = 0, _c = this.owner.captionSources; _b < _c.length; _b++) { + var captionSource = _c[_b]; + if (captionSource.mimeType == "vtt") { + var renderedCaptionSource = captionSource.render(); + Utils.appendChild(this._mediaElement, renderedCaptionSource); + } + } + return this._mediaElement; + }; + HTML5MediaPlayer2.prototype.play = function() { + if (this._mediaElement) { + this._mediaElement.play(); + } + }; + Object.defineProperty(HTML5MediaPlayer2.prototype, "selectedMediaType", { + get: function() { + return this._selectedMediaType; + }, + enumerable: false, + configurable: true + }); + HTML5MediaPlayer2.supportedMediaTypes = ["audio", "video"]; + return HTML5MediaPlayer2; + }(MediaPlayer) + ); + exports.HTML5MediaPlayer = HTML5MediaPlayer; + var CustomMediaPlayer = ( + /** @class */ + function(_super) { + __extends(CustomMediaPlayer2, _super); + function CustomMediaPlayer2(matches) { + return _super.call(this) || this; + } + return CustomMediaPlayer2; + }(MediaPlayer) + ); + exports.CustomMediaPlayer = CustomMediaPlayer; + var IFrameMediaMediaPlayer = ( + /** @class */ + function(_super) { + __extends(IFrameMediaMediaPlayer2, _super); + function IFrameMediaMediaPlayer2(matches, iFrameTitle) { + var _this = _super.call(this, matches) || this; + _this.iFrameTitle = iFrameTitle; + if (matches.length >= 2) { + _this._videoId = matches[1]; + } + return _this; + } + IFrameMediaMediaPlayer2.prototype.canPlay = function() { + return this._videoId !== void 0; + }; + IFrameMediaMediaPlayer2.prototype.render = function() { + var container = document.createElement("div"); + container.style.position = "relative"; + container.style.width = "100%"; + container.style.height = "0"; + container.style.paddingBottom = "56.25%"; + var iFrame = document.createElement("iframe"); + iFrame.style.position = "absolute"; + iFrame.style.top = "0"; + iFrame.style.left = "0"; + iFrame.style.width = "100%"; + iFrame.style.height = "100%"; + iFrame.src = this.getEmbedVideoUrl(); + iFrame.frameBorder = "0"; + if (this.iFrameTitle) { + iFrame.title = this.iFrameTitle; + } + iFrame.allow = "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"; + iFrame.allowFullscreen = true; + container.appendChild(iFrame); + return container; + }; + Object.defineProperty(IFrameMediaMediaPlayer2.prototype, "videoId", { + get: function() { + return this._videoId; + }, + enumerable: false, + configurable: true + }); + return IFrameMediaMediaPlayer2; + }(CustomMediaPlayer) + ); + exports.IFrameMediaMediaPlayer = IFrameMediaMediaPlayer; + var VimeoPlayer = ( + /** @class */ + function(_super) { + __extends(VimeoPlayer2, _super); + function VimeoPlayer2() { + return _super !== null && _super.apply(this, arguments) || this; + } + VimeoPlayer2.prototype.fetchVideoDetails = function() { + return __awaiter(this, void 0, void 0, function() { + var oEmbedUrl, response, json; + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + oEmbedUrl = "https://vimeo.com/api/oembed.json?url=".concat(this.getEmbedVideoUrl()); + return [4, fetch(oEmbedUrl)]; + case 1: + response = _a.sent(); + if (!response.ok) + return [3, 3]; + return [4, response.json()]; + case 2: + json = _a.sent(); + this.posterUrl = json["thumbnail_url"]; + _a.label = 3; + case 3: + return [ + 2 + /*return*/ + ]; + } + }); + }); + }; + VimeoPlayer2.prototype.getEmbedVideoUrl = function() { + return "https://player.vimeo.com/video/".concat(this.videoId, "?autoplay=1"); + }; + return VimeoPlayer2; + }(IFrameMediaMediaPlayer) + ); + exports.VimeoPlayer = VimeoPlayer; + var DailymotionPlayer = ( + /** @class */ + function(_super) { + __extends(DailymotionPlayer2, _super); + function DailymotionPlayer2() { + return _super !== null && _super.apply(this, arguments) || this; + } + DailymotionPlayer2.prototype.fetchVideoDetails = function() { + return __awaiter(this, void 0, void 0, function() { + var apiUrl, response, json; + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + apiUrl = "https://api.dailymotion.com/video/".concat(this.videoId, "?fields=thumbnail_720_url"); + return [4, fetch(apiUrl)]; + case 1: + response = _a.sent(); + if (!response.ok) + return [3, 3]; + return [4, response.json()]; + case 2: + json = _a.sent(); + this.posterUrl = json["thumbnail_720_url"]; + _a.label = 3; + case 3: + return [ + 2 + /*return*/ + ]; + } + }); + }); + }; + DailymotionPlayer2.prototype.getEmbedVideoUrl = function() { + return "https://www.dailymotion.com/embed/video/".concat(this.videoId, "?autoplay=1"); + }; + return DailymotionPlayer2; + }(IFrameMediaMediaPlayer) + ); + exports.DailymotionPlayer = DailymotionPlayer; + var YouTubePlayer = ( + /** @class */ + function(_super) { + __extends(YouTubePlayer2, _super); + function YouTubePlayer2(matches, iFrameTitle) { + var _this = _super.call(this, matches, iFrameTitle) || this; + _this.iFrameTitle = iFrameTitle; + if (matches.length >= 3 && matches[2] !== void 0) { + _this._startTimeIndex = parseInt(matches[2]); + } + return _this; + } + YouTubePlayer2.prototype.fetchVideoDetails = function() { + return __awaiter(this, void 0, void 0, function() { + return __generator(this, function(_a) { + this.posterUrl = this.videoId ? "https://img.youtube.com/vi/".concat(this.videoId, "/maxresdefault.jpg") : void 0; + return [ + 2 + /*return*/ + ]; + }); + }); + }; + YouTubePlayer2.prototype.getEmbedVideoUrl = function() { + var url = "https://www.youtube.com/embed/".concat(this.videoId, "?autoplay=1"); + if (this._startTimeIndex !== void 0) { + url += "&start=".concat(this._startTimeIndex); + } + return url; + }; + return YouTubePlayer2; + }(IFrameMediaMediaPlayer) + ); + exports.YouTubePlayer = YouTubePlayer; + var Media = ( + /** @class */ + function(_super) { + __extends(Media2, _super); + function Media2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.sources = []; + _this.captionSources = []; + return _this; + } + Media2.prototype.createMediaPlayer = function() { + for (var _i = 0, _a = Media2.customMediaPlayers; _i < _a.length; _i++) { + var provider = _a[_i]; + for (var _b = 0, _c = this.sources; _b < _c.length; _b++) { + var source = _c[_b]; + if (source.url) { + for (var _d = 0, _f = provider.urlPatterns; _d < _f.length; _d++) { + var pattern = _f[_d]; + var matches = pattern.exec(source.url); + if (matches !== null) { + return provider.createMediaPlayer(matches); + } + } + } + } + } + return new HTML5MediaPlayer(this); + }; + Media2.prototype.handlePlayButtonInvoke = function(event) { + if (this.hostConfig.media.allowInlinePlayback) { + event.preventDefault(); + event.cancelBubble = true; + if (this.renderedElement) { + var mediaPlayerElement = this._mediaPlayer.render(); + clearElement(this.renderedElement); + this.renderedElement.appendChild(mediaPlayerElement); + this._mediaPlayer.play(); + mediaPlayerElement.focus(); + } + } else { + if (Media2.onPlay) { + event.preventDefault(); + event.cancelBubble = true; + Media2.onPlay(this); + } + } + }; + Media2.prototype.displayPoster = function() { + return __awaiter(this, void 0, void 0, function() { + var playButtonArrowWidth, playButtonArrowHeight, posterRootElement_1, posterUrl, posterImageElement_1, playButtonOuterElement, playButtonInnerElement, playButtonContainer; + var _this = this; + return __generator(this, function(_a) { + if (this.renderedElement) { + playButtonArrowWidth = 12; + playButtonArrowHeight = 15; + posterRootElement_1 = document.createElement("div"); + posterRootElement_1.className = this.hostConfig.makeCssClassName("ac-media-poster"); + posterRootElement_1.setAttribute("role", "contentinfo"); + posterRootElement_1.setAttribute("aria-label", this.altText ? this.altText : strings_1.Strings.defaults.mediaPlayerAriaLabel()); + posterRootElement_1.style.position = "relative"; + posterRootElement_1.style.display = "flex"; + posterUrl = this.poster ? this.poster : this._mediaPlayer.posterUrl; + if (!posterUrl) { + posterUrl = this.hostConfig.media.defaultPoster; + } + if (posterUrl) { + posterImageElement_1 = document.createElement("img"); + posterImageElement_1.style.width = "100%"; + posterImageElement_1.style.height = "100%"; + posterImageElement_1.setAttribute("role", "presentation"); + posterImageElement_1.onerror = function(_e) { + if (posterImageElement_1.parentNode) { + posterImageElement_1.parentNode.removeChild(posterImageElement_1); + } + posterRootElement_1.classList.add("empty"); + posterRootElement_1.style.minHeight = "150px"; + }; + posterImageElement_1.src = posterUrl; + posterRootElement_1.appendChild(posterImageElement_1); + } else { + posterRootElement_1.classList.add("empty"); + posterRootElement_1.style.minHeight = "150px"; + } + if (this.hostConfig.supportsInteractivity && this._mediaPlayer.canPlay()) { + playButtonOuterElement = document.createElement("div"); + playButtonOuterElement.tabIndex = 0; + playButtonOuterElement.setAttribute("role", "button"); + playButtonOuterElement.setAttribute("aria-label", strings_1.Strings.defaults.mediaPlayerPlayMedia()); + playButtonOuterElement.className = this.hostConfig.makeCssClassName("ac-media-playButton"); + playButtonOuterElement.style.display = "flex"; + playButtonOuterElement.style.alignItems = "center"; + playButtonOuterElement.style.justifyContent = "center"; + playButtonOuterElement.onclick = function(e) { + _this.handlePlayButtonInvoke(e); + }; + playButtonOuterElement.onkeypress = function(e) { + if (e.code === "Enter" || e.code === "Space") { + _this.handlePlayButtonInvoke(e); + } + }; + playButtonInnerElement = document.createElement("div"); + playButtonInnerElement.className = this.hostConfig.makeCssClassName("ac-media-playButton-arrow"); + playButtonInnerElement.style.width = playButtonArrowWidth + "px"; + playButtonInnerElement.style.height = playButtonArrowHeight + "px"; + playButtonInnerElement.style.borderTopWidth = playButtonArrowHeight / 2 + "px"; + playButtonInnerElement.style.borderBottomWidth = playButtonArrowHeight / 2 + "px"; + playButtonInnerElement.style.borderLeftWidth = playButtonArrowWidth + "px"; + playButtonInnerElement.style.borderRightWidth = "0"; + playButtonInnerElement.style.borderStyle = "solid"; + playButtonInnerElement.style.borderTopColor = "transparent"; + playButtonInnerElement.style.borderRightColor = "transparent"; + playButtonInnerElement.style.borderBottomColor = "transparent"; + playButtonInnerElement.style.transform = "translate(" + playButtonArrowWidth / 10 + "px,0px)"; + playButtonOuterElement.appendChild(playButtonInnerElement); + playButtonContainer = document.createElement("div"); + playButtonContainer.style.position = "absolute"; + playButtonContainer.style.left = "0"; + playButtonContainer.style.top = "0"; + playButtonContainer.style.width = "100%"; + playButtonContainer.style.height = "100%"; + playButtonContainer.style.display = "flex"; + playButtonContainer.style.justifyContent = "center"; + playButtonContainer.style.alignItems = "center"; + playButtonContainer.appendChild(playButtonOuterElement); + posterRootElement_1.appendChild(playButtonContainer); + } + clearElement(this.renderedElement); + this.renderedElement.appendChild(posterRootElement_1); + } + return [ + 2 + /*return*/ + ]; + }); + }); + }; + Media2.prototype.internalRender = function() { + var element = document.createElement("div"); + element.className = this.hostConfig.makeCssClassName("ac-media"); + return element; + }; + Media2.prototype.render = function() { + var _this = this; + var result = _super.prototype.render.call(this); + if (result) { + this._mediaPlayer = this.createMediaPlayer(); + this._mediaPlayer.fetchVideoDetails().then(function() { + return _this.displayPoster(); + }); + } + return result; + }; + Media2.prototype.releaseDOMResources = function() { + _super.prototype.releaseDOMResources.call(this); + this.displayPoster(); + }; + Media2.prototype.getJsonTypeName = function() { + return "Media"; + }; + Media2.prototype.getResourceInformation = function() { + var result = []; + if (this._mediaPlayer) { + var posterUrl = this.poster ? this.poster : this.hostConfig.media.defaultPoster; + if (posterUrl) { + result.push({ url: posterUrl, mimeType: "image" }); + } + } + for (var _i = 0, _a = this.sources; _i < _a.length; _i++) { + var mediaSource = _a[_i]; + if (mediaSource.isValid()) { + result.push({ + /* eslint-disable @typescript-eslint/no-unnecessary-type-assertion -- `mediaSource.url` is of type `string | undefined`, but is validated by `isValid()` call */ + url: mediaSource.url, + mimeType: mediaSource.mimeType + /* eslint-enable @typescript-eslint/no-unnecessary-type-assertion */ + }); + } + } + for (var _b = 0, _c = this.captionSources; _b < _c.length; _b++) { + var captionSource = _c[_b]; + if (captionSource.isValid()) { + result.push({ + /* eslint-disable @typescript-eslint/no-unnecessary-type-assertion -- `captionSource.url` is of type `string | undefined`, but is validated by `isValid()` call */ + url: captionSource.url, + mimeType: captionSource.mimeType + /* eslint-enable @typescript-eslint/no-unnecessary-type-assertion */ + }); + } + } + return result; + }; + Object.defineProperty(Media2.prototype, "selectedMediaType", { + get: function() { + return this._mediaPlayer.selectedMediaType; + }, + enumerable: false, + configurable: true + }); + Media2.customMediaPlayers = [ + { + urlPatterns: [ + /^(?:https?:\/\/)?(?:www.)?youtube.com\/watch\?(?=.*v=([\w\d-_]+))(?=(?:.*t=(\d+))?).*/gi, + /^(?:https?:\/\/)?youtu.be\/([\w\d-_]+)(?:\?t=(\d+))?/gi + ], + createMediaPlayer: function(matches) { + return new YouTubePlayer(matches, strings_1.Strings.defaults.youTubeVideoPlayer()); + } + }, + { + urlPatterns: [/^(?:https?:\/\/)?vimeo.com\/([\w\d-_]+).*/gi], + createMediaPlayer: function(matches) { + return new VimeoPlayer(matches, strings_1.Strings.defaults.vimeoVideoPlayer()); + } + }, + { + urlPatterns: [/^(?:https?:\/\/)?(?:www.)?dailymotion.com\/video\/([\w\d-_]+).*/gi], + createMediaPlayer: function(matches) { + return new DailymotionPlayer(matches, strings_1.Strings.defaults.dailymotionVideoPlayer()); + } + } + ]; + Media2.sourcesProperty = new serialization_1.SerializableObjectCollectionProperty(serialization_1.Versions.v1_1, "sources", MediaSource); + Media2.captionSourcesProperty = new serialization_1.SerializableObjectCollectionProperty(serialization_1.Versions.v1_6, "captionSources", CaptionSource); + Media2.posterProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_1, "poster"); + Media2.altTextProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_1, "altText"); + __decorate([ + (0, serialization_1.property)(Media2.sourcesProperty) + ], Media2.prototype, "sources", void 0); + __decorate([ + (0, serialization_1.property)(Media2.captionSourcesProperty) + ], Media2.prototype, "captionSources", void 0); + __decorate([ + (0, serialization_1.property)(Media2.posterProperty) + ], Media2.prototype, "poster", void 0); + __decorate([ + (0, serialization_1.property)(Media2.altTextProperty) + ], Media2.prototype, "altText", void 0); + return Media2; + }(CardElement) + ); + exports.Media = Media; + var Input = ( + /** @class */ + function(_super) { + __extends(Input2, _super); + function Input2() { + return _super !== null && _super.apply(this, arguments) || this; + } + Input2.prototype.getAllLabelIds = function() { + var labelIds = []; + if (this.labelledBy) { + labelIds.push(this.labelledBy); + } + if (this._renderedLabelElement) { + labelIds.push(this._renderedLabelElement.id); + } + if (this._renderedErrorMessageElement) { + labelIds.push(this._renderedErrorMessageElement.id); + } + return labelIds; + }; + Input2.prototype.updateInputControlAriaLabelledBy = function() { + if (this._renderedInputControlElement) { + var labelIds = this.getAllLabelIds(); + if (labelIds.length > 0) { + this._renderedInputControlElement.setAttribute("aria-labelledby", labelIds.join(" ")); + } else { + this._renderedInputControlElement.removeAttribute("aria-labelledby"); + } + } + }; + Object.defineProperty(Input2.prototype, "isNullable", { + get: function() { + return true; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Input2.prototype, "renderedInputControlElement", { + get: function() { + return this._renderedInputControlElement; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Input2.prototype, "inputControlContainerElement", { + get: function() { + return this._inputControlContainerElement; + }, + enumerable: false, + configurable: true + }); + Input2.prototype.overrideInternalRender = function() { + var hostConfig = this.hostConfig; + this._outerContainerElement = document.createElement("div"); + this._outerContainerElement.style.display = "flex"; + this._outerContainerElement.style.flexDirection = "column"; + var renderedInputControlId = Utils.generateUniqueId(); + if (this.label) { + var labelRichTextBlock = new RichTextBlock(); + labelRichTextBlock.setParent(this); + labelRichTextBlock.forElementId = renderedInputControlId; + var labelInline = new TextRun(this.label); + labelRichTextBlock.addInline(labelInline); + if (this.isRequired) { + labelInline.init(hostConfig.inputs.label.requiredInputs); + var isRequiredCueInline = new TextRun(hostConfig.inputs.label.requiredInputs.suffix); + isRequiredCueInline.color = hostConfig.inputs.label.requiredInputs.suffixColor; + isRequiredCueInline.ariaHidden = true; + labelRichTextBlock.addInline(isRequiredCueInline); + } else { + labelInline.init(hostConfig.inputs.label.optionalInputs); + } + this._renderedLabelElement = labelRichTextBlock.render(); + if (this._renderedLabelElement) { + this._renderedLabelElement.id = Utils.generateUniqueId(); + this._renderedLabelElement.style.marginBottom = hostConfig.getEffectiveSpacing(hostConfig.inputs.label.inputSpacing) + "px"; + this._outerContainerElement.appendChild(this._renderedLabelElement); + } + } + this._inputControlContainerElement = document.createElement("div"); + this._inputControlContainerElement.className = hostConfig.makeCssClassName("ac-input-container"); + this._inputControlContainerElement.style.display = "flex"; + if (this.height === "stretch") { + this._inputControlContainerElement.style.alignItems = "stretch"; + this._inputControlContainerElement.style.flex = "1 1 auto"; + } + this._renderedInputControlElement = this.internalRender(); + if (this._renderedInputControlElement) { + this._renderedInputControlElement.id = renderedInputControlId; + this._renderedInputControlElement.style.minWidth = "0px"; + if (this.isNullable && this.isRequired) { + this._renderedInputControlElement.setAttribute("aria-required", "true"); + this._renderedInputControlElement.classList.add(hostConfig.makeCssClassName("ac-input-required")); + } + this._inputControlContainerElement.appendChild(this._renderedInputControlElement); + this._outerContainerElement.appendChild(this._inputControlContainerElement); + this.updateInputControlAriaLabelledBy(); + return this._outerContainerElement; + } + this.resetDirtyState(); + return void 0; + }; + Input2.prototype.valueChanged = function() { + this.getRootElement().updateActionsEnabledState(); + if (this.isValid()) { + this.resetValidationFailureCue(); + } + if (this.onValueChanged) { + this.onValueChanged(this); + } + raiseInputValueChangedEvent(this); + }; + Input2.prototype.resetValidationFailureCue = function() { + if (this.renderedInputControlElement) { + this.renderedInputControlElement.classList.remove(this.hostConfig.makeCssClassName("ac-input-validation-failed")); + this.updateInputControlAriaLabelledBy(); + if (this._renderedErrorMessageElement) { + this._outerContainerElement.removeChild(this._renderedErrorMessageElement); + this._renderedErrorMessageElement = void 0; + } + } + }; + Input2.prototype.showValidationErrorMessage = function() { + if (this.renderedElement && this.errorMessage && shared_1.GlobalSettings.displayInputValidationErrors) { + var errorMessageTextBlock = new TextBlock(); + errorMessageTextBlock.setParent(this); + errorMessageTextBlock.text = this.errorMessage; + errorMessageTextBlock.wrap = true; + errorMessageTextBlock.init(this.hostConfig.inputs.errorMessage); + this._renderedErrorMessageElement = errorMessageTextBlock.render(); + if (this._renderedErrorMessageElement) { + this._renderedErrorMessageElement.id = Utils.generateUniqueId(); + this._outerContainerElement.appendChild(this._renderedErrorMessageElement); + this.updateInputControlAriaLabelledBy(); + } + } + }; + Input2.prototype.focus = function() { + if (this._renderedInputControlElement) { + this._renderedInputControlElement.focus(); + } + }; + Input2.prototype.isValid = function() { + return true; + }; + Input2.prototype.isDirty = function() { + return this.value !== this._oldValue; + }; + Input2.prototype.resetDirtyState = function() { + this._oldValue = this.value; + }; + Input2.prototype.internalValidateProperties = function(context) { + _super.prototype.internalValidateProperties.call(this, context); + if (!this.id) { + context.addFailure(this, Enums.ValidationEvent.PropertyCantBeNull, strings_1.Strings.errors.inputsMustHaveUniqueId()); + } + if (this.isRequired) { + if (!this.label) { + context.addFailure(this, Enums.ValidationEvent.RequiredInputsShouldHaveLabel, "Required inputs should have a label"); + } + if (!this.errorMessage) { + context.addFailure(this, Enums.ValidationEvent.RequiredInputsShouldHaveErrorMessage, "Required inputs should have an error message"); + } + } + }; + Input2.prototype.validateValue = function() { + this.resetValidationFailureCue(); + var result = this.isRequired ? this.isSet() && this.isValid() : this.isValid(); + if (!result && this.renderedInputControlElement) { + this.renderedInputControlElement.classList.add(this.hostConfig.makeCssClassName("ac-input-validation-failed")); + this.showValidationErrorMessage(); + } + return result; + }; + Input2.prototype.getAllInputs = function(processActions) { + if (processActions === void 0) { + processActions = true; + } + return [this]; + }; + Input2.prototype.render = function() { + var result = _super.prototype.render.call(this); + this.resetDirtyState(); + return result; + }; + Object.defineProperty(Input2.prototype, "isInteractive", { + get: function() { + return true; + }, + enumerable: false, + configurable: true + }); + Input2.labelProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_3, "label", true); + Input2.isRequiredProperty = new serialization_1.BoolProperty(serialization_1.Versions.v1_3, "isRequired", false); + Input2.errorMessageProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_3, "errorMessage", true); + __decorate([ + (0, serialization_1.property)(Input2.labelProperty) + ], Input2.prototype, "label", void 0); + __decorate([ + (0, serialization_1.property)(Input2.isRequiredProperty) + ], Input2.prototype, "isRequired", void 0); + __decorate([ + (0, serialization_1.property)(Input2.errorMessageProperty) + ], Input2.prototype, "errorMessage", void 0); + return Input2; + }(CardElement) + ); + exports.Input = Input; + var TextInput = ( + /** @class */ + function(_super) { + __extends(TextInput2, _super); + function TextInput2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.isMultiline = false; + _this.style = Enums.InputTextStyle.Text; + return _this; + } + TextInput2.prototype.setupInput = function(input) { + var _this = this; + input.style.flex = "1 1 auto"; + input.tabIndex = this.isDesignMode() ? -1 : 0; + if (this.placeholder) { + input.placeholder = this.placeholder; + input.setAttribute("aria-label", this.placeholder); + } + if (this.defaultValue) { + input.value = this.defaultValue; + } + if (this.maxLength && this.maxLength > 0) { + input.maxLength = this.maxLength; + } + input.oninput = function() { + _this.valueChanged(); + }; + input.onkeypress = function(e) { + if (e.ctrlKey && e.code === "Enter" && _this.inlineAction && _this.inlineAction.isEffectivelyEnabled()) { + _this.inlineAction.execute(); + } + }; + }; + TextInput2.prototype.internalRender = function() { + var result; + if (this.isMultiline && this.style !== Enums.InputTextStyle.Password) { + result = document.createElement("textarea"); + result.className = this.hostConfig.makeCssClassName("ac-input", "ac-textInput", "ac-multiline"); + if (this.height === "stretch") { + result.style.height = "initial"; + } + } else { + result = document.createElement("input"); + result.className = this.hostConfig.makeCssClassName("ac-input", "ac-textInput"); + result.type = Enums.InputTextStyle[this.style].toLowerCase(); + } + this.setupInput(result); + return result; + }; + TextInput2.prototype.overrideInternalRender = function() { + var _this = this; + var renderedInputControl = _super.prototype.overrideInternalRender.call(this); + if (this.inlineAction) { + var button_1 = document.createElement("button"); + button_1.className = this.hostConfig.makeCssClassName(this.inlineAction.isEffectivelyEnabled() ? "ac-inlineActionButton" : "ac-inlineActionButton-disabled"); + button_1.onclick = function(e) { + if (_this.inlineAction && _this.inlineAction.isEffectivelyEnabled()) { + e.preventDefault(); + e.cancelBubble = true; + _this.inlineAction.execute(); + } + }; + if (this.inlineAction.iconUrl) { + button_1.classList.add("iconOnly"); + var icon_1 = document.createElement("img"); + icon_1.style.height = "100%"; + icon_1.setAttribute("role", "presentation"); + icon_1.style.display = "none"; + icon_1.onload = function() { + icon_1.style.removeProperty("display"); + }; + icon_1.onerror = function() { + button_1.removeChild(icon_1); + button_1.classList.remove("iconOnly"); + button_1.classList.add("textOnly"); + button_1.textContent = _this.inlineAction && _this.inlineAction.title ? _this.inlineAction.title : strings_1.Strings.defaults.inlineActionTitle(); + }; + icon_1.src = this.inlineAction.iconUrl; + button_1.appendChild(icon_1); + button_1.title = this.inlineAction.title ? this.inlineAction.title : strings_1.Strings.defaults.inlineActionTitle(); + } else { + button_1.classList.add("textOnly"); + button_1.textContent = this.inlineAction.title ? this.inlineAction.title : strings_1.Strings.defaults.inlineActionTitle(); + } + this.inlineAction.setupElementForAccessibility(button_1, true); + button_1.style.marginLeft = "8px"; + this.inputControlContainerElement.appendChild(button_1); + } + return renderedInputControl; + }; + TextInput2.prototype.getJsonTypeName = function() { + return "Input.Text"; + }; + TextInput2.prototype.getAllActions = function() { + var result = _super.prototype.getAllActions.call(this); + if (this.inlineAction) { + result.push(this.inlineAction); + } + return result; + }; + TextInput2.prototype.getActionById = function(id) { + var result = _super.prototype.getActionById.call(this, id); + if (!result && this.inlineAction) { + result = this.inlineAction.getActionById(id); + } + return result; + }; + TextInput2.prototype.isSet = function() { + return this.value ? true : false; + }; + TextInput2.prototype.isValid = function() { + if (!this.value) { + return true; + } + if (this.regex) { + return new RegExp(this.regex, "g").test(this.value); + } + return true; + }; + Object.defineProperty(TextInput2.prototype, "value", { + get: function() { + if (this.renderedInputControlElement) { + if (this.isMultiline) { + return this.renderedInputControlElement.value; + } else { + return this.renderedInputControlElement.value; + } + } else { + return void 0; + } + }, + enumerable: false, + configurable: true + }); + TextInput2.valueProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "value"); + TextInput2.maxLengthProperty = new serialization_1.NumProperty(serialization_1.Versions.v1_0, "maxLength"); + TextInput2.isMultilineProperty = new serialization_1.BoolProperty(serialization_1.Versions.v1_0, "isMultiline", false); + TextInput2.placeholderProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "placeholder"); + TextInput2.styleProperty = new serialization_1.EnumProperty(serialization_1.Versions.v1_0, "style", Enums.InputTextStyle, Enums.InputTextStyle.Text, [ + { value: Enums.InputTextStyle.Text }, + { value: Enums.InputTextStyle.Tel }, + { value: Enums.InputTextStyle.Url }, + { value: Enums.InputTextStyle.Email }, + { value: Enums.InputTextStyle.Password, targetVersion: serialization_1.Versions.v1_5 } + ]); + TextInput2.inlineActionProperty = new ActionProperty(serialization_1.Versions.v1_0, "inlineAction", [ + "Action.ShowCard" + ]); + TextInput2.regexProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_3, "regex", true); + __decorate([ + (0, serialization_1.property)(TextInput2.valueProperty) + ], TextInput2.prototype, "defaultValue", void 0); + __decorate([ + (0, serialization_1.property)(TextInput2.maxLengthProperty) + ], TextInput2.prototype, "maxLength", void 0); + __decorate([ + (0, serialization_1.property)(TextInput2.isMultilineProperty) + ], TextInput2.prototype, "isMultiline", void 0); + __decorate([ + (0, serialization_1.property)(TextInput2.placeholderProperty) + ], TextInput2.prototype, "placeholder", void 0); + __decorate([ + (0, serialization_1.property)(TextInput2.styleProperty) + ], TextInput2.prototype, "style", void 0); + __decorate([ + (0, serialization_1.property)(TextInput2.inlineActionProperty) + ], TextInput2.prototype, "inlineAction", void 0); + __decorate([ + (0, serialization_1.property)(TextInput2.regexProperty) + ], TextInput2.prototype, "regex", void 0); + return TextInput2; + }(Input) + ); + exports.TextInput = TextInput; + var ToggleInput = ( + /** @class */ + function(_super) { + __extends(ToggleInput2, _super); + function ToggleInput2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.valueOn = "true"; + _this.valueOff = "false"; + _this.wrap = false; + return _this; + } + ToggleInput2.prototype.updateInputControlAriaLabelledBy = function() { + if (this._checkboxInputElement) { + var joinedLabelIds = this.getAllLabelIds().join(" "); + if (this._checkboxInputLabelElement && this._checkboxInputLabelElement.id) { + joinedLabelIds += " " + this._checkboxInputLabelElement.id; + } + if (joinedLabelIds) { + this._checkboxInputElement.setAttribute("aria-labelledby", joinedLabelIds); + } else { + this._checkboxInputElement.removeAttribute("aria-labelledby"); + } + } + }; + ToggleInput2.prototype.internalRender = function() { + var _this = this; + var element = document.createElement("div"); + element.className = this.hostConfig.makeCssClassName("ac-input", "ac-toggleInput"); + element.style.width = "100%"; + element.style.display = "flex"; + element.style.alignItems = "center"; + this._checkboxInputElement = document.createElement("input"); + this._checkboxInputElement.id = Utils.generateUniqueId(); + this._checkboxInputElement.type = "checkbox"; + this._checkboxInputElement.style.display = "inline-block"; + this._checkboxInputElement.style.verticalAlign = "middle"; + this._checkboxInputElement.style.margin = "0"; + this._checkboxInputElement.style.flex = "0 0 auto"; + if (this.title) { + this._checkboxInputElement.setAttribute("aria-label", this.title); + } + if (this.isRequired) { + this._checkboxInputElement.setAttribute("aria-required", "true"); + } + this._checkboxInputElement.tabIndex = this.isDesignMode() ? -1 : 0; + if (this.defaultValue === this.valueOn) { + this._checkboxInputElement.checked = true; + } + this._oldCheckboxValue = this._checkboxInputElement.checked; + this._checkboxInputElement.onchange = function() { + _this.valueChanged(); + }; + Utils.appendChild(element, this._checkboxInputElement); + if (this.title || this.isDesignMode()) { + var label = new TextBlock(); + label.setParent(this); + label.forElementId = this._checkboxInputElement.id; + label.hostConfig = this.hostConfig; + label.text = !this.title ? this.getJsonTypeName() : this.title; + label.useMarkdown = shared_1.GlobalSettings.useMarkdownInRadioButtonAndCheckbox; + label.wrap = this.wrap; + this._checkboxInputLabelElement = label.render(); + if (this._checkboxInputLabelElement) { + this._checkboxInputLabelElement.id = Utils.generateUniqueId(); + this._checkboxInputLabelElement.style.display = "inline-block"; + this._checkboxInputLabelElement.style.flex = "1 1 auto"; + this._checkboxInputLabelElement.style.marginLeft = "6px"; + this._checkboxInputLabelElement.style.verticalAlign = "middle"; + var spacerElement = document.createElement("div"); + spacerElement.style.width = "6px"; + Utils.appendChild(element, spacerElement); + Utils.appendChild(element, this._checkboxInputLabelElement); + } + } + return element; + }; + Object.defineProperty(ToggleInput2.prototype, "isNullable", { + get: function() { + return false; + }, + enumerable: false, + configurable: true + }); + ToggleInput2.prototype.getJsonTypeName = function() { + return "Input.Toggle"; + }; + ToggleInput2.prototype.focus = function() { + if (this._checkboxInputElement) { + this._checkboxInputElement.focus(); + } + }; + ToggleInput2.prototype.isSet = function() { + if (this.isRequired) { + return this.value === this.valueOn; + } + return this.value ? true : false; + }; + ToggleInput2.prototype.isDirty = function() { + return this._checkboxInputElement ? this._checkboxInputElement.checked !== this._oldCheckboxValue : false; + }; + Object.defineProperty(ToggleInput2.prototype, "value", { + get: function() { + if (this._checkboxInputElement) { + return this._checkboxInputElement.checked ? this.valueOn : this.valueOff; + } else { + return void 0; + } + }, + enumerable: false, + configurable: true + }); + ToggleInput2.valueProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "value"); + ToggleInput2.titleProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "title"); + ToggleInput2.valueOnProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "valueOn", true, void 0, "true", function(sender) { + return "true"; + }); + ToggleInput2.valueOffProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "valueOff", true, void 0, "false", function(sender) { + return "false"; + }); + ToggleInput2.wrapProperty = new serialization_1.BoolProperty(serialization_1.Versions.v1_2, "wrap", false); + __decorate([ + (0, serialization_1.property)(ToggleInput2.valueProperty) + ], ToggleInput2.prototype, "defaultValue", void 0); + __decorate([ + (0, serialization_1.property)(ToggleInput2.titleProperty) + ], ToggleInput2.prototype, "title", void 0); + __decorate([ + (0, serialization_1.property)(ToggleInput2.valueOnProperty) + ], ToggleInput2.prototype, "valueOn", void 0); + __decorate([ + (0, serialization_1.property)(ToggleInput2.valueOffProperty) + ], ToggleInput2.prototype, "valueOff", void 0); + __decorate([ + (0, serialization_1.property)(ToggleInput2.wrapProperty) + ], ToggleInput2.prototype, "wrap", void 0); + return ToggleInput2; + }(Input) + ); + exports.ToggleInput = ToggleInput; + var Choice = ( + /** @class */ + function(_super) { + __extends(Choice2, _super); + function Choice2(title, value) { + var _this = _super.call(this) || this; + _this.title = title; + _this.value = value; + return _this; + } + Choice2.prototype.getSchemaKey = function() { + return "Choice"; + }; + Choice2.titleProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "title"); + Choice2.valueProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "value"); + __decorate([ + (0, serialization_1.property)(Choice2.titleProperty) + ], Choice2.prototype, "title", void 0); + __decorate([ + (0, serialization_1.property)(Choice2.valueProperty) + ], Choice2.prototype, "value", void 0); + return Choice2; + }(serialization_1.SerializableObject) + ); + exports.Choice = Choice; + var ChoiceSetInput = ( + /** @class */ + function(_super) { + __extends(ChoiceSetInput2, _super); + function ChoiceSetInput2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.isMultiSelect = false; + _this.wrap = false; + _this.choices = []; + return _this; + } + Object.defineProperty(ChoiceSetInput2.prototype, "isCompact", { + get: function() { + return !this.style || this.style === "compact"; + }, + set: function(value) { + this.style = value ? void 0 : "expanded"; + }, + enumerable: false, + configurable: true + }); + ChoiceSetInput2.getUniqueCategoryName = function() { + var uniqueCategoryName = "__ac-category" + ChoiceSetInput2._uniqueCategoryCounter; + ChoiceSetInput2._uniqueCategoryCounter++; + return uniqueCategoryName; + }; + ChoiceSetInput2.prototype.internalApplyAriaCurrent = function() { + if (this._selectElement) { + var options = this._selectElement.options; + if (options) { + for (var _i = 0, _a = Array.from(options); _i < _a.length; _i++) { + var option = _a[_i]; + if (option.selected) { + option.setAttribute("aria-current", "true"); + } else { + option.removeAttribute("aria-current"); + } + } + } + } + }; + ChoiceSetInput2.prototype.renderCompoundInput = function(cssClassName, type, defaultValues) { + var _this = this; + var element = document.createElement("div"); + element.className = this.hostConfig.makeCssClassName("ac-input", cssClassName); + element.style.width = "100%"; + element.tabIndex = this.isDesignMode() ? -1 : 0; + this._toggleInputs = []; + this._labels = []; + for (var _i = 0, _a = this.choices; _i < _a.length; _i++) { + var choice = _a[_i]; + var input = document.createElement("input"); + input.id = Utils.generateUniqueId(); + input.type = type; + input.style.margin = "0"; + input.style.display = "inline-block"; + input.style.verticalAlign = "middle"; + input.style.flex = "0 0 auto"; + input.name = this.id ? this.id : this._uniqueCategoryName; + if (this.isRequired) { + input.setAttribute("aria-required", "true"); + } + input.tabIndex = this.isDesignMode() ? -1 : 0; + if (choice.value) { + input.value = choice.value; + } + if (choice.title) { + input.setAttribute("aria-label", choice.title); + } + if (defaultValues && choice.value) { + if (defaultValues.indexOf(choice.value) >= 0) { + input.checked = true; + } + } + input.onchange = function() { + _this.valueChanged(); + }; + this._toggleInputs.push(input); + var compoundInput = document.createElement("div"); + compoundInput.style.display = "flex"; + compoundInput.style.alignItems = "center"; + Utils.appendChild(compoundInput, input); + var label = new TextBlock(); + label.setParent(this); + label.forElementId = input.id; + label.hostConfig = this.hostConfig; + label.text = choice.title ? choice.title : "Choice " + this._toggleInputs.length; + label.useMarkdown = shared_1.GlobalSettings.useMarkdownInRadioButtonAndCheckbox; + label.wrap = this.wrap; + var labelElement = label.render(); + this._labels.push(labelElement); + if (labelElement) { + labelElement.id = Utils.generateUniqueId(); + labelElement.style.display = "inline-block"; + labelElement.style.flex = "1 1 auto"; + labelElement.style.marginLeft = "6px"; + labelElement.style.verticalAlign = "middle"; + var spacerElement = document.createElement("div"); + spacerElement.style.width = "6px"; + Utils.appendChild(compoundInput, spacerElement); + Utils.appendChild(compoundInput, labelElement); + } + Utils.appendChild(element, compoundInput); + } + return element; + }; + ChoiceSetInput2.prototype.updateInputControlAriaLabelledBy = function() { + if ((this.isMultiSelect || this.style === "expanded") && this._toggleInputs && this._labels) { + var labelIds = this.getAllLabelIds(); + for (var i = 0; i < this._toggleInputs.length; i++) { + var joinedLabelIds = labelIds.join(" "); + var label = this._labels[i]; + if (label && label.id) { + joinedLabelIds += " " + label.id; + } + if (joinedLabelIds) { + this._toggleInputs[i].setAttribute("aria-labelledby", joinedLabelIds); + } else { + this._toggleInputs[i].removeAttribute("aria-labelledby"); + } + } + } else { + _super.prototype.updateInputControlAriaLabelledBy.call(this); + } + }; + ChoiceSetInput2.prototype.internalRender = function() { + var _this = this; + this._uniqueCategoryName = ChoiceSetInput2.getUniqueCategoryName(); + if (this.isMultiSelect) { + return this.renderCompoundInput("ac-choiceSetInput-multiSelect", "checkbox", this.defaultValue ? this.defaultValue.split(this.hostConfig.choiceSetInputValueSeparator) : void 0); + } else { + if (this.style === "expanded") { + return this.renderCompoundInput("ac-choiceSetInput-expanded", "radio", this.defaultValue ? [this.defaultValue] : void 0); + } else if (this.style === "filtered") { + var inputContainer = document.createElement("div"); + inputContainer.style.width = "100%"; + this._textInput = document.createElement("input"); + this._textInput.className = this.hostConfig.makeCssClassName("ac-input", "ac-multichoiceInput", "ac-choiceSetInput-filtered"); + this._textInput.type = "text"; + this._textInput.style.width = "100%"; + this._textInput.oninput = function() { + _this.valueChanged(); + if (_this._textInput) { + if (_this.value) { + _this._textInput.removeAttribute("placeholder"); + _this._textInput.removeAttribute("aria-label"); + } else if (_this.placeholder) { + _this._textInput.placeholder = _this.placeholder; + _this._textInput.setAttribute("aria-label", _this.placeholder); + } + } + }; + if (this.defaultValue) { + this._textInput.value = this.defaultValue; + } + if (this.placeholder && !this._textInput.value) { + this._textInput.placeholder = this.placeholder; + this._textInput.setAttribute("aria-label", this.placeholder); + } + this._textInput.tabIndex = this.isDesignMode() ? -1 : 0; + var dataList = document.createElement("datalist"); + dataList.id = Utils.generateUniqueId(); + for (var _i = 0, _a = this.choices; _i < _a.length; _i++) { + var choice = _a[_i]; + var option = document.createElement("option"); + if (choice.title) { + option.value = choice.title; + option.setAttribute("aria-label", choice.title); + } + option.tabIndex = this.isDesignMode() ? -1 : 0; + dataList.appendChild(option); + } + this._textInput.setAttribute("list", dataList.id); + inputContainer.append(this._textInput, dataList); + return inputContainer; + } else { + this._selectElement = document.createElement("select"); + this._selectElement.className = this.hostConfig.makeCssClassName("ac-input", "ac-multichoiceInput", "ac-choiceSetInput-compact"); + this._selectElement.style.width = "100%"; + this._selectElement.tabIndex = this.isDesignMode() ? -1 : 0; + var placeholderOption = document.createElement("option"); + placeholderOption.selected = true; + placeholderOption.disabled = true; + placeholderOption.hidden = true; + placeholderOption.value = ""; + if (this.placeholder) { + placeholderOption.text = this.placeholder; + } + Utils.appendChild(this._selectElement, placeholderOption); + for (var _b = 0, _c = this.choices; _b < _c.length; _b++) { + var choice = _c[_b]; + var option = document.createElement("option"); + option.value = choice.value; + if (choice.title) { + option.text = choice.title; + option.setAttribute("aria-label", choice.title); + } + option.tabIndex = this.isDesignMode() ? -1 : 0; + if (choice.value === this.defaultValue) { + option.selected = true; + } + Utils.appendChild(this._selectElement, option); + } + this._selectElement.onchange = function() { + _this.internalApplyAriaCurrent(); + _this.valueChanged(); + }; + this.internalApplyAriaCurrent(); + return this._selectElement; + } + } + }; + ChoiceSetInput2.prototype.getJsonTypeName = function() { + return "Input.ChoiceSet"; + }; + ChoiceSetInput2.prototype.focus = function() { + if (this._toggleInputs && (this.isMultiSelect || this.style === "expanded")) { + if (this._toggleInputs.length > 0) { + this._toggleInputs[0].focus(); + } + } else if (this._textInput) { + this._textInput.focus(); + } else { + _super.prototype.focus.call(this); + } + }; + ChoiceSetInput2.prototype.internalValidateProperties = function(context) { + _super.prototype.internalValidateProperties.call(this, context); + if (this.choices.length === 0) { + context.addFailure(this, Enums.ValidationEvent.CollectionCantBeEmpty, strings_1.Strings.errors.choiceSetMustHaveAtLeastOneChoice()); + } + for (var _i = 0, _a = this.choices; _i < _a.length; _i++) { + var choice = _a[_i]; + if (!choice.title || !choice.value) { + context.addFailure(this, Enums.ValidationEvent.PropertyCantBeNull, strings_1.Strings.errors.choiceSetChoicesMustHaveTitleAndValue()); + } + } + }; + ChoiceSetInput2.prototype.isSet = function() { + return this.value ? true : false; + }; + ChoiceSetInput2.prototype.isValid = function() { + if (this._textInput) { + if (this.value === "" || this.value === this.placeholder) { + return true; + } + for (var _i = 0, _a = this.choices; _i < _a.length; _i++) { + var choice = _a[_i]; + if (this.value === choice.value) { + return true; + } + } + return false; + } + return _super.prototype.isValid.call(this); + }; + Object.defineProperty(ChoiceSetInput2.prototype, "value", { + get: function() { + if (!this.isMultiSelect) { + if (this._selectElement) { + return this._selectElement.selectedIndex > 0 ? this._selectElement.value : void 0; + } else if (this._textInput) { + for (var _i = 0, _a = this.choices; _i < _a.length; _i++) { + var choice = _a[_i]; + if (choice.title && this._textInput.value === choice.title) { + return choice.value; + } + } + return this._textInput.value; + } else if (this._toggleInputs && this._toggleInputs.length > 0) { + for (var _b = 0, _c = this._toggleInputs; _b < _c.length; _b++) { + var toggleInput = _c[_b]; + if (toggleInput.checked) { + return toggleInput.value; + } + } + } + return void 0; + } else { + if (!this._toggleInputs || this._toggleInputs.length === 0) { + return void 0; + } + var result = ""; + for (var _d = 0, _f = this._toggleInputs; _d < _f.length; _d++) { + var toggleInput = _f[_d]; + if (toggleInput.checked) { + if (result !== "") { + result += this.hostConfig.choiceSetInputValueSeparator; + } + result += toggleInput.value; + } + } + return result ? result : void 0; + } + }, + enumerable: false, + configurable: true + }); + ChoiceSetInput2.valueProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "value"); + ChoiceSetInput2.choicesProperty = new serialization_1.SerializableObjectCollectionProperty(serialization_1.Versions.v1_0, "choices", Choice); + ChoiceSetInput2.styleProperty = new serialization_1.ValueSetProperty(serialization_1.Versions.v1_0, "style", [ + { value: "compact" }, + { value: "expanded" }, + { value: "filtered", targetVersion: serialization_1.Versions.v1_5 } + ], "compact"); + ChoiceSetInput2.isMultiSelectProperty = new serialization_1.BoolProperty(serialization_1.Versions.v1_0, "isMultiSelect", false); + ChoiceSetInput2.placeholderProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "placeholder"); + ChoiceSetInput2.wrapProperty = new serialization_1.BoolProperty(serialization_1.Versions.v1_2, "wrap", false); + ChoiceSetInput2._uniqueCategoryCounter = 0; + __decorate([ + (0, serialization_1.property)(ChoiceSetInput2.valueProperty) + ], ChoiceSetInput2.prototype, "defaultValue", void 0); + __decorate([ + (0, serialization_1.property)(ChoiceSetInput2.styleProperty) + ], ChoiceSetInput2.prototype, "style", void 0); + __decorate([ + (0, serialization_1.property)(ChoiceSetInput2.isMultiSelectProperty) + ], ChoiceSetInput2.prototype, "isMultiSelect", void 0); + __decorate([ + (0, serialization_1.property)(ChoiceSetInput2.placeholderProperty) + ], ChoiceSetInput2.prototype, "placeholder", void 0); + __decorate([ + (0, serialization_1.property)(ChoiceSetInput2.wrapProperty) + ], ChoiceSetInput2.prototype, "wrap", void 0); + __decorate([ + (0, serialization_1.property)(ChoiceSetInput2.choicesProperty) + ], ChoiceSetInput2.prototype, "choices", void 0); + return ChoiceSetInput2; + }(Input) + ); + exports.ChoiceSetInput = ChoiceSetInput; + var NumberInput = ( + /** @class */ + function(_super) { + __extends(NumberInput2, _super); + function NumberInput2() { + return _super !== null && _super.apply(this, arguments) || this; + } + NumberInput2.prototype.internalRender = function() { + var _this = this; + this._numberInputElement = document.createElement("input"); + this._numberInputElement.setAttribute("type", "number"); + if (this.min !== void 0) { + this._numberInputElement.setAttribute("min", this.min.toString()); + } + if (this.max !== void 0) { + this._numberInputElement.setAttribute("max", this.max.toString()); + } + this._numberInputElement.className = this.hostConfig.makeCssClassName("ac-input", "ac-numberInput"); + this._numberInputElement.style.width = "100%"; + this._numberInputElement.tabIndex = this.isDesignMode() ? -1 : 0; + if (this.defaultValue !== void 0) { + this._numberInputElement.valueAsNumber = this.defaultValue; + } + if (this.placeholder) { + this._numberInputElement.placeholder = this.placeholder; + this._numberInputElement.setAttribute("aria-label", this.placeholder); + } + this._numberInputElement.oninput = function() { + _this.valueChanged(); + }; + return this._numberInputElement; + }; + NumberInput2.prototype.getJsonTypeName = function() { + return "Input.Number"; + }; + NumberInput2.prototype.isSet = function() { + return this.value !== void 0 && !isNaN(this.value); + }; + NumberInput2.prototype.isValid = function() { + if (this.value === void 0) { + return !this.isRequired; + } + var result = true; + if (this.min !== void 0) { + result = result && this.value >= this.min; + } + if (this.max !== void 0) { + result = result && this.value <= this.max; + } + return result; + }; + Object.defineProperty(NumberInput2.prototype, "value", { + get: function() { + return this._numberInputElement ? this._numberInputElement.valueAsNumber : void 0; + }, + set: function(value) { + if (value && this._numberInputElement) { + this._numberInputElement.value = value.toString(); + } + }, + enumerable: false, + configurable: true + }); + NumberInput2.valueProperty = new serialization_1.NumProperty(serialization_1.Versions.v1_0, "value"); + NumberInput2.placeholderProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "placeholder"); + NumberInput2.minProperty = new serialization_1.NumProperty(serialization_1.Versions.v1_0, "min"); + NumberInput2.maxProperty = new serialization_1.NumProperty(serialization_1.Versions.v1_0, "max"); + __decorate([ + (0, serialization_1.property)(NumberInput2.valueProperty) + ], NumberInput2.prototype, "defaultValue", void 0); + __decorate([ + (0, serialization_1.property)(NumberInput2.minProperty) + ], NumberInput2.prototype, "min", void 0); + __decorate([ + (0, serialization_1.property)(NumberInput2.maxProperty) + ], NumberInput2.prototype, "max", void 0); + __decorate([ + (0, serialization_1.property)(NumberInput2.placeholderProperty) + ], NumberInput2.prototype, "placeholder", void 0); + return NumberInput2; + }(Input) + ); + exports.NumberInput = NumberInput; + var DateInput = ( + /** @class */ + function(_super) { + __extends(DateInput2, _super); + function DateInput2() { + return _super !== null && _super.apply(this, arguments) || this; + } + DateInput2.prototype.internalRender = function() { + var _this = this; + this._dateInputElement = document.createElement("input"); + this._dateInputElement.setAttribute("type", "date"); + if (this.min) { + this._dateInputElement.setAttribute("min", this.min); + } + if (this.max) { + this._dateInputElement.setAttribute("max", this.max); + } + if (this.placeholder) { + this._dateInputElement.placeholder = this.placeholder; + this._dateInputElement.setAttribute("aria-label", this.placeholder); + } + this._dateInputElement.tabIndex = this.isDesignMode() ? -1 : 0; + this._dateInputElement.className = this.hostConfig.makeCssClassName("ac-input", "ac-dateInput"); + this._dateInputElement.style.width = "100%"; + this._dateInputElement.oninput = function() { + _this.valueChanged(); + }; + if (this.defaultValue) { + this._dateInputElement.value = this.defaultValue; + } + return this._dateInputElement; + }; + DateInput2.prototype.getJsonTypeName = function() { + return "Input.Date"; + }; + DateInput2.prototype.isSet = function() { + return this.value ? true : false; + }; + DateInput2.prototype.isValid = function() { + if (!this.value) { + return !this.isRequired; + } + var valueAsDate = new Date(this.value); + var result = true; + if (this.min) { + var minDate = new Date(this.min); + result = result && valueAsDate >= minDate; + } + if (this.max) { + var maxDate = new Date(this.max); + result = result && valueAsDate <= maxDate; + } + return result; + }; + Object.defineProperty(DateInput2.prototype, "value", { + get: function() { + return this._dateInputElement ? this._dateInputElement.value : void 0; + }, + enumerable: false, + configurable: true + }); + DateInput2.valueProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "value"); + DateInput2.placeholderProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "placeholder"); + DateInput2.minProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "min"); + DateInput2.maxProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "max"); + __decorate([ + (0, serialization_1.property)(DateInput2.valueProperty) + ], DateInput2.prototype, "defaultValue", void 0); + __decorate([ + (0, serialization_1.property)(DateInput2.minProperty) + ], DateInput2.prototype, "min", void 0); + __decorate([ + (0, serialization_1.property)(DateInput2.maxProperty) + ], DateInput2.prototype, "max", void 0); + __decorate([ + (0, serialization_1.property)(DateInput2.placeholderProperty) + ], DateInput2.prototype, "placeholder", void 0); + return DateInput2; + }(Input) + ); + exports.DateInput = DateInput; + var TimeProperty = ( + /** @class */ + function(_super) { + __extends(TimeProperty2, _super); + function TimeProperty2(targetVersion, name) { + var _this = _super.call(this, targetVersion, name, function(sender, prop, source, context) { + var value = source[prop.name]; + if (typeof value === "string" && value && /^[0-9]{2}:[0-9]{2}$/.test(value)) { + return value; + } + return void 0; + }, function(sender, prop, target, value, context) { + context.serializeValue(target, prop.name, value); + }) || this; + _this.targetVersion = targetVersion; + _this.name = name; + return _this; + } + return TimeProperty2; + }(serialization_1.CustomProperty) + ); + exports.TimeProperty = TimeProperty; + var TimeInput = ( + /** @class */ + function(_super) { + __extends(TimeInput2, _super); + function TimeInput2() { + return _super !== null && _super.apply(this, arguments) || this; + } + TimeInput2.convertTimeStringToDate = function(timeString) { + return /* @__PURE__ */ new Date("1973-09-04T" + timeString + ":00Z"); + }; + TimeInput2.prototype.internalRender = function() { + var _this = this; + this._timeInputElement = document.createElement("input"); + this._timeInputElement.setAttribute("type", "time"); + if (this.min) { + this._timeInputElement.setAttribute("min", this.min); + } + if (this.max) { + this._timeInputElement.setAttribute("max", this.max); + } + this._timeInputElement.className = this.hostConfig.makeCssClassName("ac-input", "ac-timeInput"); + this._timeInputElement.style.width = "100%"; + this._timeInputElement.oninput = function() { + _this.valueChanged(); + }; + if (this.placeholder) { + this._timeInputElement.placeholder = this.placeholder; + this._timeInputElement.setAttribute("aria-label", this.placeholder); + } + this._timeInputElement.tabIndex = this.isDesignMode() ? -1 : 0; + if (this.defaultValue) { + this._timeInputElement.value = this.defaultValue; + } + return this._timeInputElement; + }; + TimeInput2.prototype.getJsonTypeName = function() { + return "Input.Time"; + }; + TimeInput2.prototype.isSet = function() { + return this.value ? true : false; + }; + TimeInput2.prototype.isValid = function() { + if (!this.value) { + return !this.isRequired; + } + var valueAsDate = TimeInput2.convertTimeStringToDate(this.value); + var result = true; + if (this.min) { + var minDate = TimeInput2.convertTimeStringToDate(this.min); + result = result && valueAsDate >= minDate; + } + if (this.max) { + var maxDate = TimeInput2.convertTimeStringToDate(this.max); + result = result && valueAsDate <= maxDate; + } + return result; + }; + Object.defineProperty(TimeInput2.prototype, "value", { + get: function() { + return this._timeInputElement ? this._timeInputElement.value : void 0; + }, + enumerable: false, + configurable: true + }); + TimeInput2.valueProperty = new TimeProperty(serialization_1.Versions.v1_0, "value"); + TimeInput2.placeholderProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "placeholder"); + TimeInput2.minProperty = new TimeProperty(serialization_1.Versions.v1_0, "min"); + TimeInput2.maxProperty = new TimeProperty(serialization_1.Versions.v1_0, "max"); + __decorate([ + (0, serialization_1.property)(TimeInput2.valueProperty) + ], TimeInput2.prototype, "defaultValue", void 0); + __decorate([ + (0, serialization_1.property)(TimeInput2.minProperty) + ], TimeInput2.prototype, "min", void 0); + __decorate([ + (0, serialization_1.property)(TimeInput2.maxProperty) + ], TimeInput2.prototype, "max", void 0); + __decorate([ + (0, serialization_1.property)(TimeInput2.placeholderProperty) + ], TimeInput2.prototype, "placeholder", void 0); + return TimeInput2; + }(Input) + ); + exports.TimeInput = TimeInput; + var Action = ( + /** @class */ + function(_super) { + __extends(Action2, _super); + function Action2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.style = Enums.ActionStyle.Default; + _this.mode = Enums.ActionMode.Primary; + _this._state = 0; + _this._isFocusable = true; + return _this; + } + Action2.prototype.renderButtonContent = function() { + if (this.renderedElement) { + var hostConfig = this.hostConfig; + var titleElement = document.createElement("div"); + titleElement.style.overflow = "hidden"; + titleElement.style.textOverflow = "ellipsis"; + if (!(hostConfig.actions.iconPlacement === Enums.ActionIconPlacement.AboveTitle || hostConfig.actions.allowTitleToWrap)) { + titleElement.style.whiteSpace = "nowrap"; + } + if (this.title) { + titleElement.innerText = this.title; + } + if (!this.iconUrl) { + this.renderedElement.classList.add("noIcon"); + this.renderedElement.appendChild(titleElement); + } else { + var iconElement = document.createElement("img"); + iconElement.src = this.iconUrl; + iconElement.style.width = hostConfig.actions.iconSize + "px"; + iconElement.style.height = hostConfig.actions.iconSize + "px"; + iconElement.style.flex = "0 0 auto"; + if (hostConfig.actions.iconPlacement === Enums.ActionIconPlacement.AboveTitle) { + this.renderedElement.classList.add("iconAbove"); + this.renderedElement.style.flexDirection = "column"; + if (this.title) { + iconElement.style.marginBottom = "6px"; + } + } else { + this.renderedElement.classList.add("iconLeft"); + iconElement.style.maxHeight = "100%"; + if (this.title) { + iconElement.style.marginRight = "6px"; + } + } + this.renderedElement.appendChild(iconElement); + this.renderedElement.appendChild(titleElement); + } + } + }; + Action2.prototype.getParentContainer = function() { + if (this.parent instanceof Container) { + return this.parent; + } + return this.parent ? this.parent.getParentContainer() : void 0; + }; + Action2.prototype.isDesignMode = function() { + var rootElement = this.getRootObject(); + return rootElement instanceof CardElement && rootElement.isDesignMode(); + }; + Action2.prototype.updateCssClasses = function() { + var _a, _b; + if (this.parent && this.renderedElement) { + var hostConfig = this.parent.hostConfig; + this.renderedElement.className = hostConfig.makeCssClassName(this.isEffectivelyEnabled() ? "ac-pushButton" : "ac-pushButton-disabled"); + var parentContainer = this.getParentContainer(); + if (parentContainer) { + var parentContainerStyle = parentContainer.getEffectiveStyle(); + if (parentContainerStyle) { + this.renderedElement.classList.add("style-" + parentContainerStyle); + } + } + this.renderedElement.tabIndex = !this.isDesignMode() && this.isFocusable ? 0 : -1; + switch (this._state) { + case 0: + break; + case 1: + this.renderedElement.classList.add(hostConfig.makeCssClassName("expanded")); + break; + case 2: + this.renderedElement.classList.add(hostConfig.makeCssClassName("subdued")); + break; + } + if (this.style && this.isEffectivelyEnabled()) { + if (this.style === Enums.ActionStyle.Positive) { + (_a = this.renderedElement.classList).add.apply(_a, hostConfig.makeCssClassNames("primary", "style-positive")); + } else { + (_b = this.renderedElement.classList).add.apply(_b, hostConfig.makeCssClassNames("style-" + this.style.toLowerCase())); + } + } + } + }; + Action2.prototype.getDefaultSerializationContext = function() { + return new SerializationContext(); + }; + Action2.prototype.internalGetReferencedInputs = function() { + return {}; + }; + Action2.prototype.internalPrepareForExecution = function(_inputs) { + }; + Action2.prototype.internalValidateInputs = function(referencedInputs) { + var result = []; + if (referencedInputs) { + for (var _i = 0, _a = Object.keys(referencedInputs); _i < _a.length; _i++) { + var key = _a[_i]; + var input = referencedInputs[key]; + if (!input.validateValue()) { + result.push(input); + } + } + } + return result; + }; + Action2.prototype.shouldSerialize = function(context) { + return context.actionRegistry.findByName(this.getJsonTypeName()) !== void 0; + }; + Action2.prototype.raiseExecuteActionEvent = function() { + if (this.onExecute) { + this.onExecute(this); + } + raiseExecuteActionEvent(this); + }; + Action2.prototype.internalAfterExecute = function() { + var rootObject = this.getRootObject(); + if (rootObject instanceof CardElement) { + rootObject.updateActionsEnabledState(); + } + }; + Action2.prototype.getHref = function() { + return ""; + }; + Action2.prototype.getAriaRole = function() { + return "button"; + }; + Action2.prototype.setupElementForAccessibility = function(element, promoteTooltipToLabel) { + if (promoteTooltipToLabel === void 0) { + promoteTooltipToLabel = false; + } + element.tabIndex = this.isEffectivelyEnabled() && !this.isDesignMode() ? 0 : -1; + element.setAttribute("role", this.getAriaRole()); + if (element instanceof HTMLButtonElement) { + element.disabled = !this.isEffectivelyEnabled(); + } + if (!this.isEffectivelyEnabled()) { + element.setAttribute("aria-disabled", "true"); + } else { + element.removeAttribute("aria-disabled"); + element.classList.add(this.hostConfig.makeCssClassName("ac-selectable")); + } + if (this.title) { + element.setAttribute("aria-label", this.title); + element.title = this.title; + } else { + element.removeAttribute("aria-label"); + element.removeAttribute("title"); + } + if (this.tooltip) { + var targetAriaAttribute = promoteTooltipToLabel ? this.title ? "aria-description" : "aria-label" : "aria-description"; + element.setAttribute(targetAriaAttribute, this.tooltip); + element.title = this.tooltip; + } + }; + Action2.prototype.parse = function(source, context) { + return _super.prototype.parse.call(this, source, context ? context : new SerializationContext()); + }; + Action2.prototype.render = function() { + var _this = this; + var buttonElement = document.createElement("button"); + buttonElement.type = "button"; + buttonElement.style.display = "flex"; + buttonElement.style.alignItems = "center"; + buttonElement.style.justifyContent = "center"; + buttonElement.onclick = function(e) { + if (_this.isEffectivelyEnabled()) { + e.preventDefault(); + e.cancelBubble = true; + _this.execute(); + } + }; + this._renderedElement = buttonElement; + this.renderButtonContent(); + this.updateCssClasses(); + this.setupElementForAccessibility(buttonElement); + }; + Action2.prototype.execute = function() { + if (this._actionCollection) { + this._actionCollection.actionExecuted(this); + } + this.raiseExecuteActionEvent(); + this.internalAfterExecute(); + }; + Action2.prototype.prepareForExecution = function() { + var referencedInputs = this.getReferencedInputs(); + var invalidInputs = this.internalValidateInputs(referencedInputs); + if (invalidInputs.length > 0) { + invalidInputs[0].focus(); + return false; + } + this.internalPrepareForExecution(referencedInputs); + return true; + }; + Action2.prototype.remove = function() { + if (this._actionCollection) { + return this._actionCollection.removeAction(this); + } + return false; + }; + Action2.prototype.getAllInputs = function(processActions) { + if (processActions === void 0) { + processActions = true; + } + return []; + }; + Action2.prototype.getAllActions = function() { + return [this]; + }; + Action2.prototype.getResourceInformation = function() { + return this.iconUrl ? [{ url: this.iconUrl, mimeType: "image" }] : []; + }; + Action2.prototype.getActionById = function(id) { + return this.id === id ? this : void 0; + }; + Action2.prototype.getReferencedInputs = function() { + return this.internalGetReferencedInputs(); + }; + Action2.prototype.validateInputs = function() { + return this.internalValidateInputs(this.getReferencedInputs()); + }; + Action2.prototype.updateEnabledState = function() { + }; + Action2.prototype.isEffectivelyEnabled = function() { + return this.isEnabled; + }; + Object.defineProperty(Action2.prototype, "isPrimary", { + get: function() { + return this.style === Enums.ActionStyle.Positive; + }, + set: function(value) { + if (value) { + this.style = Enums.ActionStyle.Positive; + } else { + if (this.style === Enums.ActionStyle.Positive) { + this.style = Enums.ActionStyle.Default; + } + } + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Action2.prototype, "hostConfig", { + get: function() { + return this.parent ? this.parent.hostConfig : host_config_1.defaultHostConfig; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Action2.prototype, "parent", { + get: function() { + return this._parent; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Action2.prototype, "state", { + get: function() { + return this._state; + }, + set: function(value) { + if (this._state !== value) { + this._state = value; + this.updateCssClasses(); + } + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Action2.prototype, "isFocusable", { + get: function() { + return this._isFocusable; + }, + set: function(value) { + if (this._isFocusable !== value) { + this._isFocusable = value; + this.updateCssClasses(); + } + }, + enumerable: false, + configurable: true + }); + Action2.titleProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "title"); + Action2.iconUrlProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_1, "iconUrl"); + Action2.styleProperty = new serialization_1.ValueSetProperty(serialization_1.Versions.v1_2, "style", [ + { value: Enums.ActionStyle.Default }, + { value: Enums.ActionStyle.Positive }, + { value: Enums.ActionStyle.Destructive } + ], Enums.ActionStyle.Default); + Action2.modeProperty = new serialization_1.ValueSetProperty(serialization_1.Versions.v1_5, "mode", [{ value: Enums.ActionMode.Primary }, { value: Enums.ActionMode.Secondary }], Enums.ActionMode.Primary); + Action2.tooltipProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_5, "tooltip"); + Action2.isEnabledProperty = new serialization_1.BoolProperty(serialization_1.Versions.v1_5, "isEnabled", true); + __decorate([ + (0, serialization_1.property)(Action2.titleProperty) + ], Action2.prototype, "title", void 0); + __decorate([ + (0, serialization_1.property)(Action2.iconUrlProperty) + ], Action2.prototype, "iconUrl", void 0); + __decorate([ + (0, serialization_1.property)(Action2.styleProperty) + ], Action2.prototype, "style", void 0); + __decorate([ + (0, serialization_1.property)(Action2.modeProperty) + ], Action2.prototype, "mode", void 0); + __decorate([ + (0, serialization_1.property)(Action2.tooltipProperty) + ], Action2.prototype, "tooltip", void 0); + __decorate([ + (0, serialization_1.property)(Action2.isEnabledProperty) + ], Action2.prototype, "isEnabled", void 0); + return Action2; + }(card_object_1.CardObject) + ); + exports.Action = Action; + var SubmitActionBase = ( + /** @class */ + function(_super) { + __extends(SubmitActionBase2, _super); + function SubmitActionBase2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.disabledUnlessAssociatedInputsChange = false; + _this._isPrepared = false; + _this._areReferencedInputsDirty = false; + return _this; + } + SubmitActionBase2.prototype.internalGetReferencedInputs = function() { + var result = {}; + if (this.associatedInputs !== "none") { + var current = this.parent; + var inputs = []; + while (current) { + inputs.push.apply(inputs, current.getAllInputs(false)); + current = current.parent; + } + for (var _i = 0, inputs_1 = inputs; _i < inputs_1.length; _i++) { + var input = inputs_1[_i]; + if (input.id) { + result[input.id] = input; + } + } + } + return result; + }; + SubmitActionBase2.prototype.internalPrepareForExecution = function(inputs) { + if (this._originalData) { + this._processedData = JSON.parse(JSON.stringify(this._originalData)); + } else { + this._processedData = {}; + } + if (this._processedData && inputs) { + for (var _i = 0, _a = Object.keys(inputs); _i < _a.length; _i++) { + var key = _a[_i]; + var input = inputs[key]; + if (input.id && input.isSet()) { + this._processedData[input.id] = typeof input.value === "string" ? input.value : input.value.toString(); + } + } + } + this._isPrepared = true; + }; + SubmitActionBase2.prototype.internalAfterExecute = function() { + if (shared_1.GlobalSettings.resetInputsDirtyStateAfterActionExecution) { + this.resetReferencedInputsDirtyState(); + } + }; + SubmitActionBase2.prototype.resetReferencedInputsDirtyState = function() { + var referencedInputs = this.getReferencedInputs(); + this._areReferencedInputsDirty = false; + if (referencedInputs) { + for (var _i = 0, _a = Object.keys(referencedInputs); _i < _a.length; _i++) { + var key = _a[_i]; + var input = referencedInputs[key]; + input.resetDirtyState(); + } + } + }; + SubmitActionBase2.prototype.updateEnabledState = function() { + this._areReferencedInputsDirty = false; + var referencedInputs = this.getReferencedInputs(); + if (referencedInputs) { + for (var _i = 0, _a = Object.keys(referencedInputs); _i < _a.length; _i++) { + var key = _a[_i]; + var input = referencedInputs[key]; + if (input.isDirty()) { + this._areReferencedInputsDirty = true; + break; + } + } + } + this.updateCssClasses(); + if (this._renderedElement) { + this.setupElementForAccessibility(this._renderedElement); + } + }; + SubmitActionBase2.prototype.isEffectivelyEnabled = function() { + var result = _super.prototype.isEffectivelyEnabled.call(this); + return this.disabledUnlessAssociatedInputsChange ? result && this._areReferencedInputsDirty : result; + }; + Object.defineProperty(SubmitActionBase2.prototype, "data", { + get: function() { + return this._isPrepared ? this._processedData : this._originalData; + }, + set: function(value) { + this._originalData = value; + this._isPrepared = false; + }, + enumerable: false, + configurable: true + }); + SubmitActionBase2.dataProperty = new serialization_1.PropertyDefinition(serialization_1.Versions.v1_0, "data"); + SubmitActionBase2.associatedInputsProperty = new serialization_1.CustomProperty(serialization_1.Versions.v1_3, "associatedInputs", function(sender, prop, source, context) { + var value = source[prop.name]; + if (value !== void 0 && typeof value === "string") { + return value.toLowerCase() === "none" ? "none" : "auto"; + } + return void 0; + }, function(sender, prop, target, value, context) { + context.serializeValue(target, prop.name, value); + }); + SubmitActionBase2.disabledUnlessAssociatedInputsChangeProperty = new serialization_1.BoolProperty(serialization_1.Versions.v1_6, "disabledUnlessAssociatedInputsChange", false); + __decorate([ + (0, serialization_1.property)(SubmitActionBase2.dataProperty) + ], SubmitActionBase2.prototype, "_originalData", void 0); + __decorate([ + (0, serialization_1.property)(SubmitActionBase2.associatedInputsProperty) + ], SubmitActionBase2.prototype, "associatedInputs", void 0); + __decorate([ + (0, serialization_1.property)(SubmitActionBase2.disabledUnlessAssociatedInputsChangeProperty) + ], SubmitActionBase2.prototype, "disabledUnlessAssociatedInputsChange", void 0); + return SubmitActionBase2; + }(Action) + ); + exports.SubmitActionBase = SubmitActionBase; + var SubmitAction = ( + /** @class */ + function(_super) { + __extends(SubmitAction2, _super); + function SubmitAction2() { + return _super !== null && _super.apply(this, arguments) || this; + } + SubmitAction2.prototype.getJsonTypeName = function() { + return SubmitAction2.JsonTypeName; + }; + SubmitAction2.JsonTypeName = "Action.Submit"; + return SubmitAction2; + }(SubmitActionBase) + ); + exports.SubmitAction = SubmitAction; + var ExecuteAction = ( + /** @class */ + function(_super) { + __extends(ExecuteAction2, _super); + function ExecuteAction2() { + return _super !== null && _super.apply(this, arguments) || this; + } + ExecuteAction2.prototype.getJsonTypeName = function() { + return ExecuteAction2.JsonTypeName; + }; + ExecuteAction2.JsonTypeName = "Action.Execute"; + ExecuteAction2.verbProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_4, "verb"); + __decorate([ + (0, serialization_1.property)(ExecuteAction2.verbProperty) + ], ExecuteAction2.prototype, "verb", void 0); + return ExecuteAction2; + }(SubmitActionBase) + ); + exports.ExecuteAction = ExecuteAction; + var OpenUrlAction = ( + /** @class */ + function(_super) { + __extends(OpenUrlAction2, _super); + function OpenUrlAction2() { + return _super !== null && _super.apply(this, arguments) || this; + } + OpenUrlAction2.prototype.getJsonTypeName = function() { + return OpenUrlAction2.JsonTypeName; + }; + OpenUrlAction2.prototype.getAriaRole = function() { + return "link"; + }; + OpenUrlAction2.prototype.internalValidateProperties = function(context) { + _super.prototype.internalValidateProperties.call(this, context); + if (!this.url) { + context.addFailure(this, Enums.ValidationEvent.PropertyCantBeNull, strings_1.Strings.errors.propertyMustBeSet("url")); + } + }; + OpenUrlAction2.prototype.getHref = function() { + return this.url; + }; + OpenUrlAction2.urlProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "url"); + OpenUrlAction2.JsonTypeName = "Action.OpenUrl"; + __decorate([ + (0, serialization_1.property)(OpenUrlAction2.urlProperty) + ], OpenUrlAction2.prototype, "url", void 0); + return OpenUrlAction2; + }(Action) + ); + exports.OpenUrlAction = OpenUrlAction; + var ToggleVisibilityAction = ( + /** @class */ + function(_super) { + __extends(ToggleVisibilityAction2, _super); + function ToggleVisibilityAction2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.targetElements = {}; + return _this; + } + ToggleVisibilityAction2.prototype.updateAriaControlsAttribute = function() { + if (this.targetElements) { + var elementIds = Object.keys(this.targetElements); + if (this._renderedElement) { + if (elementIds.length > 0) { + this._renderedElement.setAttribute("aria-controls", elementIds.join(" ")); + } else { + this._renderedElement.removeAttribute("aria-controls"); + } + } + } + }; + ToggleVisibilityAction2.prototype.internalValidateProperties = function(context) { + _super.prototype.internalValidateProperties.call(this, context); + if (!this.targetElements) { + context.addFailure(this, Enums.ValidationEvent.PropertyCantBeNull, strings_1.Strings.errors.propertyMustBeSet("targetElements")); + } + }; + ToggleVisibilityAction2.prototype.getJsonTypeName = function() { + return ToggleVisibilityAction2.JsonTypeName; + }; + ToggleVisibilityAction2.prototype.render = function() { + _super.prototype.render.call(this); + this.updateAriaControlsAttribute(); + }; + ToggleVisibilityAction2.prototype.execute = function() { + _super.prototype.execute.call(this); + if (this.parent) { + for (var _i = 0, _a = Object.keys(this.targetElements); _i < _a.length; _i++) { + var elementId = _a[_i]; + var targetElement = this.parent.getRootElement().getElementById(elementId); + if (targetElement) { + if (typeof this.targetElements[elementId] === "boolean") { + targetElement.isVisible = this.targetElements[elementId]; + } else { + targetElement.isVisible = !targetElement.isVisible; + } + } + } + } + }; + ToggleVisibilityAction2.prototype.addTargetElement = function(elementId, isVisible) { + if (isVisible === void 0) { + isVisible = void 0; + } + this.targetElements[elementId] = isVisible; + this.updateAriaControlsAttribute(); + }; + ToggleVisibilityAction2.prototype.removeTargetElement = function(elementId) { + delete this.targetElements[elementId]; + this.updateAriaControlsAttribute(); + }; + ToggleVisibilityAction2.targetElementsProperty = new serialization_1.CustomProperty(serialization_1.Versions.v1_2, "targetElements", function(sender, prop, source, context) { + var result = {}; + if (Array.isArray(source[prop.name])) { + for (var _i = 0, _a = source[prop.name]; _i < _a.length; _i++) { + var item = _a[_i]; + if (typeof item === "string") { + result[item] = void 0; + } else if (typeof item === "object") { + var elementId = item["elementId"]; + if (typeof elementId === "string") { + result[elementId] = Utils.parseBool(item["isVisible"]); + } + } + } + } + return result; + }, function(sender, prop, target, value, context) { + var targetElements = []; + for (var _i = 0, _a = Object.keys(value); _i < _a.length; _i++) { + var id = _a[_i]; + if (typeof value[id] === "boolean") { + targetElements.push({ + elementId: id, + isVisible: value[id] + }); + } else { + targetElements.push(id); + } + } + context.serializeArray(target, prop.name, targetElements); + }, {}, function(sender) { + return {}; + }); + ToggleVisibilityAction2.JsonTypeName = "Action.ToggleVisibility"; + __decorate([ + (0, serialization_1.property)(ToggleVisibilityAction2.targetElementsProperty) + ], ToggleVisibilityAction2.prototype, "targetElements", void 0); + return ToggleVisibilityAction2; + }(Action) + ); + exports.ToggleVisibilityAction = ToggleVisibilityAction; + var StringWithSubstitutionProperty = ( + /** @class */ + function(_super) { + __extends(StringWithSubstitutionProperty2, _super); + function StringWithSubstitutionProperty2(targetVersion, name) { + var _this = _super.call(this, targetVersion, name, void 0, function() { + return new shared_1.StringWithSubstitutions(); + }) || this; + _this.targetVersion = targetVersion; + _this.name = name; + return _this; + } + StringWithSubstitutionProperty2.prototype.parse = function(sender, source, context) { + var result = new shared_1.StringWithSubstitutions(); + result.set(Utils.parseString(source[this.name])); + return result; + }; + StringWithSubstitutionProperty2.prototype.toJSON = function(sender, target, value, context) { + context.serializeValue(target, this.name, value.getOriginal()); + }; + return StringWithSubstitutionProperty2; + }(serialization_1.PropertyDefinition) + ); + var HttpHeader = ( + /** @class */ + function(_super) { + __extends(HttpHeader2, _super); + function HttpHeader2(name, value) { + if (name === void 0) { + name = ""; + } + if (value === void 0) { + value = ""; + } + var _this = _super.call(this) || this; + _this.name = name; + _this.value = value; + return _this; + } + HttpHeader2.prototype.getSchemaKey = function() { + return "HttpHeader"; + }; + HttpHeader2.prototype.getReferencedInputs = function(inputs, referencedInputs) { + this._value.getReferencedInputs(inputs, referencedInputs); + }; + HttpHeader2.prototype.prepareForExecution = function(inputs) { + this._value.substituteInputValues(inputs, shared_1.ContentTypes.applicationXWwwFormUrlencoded); + }; + Object.defineProperty(HttpHeader2.prototype, "value", { + get: function() { + return this._value.get(); + }, + set: function(newValue) { + this._value.set(newValue); + }, + enumerable: false, + configurable: true + }); + HttpHeader2.nameProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "name"); + HttpHeader2.valueProperty = new StringWithSubstitutionProperty(serialization_1.Versions.v1_0, "value"); + __decorate([ + (0, serialization_1.property)(HttpHeader2.nameProperty) + ], HttpHeader2.prototype, "name", void 0); + __decorate([ + (0, serialization_1.property)(HttpHeader2.valueProperty) + ], HttpHeader2.prototype, "_value", void 0); + return HttpHeader2; + }(serialization_1.SerializableObject) + ); + exports.HttpHeader = HttpHeader; + var HttpAction = ( + /** @class */ + function(_super) { + __extends(HttpAction2, _super); + function HttpAction2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this._ignoreInputValidation = false; + return _this; + } + HttpAction2.prototype.internalGetReferencedInputs = function() { + var allInputs = this.parent ? this.parent.getRootElement().getAllInputs() : []; + var result = {}; + this._url.getReferencedInputs(allInputs, result); + for (var _i = 0, _a = this.headers; _i < _a.length; _i++) { + var header = _a[_i]; + header.getReferencedInputs(allInputs, result); + } + this._body.getReferencedInputs(allInputs, result); + return result; + }; + HttpAction2.prototype.internalPrepareForExecution = function(inputs) { + if (inputs) { + this._url.substituteInputValues(inputs, shared_1.ContentTypes.applicationXWwwFormUrlencoded); + var contentType = shared_1.ContentTypes.applicationJson; + for (var _i = 0, _a = this.headers; _i < _a.length; _i++) { + var header = _a[_i]; + header.prepareForExecution(inputs); + if (header.name && header.name.toLowerCase() === "content-type") { + contentType = header.value; + } + } + this._body.substituteInputValues(inputs, contentType); + } + }; + HttpAction2.prototype.getJsonTypeName = function() { + return HttpAction2.JsonTypeName; + }; + HttpAction2.prototype.internalValidateProperties = function(context) { + _super.prototype.internalValidateProperties.call(this, context); + if (!this.url) { + context.addFailure(this, Enums.ValidationEvent.PropertyCantBeNull, strings_1.Strings.errors.propertyMustBeSet("url")); + } + if (this.headers.length > 0) { + for (var _i = 0, _a = this.headers; _i < _a.length; _i++) { + var header = _a[_i]; + if (!header.name) { + context.addFailure(this, Enums.ValidationEvent.PropertyCantBeNull, strings_1.Strings.errors.actionHttpHeadersMustHaveNameAndValue()); + } + } + } + }; + Object.defineProperty(HttpAction2.prototype, "ignoreInputValidation", { + get: function() { + return this._ignoreInputValidation; + }, + set: function(value) { + this._ignoreInputValidation = value; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(HttpAction2.prototype, "url", { + get: function() { + return this._url.get(); + }, + set: function(value) { + this._url.set(value); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(HttpAction2.prototype, "body", { + get: function() { + return this._body.get(); + }, + set: function(value) { + this._body.set(value); + }, + enumerable: false, + configurable: true + }); + HttpAction2.urlProperty = new StringWithSubstitutionProperty(serialization_1.Versions.v1_0, "url"); + HttpAction2.bodyProperty = new StringWithSubstitutionProperty(serialization_1.Versions.v1_0, "body"); + HttpAction2.methodProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "method"); + HttpAction2.headersProperty = new serialization_1.SerializableObjectCollectionProperty(serialization_1.Versions.v1_0, "headers", HttpHeader); + HttpAction2.ignoreInputValidationProperty = new serialization_1.BoolProperty(serialization_1.Versions.v1_3, "ignoreInputValidation", false); + HttpAction2.JsonTypeName = "Action.Http"; + __decorate([ + (0, serialization_1.property)(HttpAction2.urlProperty) + ], HttpAction2.prototype, "_url", void 0); + __decorate([ + (0, serialization_1.property)(HttpAction2.bodyProperty) + ], HttpAction2.prototype, "_body", void 0); + __decorate([ + (0, serialization_1.property)(HttpAction2.methodProperty) + ], HttpAction2.prototype, "method", void 0); + __decorate([ + (0, serialization_1.property)(HttpAction2.headersProperty) + ], HttpAction2.prototype, "headers", void 0); + __decorate([ + (0, serialization_1.property)(HttpAction2.ignoreInputValidationProperty) + ], HttpAction2.prototype, "_ignoreInputValidation", void 0); + return HttpAction2; + }(Action) + ); + exports.HttpAction = HttpAction; + var ShowCardAction = ( + /** @class */ + function(_super) { + __extends(ShowCardAction2, _super); + function ShowCardAction2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.card = new InlineAdaptiveCard(); + return _this; + } + ShowCardAction2.prototype.updateCssClasses = function() { + _super.prototype.updateCssClasses.call(this); + if (this.renderedElement) { + var effectiveHostConfig = this.parent ? this.parent.hostConfig : host_config_1.defaultHostConfig; + this.renderedElement.classList.add(effectiveHostConfig.makeCssClassName("expandable")); + this.renderedElement.setAttribute("aria-expanded", (this.state === 1).toString()); + } + }; + ShowCardAction2.prototype.internalParse = function(source, context) { + _super.prototype.internalParse.call(this, source, context); + var jsonCard = source["card"]; + if (jsonCard) { + this.card.parse(jsonCard, context); + } else { + context.logParseEvent(this, Enums.ValidationEvent.PropertyCantBeNull, strings_1.Strings.errors.showCardMustHaveCard()); + } + }; + ShowCardAction2.prototype.internalToJSON = function(target, context) { + _super.prototype.internalToJSON.call(this, target, context); + if (this.card) { + context.serializeValue(target, "card", this.card.toJSON(context)); + } + }; + ShowCardAction2.prototype.raiseExecuteActionEvent = function() { + if (this.hostConfig.actions.showCard.actionMode === Enums.ShowCardActionMode.Popup) { + _super.prototype.raiseExecuteActionEvent.call(this); + } + }; + ShowCardAction2.prototype.releaseDOMResources = function() { + _super.prototype.releaseDOMResources.call(this); + this.card.releaseDOMResources(); + }; + ShowCardAction2.prototype.getJsonTypeName = function() { + return ShowCardAction2.JsonTypeName; + }; + ShowCardAction2.prototype.internalValidateProperties = function(context) { + _super.prototype.internalValidateProperties.call(this, context); + this.card.internalValidateProperties(context); + }; + ShowCardAction2.prototype.setParent = function(value) { + _super.prototype.setParent.call(this, value); + this.card.setParent(value); + }; + ShowCardAction2.prototype.getAllInputs = function(processActions) { + if (processActions === void 0) { + processActions = true; + } + return this.card.getAllInputs(processActions); + }; + ShowCardAction2.prototype.getAllActions = function() { + var result = _super.prototype.getAllActions.call(this); + result.push.apply(result, this.card.getAllActions()); + return result; + }; + ShowCardAction2.prototype.getResourceInformation = function() { + var result = _super.prototype.getResourceInformation.call(this); + result.push.apply(result, this.card.getResourceInformation()); + return result; + }; + ShowCardAction2.prototype.getActionById = function(id) { + var result = _super.prototype.getActionById.call(this, id); + if (!result) { + result = this.card.getActionById(id); + } + return result; + }; + ShowCardAction2.JsonTypeName = "Action.ShowCard"; + return ShowCardAction2; + }(Action) + ); + exports.ShowCardAction = ShowCardAction; + var OverflowAction = ( + /** @class */ + function(_super) { + __extends(OverflowAction2, _super); + function OverflowAction2(actions) { + var _this = _super.call(this) || this; + _this._actions = actions; + _this.title = strings_1.Strings.defaults.overflowButtonText(); + return _this; + } + OverflowAction2.prototype.getActions = function() { + return this._actions; + }; + OverflowAction2.prototype.getAllActions = function() { + var result = _super.prototype.getAllActions.call(this); + result.push.apply(result, this._actions); + return result; + }; + OverflowAction2.prototype.getJsonTypeName = function() { + return ShowCardAction.JsonTypeName; + }; + OverflowAction2.prototype.execute = function() { + var _this = this; + var _a; + var shouldDisplayPopupMenu = !raiseDisplayOverflowActionMenuEvent(this, this.renderedElement); + if (shouldDisplayPopupMenu && this.renderedElement) { + var contextMenu_1 = new controls_1.PopupMenu(); + contextMenu_1.hostConfig = this.hostConfig; + var _loop_2 = function(i2) { + var menuItem = new controls_1.MenuItem(i2.toString(), (_a = this_1._actions[i2].title) !== null && _a !== void 0 ? _a : ""); + menuItem.isEnabled = this_1._actions[i2].isEnabled; + menuItem.onClick = function() { + var actionToExecute = _this._actions[i2]; + contextMenu_1.closePopup(false); + if (actionToExecute.isEnabled) { + actionToExecute.execute(); + } + }; + contextMenu_1.items.add(menuItem); + }; + var this_1 = this; + for (var i = 0; i < this._actions.length; i++) { + _loop_2(i); + } + contextMenu_1.popup(this.renderedElement); + } + }; + OverflowAction2.JsonTypeName = "Action.Overflow"; + return OverflowAction2; + }(Action) + ); + var ActionCollection = ( + /** @class */ + function() { + function ActionCollection2(owner) { + this._items = []; + this._renderedActions = []; + this._owner = owner; + } + ActionCollection2.prototype.isActionAllowed = function(action) { + var forbiddenTypes = this._owner.getForbiddenActionTypes(); + if (forbiddenTypes) { + for (var _i = 0, forbiddenTypes_1 = forbiddenTypes; _i < forbiddenTypes_1.length; _i++) { + var forbiddenType = forbiddenTypes_1[_i]; + if (action.constructor === forbiddenType) { + return false; + } + } + } + return true; + }; + ActionCollection2.prototype.refreshContainer = function() { + clearElement(this._actionCardContainer); + if (!this._actionCard) { + this._actionCardContainer.style.marginTop = "0px"; + return; + } + this._actionCardContainer.style.marginTop = this.renderedActionCount > 0 ? this._owner.hostConfig.actions.showCard.inlineTopMargin + "px" : "0px"; + var padding = this._owner.getEffectivePadding(); + this._owner.getImmediateSurroundingPadding(padding); + var physicalPadding = this._owner.hostConfig.paddingDefinitionToSpacingDefinition(padding); + if (this._actionCard) { + this._actionCard.style.paddingLeft = physicalPadding.left + "px"; + this._actionCard.style.paddingRight = physicalPadding.right + "px"; + this._actionCard.style.marginLeft = "-" + physicalPadding.left + "px"; + this._actionCard.style.marginRight = "-" + physicalPadding.right + "px"; + if (physicalPadding.bottom !== 0 && !this._owner.isDesignMode()) { + this._actionCard.style.paddingBottom = physicalPadding.bottom + "px"; + this._actionCard.style.marginBottom = "-" + physicalPadding.bottom + "px"; + } + Utils.appendChild(this._actionCardContainer, this._actionCard); + } + }; + ActionCollection2.prototype.layoutChanged = function() { + this._owner.getRootElement().updateLayout(); + }; + ActionCollection2.prototype.showActionCard = function(action, suppressStyle, raiseEvent) { + if (suppressStyle === void 0) { + suppressStyle = false; + } + if (raiseEvent === void 0) { + raiseEvent = true; + } + action.card.suppressStyle = suppressStyle; + var renderedCard = action.card.renderedElement && !this._owner.isDesignMode() ? action.card.renderedElement : action.card.render(); + this._actionCard = renderedCard; + this._expandedAction = action; + this.refreshContainer(); + if (raiseEvent) { + this.layoutChanged(); + raiseInlineCardExpandedEvent(action, true); + } + }; + ActionCollection2.prototype.collapseExpandedAction = function() { + for (var _i = 0, _a = this._renderedActions; _i < _a.length; _i++) { + var action = _a[_i]; + action.state = 0; + } + var previouslyExpandedAction = this._expandedAction; + this._expandedAction = void 0; + this._actionCard = void 0; + this.refreshContainer(); + if (previouslyExpandedAction) { + this.layoutChanged(); + raiseInlineCardExpandedEvent(previouslyExpandedAction, false); + } + }; + ActionCollection2.prototype.expandShowCardAction = function(action, raiseEvent) { + var _this = this; + var afterSelectedAction = false; + for (var _i = 0, _a = this._renderedActions; _i < _a.length; _i++) { + var renderedAction = _a[_i]; + if (this._owner.hostConfig.actions.actionsOrientation == Enums.Orientation.Horizontal && afterSelectedAction) { + renderedAction.isFocusable = false; + } + if (renderedAction !== action) { + renderedAction.state = 2; + } else { + renderedAction.state = 1; + afterSelectedAction = true; + if (renderedAction.renderedElement) { + renderedAction.renderedElement.onblur = function(_e) { + for (var _i2 = 0, _a2 = _this._renderedActions; _i2 < _a2.length; _i2++) { + var ra = _a2[_i2]; + ra.isFocusable = true; + } + }; + } + } + } + this.showActionCard(action, !(this._owner.isAtTheVeryLeft() && this._owner.isAtTheVeryRight()), raiseEvent); + }; + ActionCollection2.prototype.releaseDOMResources = function() { + for (var _i = 0, _a = this._renderedActions; _i < _a.length; _i++) { + var action = _a[_i]; + action.releaseDOMResources(); + } + }; + ActionCollection2.prototype.actionExecuted = function(action) { + if (!(action instanceof ShowCardAction)) { + this.collapseExpandedAction(); + } else { + if (action === this._expandedAction) { + this.collapseExpandedAction(); + } else if (this._owner.hostConfig.actions.showCard.actionMode === Enums.ShowCardActionMode.Inline) { + this.expandShowCardAction(action, true); + } + } + }; + ActionCollection2.prototype.parse = function(source, context) { + this.clear(); + if (Array.isArray(source)) { + for (var _i = 0, source_1 = source; _i < source_1.length; _i++) { + var jsonAction = source_1[_i]; + var forbiddenActions = []; + if (this._owner instanceof ContainerWithActions) { + forbiddenActions = this._owner.getForbiddenActionNames(); + } + var action = context.parseAction(this._owner, jsonAction, forbiddenActions, !this._owner.isDesignMode()); + if (action) { + this.addAction(action); + } + } + } + }; + ActionCollection2.prototype.toJSON = function(target, propertyName, context) { + context.serializeArray(target, propertyName, this._items); + }; + ActionCollection2.prototype.getActionAt = function(id) { + return this._items[id]; + }; + ActionCollection2.prototype.getActionCount = function() { + return this._items.length; + }; + ActionCollection2.prototype.getActionById = function(id) { + var result = void 0; + for (var _i = 0, _a = this._items; _i < _a.length; _i++) { + var item = _a[_i]; + result = item.getActionById(id); + if (result) { + break; + } + } + return result; + }; + ActionCollection2.prototype.validateProperties = function(context) { + if (this._owner.hostConfig.actions.maxActions && this._items.length > this._owner.hostConfig.actions.maxActions) { + context.addFailure(this._owner, Enums.ValidationEvent.TooManyActions, strings_1.Strings.errors.tooManyActions(this._owner.hostConfig.actions.maxActions)); + } + if (this._items.length > 0 && !this._owner.hostConfig.supportsInteractivity) { + context.addFailure(this._owner, Enums.ValidationEvent.InteractivityNotAllowed, strings_1.Strings.errors.interactivityNotAllowed()); + } + for (var _i = 0, _a = this._items; _i < _a.length; _i++) { + var item = _a[_i]; + if (!this.isActionAllowed(item)) { + context.addFailure(this._owner, Enums.ValidationEvent.ActionTypeNotAllowed, strings_1.Strings.errors.actionTypeNotAllowed(item.getJsonTypeName())); + } + item.internalValidateProperties(context); + } + }; + ActionCollection2.prototype.render = function(orientation) { + var hostConfig = this._owner.hostConfig; + if (!hostConfig.supportsInteractivity) { + return void 0; + } + var element = document.createElement("div"); + var maxActions = hostConfig.actions.maxActions ? Math.min(hostConfig.actions.maxActions, this._items.length) : this._items.length; + this._actionCardContainer = document.createElement("div"); + this._renderedActions = []; + if (hostConfig.actions.preExpandSingleShowCardAction && maxActions === 1 && this._items[0] instanceof ShowCardAction && this.isActionAllowed(this._items[0])) { + this.showActionCard(this._items[0], true); + this._renderedActions.push(this._items[0]); + } else { + var buttonStrip = document.createElement("div"); + buttonStrip.className = hostConfig.makeCssClassName("ac-actionSet"); + buttonStrip.style.display = "flex"; + if (orientation === Enums.Orientation.Horizontal) { + buttonStrip.style.flexDirection = "row"; + if (this._owner.horizontalAlignment && hostConfig.actions.actionAlignment !== Enums.ActionAlignment.Stretch) { + switch (this._owner.horizontalAlignment) { + case Enums.HorizontalAlignment.Center: + buttonStrip.style.justifyContent = "center"; + break; + case Enums.HorizontalAlignment.Right: + buttonStrip.style.justifyContent = "flex-end"; + break; + default: + buttonStrip.style.justifyContent = "flex-start"; + break; + } + } else { + switch (hostConfig.actions.actionAlignment) { + case Enums.ActionAlignment.Center: + buttonStrip.style.justifyContent = "center"; + break; + case Enums.ActionAlignment.Right: + buttonStrip.style.justifyContent = "flex-end"; + break; + default: + buttonStrip.style.justifyContent = "flex-start"; + break; + } + } + } else { + buttonStrip.style.flexDirection = "column"; + if (this._owner.horizontalAlignment && hostConfig.actions.actionAlignment !== Enums.ActionAlignment.Stretch) { + switch (this._owner.horizontalAlignment) { + case Enums.HorizontalAlignment.Center: + buttonStrip.style.alignItems = "center"; + break; + case Enums.HorizontalAlignment.Right: + buttonStrip.style.alignItems = "flex-end"; + break; + default: + buttonStrip.style.alignItems = "flex-start"; + break; + } + } else { + switch (hostConfig.actions.actionAlignment) { + case Enums.ActionAlignment.Center: + buttonStrip.style.alignItems = "center"; + break; + case Enums.ActionAlignment.Right: + buttonStrip.style.alignItems = "flex-end"; + break; + case Enums.ActionAlignment.Stretch: + buttonStrip.style.alignItems = "stretch"; + break; + default: + buttonStrip.style.alignItems = "flex-start"; + break; + } + } + } + var allowedActions = this._items.filter(this.isActionAllowed.bind(this)); + var primaryActions_1 = []; + var secondaryActions_1 = []; + if (!this._owner.isDesignMode()) { + allowedActions.forEach(function(action2) { + return action2.mode === Enums.ActionMode.Secondary ? secondaryActions_1.push(action2) : primaryActions_1.push(action2); + }); + var overflowPrimaryActions = primaryActions_1.splice(hostConfig.actions.maxActions); + if (shared_1.GlobalSettings.allowMoreThanMaxActionsInOverflowMenu) { + secondaryActions_1.push.apply(secondaryActions_1, overflowPrimaryActions); + } + var shouldRenderOverflowActionButton = true; + if (secondaryActions_1.length > 0) { + if (!this._overflowAction) { + this._overflowAction = new OverflowAction(secondaryActions_1); + this._overflowAction.setParent(this._owner); + this._overflowAction["_actionCollection"] = this; + } + var isRootAction = this._owner instanceof AdaptiveCard && !this._owner.parent; + shouldRenderOverflowActionButton = !raiseRenderOverflowActionsEvent(this._overflowAction, isRootAction); + } + if (this._overflowAction && shouldRenderOverflowActionButton) { + primaryActions_1.push(this._overflowAction); + } + } else { + primaryActions_1 = allowedActions; + } + for (var i = 0; i < primaryActions_1.length; i++) { + var action = primaryActions_1[i]; + action.render(); + if (action.renderedElement) { + if (hostConfig.actions.actionsOrientation === Enums.Orientation.Horizontal && hostConfig.actions.actionAlignment === Enums.ActionAlignment.Stretch) { + action.renderedElement.style.flex = "0 1 100%"; + } else { + action.renderedElement.style.flex = "0 1 auto"; + } + buttonStrip.appendChild(action.renderedElement); + this._renderedActions.push(action); + if (i < primaryActions_1.length - 1 && hostConfig.actions.buttonSpacing > 0) { + var spacer = document.createElement("div"); + if (orientation === Enums.Orientation.Horizontal) { + spacer.style.flex = "0 0 auto"; + spacer.style.width = hostConfig.actions.buttonSpacing + "px"; + } else { + spacer.style.height = hostConfig.actions.buttonSpacing + "px"; + } + Utils.appendChild(buttonStrip, spacer); + } + } + } + var buttonStripContainer = document.createElement("div"); + buttonStripContainer.style.overflow = "hidden"; + buttonStripContainer.appendChild(buttonStrip); + Utils.appendChild(element, buttonStripContainer); + } + Utils.appendChild(element, this._actionCardContainer); + for (var _i = 0, _a = this._renderedActions; _i < _a.length; _i++) { + var renderedAction = _a[_i]; + if (renderedAction.state === 1) { + this.expandShowCardAction(renderedAction, false); + break; + } + } + return this._renderedActions.length > 0 ? element : void 0; + }; + ActionCollection2.prototype.addAction = function(action) { + if (!action) { + throw new Error("The action parameter cannot be null."); + } + if ((!action.parent || action.parent === this._owner) && this._items.indexOf(action) < 0) { + this._items.push(action); + if (!action.parent) { + action.setParent(this._owner); + } + action["_actionCollection"] = this; + } else { + throw new Error(strings_1.Strings.errors.actionAlreadyParented()); + } + }; + ActionCollection2.prototype.removeAction = function(action) { + if (this.expandedAction && this._expandedAction === action) { + this.collapseExpandedAction(); + } + var actionIndex = this._items.indexOf(action); + if (actionIndex >= 0) { + this._items.splice(actionIndex, 1); + action.setParent(void 0); + action["_actionCollection"] = void 0; + for (var i = 0; i < this._renderedActions.length; i++) { + if (this._renderedActions[i] === action) { + this._renderedActions.splice(i, 1); + break; + } + } + return true; + } + return false; + }; + ActionCollection2.prototype.clear = function() { + this._items = []; + this._renderedActions = []; + this._expandedAction = void 0; + }; + ActionCollection2.prototype.getAllInputs = function(processActions) { + if (processActions === void 0) { + processActions = true; + } + var result = []; + if (processActions) { + for (var _i = 0, _a = this._items; _i < _a.length; _i++) { + var action = _a[_i]; + result.push.apply(result, action.getAllInputs()); + } + } + return result; + }; + ActionCollection2.prototype.getResourceInformation = function() { + var result = []; + for (var _i = 0, _a = this._items; _i < _a.length; _i++) { + var action = _a[_i]; + result.push.apply(result, action.getResourceInformation()); + } + return result; + }; + Object.defineProperty(ActionCollection2.prototype, "renderedActionCount", { + get: function() { + return this._renderedActions.length; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(ActionCollection2.prototype, "expandedAction", { + get: function() { + return this._expandedAction; + }, + enumerable: false, + configurable: true + }); + return ActionCollection2; + }() + ); + var ActionSet = ( + /** @class */ + function(_super) { + __extends(ActionSet2, _super); + function ActionSet2() { + var _this = _super.call(this) || this; + _this._actionCollection = new ActionCollection(_this); + return _this; + } + ActionSet2.prototype.internalParse = function(source, context) { + _super.prototype.internalParse.call(this, source, context); + this._actionCollection.parse(source["actions"], context); + }; + ActionSet2.prototype.internalToJSON = function(target, context) { + _super.prototype.internalToJSON.call(this, target, context); + this._actionCollection.toJSON(target, "actions", context); + }; + ActionSet2.prototype.internalRender = function() { + return this._actionCollection.render(this.orientation !== void 0 ? this.orientation : this.hostConfig.actions.actionsOrientation); + }; + ActionSet2.prototype.releaseDOMResources = function() { + _super.prototype.releaseDOMResources.call(this); + this._actionCollection.releaseDOMResources(); + }; + ActionSet2.prototype.isBleedingAtBottom = function() { + if (this._actionCollection.renderedActionCount === 0) { + return _super.prototype.isBleedingAtBottom.call(this); + } else { + if (this._actionCollection.getActionCount() === 1) { + return this._actionCollection.expandedAction !== void 0 && !this.hostConfig.actions.preExpandSingleShowCardAction; + } else { + return this._actionCollection.expandedAction !== void 0; + } + } + }; + ActionSet2.prototype.getJsonTypeName = function() { + return "ActionSet"; + }; + ActionSet2.prototype.getActionCount = function() { + return this._actionCollection.getActionCount(); + }; + ActionSet2.prototype.getActionAt = function(index) { + if (index >= 0 && index < this.getActionCount()) { + return this._actionCollection.getActionAt(index); + } else { + return _super.prototype.getActionAt.call(this, index); + } + }; + ActionSet2.prototype.getActionById = function(id) { + var result = this._actionCollection.getActionById(id); + return result ? result : _super.prototype.getActionById.call(this, id); + }; + ActionSet2.prototype.getAllActions = function() { + var result = _super.prototype.getAllActions.call(this); + for (var i = 0; i < this.getActionCount(); i++) { + var action = this.getActionAt(i); + if (action) { + result.push(action); + } + } + return result; + }; + ActionSet2.prototype.internalValidateProperties = function(context) { + _super.prototype.internalValidateProperties.call(this, context); + this._actionCollection.validateProperties(context); + }; + ActionSet2.prototype.addAction = function(action) { + this._actionCollection.addAction(action); + }; + ActionSet2.prototype.getAllInputs = function(processActions) { + if (processActions === void 0) { + processActions = true; + } + return processActions ? this._actionCollection.getAllInputs() : []; + }; + ActionSet2.prototype.getResourceInformation = function() { + return this._actionCollection.getResourceInformation(); + }; + ActionSet2.prototype.findDOMNodeOwner = function(node) { + var target = void 0; + for (var i = 0; i < this.getActionCount(); i++) { + var action = this.getActionAt(i); + if (action) { + target = action.findDOMNodeOwner(node); + if (target) { + return target; + } + } + } + return _super.prototype.findDOMNodeOwner.call(this, node); + }; + Object.defineProperty(ActionSet2.prototype, "isInteractive", { + get: function() { + return true; + }, + enumerable: false, + configurable: true + }); + ActionSet2.orientationProperty = new serialization_1.EnumProperty(serialization_1.Versions.v1_1, "orientation", Enums.Orientation); + __decorate([ + (0, serialization_1.property)(ActionSet2.orientationProperty) + ], ActionSet2.prototype, "orientation", void 0); + return ActionSet2; + }(CardElement) + ); + exports.ActionSet = ActionSet; + var ContainerStyleProperty = ( + /** @class */ + function(_super) { + __extends(ContainerStyleProperty2, _super); + function ContainerStyleProperty2(targetVersion, name, defaultValue, onGetInitialValue) { + var _this = _super.call(this, targetVersion, name, [ + { value: Enums.ContainerStyle.Default }, + { value: Enums.ContainerStyle.Emphasis }, + { targetVersion: serialization_1.Versions.v1_2, value: Enums.ContainerStyle.Accent }, + { targetVersion: serialization_1.Versions.v1_2, value: Enums.ContainerStyle.Good }, + { targetVersion: serialization_1.Versions.v1_2, value: Enums.ContainerStyle.Attention }, + { targetVersion: serialization_1.Versions.v1_2, value: Enums.ContainerStyle.Warning } + ], defaultValue, onGetInitialValue) || this; + _this.targetVersion = targetVersion; + _this.name = name; + _this.defaultValue = defaultValue; + _this.onGetInitialValue = onGetInitialValue; + return _this; + } + return ContainerStyleProperty2; + }(serialization_1.ValueSetProperty) + ); + exports.ContainerStyleProperty = ContainerStyleProperty; + var StylableCardElementContainer = ( + /** @class */ + function(_super) { + __extends(StylableCardElementContainer2, _super); + function StylableCardElementContainer2() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(StylableCardElementContainer2.prototype, "style", { + get: function() { + if (this.allowCustomStyle) { + var style = this.getValue(StylableCardElementContainer2.styleProperty); + if (style && this.hostConfig.containerStyles.getStyleByName(style)) { + return style; + } + } + return void 0; + }, + set: function(value) { + this.setValue(StylableCardElementContainer2.styleProperty, value); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(StylableCardElementContainer2.prototype, "allowCustomStyle", { + //#endregion + get: function() { + return true; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(StylableCardElementContainer2.prototype, "hasExplicitStyle", { + get: function() { + return this.getValue(StylableCardElementContainer2.styleProperty) !== void 0; + }, + enumerable: false, + configurable: true + }); + StylableCardElementContainer2.prototype.applyBorder = function() { + }; + StylableCardElementContainer2.prototype.applyBackground = function() { + if (this.renderedElement) { + var styleDefinition = this.hostConfig.containerStyles.getStyleByName(this.style, this.hostConfig.containerStyles.getStyleByName(this.defaultStyle)); + if (styleDefinition.backgroundColor) { + var bgColor = Utils.stringToCssColor(styleDefinition.backgroundColor); + if (bgColor) { + this.renderedElement.style.backgroundColor = bgColor; + } + } + } + }; + StylableCardElementContainer2.prototype.applyPadding = function() { + _super.prototype.applyPadding.call(this); + if (!this.renderedElement) { + return; + } + var physicalPadding = new shared_1.SpacingDefinition(); + if (this.getEffectivePadding()) { + physicalPadding = this.hostConfig.paddingDefinitionToSpacingDefinition(this.getEffectivePadding()); + } + this.renderedElement.style.paddingTop = physicalPadding.top + "px"; + this.renderedElement.style.paddingRight = physicalPadding.right + "px"; + this.renderedElement.style.paddingBottom = physicalPadding.bottom + "px"; + this.renderedElement.style.paddingLeft = physicalPadding.left + "px"; + if (this.isBleeding()) { + var padding = new shared_1.PaddingDefinition(); + this.getImmediateSurroundingPadding(padding); + var surroundingPadding = this.hostConfig.paddingDefinitionToSpacingDefinition(padding); + this.renderedElement.style.marginRight = "-" + surroundingPadding.right + "px"; + this.renderedElement.style.marginLeft = "-" + surroundingPadding.left + "px"; + if (!this.isDesignMode()) { + this.renderedElement.style.marginTop = "-" + surroundingPadding.top + "px"; + this.renderedElement.style.marginBottom = "-" + surroundingPadding.bottom + "px"; + } + if (this.separatorElement && this.separatorOrientation === Enums.Orientation.Horizontal) { + this.separatorElement.style.marginLeft = "-" + surroundingPadding.left + "px"; + this.separatorElement.style.marginRight = "-" + surroundingPadding.right + "px"; + } + } else { + this.renderedElement.style.marginRight = "0"; + this.renderedElement.style.marginLeft = "0"; + this.renderedElement.style.marginTop = "0"; + this.renderedElement.style.marginBottom = "0"; + if (this.separatorElement && this.separatorOrientation === Enums.Orientation.Horizontal) { + this.separatorElement.style.marginRight = "0"; + this.separatorElement.style.marginLeft = "0"; + } + } + }; + StylableCardElementContainer2.prototype.getHasBackground = function(ignoreBackgroundImages) { + if (ignoreBackgroundImages === void 0) { + ignoreBackgroundImages = false; + } + var currentElement = this.parent; + while (currentElement) { + var currentElementHasBackgroundImage = false; + if (ignoreBackgroundImages) { + currentElementHasBackgroundImage = false; + } else { + currentElementHasBackgroundImage = currentElement instanceof Container ? currentElement.backgroundImage.isValid() : false; + } + if (currentElement instanceof StylableCardElementContainer2) { + if (this.hasExplicitStyle && (currentElement.getEffectiveStyle() !== this.getEffectiveStyle() || currentElementHasBackgroundImage)) { + return true; + } + } + currentElement = currentElement.parent; + } + return false; + }; + StylableCardElementContainer2.prototype.getDefaultPadding = function() { + return this.getHasBackground() || this.getHasBorder() ? new shared_1.PaddingDefinition(Enums.Spacing.Padding, Enums.Spacing.Padding, Enums.Spacing.Padding, Enums.Spacing.Padding) : _super.prototype.getDefaultPadding.call(this); + }; + StylableCardElementContainer2.prototype.internalValidateProperties = function(context) { + _super.prototype.internalValidateProperties.call(this, context); + var explicitStyle = this.getValue(StylableCardElementContainer2.styleProperty); + if (explicitStyle !== void 0) { + var styleDefinition = this.hostConfig.containerStyles.getStyleByName(explicitStyle); + if (!styleDefinition) { + context.addFailure(this, Enums.ValidationEvent.InvalidPropertyValue, strings_1.Strings.errors.invalidPropertyValue(explicitStyle, "style")); + } + } + }; + StylableCardElementContainer2.prototype.render = function() { + var renderedElement = _super.prototype.render.call(this); + if (renderedElement && this.getHasBackground()) { + this.applyBackground(); + } + this.applyBorder(); + return renderedElement; + }; + StylableCardElementContainer2.prototype.getEffectiveStyle = function() { + var effectiveStyle = this.style; + return effectiveStyle ? effectiveStyle : _super.prototype.getEffectiveStyle.call(this); + }; + StylableCardElementContainer2.styleProperty = new ContainerStyleProperty(serialization_1.Versions.v1_0, "style"); + __decorate([ + (0, serialization_1.property)(StylableCardElementContainer2.styleProperty) + ], StylableCardElementContainer2.prototype, "style", null); + return StylableCardElementContainer2; + }(CardElementContainer) + ); + exports.StylableCardElementContainer = StylableCardElementContainer; + var ContainerBase = ( + /** @class */ + function(_super) { + __extends(ContainerBase2, _super); + function ContainerBase2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this._bleed = false; + return _this; + } + ContainerBase2.prototype.adjustRenderedElementSize = function(renderedElement) { + _super.prototype.adjustRenderedElementSize.call(this, renderedElement); + if (this.minPixelHeight) { + renderedElement.style.minHeight = this.minPixelHeight + "px"; + } + }; + ContainerBase2.prototype.getHasExpandedAction = function() { + return false; + }; + ContainerBase2.prototype.getBleed = function() { + return this._bleed; + }; + ContainerBase2.prototype.setBleed = function(value) { + this._bleed = value; + }; + Object.defineProperty(ContainerBase2.prototype, "renderedActionCount", { + get: function() { + return 0; + }, + enumerable: false, + configurable: true + }); + ContainerBase2.prototype.isBleeding = function() { + return (this.getHasBackground() || this.hostConfig.alwaysAllowBleed) && this.getBleed(); + }; + ContainerBase2.bleedProperty = new serialization_1.BoolProperty(serialization_1.Versions.v1_2, "bleed", false); + ContainerBase2.minHeightProperty = new serialization_1.PixelSizeProperty(serialization_1.Versions.v1_2, "minHeight"); + __decorate([ + (0, serialization_1.property)(ContainerBase2.bleedProperty) + ], ContainerBase2.prototype, "_bleed", void 0); + __decorate([ + (0, serialization_1.property)(ContainerBase2.minHeightProperty) + ], ContainerBase2.prototype, "minPixelHeight", void 0); + return ContainerBase2; + }(StylableCardElementContainer) + ); + exports.ContainerBase = ContainerBase; + var BackgroundImage = ( + /** @class */ + function(_super) { + __extends(BackgroundImage2, _super); + function BackgroundImage2() { + return _super !== null && _super.apply(this, arguments) || this; + } + BackgroundImage2.prototype.getSchemaKey = function() { + return "BackgroundImage"; + }; + BackgroundImage2.prototype.internalParse = function(source, context) { + if (typeof source === "string") { + this.resetDefaultValues(); + this.url = source; + } else { + return _super.prototype.internalParse.call(this, source, context); + } + }; + BackgroundImage2.prototype.apply = function(element) { + if (this.url && element.renderedElement) { + element.renderedElement.style.backgroundImage = "url('" + element.preProcessPropertyValue(BackgroundImage2.urlProperty, this.url) + "')"; + switch (this.fillMode) { + case Enums.FillMode.Repeat: + element.renderedElement.style.backgroundRepeat = "repeat"; + break; + case Enums.FillMode.RepeatHorizontally: + element.renderedElement.style.backgroundRepeat = "repeat-x"; + break; + case Enums.FillMode.RepeatVertically: + element.renderedElement.style.backgroundRepeat = "repeat-y"; + break; + case Enums.FillMode.Cover: + default: + element.renderedElement.style.backgroundRepeat = "no-repeat"; + element.renderedElement.style.backgroundSize = "cover"; + break; + } + switch (this.horizontalAlignment) { + case Enums.HorizontalAlignment.Left: + break; + case Enums.HorizontalAlignment.Center: + element.renderedElement.style.backgroundPositionX = "center"; + break; + case Enums.HorizontalAlignment.Right: + element.renderedElement.style.backgroundPositionX = "right"; + break; + } + switch (this.verticalAlignment) { + case Enums.VerticalAlignment.Top: + break; + case Enums.VerticalAlignment.Center: + element.renderedElement.style.backgroundPositionY = "center"; + break; + case Enums.VerticalAlignment.Bottom: + element.renderedElement.style.backgroundPositionY = "bottom"; + break; + } + } + }; + BackgroundImage2.prototype.isValid = function() { + return this.url ? true : false; + }; + BackgroundImage2.urlProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "url"); + BackgroundImage2.fillModeProperty = new serialization_1.EnumProperty(serialization_1.Versions.v1_2, "fillMode", Enums.FillMode, Enums.FillMode.Cover); + BackgroundImage2.horizontalAlignmentProperty = new serialization_1.EnumProperty(serialization_1.Versions.v1_2, "horizontalAlignment", Enums.HorizontalAlignment, Enums.HorizontalAlignment.Left); + BackgroundImage2.verticalAlignmentProperty = new serialization_1.EnumProperty(serialization_1.Versions.v1_2, "verticalAlignment", Enums.VerticalAlignment, Enums.VerticalAlignment.Top); + __decorate([ + (0, serialization_1.property)(BackgroundImage2.urlProperty) + ], BackgroundImage2.prototype, "url", void 0); + __decorate([ + (0, serialization_1.property)(BackgroundImage2.fillModeProperty) + ], BackgroundImage2.prototype, "fillMode", void 0); + __decorate([ + (0, serialization_1.property)(BackgroundImage2.horizontalAlignmentProperty) + ], BackgroundImage2.prototype, "horizontalAlignment", void 0); + __decorate([ + (0, serialization_1.property)(BackgroundImage2.verticalAlignmentProperty) + ], BackgroundImage2.prototype, "verticalAlignment", void 0); + return BackgroundImage2; + }(serialization_1.SerializableObject) + ); + exports.BackgroundImage = BackgroundImage; + var Container = ( + /** @class */ + function(_super) { + __extends(Container2, _super); + function Container2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this._items = []; + _this._renderedItems = []; + return _this; + } + Object.defineProperty(Container2.prototype, "backgroundImage", { + get: function() { + return this.getValue(Container2.backgroundImageProperty); + }, + enumerable: false, + configurable: true + }); + Container2.prototype.insertItemAt = function(item, index, forceInsert) { + if (!item.parent || forceInsert) { + if (item.isStandalone) { + if (index < 0 || index >= this._items.length) { + this._items.push(item); + } else { + this._items.splice(index, 0, item); + } + item.setParent(this); + } else { + throw new Error(strings_1.Strings.errors.elementTypeNotStandalone(item.getJsonTypeName())); + } + } else { + throw new Error(strings_1.Strings.errors.elementAlreadyParented()); + } + }; + Container2.prototype.getItemsCollectionPropertyName = function() { + return "items"; + }; + Container2.prototype.applyBackground = function() { + if (this.backgroundImage.isValid() && this.renderedElement) { + this.backgroundImage.apply(this); + } + _super.prototype.applyBackground.call(this); + }; + Container2.prototype.applyRTL = function(element) { + if (this.rtl !== void 0) { + element.dir = this.rtl ? "rtl" : "ltr"; + } + }; + Container2.prototype.internalRender = function() { + this._renderedItems = []; + var hostConfig = this.hostConfig; + var element = document.createElement("div"); + this.applyRTL(element); + element.classList.add(hostConfig.makeCssClassName("ac-container")); + element.style.display = "flex"; + element.style.flexDirection = "column"; + if (shared_1.GlobalSettings.useAdvancedCardBottomTruncation) { + element.style.minHeight = "-webkit-min-content"; + } + switch (this.getEffectiveVerticalContentAlignment()) { + case Enums.VerticalAlignment.Center: + element.style.justifyContent = "center"; + break; + case Enums.VerticalAlignment.Bottom: + element.style.justifyContent = "flex-end"; + break; + default: + element.style.justifyContent = "flex-start"; + break; + } + if (this._items.length > 0) { + for (var _i = 0, _a = this._items; _i < _a.length; _i++) { + var item = _a[_i]; + var renderedItem = this.isElementAllowed(item) ? item.render() : void 0; + if (renderedItem) { + if (this._renderedItems.length > 0 && item.separatorElement) { + item.separatorElement.style.flex = "0 0 auto"; + Utils.appendChild(element, item.separatorElement); + } + Utils.appendChild(element, renderedItem); + this._renderedItems.push(item); + } + } + } else { + if (this.isDesignMode()) { + var placeholderElement = this.createPlaceholderElement(); + placeholderElement.style.width = "100%"; + placeholderElement.style.height = "100%"; + element.appendChild(placeholderElement); + } + } + return element; + }; + Container2.prototype.truncateOverflow = function(maxHeight) { + if (this.renderedElement) { + var boundary_1 = this.renderedElement.offsetTop + maxHeight + 1; + var handleElement_1 = function(cardElement) { + var elt = cardElement.renderedElement; + if (elt) { + switch (Utils.getFitStatus(elt, boundary_1)) { + case Enums.ContainerFitStatus.FullyInContainer: + var sizeChanged = cardElement["resetOverflow"](); + if (sizeChanged) { + handleElement_1(cardElement); + } + break; + case Enums.ContainerFitStatus.Overflowing: + var containerMaxHeight = boundary_1 - elt.offsetTop; + cardElement["handleOverflow"](containerMaxHeight); + break; + case Enums.ContainerFitStatus.FullyOutOfContainer: + cardElement["handleOverflow"](0); + break; + } + } + }; + for (var _i = 0, _a = this._items; _i < _a.length; _i++) { + var item = _a[_i]; + handleElement_1(item); + } + return true; + } + return false; + }; + Container2.prototype.undoOverflowTruncation = function() { + for (var _i = 0, _a = this._items; _i < _a.length; _i++) { + var item = _a[_i]; + item["resetOverflow"](); + } + }; + Container2.prototype.getHasBackground = function(ignoreBackgroundImages) { + if (ignoreBackgroundImages === void 0) { + ignoreBackgroundImages = false; + } + var result = ignoreBackgroundImages ? false : this.backgroundImage.isValid(); + return result || _super.prototype.getHasBackground.call(this, ignoreBackgroundImages); + }; + Container2.prototype.canHostSingletons = function() { + return false; + }; + Container2.prototype.internalParse = function(source, context) { + _super.prototype.internalParse.call(this, source, context); + this.clear(); + this.setShouldFallback(false); + var jsonItems = source[this.getItemsCollectionPropertyName()]; + if (!Array.isArray(jsonItems) && typeof jsonItems === "object" && this.canHostSingletons()) { + var typeName = Utils.parseString(jsonItems["type"]); + if (typeName) { + var registration = context.elementRegistry.findByName(typeName); + if ((registration === null || registration === void 0 ? void 0 : registration.singletonBehavior) !== registry_1.ElementSingletonBehavior.NotAllowed) { + var element = context.parseElement(this, jsonItems, [], !this.isDesignMode(), true); + if (element) { + this.insertItemAt(element, -1, true); + } + } + } + } else if (Array.isArray(jsonItems)) { + for (var _i = 0, jsonItems_1 = jsonItems; _i < jsonItems_1.length; _i++) { + var item = jsonItems_1[_i]; + var element = context.parseElement(this, item, this.forbiddenChildElements(), !this.isDesignMode()); + if (element) { + this.insertItemAt(element, -1, true); + } + } + } + }; + Container2.prototype.internalToJSON = function(target, context) { + _super.prototype.internalToJSON.call(this, target, context); + var collectionPropertyName = this.getItemsCollectionPropertyName(); + if (this._items.length === 1 && this._items[0].getElementSingletonBehavior() === registry_1.ElementSingletonBehavior.Only) { + context.serializeValue(target, collectionPropertyName, this._items[0].toJSON(context)); + } else { + context.serializeArray(target, collectionPropertyName, this._items); + } + }; + Object.defineProperty(Container2.prototype, "isSelectable", { + get: function() { + return true; + }, + enumerable: false, + configurable: true + }); + Container2.prototype.getEffectivePadding = function() { + if (shared_1.GlobalSettings.removePaddingFromContainersWithBackgroundImage && !this.getHasBackground(true)) { + return new shared_1.PaddingDefinition(); + } + return _super.prototype.getEffectivePadding.call(this); + }; + Container2.prototype.getEffectiveVerticalContentAlignment = function() { + if (this.verticalContentAlignment !== void 0) { + return this.verticalContentAlignment; + } + var parentContainer = this.getParentContainer(); + return parentContainer ? parentContainer.getEffectiveVerticalContentAlignment() : Enums.VerticalAlignment.Top; + }; + Container2.prototype.getItemCount = function() { + return this._items.length; + }; + Container2.prototype.getItemAt = function(index) { + return this._items[index]; + }; + Container2.prototype.getFirstVisibleRenderedItem = function() { + if (this.renderedElement && this._renderedItems && this._renderedItems.length > 0) { + for (var _i = 0, _a = this._renderedItems; _i < _a.length; _i++) { + var item = _a[_i]; + if (item.isVisible) { + return item; + } + } + } + return void 0; + }; + Container2.prototype.getLastVisibleRenderedItem = function() { + if (this.renderedElement && this._renderedItems && this._renderedItems.length > 0) { + for (var i = this._renderedItems.length - 1; i >= 0; i--) { + if (this._renderedItems[i].isVisible) { + return this._renderedItems[i]; + } + } + } + return void 0; + }; + Container2.prototype.getJsonTypeName = function() { + return "Container"; + }; + Container2.prototype.isFirstElement = function(element) { + var designMode = this.isDesignMode(); + for (var _i = 0, _a = this._items; _i < _a.length; _i++) { + var item = _a[_i]; + if (item.isVisible || designMode) { + return item === element; + } + } + return false; + }; + Container2.prototype.isLastElement = function(element) { + var designMode = this.isDesignMode(); + for (var i = this._items.length - 1; i >= 0; i--) { + if (this._items[i].isVisible || designMode) { + return this._items[i] === element; + } + } + return false; + }; + Container2.prototype.isRtl = function() { + if (this.rtl !== void 0) { + return this.rtl; + } else { + var parentContainer = this.getParentContainer(); + return parentContainer ? parentContainer.isRtl() : false; + } + }; + Container2.prototype.isBleedingAtTop = function() { + var firstRenderedItem = this.getFirstVisibleRenderedItem(); + return this.isBleeding() || (firstRenderedItem ? firstRenderedItem.isBleedingAtTop() : false); + }; + Container2.prototype.isBleedingAtBottom = function() { + var lastRenderedItem = this.getLastVisibleRenderedItem(); + return this.isBleeding() || (lastRenderedItem ? lastRenderedItem.isBleedingAtBottom() && lastRenderedItem.getEffectiveStyle() === this.getEffectiveStyle() : false); + }; + Container2.prototype.indexOf = function(cardElement) { + return this._items.indexOf(cardElement); + }; + Container2.prototype.addItem = function(item) { + this.insertItemAt(item, -1, false); + }; + Container2.prototype.insertItemBefore = function(item, insertBefore) { + this.insertItemAt(item, this._items.indexOf(insertBefore), false); + }; + Container2.prototype.insertItemAfter = function(item, insertAfter) { + this.insertItemAt(item, this._items.indexOf(insertAfter) + 1, false); + }; + Container2.prototype.removeItem = function(item) { + var itemIndex = this._items.indexOf(item); + if (itemIndex >= 0) { + this._items.splice(itemIndex, 1); + item.setParent(void 0); + this.updateLayout(); + return true; + } + return false; + }; + Container2.prototype.clear = function() { + this._items = []; + this._renderedItems = []; + }; + Container2.prototype.getResourceInformation = function() { + var result = _super.prototype.getResourceInformation.call(this); + if (this.backgroundImage.isValid()) { + result.push({ + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion -- validated by `isValid()` + url: this.backgroundImage.url, + mimeType: "image" + }); + } + return result; + }; + Container2.prototype.getActionById = function(id) { + var result = _super.prototype.getActionById.call(this, id); + if (!result) { + if (this.selectAction) { + result = this.selectAction.getActionById(id); + } + if (!result) { + for (var _i = 0, _a = this._items; _i < _a.length; _i++) { + var item = _a[_i]; + result = item.getActionById(id); + if (result) { + break; + } + } + } + } + return result; + }; + Object.defineProperty(Container2.prototype, "padding", { + get: function() { + return this.getPadding(); + }, + set: function(value) { + this.setPadding(value); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Container2.prototype, "selectAction", { + get: function() { + return this._selectAction; + }, + set: function(value) { + this._selectAction = value; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Container2.prototype, "bleed", { + get: function() { + return this.getBleed(); + }, + set: function(value) { + this.setBleed(value); + }, + enumerable: false, + configurable: true + }); + Container2.backgroundImageProperty = new serialization_1.SerializableObjectProperty(serialization_1.Versions.v1_0, "backgroundImage", BackgroundImage); + Container2.verticalContentAlignmentProperty = new serialization_1.EnumProperty(serialization_1.Versions.v1_1, "verticalContentAlignment", Enums.VerticalAlignment); + Container2.rtlProperty = new serialization_1.BoolProperty(serialization_1.Versions.v1_0, "rtl"); + __decorate([ + (0, serialization_1.property)(Container2.backgroundImageProperty) + ], Container2.prototype, "backgroundImage", null); + __decorate([ + (0, serialization_1.property)(Container2.verticalContentAlignmentProperty) + ], Container2.prototype, "verticalContentAlignment", void 0); + __decorate([ + (0, serialization_1.property)(Container2.rtlProperty) + ], Container2.prototype, "rtl", void 0); + return Container2; + }(ContainerBase) + ); + exports.Container = Container; + var Column = ( + /** @class */ + function(_super) { + __extends(Column2, _super); + function Column2(width) { + if (width === void 0) { + width = "stretch"; + } + var _this = _super.call(this) || this; + _this.width = "stretch"; + _this._computedWeight = 0; + _this.width = width; + return _this; + } + Column2.prototype.adjustRenderedElementSize = function(renderedElement) { + var minDesignTimeColumnHeight = 20; + if (this.isDesignMode()) { + renderedElement.style.minWidth = "20px"; + renderedElement.style.minHeight = (!this.minPixelHeight ? minDesignTimeColumnHeight : Math.max(this.minPixelHeight, minDesignTimeColumnHeight)) + "px"; + } else { + renderedElement.style.minWidth = "0"; + if (this.minPixelHeight) { + renderedElement.style.minHeight = this.minPixelHeight + "px"; + } + } + if (this.width === "auto") { + renderedElement.style.flex = "0 1 auto"; + } else if (this.width === "stretch") { + renderedElement.style.flex = "1 1 50px"; + } else if (this.width instanceof shared_1.SizeAndUnit) { + if (this.width.unit === Enums.SizeUnit.Pixel) { + renderedElement.style.flex = "0 0 auto"; + renderedElement.style.width = this.width.physicalSize + "px"; + } else { + renderedElement.style.flex = "1 1 " + (this._computedWeight > 0 ? this._computedWeight : this.width.physicalSize) + "%"; + } + } + }; + Column2.prototype.shouldSerialize = function(_context) { + return true; + }; + Object.defineProperty(Column2.prototype, "separatorOrientation", { + get: function() { + return Enums.Orientation.Vertical; + }, + enumerable: false, + configurable: true + }); + Column2.prototype.getJsonTypeName = function() { + return "Column"; + }; + Object.defineProperty(Column2.prototype, "hasVisibleSeparator", { + get: function() { + if (this.parent && this.parent instanceof ColumnSet) { + return this.separatorElement !== void 0 && !this.parent.isLeftMostElement(this); + } else { + return false; + } + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Column2.prototype, "isStandalone", { + get: function() { + return false; + }, + enumerable: false, + configurable: true + }); + Column2.widthProperty = new serialization_1.CustomProperty(serialization_1.Versions.v1_0, "width", function(sender, prop, source, context) { + var result = prop.defaultValue; + var value = source[prop.name]; + var invalidWidth = false; + if (typeof value === "number" && !isNaN(value)) { + result = new shared_1.SizeAndUnit(value, Enums.SizeUnit.Weight); + } else if (value === "auto" || value === "stretch") { + result = value; + } else if (typeof value === "string") { + try { + result = shared_1.SizeAndUnit.parse(value); + if (result.unit === Enums.SizeUnit.Pixel && prop.targetVersion.compareTo(context.targetVersion) > 0) { + invalidWidth = true; + } + } catch (e) { + invalidWidth = true; + } + } else { + invalidWidth = true; + } + if (invalidWidth) { + context.logParseEvent(sender, Enums.ValidationEvent.InvalidPropertyValue, strings_1.Strings.errors.invalidColumnWidth(value)); + result = "auto"; + } + return result; + }, function(sender, property, target, value, context) { + if (value instanceof shared_1.SizeAndUnit) { + if (value.unit === Enums.SizeUnit.Pixel) { + context.serializeValue(target, "width", value.physicalSize + "px"); + } else { + context.serializeNumber(target, "width", value.physicalSize); + } + } else { + context.serializeValue(target, "width", value); + } + }, "stretch"); + __decorate([ + (0, serialization_1.property)(Column2.widthProperty) + ], Column2.prototype, "width", void 0); + return Column2; + }(Container) + ); + exports.Column = Column; + var ColumnSet = ( + /** @class */ + function(_super) { + __extends(ColumnSet2, _super); + function ColumnSet2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this._columns = []; + return _this; + } + ColumnSet2.prototype.createColumnInstance = function(source, context) { + return context.parseCardObject(this, source, [], !this.isDesignMode(), function(typeName) { + return !typeName || typeName === "Column" ? new Column() : void 0; + }, function(typeName, _errorType) { + context.logParseEvent(void 0, Enums.ValidationEvent.ElementTypeNotAllowed, strings_1.Strings.errors.elementTypeNotAllowed(typeName)); + }); + }; + ColumnSet2.prototype.internalRender = function() { + this._renderedColumns = []; + if (this._columns.length > 0) { + var hostConfig = this.hostConfig; + var element = document.createElement("div"); + element.className = hostConfig.makeCssClassName("ac-columnSet"); + element.style.display = "flex"; + if (shared_1.GlobalSettings.useAdvancedCardBottomTruncation) { + element.style.minHeight = "-webkit-min-content"; + } + switch (this.getEffectiveHorizontalAlignment()) { + case Enums.HorizontalAlignment.Center: + element.style.justifyContent = "center"; + break; + case Enums.HorizontalAlignment.Right: + element.style.justifyContent = "flex-end"; + break; + default: + element.style.justifyContent = "flex-start"; + break; + } + var totalWeight = 0; + for (var _i = 0, _a = this._columns; _i < _a.length; _i++) { + var column = _a[_i]; + if (column.width instanceof shared_1.SizeAndUnit && column.width.unit === Enums.SizeUnit.Weight) { + totalWeight += column.width.physicalSize; + } + } + for (var _b = 0, _c = this._columns; _b < _c.length; _b++) { + var column = _c[_b]; + if (column.width instanceof shared_1.SizeAndUnit && column.width.unit === Enums.SizeUnit.Weight && totalWeight > 0) { + var computedWeight = 100 / totalWeight * column.width.physicalSize; + column["_computedWeight"] = computedWeight; + } + var renderedColumn = column.render(); + if (renderedColumn) { + if (this._renderedColumns.length > 0 && column.separatorElement) { + column.separatorElement.style.flex = "0 0 auto"; + Utils.appendChild(element, column.separatorElement); + } + Utils.appendChild(element, renderedColumn); + this._renderedColumns.push(column); + } + } + return this._renderedColumns.length > 0 ? element : void 0; + } else { + return void 0; + } + }; + ColumnSet2.prototype.truncateOverflow = function(maxHeight) { + for (var _i = 0, _a = this._columns; _i < _a.length; _i++) { + var column = _a[_i]; + column["handleOverflow"](maxHeight); + } + return true; + }; + ColumnSet2.prototype.undoOverflowTruncation = function() { + for (var _i = 0, _a = this._columns; _i < _a.length; _i++) { + var column = _a[_i]; + column["resetOverflow"](); + } + }; + Object.defineProperty(ColumnSet2.prototype, "isSelectable", { + get: function() { + return true; + }, + enumerable: false, + configurable: true + }); + ColumnSet2.prototype.internalParse = function(source, context) { + _super.prototype.internalParse.call(this, source, context); + this._columns = []; + this._renderedColumns = []; + var jsonColumns = source["columns"]; + if (Array.isArray(jsonColumns)) { + for (var _i = 0, jsonColumns_1 = jsonColumns; _i < jsonColumns_1.length; _i++) { + var item = jsonColumns_1[_i]; + var column = this.createColumnInstance(item, context); + if (column) { + this._columns.push(column); + } + } + } + }; + ColumnSet2.prototype.internalToJSON = function(target, context) { + _super.prototype.internalToJSON.call(this, target, context); + context.serializeArray(target, "columns", this._columns); + }; + ColumnSet2.prototype.isFirstElement = function(element) { + for (var _i = 0, _a = this._columns; _i < _a.length; _i++) { + var column = _a[_i]; + if (column.isVisible) { + return column === element; + } + } + return false; + }; + ColumnSet2.prototype.isBleedingAtTop = function() { + if (this.isBleeding()) { + return true; + } + if (this._renderedColumns && this._renderedColumns.length > 0) { + for (var _i = 0, _a = this._columns; _i < _a.length; _i++) { + var column = _a[_i]; + if (column.isBleedingAtTop()) { + return true; + } + } + } + return false; + }; + ColumnSet2.prototype.isBleedingAtBottom = function() { + if (this.isBleeding()) { + return true; + } + if (this._renderedColumns && this._renderedColumns.length > 0) { + for (var _i = 0, _a = this._columns; _i < _a.length; _i++) { + var column = _a[_i]; + if (column.isBleedingAtBottom()) { + return true; + } + } + } + return false; + }; + ColumnSet2.prototype.getItemCount = function() { + return this._columns.length; + }; + ColumnSet2.prototype.getFirstVisibleRenderedItem = function() { + if (this.renderedElement && this._renderedColumns && this._renderedColumns.length > 0) { + return this._renderedColumns[0]; + } else { + return void 0; + } + }; + ColumnSet2.prototype.getLastVisibleRenderedItem = function() { + if (this.renderedElement && this._renderedColumns && this._renderedColumns.length > 0) { + return this._renderedColumns[this._renderedColumns.length - 1]; + } else { + return void 0; + } + }; + ColumnSet2.prototype.getColumnAt = function(index) { + return this._columns[index]; + }; + ColumnSet2.prototype.getItemAt = function(index) { + return this.getColumnAt(index); + }; + ColumnSet2.prototype.getJsonTypeName = function() { + return "ColumnSet"; + }; + ColumnSet2.prototype.internalValidateProperties = function(context) { + _super.prototype.internalValidateProperties.call(this, context); + var weightedColumns = 0; + var stretchedColumns = 0; + for (var _i = 0, _a = this._columns; _i < _a.length; _i++) { + var column = _a[_i]; + if (typeof column.width === "number") { + weightedColumns++; + } else if (column.width === "stretch") { + stretchedColumns++; + } + } + if (weightedColumns > 0 && stretchedColumns > 0) { + context.addFailure(this, Enums.ValidationEvent.Hint, strings_1.Strings.hints.dontUseWeightedAndStrecthedColumnsInSameSet()); + } + }; + ColumnSet2.prototype.addColumn = function(column) { + if (!column.parent) { + this._columns.push(column); + column.setParent(this); + } else { + throw new Error(strings_1.Strings.errors.columnAlreadyBelongsToAnotherSet()); + } + }; + ColumnSet2.prototype.removeItem = function(item) { + if (item instanceof Column) { + var itemIndex = this._columns.indexOf(item); + if (itemIndex >= 0) { + this._columns.splice(itemIndex, 1); + item.setParent(void 0); + this.updateLayout(); + return true; + } + } + return false; + }; + ColumnSet2.prototype.indexOf = function(cardElement) { + return cardElement instanceof Column ? this._columns.indexOf(cardElement) : -1; + }; + ColumnSet2.prototype.isLeftMostElement = function(element) { + return this._columns.indexOf(element) === 0; + }; + ColumnSet2.prototype.isRightMostElement = function(element) { + return this._columns.indexOf(element) === this._columns.length - 1; + }; + ColumnSet2.prototype.isTopElement = function(element) { + return this._columns.indexOf(element) >= 0; + }; + ColumnSet2.prototype.isBottomElement = function(element) { + return this._columns.indexOf(element) >= 0; + }; + ColumnSet2.prototype.getActionById = function(id) { + var result = void 0; + for (var _i = 0, _a = this._columns; _i < _a.length; _i++) { + var column = _a[_i]; + result = column.getActionById(id); + if (result) { + break; + } + } + return result; + }; + Object.defineProperty(ColumnSet2.prototype, "bleed", { + get: function() { + return this.getBleed(); + }, + set: function(value) { + this.setBleed(value); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(ColumnSet2.prototype, "padding", { + get: function() { + return this.getPadding(); + }, + set: function(value) { + this.setPadding(value); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(ColumnSet2.prototype, "selectAction", { + get: function() { + return this._selectAction; + }, + set: function(value) { + this._selectAction = value; + }, + enumerable: false, + configurable: true + }); + return ColumnSet2; + }(ContainerBase) + ); + exports.ColumnSet = ColumnSet; + function raiseImageLoadedEvent(image) { + var card = image.getRootElement(); + var onImageLoadedHandler = card && card.onImageLoaded ? card.onImageLoaded : AdaptiveCard.onImageLoaded; + if (onImageLoadedHandler) { + onImageLoadedHandler(image); + } + } + function raiseAnchorClickedEvent(element, anchor, ev) { + var card = element.getRootElement(); + var onAnchorClickedHandler = card && card.onAnchorClicked ? card.onAnchorClicked : AdaptiveCard.onAnchorClicked; + return onAnchorClickedHandler !== void 0 ? onAnchorClickedHandler(element, anchor, ev) : false; + } + function raiseExecuteActionEvent(action) { + var card = action.parent ? action.parent.getRootElement() : void 0; + var onExecuteActionHandler = card && card.onExecuteAction ? card.onExecuteAction : AdaptiveCard.onExecuteAction; + if (action.prepareForExecution() && onExecuteActionHandler) { + onExecuteActionHandler(action); + } + } + function raiseInlineCardExpandedEvent(action, isExpanded) { + var card = action.parent ? action.parent.getRootElement() : void 0; + var onInlineCardExpandedHandler = card && card.onInlineCardExpanded ? card.onInlineCardExpanded : AdaptiveCard.onInlineCardExpanded; + if (onInlineCardExpandedHandler) { + onInlineCardExpandedHandler(action, isExpanded); + } + } + function raiseInputValueChangedEvent(input) { + var card = input.getRootElement(); + var onInputValueChangedHandler = card && card.onInputValueChanged ? card.onInputValueChanged : AdaptiveCard.onInputValueChanged; + if (onInputValueChangedHandler) { + onInputValueChangedHandler(input); + } + } + function raiseElementVisibilityChangedEvent(element, shouldUpdateLayout) { + if (shouldUpdateLayout === void 0) { + shouldUpdateLayout = true; + } + var rootElement = element.getRootElement(); + if (shouldUpdateLayout) { + rootElement.updateLayout(); + } + var card = rootElement; + var onElementVisibilityChangedHandler = card && card.onElementVisibilityChanged ? card.onElementVisibilityChanged : AdaptiveCard.onElementVisibilityChanged; + if (onElementVisibilityChangedHandler !== void 0) { + onElementVisibilityChangedHandler(element); + } + } + function raiseDisplayOverflowActionMenuEvent(action, target) { + var card = action.parent ? action.parent.getRootElement() : void 0; + var onDisplayOverflowActionMenuHandler = card && card.onDisplayOverflowActionMenu ? card.onDisplayOverflowActionMenu : AdaptiveCard.onDisplayOverflowActionMenu; + return onDisplayOverflowActionMenuHandler !== void 0 ? onDisplayOverflowActionMenuHandler(action.getActions(), target) : false; + } + function raiseRenderOverflowActionsEvent(action, isAtRootLevelActions) { + var card = action.parent ? action.parent.getRootElement() : void 0; + var onRenderOverflowActionsHandler = card && card.onRenderOverflowActions ? card.onRenderOverflowActions : AdaptiveCard.onRenderOverflowActions; + return onRenderOverflowActionsHandler !== void 0 ? onRenderOverflowActionsHandler(action.getActions(), isAtRootLevelActions) : false; + } + var ContainerWithActions = ( + /** @class */ + function(_super) { + __extends(ContainerWithActions2, _super); + function ContainerWithActions2() { + var _this = _super.call(this) || this; + _this._actionCollection = new ActionCollection(_this); + return _this; + } + ContainerWithActions2.prototype.internalParse = function(source, context) { + _super.prototype.internalParse.call(this, source, context); + this.parseActions(source, context); + }; + ContainerWithActions2.prototype.parseActions = function(source, context) { + this._actionCollection.parse(source["actions"], context); + }; + ContainerWithActions2.prototype.internalToJSON = function(target, context) { + _super.prototype.internalToJSON.call(this, target, context); + this._actionCollection.toJSON(target, "actions", context); + }; + ContainerWithActions2.prototype.internalRender = function() { + var element = _super.prototype.internalRender.call(this); + if (element) { + var renderedActions = this._actionCollection.render(this.hostConfig.actions.actionsOrientation); + if (renderedActions) { + Utils.appendChild(element, renderSeparation(this.hostConfig, { + spacing: this.hostConfig.getEffectiveSpacing(this.hostConfig.actions.spacing) + }, Enums.Orientation.Horizontal)); + Utils.appendChild(element, renderedActions); + } + if (this.renderIfEmpty) { + return element; + } else { + return element.children.length > 0 ? element : void 0; + } + } else { + return void 0; + } + }; + ContainerWithActions2.prototype.getHasExpandedAction = function() { + if (this.renderedActionCount === 0) { + return false; + } else if (this.renderedActionCount === 1) { + return this._actionCollection.expandedAction !== void 0 && !this.hostConfig.actions.preExpandSingleShowCardAction; + } else { + return this._actionCollection.expandedAction !== void 0; + } + }; + Object.defineProperty(ContainerWithActions2.prototype, "renderedActionCount", { + get: function() { + return this._actionCollection.renderedActionCount; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(ContainerWithActions2.prototype, "renderIfEmpty", { + get: function() { + return false; + }, + enumerable: false, + configurable: true + }); + ContainerWithActions2.prototype.releaseDOMResources = function() { + _super.prototype.releaseDOMResources.call(this); + this._actionCollection.releaseDOMResources(); + }; + ContainerWithActions2.prototype.getActionCount = function() { + return this._actionCollection.getActionCount(); + }; + ContainerWithActions2.prototype.getActionAt = function(index) { + if (index >= 0 && index < this.getActionCount()) { + return this._actionCollection.getActionAt(index); + } else { + return _super.prototype.getActionAt.call(this, index); + } + }; + ContainerWithActions2.prototype.getActionById = function(id) { + var result = this._actionCollection.getActionById(id); + return result ? result : _super.prototype.getActionById.call(this, id); + }; + ContainerWithActions2.prototype.internalValidateProperties = function(context) { + _super.prototype.internalValidateProperties.call(this, context); + if (this._actionCollection) { + this._actionCollection.validateProperties(context); + } + }; + ContainerWithActions2.prototype.isLastElement = function(element) { + return _super.prototype.isLastElement.call(this, element) && this._actionCollection.getActionCount() === 0; + }; + ContainerWithActions2.prototype.addAction = function(action) { + this._actionCollection.addAction(action); + }; + ContainerWithActions2.prototype.clear = function() { + _super.prototype.clear.call(this); + this._actionCollection.clear(); + }; + ContainerWithActions2.prototype.getAllInputs = function(processActions) { + if (processActions === void 0) { + processActions = true; + } + var result = _super.prototype.getAllInputs.call(this, processActions); + if (processActions) { + result.push.apply(result, this._actionCollection.getAllInputs(processActions)); + } + return result; + }; + ContainerWithActions2.prototype.getResourceInformation = function() { + var result = _super.prototype.getResourceInformation.call(this); + result.push.apply(result, this._actionCollection.getResourceInformation()); + return result; + }; + ContainerWithActions2.prototype.isBleedingAtBottom = function() { + if (this._actionCollection.renderedActionCount === 0) { + return _super.prototype.isBleedingAtBottom.call(this); + } else { + if (this._actionCollection.getActionCount() === 1) { + return this._actionCollection.expandedAction !== void 0 && !this.hostConfig.actions.preExpandSingleShowCardAction; + } else { + return this._actionCollection.expandedAction !== void 0; + } + } + }; + ContainerWithActions2.prototype.getForbiddenActionNames = function() { + return []; + }; + Object.defineProperty(ContainerWithActions2.prototype, "isStandalone", { + get: function() { + return false; + }, + enumerable: false, + configurable: true + }); + return ContainerWithActions2; + }(Container) + ); + exports.ContainerWithActions = ContainerWithActions; + var RefreshActionProperty = ( + /** @class */ + function(_super) { + __extends(RefreshActionProperty2, _super); + function RefreshActionProperty2(targetVersion, name) { + var _this = _super.call(this, targetVersion, name, void 0) || this; + _this.targetVersion = targetVersion; + _this.name = name; + return _this; + } + RefreshActionProperty2.prototype.parse = function(sender, source, context) { + var action = context.parseAction(sender.parent, source[this.name], [], false); + if (action !== void 0) { + if (action instanceof ExecuteAction) { + return action; + } + context.logParseEvent(sender, Enums.ValidationEvent.ActionTypeNotAllowed, strings_1.Strings.errors.actionTypeNotAllowed(action.getJsonTypeName())); + } + context.logParseEvent(sender, Enums.ValidationEvent.PropertyCantBeNull, strings_1.Strings.errors.propertyMustBeSet("action")); + return void 0; + }; + RefreshActionProperty2.prototype.toJSON = function(sender, target, value, context) { + context.serializeValue(target, this.name, value ? value.toJSON(context) : void 0, void 0, true); + }; + return RefreshActionProperty2; + }(serialization_1.PropertyDefinition) + ); + exports.RefreshActionProperty = RefreshActionProperty; + var RefreshDefinition = ( + /** @class */ + function(_super) { + __extends(RefreshDefinition2, _super); + function RefreshDefinition2() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(RefreshDefinition2.prototype, "action", { + get: function() { + return this.getValue(RefreshDefinition2.actionProperty); + }, + set: function(value) { + this.setValue(RefreshDefinition2.actionProperty, value); + if (value) { + value.setParent(this.parent); + } + }, + enumerable: false, + configurable: true + }); + RefreshDefinition2.prototype.getSchemaKey = function() { + return "RefreshDefinition"; + }; + RefreshDefinition2.actionProperty = new RefreshActionProperty(serialization_1.Versions.v1_4, "action"); + RefreshDefinition2.userIdsProperty = new serialization_1.StringArrayProperty(serialization_1.Versions.v1_4, "userIds"); + __decorate([ + (0, serialization_1.property)(RefreshDefinition2.actionProperty) + ], RefreshDefinition2.prototype, "action", null); + __decorate([ + (0, serialization_1.property)(RefreshDefinition2.userIdsProperty) + ], RefreshDefinition2.prototype, "userIds", void 0); + return RefreshDefinition2; + }(serialization_1.SerializableObject) + ); + exports.RefreshDefinition = RefreshDefinition; + var AuthCardButton = ( + /** @class */ + function(_super) { + __extends(AuthCardButton2, _super); + function AuthCardButton2() { + return _super !== null && _super.apply(this, arguments) || this; + } + AuthCardButton2.prototype.getSchemaKey = function() { + return "AuthCardButton"; + }; + AuthCardButton2.typeProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_4, "type"); + AuthCardButton2.titleProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_4, "title"); + AuthCardButton2.imageProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_4, "image"); + AuthCardButton2.valueProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_4, "value"); + __decorate([ + (0, serialization_1.property)(AuthCardButton2.typeProperty) + ], AuthCardButton2.prototype, "type", void 0); + __decorate([ + (0, serialization_1.property)(AuthCardButton2.titleProperty) + ], AuthCardButton2.prototype, "title", void 0); + __decorate([ + (0, serialization_1.property)(AuthCardButton2.imageProperty) + ], AuthCardButton2.prototype, "image", void 0); + __decorate([ + (0, serialization_1.property)(AuthCardButton2.valueProperty) + ], AuthCardButton2.prototype, "value", void 0); + return AuthCardButton2; + }(serialization_1.SerializableObject) + ); + exports.AuthCardButton = AuthCardButton; + var TokenExchangeResource = ( + /** @class */ + function(_super) { + __extends(TokenExchangeResource2, _super); + function TokenExchangeResource2() { + return _super !== null && _super.apply(this, arguments) || this; + } + TokenExchangeResource2.prototype.getSchemaKey = function() { + return "TokenExchangeResource"; + }; + TokenExchangeResource2.idProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_4, "id"); + TokenExchangeResource2.uriProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_4, "uri"); + TokenExchangeResource2.providerIdProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_4, "providerId"); + __decorate([ + (0, serialization_1.property)(TokenExchangeResource2.idProperty) + ], TokenExchangeResource2.prototype, "id", void 0); + __decorate([ + (0, serialization_1.property)(TokenExchangeResource2.uriProperty) + ], TokenExchangeResource2.prototype, "uri", void 0); + __decorate([ + (0, serialization_1.property)(TokenExchangeResource2.providerIdProperty) + ], TokenExchangeResource2.prototype, "providerId", void 0); + return TokenExchangeResource2; + }(serialization_1.SerializableObject) + ); + exports.TokenExchangeResource = TokenExchangeResource; + var Authentication = ( + /** @class */ + function(_super) { + __extends(Authentication2, _super); + function Authentication2() { + return _super !== null && _super.apply(this, arguments) || this; + } + Authentication2.prototype.getSchemaKey = function() { + return "Authentication"; + }; + Authentication2.textProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_4, "text"); + Authentication2.connectionNameProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_4, "connectionName"); + Authentication2.buttonsProperty = new serialization_1.SerializableObjectCollectionProperty(serialization_1.Versions.v1_4, "buttons", AuthCardButton); + Authentication2.tokenExchangeResourceProperty = new serialization_1.SerializableObjectProperty(serialization_1.Versions.v1_4, "tokenExchangeResource", TokenExchangeResource, true); + __decorate([ + (0, serialization_1.property)(Authentication2.textProperty) + ], Authentication2.prototype, "text", void 0); + __decorate([ + (0, serialization_1.property)(Authentication2.connectionNameProperty) + ], Authentication2.prototype, "connectionName", void 0); + __decorate([ + (0, serialization_1.property)(Authentication2.buttonsProperty) + ], Authentication2.prototype, "buttons", void 0); + __decorate([ + (0, serialization_1.property)(Authentication2.tokenExchangeResourceProperty) + ], Authentication2.prototype, "tokenExchangeResource", void 0); + return Authentication2; + }(serialization_1.SerializableObject) + ); + exports.Authentication = Authentication; + var AdaptiveCard = ( + /** @class */ + function(_super) { + __extends(AdaptiveCard2, _super); + function AdaptiveCard2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.designMode = false; + return _this; + } + Object.defineProperty(AdaptiveCard2.prototype, "refresh", { + get: function() { + return this.getValue(AdaptiveCard2.refreshProperty); + }, + set: function(value) { + this.setValue(AdaptiveCard2.refreshProperty, value); + if (value) { + value.parent = this; + } + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(AdaptiveCard2, "processMarkdown", { + get: function() { + throw new Error(strings_1.Strings.errors.processMarkdownEventRemoved()); + }, + // eslint-disable-next-line @typescript-eslint/naming-convention + set: function(_value) { + throw new Error(strings_1.Strings.errors.processMarkdownEventRemoved()); + }, + enumerable: false, + configurable: true + }); + AdaptiveCard2.applyMarkdown = function(text) { + var result = { + didProcess: false + }; + if (AdaptiveCard2.onProcessMarkdown) { + AdaptiveCard2.onProcessMarkdown(text, result); + } else if (window.markdownit) { + var markdownIt = window.markdownit; + result.outputHtml = markdownIt().render(text); + result.didProcess = true; + } else if (!AdaptiveCard2._haveWarnedAboutNoMarkdownProcessing) { + console.warn(strings_1.Strings.errors.markdownProcessingNotEnabled); + AdaptiveCard2._haveWarnedAboutNoMarkdownProcessing = true; + } + return result; + }; + AdaptiveCard2.prototype.isVersionSupported = function() { + if (this.bypassVersionCheck) { + return true; + } else { + var unsupportedVersion = !this.version || !this.version.isValid || this.maxVersion.major < this.version.major || this.maxVersion.major === this.version.major && this.maxVersion.minor < this.version.minor; + return !unsupportedVersion; + } + }; + AdaptiveCard2.prototype.getDefaultSerializationContext = function() { + return new SerializationContext(this.version); + }; + AdaptiveCard2.prototype.getItemsCollectionPropertyName = function() { + return "body"; + }; + AdaptiveCard2.prototype.canHostSingletons = function() { + return true; + }; + AdaptiveCard2.prototype.internalParse = function(source, context) { + this._fallbackCard = void 0; + var fallbackElement = context.parseElement(void 0, source["fallback"], this.forbiddenChildElements(), !this.isDesignMode()); + if (fallbackElement) { + this._fallbackCard = new AdaptiveCard2(); + this._fallbackCard.addItem(fallbackElement); + } + _super.prototype.internalParse.call(this, source, context); + }; + AdaptiveCard2.prototype.internalToJSON = function(target, context) { + this.setValue(AdaptiveCard2.versionProperty, context.targetVersion); + _super.prototype.internalToJSON.call(this, target, context); + }; + AdaptiveCard2.prototype.internalRender = function() { + var renderedElement = _super.prototype.internalRender.call(this); + if (shared_1.GlobalSettings.useAdvancedCardBottomTruncation && renderedElement) { + renderedElement.style.removeProperty("minHeight"); + } + return renderedElement; + }; + AdaptiveCard2.prototype.getHasBackground = function(ignoreBackgroundImages) { + if (ignoreBackgroundImages === void 0) { + ignoreBackgroundImages = false; + } + return true; + }; + AdaptiveCard2.prototype.getDefaultPadding = function() { + return new shared_1.PaddingDefinition(Enums.Spacing.Padding, Enums.Spacing.Padding, Enums.Spacing.Padding, Enums.Spacing.Padding); + }; + AdaptiveCard2.prototype.shouldSerialize = function(_context) { + return true; + }; + Object.defineProperty(AdaptiveCard2.prototype, "renderIfEmpty", { + get: function() { + return true; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(AdaptiveCard2.prototype, "bypassVersionCheck", { + get: function() { + return false; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(AdaptiveCard2.prototype, "allowCustomStyle", { + get: function() { + return this.hostConfig.adaptiveCard && this.hostConfig.adaptiveCard.allowCustomStyle; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(AdaptiveCard2.prototype, "hasBackground", { + get: function() { + return true; + }, + enumerable: false, + configurable: true + }); + AdaptiveCard2.prototype.getJsonTypeName = function() { + return "AdaptiveCard"; + }; + AdaptiveCard2.prototype.internalValidateProperties = function(context) { + _super.prototype.internalValidateProperties.call(this, context); + if (this.getValue(CardElement.typeNameProperty) !== "AdaptiveCard") { + context.addFailure(this, Enums.ValidationEvent.MissingCardType, strings_1.Strings.errors.invalidCardType()); + } + if (!this.bypassVersionCheck && !this.version) { + context.addFailure(this, Enums.ValidationEvent.PropertyCantBeNull, strings_1.Strings.errors.propertyMustBeSet("version")); + } else if (!this.isVersionSupported()) { + context.addFailure(this, Enums.ValidationEvent.UnsupportedCardVersion, strings_1.Strings.errors.unsupportedCardVersion(this.version.toString(), this.maxVersion.toString())); + } + }; + AdaptiveCard2.prototype.render = function(target) { + var renderedCard; + if (this.shouldFallback() && this._fallbackCard) { + this._fallbackCard.hostConfig = this.hostConfig; + renderedCard = this._fallbackCard.render(); + } else { + renderedCard = _super.prototype.render.call(this); + if (renderedCard) { + renderedCard.classList.add(this.hostConfig.makeCssClassName("ac-adaptiveCard")); + if (shared_1.GlobalSettings.setTabIndexAtCardRoot) { + renderedCard.tabIndex = 0; + } + if (this.speak) { + renderedCard.setAttribute("aria-label", this.speak); + } + } + } + if (target) { + Utils.appendChild(target, renderedCard); + this.updateLayout(); + } + return renderedCard; + }; + AdaptiveCard2.prototype.updateLayout = function(processChildren) { + if (processChildren === void 0) { + processChildren = true; + } + _super.prototype.updateLayout.call(this, processChildren); + if (shared_1.GlobalSettings.useAdvancedCardBottomTruncation && this.isDisplayed()) { + var padding = this.hostConfig.getEffectiveSpacing(Enums.Spacing.Default); + this["handleOverflow"](this.renderedElement.offsetHeight - padding); + } + }; + AdaptiveCard2.prototype.shouldFallback = function() { + return _super.prototype.shouldFallback.call(this) || !this.isVersionSupported(); + }; + Object.defineProperty(AdaptiveCard2.prototype, "hasVisibleSeparator", { + get: function() { + return false; + }, + enumerable: false, + configurable: true + }); + AdaptiveCard2.schemaUrl = "http://adaptivecards.io/schemas/adaptive-card.json"; + AdaptiveCard2.$schemaProperty = new serialization_1.CustomProperty(serialization_1.Versions.v1_0, "$schema", function(sender, property, source, context) { + return AdaptiveCard2.schemaUrl; + }, function(sender, prop, target, value, context) { + context.serializeValue(target, prop.name, AdaptiveCard2.schemaUrl); + }); + AdaptiveCard2.versionProperty = new serialization_1.CustomProperty(serialization_1.Versions.v1_0, "version", function(sender, prop, source, context) { + var version = serialization_1.Version.parse(source[prop.name], context); + if (version === void 0) { + version = serialization_1.Versions.latest; + context.logParseEvent(sender, Enums.ValidationEvent.InvalidPropertyValue, strings_1.Strings.errors.invalidCardVersion(version.toString())); + } + return version; + }, function(sender, prop, target, value, context) { + if (value !== void 0) { + context.serializeValue(target, prop.name, value.toString()); + } + }, serialization_1.Versions.v1_0); + AdaptiveCard2.fallbackTextProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "fallbackText"); + AdaptiveCard2.speakProperty = new serialization_1.StringProperty(serialization_1.Versions.v1_0, "speak"); + AdaptiveCard2.refreshProperty = new serialization_1.SerializableObjectProperty(serialization_1.Versions.v1_4, "refresh", RefreshDefinition, true); + AdaptiveCard2.authenticationProperty = new serialization_1.SerializableObjectProperty(serialization_1.Versions.v1_4, "authentication", Authentication, true); + AdaptiveCard2._haveWarnedAboutNoMarkdownProcessing = false; + __decorate([ + (0, serialization_1.property)(AdaptiveCard2.versionProperty) + ], AdaptiveCard2.prototype, "version", void 0); + __decorate([ + (0, serialization_1.property)(AdaptiveCard2.fallbackTextProperty) + ], AdaptiveCard2.prototype, "fallbackText", void 0); + __decorate([ + (0, serialization_1.property)(AdaptiveCard2.speakProperty) + ], AdaptiveCard2.prototype, "speak", void 0); + __decorate([ + (0, serialization_1.property)(AdaptiveCard2.refreshProperty) + ], AdaptiveCard2.prototype, "refresh", null); + __decorate([ + (0, serialization_1.property)(AdaptiveCard2.authenticationProperty) + ], AdaptiveCard2.prototype, "authentication", void 0); + return AdaptiveCard2; + }(ContainerWithActions) + ); + exports.AdaptiveCard = AdaptiveCard; + var InlineAdaptiveCard = ( + /** @class */ + function(_super) { + __extends(InlineAdaptiveCard2, _super); + function InlineAdaptiveCard2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.suppressStyle = false; + return _this; + } + InlineAdaptiveCard2.prototype.getSchemaKey = function() { + return "InlineAdaptiveCard"; + }; + InlineAdaptiveCard2.prototype.populateSchema = function(schema) { + _super.prototype.populateSchema.call(this, schema); + schema.remove(AdaptiveCard.$schemaProperty, AdaptiveCard.versionProperty); + }; + InlineAdaptiveCard2.prototype.getDefaultPadding = function() { + return new shared_1.PaddingDefinition(this.suppressStyle ? Enums.Spacing.None : Enums.Spacing.Padding, Enums.Spacing.Padding, this.suppressStyle ? Enums.Spacing.None : Enums.Spacing.Padding, Enums.Spacing.Padding); + }; + Object.defineProperty(InlineAdaptiveCard2.prototype, "bypassVersionCheck", { + get: function() { + return true; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(InlineAdaptiveCard2.prototype, "defaultStyle", { + get: function() { + if (this.suppressStyle) { + return Enums.ContainerStyle.Default; + } else { + return this.hostConfig.actions.showCard.style ? this.hostConfig.actions.showCard.style : Enums.ContainerStyle.Emphasis; + } + }, + enumerable: false, + configurable: true + }); + InlineAdaptiveCard2.prototype.render = function(target) { + var renderedCard = _super.prototype.render.call(this, target); + if (renderedCard) { + renderedCard.setAttribute("aria-live", "polite"); + renderedCard.removeAttribute("tabindex"); + } + return renderedCard; + }; + return InlineAdaptiveCard2; + }(AdaptiveCard) + ); + var SerializationContext = ( + /** @class */ + function(_super) { + __extends(SerializationContext2, _super); + function SerializationContext2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this._forbiddenTypes = /* @__PURE__ */ new Set(); + return _this; + } + SerializationContext2.prototype.internalParseCardObject = function(parent, source, forbiddenTypes, allowFallback, createInstanceCallback, logParseEvent, parsingSingletonObject) { + var _this = this; + if (parsingSingletonObject === void 0) { + parsingSingletonObject = false; + } + var result = void 0; + if (source && typeof source === "object") { + var oldForbiddenTypes_1 = /* @__PURE__ */ new Set(); + this._forbiddenTypes.forEach(function(type) { + oldForbiddenTypes_1.add(type); + }); + forbiddenTypes.forEach(function(type) { + _this._forbiddenTypes.add(type); + }); + var typeName = Utils.parseString(source["type"]); + var ignoreForbiddenType = parsingSingletonObject && typeName === "Carousel"; + if (typeName && this._forbiddenTypes.has(typeName) && !ignoreForbiddenType) { + logParseEvent(typeName, Enums.TypeErrorType.ForbiddenType); + } else { + var tryToFallback = false; + result = createInstanceCallback(typeName); + if (!result) { + tryToFallback = shared_1.GlobalSettings.enableFallback && allowFallback; + logParseEvent(typeName, Enums.TypeErrorType.UnknownType); + } else { + result.setParent(parent); + result.parse(source, this); + tryToFallback = shared_1.GlobalSettings.enableFallback && allowFallback && result.shouldFallback(); + } + if (tryToFallback) { + var fallback = source["fallback"]; + if (!fallback && parent) { + parent.setShouldFallback(true); + } + if (typeof fallback === "string" && fallback.toLowerCase() === "drop") { + result = void 0; + } else if (typeof fallback === "object") { + result = this.internalParseCardObject(parent, fallback, forbiddenTypes, true, createInstanceCallback, logParseEvent); + } + } + } + this._forbiddenTypes = oldForbiddenTypes_1; + } + return result; + }; + SerializationContext2.prototype.cardObjectParsed = function(o, source) { + if (o instanceof Action && this.onParseAction) { + this.onParseAction(o, source, this); + } else if (o instanceof CardElement && this.onParseElement) { + this.onParseElement(o, source, this); + } + }; + SerializationContext2.prototype.shouldSerialize = function(o) { + if (o instanceof Action) { + return this.actionRegistry.findByName(o.getJsonTypeName()) !== void 0; + } else if (o instanceof CardElement) { + return this.elementRegistry.findByName(o.getJsonTypeName()) !== void 0; + } else { + return true; + } + }; + SerializationContext2.prototype.parseCardObject = function(parent, source, forbiddenTypeNames, allowFallback, createInstanceCallback, logParseEvent, parsingSingletonObject) { + if (parsingSingletonObject === void 0) { + parsingSingletonObject = false; + } + var forbiddenTypes = new Set(forbiddenTypeNames); + var result = this.internalParseCardObject(parent, source, forbiddenTypes, allowFallback, createInstanceCallback, logParseEvent, parsingSingletonObject); + if (result !== void 0) { + this.cardObjectParsed(result, source); + } + return result; + }; + SerializationContext2.prototype.parseElement = function(parent, source, forbiddenTypes, allowFallback, _parsingSingletonObject) { + var _this = this; + if (_parsingSingletonObject === void 0) { + _parsingSingletonObject = false; + } + return this.parseCardObject(parent, source, forbiddenTypes, allowFallback, function(typeName) { + return _this.elementRegistry.createInstance(typeName, _this.targetVersion); + }, function(typeName, errorType) { + if (errorType === Enums.TypeErrorType.UnknownType) { + _this.logParseEvent(void 0, Enums.ValidationEvent.UnknownElementType, strings_1.Strings.errors.unknownElementType(typeName)); + } else { + _this.logParseEvent(void 0, Enums.ValidationEvent.ElementTypeNotAllowed, strings_1.Strings.errors.elementTypeNotAllowed(typeName)); + } + }, _parsingSingletonObject); + }; + SerializationContext2.prototype.parseAction = function(parent, source, forbiddenActionTypes, allowFallback) { + var _this = this; + return this.parseCardObject(parent, source, forbiddenActionTypes, allowFallback, function(typeName) { + return _this.actionRegistry.createInstance(typeName, _this.targetVersion); + }, function(typeName, errorType) { + if (errorType === Enums.TypeErrorType.UnknownType) { + _this.logParseEvent(void 0, Enums.ValidationEvent.UnknownActionType, strings_1.Strings.errors.unknownActionType(typeName)); + } else { + _this.logParseEvent(void 0, Enums.ValidationEvent.ActionTypeNotAllowed, strings_1.Strings.errors.actionTypeNotAllowed(typeName)); + } + }); + }; + Object.defineProperty(SerializationContext2.prototype, "elementRegistry", { + get: function() { + var _a; + return (_a = this._elementRegistry) !== null && _a !== void 0 ? _a : registry_1.GlobalRegistry.elements; + }, + enumerable: false, + configurable: true + }); + SerializationContext2.prototype.setElementRegistry = function(value) { + this._elementRegistry = value; + }; + Object.defineProperty(SerializationContext2.prototype, "actionRegistry", { + get: function() { + var _a; + return (_a = this._actionRegistry) !== null && _a !== void 0 ? _a : registry_1.GlobalRegistry.actions; + }, + enumerable: false, + configurable: true + }); + SerializationContext2.prototype.setActionRegistry = function(value) { + this._actionRegistry = value; + }; + return SerializationContext2; + }(serialization_1.BaseSerializationContext) + ); + exports.SerializationContext = SerializationContext; + registry_1.GlobalRegistry.defaultElements.register("Container", Container); + registry_1.GlobalRegistry.defaultElements.register("TextBlock", TextBlock); + registry_1.GlobalRegistry.defaultElements.register("RichTextBlock", RichTextBlock, serialization_1.Versions.v1_2); + registry_1.GlobalRegistry.defaultElements.register("TextRun", TextRun, serialization_1.Versions.v1_2); + registry_1.GlobalRegistry.defaultElements.register("Image", Image); + registry_1.GlobalRegistry.defaultElements.register("ImageSet", ImageSet); + registry_1.GlobalRegistry.defaultElements.register("Media", Media, serialization_1.Versions.v1_1); + registry_1.GlobalRegistry.defaultElements.register("FactSet", FactSet); + registry_1.GlobalRegistry.defaultElements.register("ColumnSet", ColumnSet); + registry_1.GlobalRegistry.defaultElements.register("ActionSet", ActionSet, serialization_1.Versions.v1_2); + registry_1.GlobalRegistry.defaultElements.register("Input.Text", TextInput); + registry_1.GlobalRegistry.defaultElements.register("Input.Date", DateInput); + registry_1.GlobalRegistry.defaultElements.register("Input.Time", TimeInput); + registry_1.GlobalRegistry.defaultElements.register("Input.Number", NumberInput); + registry_1.GlobalRegistry.defaultElements.register("Input.ChoiceSet", ChoiceSetInput); + registry_1.GlobalRegistry.defaultElements.register("Input.Toggle", ToggleInput); + registry_1.GlobalRegistry.defaultActions.register(OpenUrlAction.JsonTypeName, OpenUrlAction); + registry_1.GlobalRegistry.defaultActions.register(SubmitAction.JsonTypeName, SubmitAction); + registry_1.GlobalRegistry.defaultActions.register(ShowCardAction.JsonTypeName, ShowCardAction); + registry_1.GlobalRegistry.defaultActions.register(ToggleVisibilityAction.JsonTypeName, ToggleVisibilityAction, serialization_1.Versions.v1_2); + registry_1.GlobalRegistry.defaultActions.register(ExecuteAction.JsonTypeName, ExecuteAction, serialization_1.Versions.v1_4); + } +}); + +// node_modules/adaptivecards/lib/table.js +var require_table = __commonJS({ + "node_modules/adaptivecards/lib/table.js"(exports) { + "use strict"; + var __extends = exports && exports.__extends || /* @__PURE__ */ function() { + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { + d2.__proto__ = b2; + } || function(d2, b2) { + for (var p in b2) + if (Object.prototype.hasOwnProperty.call(b2, p)) + d2[p] = b2[p]; + }; + return extendStatics(d, b); + }; + return function(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { + this.constructor = d; + } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + }(); + var __decorate = exports && exports.__decorate || function(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") + r = Reflect.decorate(decorators, target, key, desc); + else + for (var i = decorators.length - 1; i >= 0; i--) + if (d = decorators[i]) + r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; + }; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.Table = exports.TableRow = exports.TableCell = exports.StylableContainer = exports.TableColumnDefinition = void 0; + var card_elements_1 = require_card_elements(); + var enums_1 = require_enums(); + var registry_1 = require_registry(); + var serialization_1 = require_serialization(); + var shared_1 = require_shared(); + var strings_1 = require_strings(); + var utils_1 = require_utils(); + var TableColumnDefinition = ( + /** @class */ + function(_super) { + __extends(TableColumnDefinition2, _super); + function TableColumnDefinition2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.width = new shared_1.SizeAndUnit(1, enums_1.SizeUnit.Weight); + return _this; + } + TableColumnDefinition2.prototype.getSchemaKey = function() { + return "ColumnDefinition"; + }; + TableColumnDefinition2.horizontalCellContentAlignmentProperty = new serialization_1.EnumProperty(serialization_1.Versions.v1_5, "horizontalCellContentAlignment", enums_1.HorizontalAlignment); + TableColumnDefinition2.verticalCellContentAlignmentProperty = new serialization_1.EnumProperty(serialization_1.Versions.v1_5, "verticalCellContentAlignment", enums_1.VerticalAlignment); + TableColumnDefinition2.widthProperty = new serialization_1.CustomProperty(serialization_1.Versions.v1_5, "width", function(sender, prop, source, context) { + var result = prop.defaultValue; + var value = source[prop.name]; + var invalidWidth = false; + if (typeof value === "number" && !isNaN(value)) { + result = new shared_1.SizeAndUnit(value, enums_1.SizeUnit.Weight); + } else if (typeof value === "string") { + try { + result = shared_1.SizeAndUnit.parse(value); + } catch (e) { + invalidWidth = true; + } + } else { + invalidWidth = true; + } + if (invalidWidth) { + context.logParseEvent(sender, enums_1.ValidationEvent.InvalidPropertyValue, strings_1.Strings.errors.invalidColumnWidth(value)); + } + return result; + }, function(sender, property, target, value, context) { + if (value.unit === enums_1.SizeUnit.Pixel) { + context.serializeValue(target, "width", value.physicalSize + "px"); + } else { + context.serializeNumber(target, "width", value.physicalSize); + } + }, new shared_1.SizeAndUnit(1, enums_1.SizeUnit.Weight)); + __decorate([ + (0, serialization_1.property)(TableColumnDefinition2.horizontalCellContentAlignmentProperty) + ], TableColumnDefinition2.prototype, "horizontalCellContentAlignment", void 0); + __decorate([ + (0, serialization_1.property)(TableColumnDefinition2.verticalCellContentAlignmentProperty) + ], TableColumnDefinition2.prototype, "verticalCellContentAlignment", void 0); + __decorate([ + (0, serialization_1.property)(TableColumnDefinition2.widthProperty) + ], TableColumnDefinition2.prototype, "width", void 0); + return TableColumnDefinition2; + }(serialization_1.SerializableObject) + ); + exports.TableColumnDefinition = TableColumnDefinition; + var StylableContainer = ( + /** @class */ + function(_super) { + __extends(StylableContainer2, _super); + function StylableContainer2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this._items = []; + return _this; + } + StylableContainer2.prototype.parseItem = function(source, context) { + var _this = this; + return context.parseCardObject( + this, + source, + [], + // Forbidden types not supported for elements for now + !this.isDesignMode(), + function(typeName) { + return _this.createItemInstance(typeName); + }, + function(typeName, _errorType) { + context.logParseEvent(void 0, enums_1.ValidationEvent.ElementTypeNotAllowed, strings_1.Strings.errors.elementTypeNotAllowed(typeName)); + } + ); + }; + StylableContainer2.prototype.internalAddItem = function(item) { + if (!item.parent) { + this._items.push(item); + item.setParent(this); + } else { + throw new Error(strings_1.Strings.errors.elementAlreadyParented()); + } + }; + StylableContainer2.prototype.internalRemoveItem = function(item) { + var itemIndex = this._items.indexOf(item); + if (itemIndex >= 0) { + this._items.splice(itemIndex, 1); + item.setParent(void 0); + this.updateLayout(); + return true; + } + return false; + }; + StylableContainer2.prototype.internalIndexOf = function(item) { + return this._items.indexOf(item); + }; + StylableContainer2.prototype.internalParse = function(source, context) { + _super.prototype.internalParse.call(this, source, context); + this._items = []; + var items = source[this.getCollectionPropertyName()]; + if (Array.isArray(items)) { + for (var _i = 0, items_1 = items; _i < items_1.length; _i++) { + var item = items_1[_i]; + var instance = this.parseItem(item, context); + if (instance) { + this._items.push(instance); + } + } + } + }; + StylableContainer2.prototype.internalToJSON = function(target, context) { + _super.prototype.internalToJSON.call(this, target, context); + context.serializeArray(target, this.getCollectionPropertyName(), this._items); + }; + StylableContainer2.prototype.removeItem = function(item) { + return this.internalRemoveItem(item); + }; + StylableContainer2.prototype.getItemCount = function() { + return this._items.length; + }; + StylableContainer2.prototype.getItemAt = function(index) { + return this._items[index]; + }; + StylableContainer2.prototype.getFirstVisibleRenderedItem = function() { + return this.getItemCount() > 0 ? this.getItemAt(0) : void 0; + }; + StylableContainer2.prototype.getLastVisibleRenderedItem = function() { + return this.getItemCount() > 0 ? this.getItemAt(this.getItemCount() - 1) : void 0; + }; + return StylableContainer2; + }(card_elements_1.StylableCardElementContainer) + ); + exports.StylableContainer = StylableContainer; + var TableCell = ( + /** @class */ + function(_super) { + __extends(TableCell2, _super); + function TableCell2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this._columnIndex = -1; + _this._cellType = "data"; + return _this; + } + TableCell2.prototype.getHasBorder = function() { + return this.parentRow.parentTable.showGridLines; + }; + TableCell2.prototype.applyBorder = function() { + if (this.renderedElement && this.getHasBorder()) { + var styleDefinition = this.hostConfig.containerStyles.getStyleByName(this.parentRow.parentTable.gridStyle); + if (styleDefinition.borderColor) { + var borderColor = (0, utils_1.stringToCssColor)(styleDefinition.borderColor); + if (borderColor) { + this.renderedElement.style.borderRight = "1px solid " + borderColor; + this.renderedElement.style.borderBottom = "1px solid " + borderColor; + } + } + } + }; + TableCell2.prototype.getDefaultPadding = function() { + return this.getHasBackground() || this.getHasBorder() ? new shared_1.PaddingDefinition(enums_1.Spacing.Small, enums_1.Spacing.Small, enums_1.Spacing.Small, enums_1.Spacing.Small) : _super.prototype.getDefaultPadding.call(this); + }; + TableCell2.prototype.internalRender = function() { + var cellElement = _super.prototype.internalRender.call(this); + if (cellElement) { + cellElement.setAttribute("role", this.cellType === "data" ? "cell" : "columnheader"); + cellElement.style.minWidth = "0"; + if (this.cellType === "header") { + cellElement.setAttribute("scope", "col"); + } + } + return cellElement; + }; + TableCell2.prototype.shouldSerialize = function(_context) { + return true; + }; + TableCell2.prototype.getJsonTypeName = function() { + return "TableCell"; + }; + TableCell2.prototype.getEffectiveTextStyleDefinition = function() { + if (this.cellType === "header") { + return this.hostConfig.textStyles.columnHeader; + } + return _super.prototype.getEffectiveTextStyleDefinition.call(this); + }; + TableCell2.prototype.getEffectiveHorizontalAlignment = function() { + if (this.horizontalAlignment !== void 0) { + return this.horizontalAlignment; + } + if (this.parentRow.horizontalCellContentAlignment !== void 0) { + return this.parentRow.horizontalCellContentAlignment; + } + if (this.columnIndex >= 0) { + var horizontalAlignment = this.parentRow.parentTable.getColumnAt(this.columnIndex).horizontalCellContentAlignment; + if (horizontalAlignment !== void 0) { + return horizontalAlignment; + } + } + if (this.parentRow.parentTable.horizontalCellContentAlignment !== void 0) { + return this.parentRow.parentTable.horizontalCellContentAlignment; + } + return _super.prototype.getEffectiveHorizontalAlignment.call(this); + }; + TableCell2.prototype.getEffectiveVerticalContentAlignment = function() { + if (this.verticalContentAlignment !== void 0) { + return this.verticalContentAlignment; + } + if (this.parentRow.verticalCellContentAlignment !== void 0) { + return this.parentRow.verticalCellContentAlignment; + } + if (this.columnIndex >= 0) { + var verticalAlignment = this.parentRow.parentTable.getColumnAt(this.columnIndex).verticalCellContentAlignment; + if (verticalAlignment !== void 0) { + return verticalAlignment; + } + } + if (this.parentRow.parentTable.verticalCellContentAlignment !== void 0) { + return this.parentRow.parentTable.verticalCellContentAlignment; + } + return _super.prototype.getEffectiveVerticalContentAlignment.call(this); + }; + Object.defineProperty(TableCell2.prototype, "columnIndex", { + get: function() { + return this._columnIndex; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(TableCell2.prototype, "cellType", { + get: function() { + return this._cellType; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(TableCell2.prototype, "parentRow", { + get: function() { + return this.parent; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(TableCell2.prototype, "isStandalone", { + get: function() { + return false; + }, + enumerable: false, + configurable: true + }); + return TableCell2; + }(card_elements_1.Container) + ); + exports.TableCell = TableCell; + var TableRow = ( + /** @class */ + function(_super) { + __extends(TableRow2, _super); + function TableRow2() { + return _super !== null && _super.apply(this, arguments) || this; + } + TableRow2.prototype.getDefaultPadding = function() { + return new shared_1.PaddingDefinition(enums_1.Spacing.None, enums_1.Spacing.None, enums_1.Spacing.None, enums_1.Spacing.None); + }; + TableRow2.prototype.applyBackground = function() { + if (this.renderedElement) { + var styleDefinition = this.hostConfig.containerStyles.getStyleByName(this.style, this.hostConfig.containerStyles.getStyleByName(this.defaultStyle)); + if (styleDefinition.backgroundColor) { + var bgColor = (0, utils_1.stringToCssColor)(styleDefinition.backgroundColor); + if (bgColor) { + this.renderedElement.style.backgroundColor = bgColor; + } + } + } + }; + TableRow2.prototype.getCollectionPropertyName = function() { + return "cells"; + }; + TableRow2.prototype.createItemInstance = function(typeName) { + return !typeName || typeName === "TableCell" ? new TableCell() : void 0; + }; + TableRow2.prototype.internalRender = function() { + var isFirstRow = this.getIsFirstRow(); + var cellSpacing = this.hostConfig.table.cellSpacing; + var rowElement = document.createElement("div"); + rowElement.setAttribute("role", "row"); + rowElement.style.display = "flex"; + rowElement.style.flexDirection = "row"; + for (var i = 0; i < Math.min(this.getItemCount(), this.parentTable.getColumnCount()); i++) { + var cell = this.getItemAt(i); + cell["_columnIndex"] = i; + cell["_cellType"] = this.parentTable.firstRowAsHeaders && isFirstRow ? "header" : "data"; + var renderedCell = cell.render(); + if (renderedCell) { + var column = this.parentTable.getColumnAt(i); + if (column.computedWidth.unit === enums_1.SizeUnit.Pixel) { + renderedCell.style.flex = "0 0 " + column.computedWidth.physicalSize + "px"; + } else { + renderedCell.style.flex = "1 1 " + column.computedWidth.physicalSize + "%"; + } + if (i > 0 && !this.parentTable.showGridLines && cellSpacing > 0) { + renderedCell.style.marginLeft = cellSpacing + "px"; + } + rowElement.appendChild(renderedCell); + } + } + return rowElement.children.length > 0 ? rowElement : void 0; + }; + TableRow2.prototype.shouldSerialize = function(_context) { + return true; + }; + TableRow2.prototype.addCell = function(cell) { + this.internalAddItem(cell); + }; + TableRow2.prototype.removeCellAt = function(columnIndex) { + if (columnIndex >= 0 && columnIndex < this.getItemCount()) { + return this.removeItem(this.getItemAt(columnIndex)); + } + return false; + }; + TableRow2.prototype.indexOf = function(cardElement) { + return cardElement instanceof TableCell ? this.internalIndexOf(cardElement) : -1; + }; + TableRow2.prototype.ensureHasEnoughCells = function(cellCount) { + while (this.getItemCount() < cellCount) { + this.addCell(new TableCell()); + } + }; + TableRow2.prototype.getJsonTypeName = function() { + return "TableRow"; + }; + TableRow2.prototype.getIsFirstRow = function() { + return this.parentTable.getItemAt(0) === this; + }; + Object.defineProperty(TableRow2.prototype, "parentTable", { + get: function() { + return this.parent; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(TableRow2.prototype, "isStandalone", { + get: function() { + return false; + }, + enumerable: false, + configurable: true + }); + TableRow2.styleProperty = new card_elements_1.ContainerStyleProperty(serialization_1.Versions.v1_5, "style"); + TableRow2.horizontalCellContentAlignmentProperty = new serialization_1.EnumProperty(serialization_1.Versions.v1_5, "horizontalCellContentAlignment", enums_1.HorizontalAlignment); + TableRow2.verticalCellContentAlignmentProperty = new serialization_1.EnumProperty(serialization_1.Versions.v1_5, "verticalCellContentAlignment", enums_1.VerticalAlignment); + __decorate([ + (0, serialization_1.property)(TableRow2.horizontalCellContentAlignmentProperty) + ], TableRow2.prototype, "horizontalCellContentAlignment", void 0); + __decorate([ + (0, serialization_1.property)(TableRow2.verticalCellContentAlignmentProperty) + ], TableRow2.prototype, "verticalCellContentAlignment", void 0); + return TableRow2; + }(StylableContainer) + ); + exports.TableRow = TableRow; + var Table = ( + /** @class */ + function(_super) { + __extends(Table2, _super); + function Table2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this._columns = []; + _this.firstRowAsHeaders = true; + _this.showGridLines = true; + return _this; + } + Object.defineProperty(Table2.prototype, "gridStyle", { + get: function() { + var style = this.getValue(Table2.gridStyleProperty); + if (style && this.hostConfig.containerStyles.getStyleByName(style)) { + return style; + } + return void 0; + }, + set: function(value) { + this.setValue(Table2.gridStyleProperty, value); + }, + enumerable: false, + configurable: true + }); + Table2.prototype.ensureRowsHaveEnoughCells = function() { + for (var i = 0; i < this.getItemCount(); i++) { + this.getItemAt(i).ensureHasEnoughCells(this.getColumnCount()); + } + }; + Table2.prototype.removeCellsFromColumn = function(columnIndex) { + for (var i = 0; i < this.getItemCount(); i++) { + this.getItemAt(i).removeCellAt(columnIndex); + } + }; + Table2.prototype.getCollectionPropertyName = function() { + return "rows"; + }; + Table2.prototype.createItemInstance = function(typeName) { + return !typeName || typeName === "TableRow" ? new TableRow() : void 0; + }; + Table2.prototype.internalParse = function(source, context) { + _super.prototype.internalParse.call(this, source, context); + this.ensureRowsHaveEnoughCells(); + }; + Table2.prototype.internalRender = function() { + if (this.getItemCount() > 0) { + var totalWeights = 0; + for (var _i = 0, _a = this._columns; _i < _a.length; _i++) { + var column = _a[_i]; + if (column.width.unit === enums_1.SizeUnit.Weight) { + totalWeights += column.width.physicalSize; + } + } + for (var _b = 0, _c = this._columns; _b < _c.length; _b++) { + var column = _c[_b]; + if (column.width.unit === enums_1.SizeUnit.Pixel) { + column.computedWidth = new shared_1.SizeAndUnit(column.width.physicalSize, enums_1.SizeUnit.Pixel); + } else { + column.computedWidth = new shared_1.SizeAndUnit(100 / totalWeights * column.width.physicalSize, enums_1.SizeUnit.Weight); + } + } + var tableElement = document.createElement("div"); + tableElement.setAttribute("role", "table"); + tableElement.style.display = "flex"; + tableElement.style.flexDirection = "column"; + if (this.showGridLines) { + var styleDefinition = this.hostConfig.containerStyles.getStyleByName(this.gridStyle); + if (styleDefinition.borderColor) { + var borderColor = (0, utils_1.stringToCssColor)(styleDefinition.borderColor); + if (borderColor) { + tableElement.style.borderTop = "1px solid " + borderColor; + tableElement.style.borderLeft = "1px solid " + borderColor; + } + } + } + var cellSpacing = this.hostConfig.table.cellSpacing; + for (var i = 0; i < this.getItemCount(); i++) { + var renderedRow = this.getItemAt(i).render(); + if (renderedRow) { + if (i > 0 && !this.showGridLines && cellSpacing > 0) { + var separatorRow = document.createElement("div"); + separatorRow.setAttribute("aria-hidden", "true"); + separatorRow.style.height = cellSpacing + "px"; + tableElement.appendChild(separatorRow); + } + tableElement.appendChild(renderedRow); + } + } + return tableElement; + } + return void 0; + }; + Table2.prototype.addColumn = function(column) { + this._columns.push(column); + this.ensureRowsHaveEnoughCells(); + }; + Table2.prototype.removeColumn = function(column) { + var index = this._columns.indexOf(column); + if (index >= 0) { + this.removeCellsFromColumn(index); + this._columns.splice(index, 1); + } + }; + Table2.prototype.getColumnCount = function() { + return this._columns.length; + }; + Table2.prototype.getColumnAt = function(index) { + return this._columns[index]; + }; + Table2.prototype.addRow = function(row) { + this.internalAddItem(row); + row.ensureHasEnoughCells(this.getColumnCount()); + }; + Table2.prototype.indexOf = function(cardElement) { + return cardElement instanceof TableRow ? this.internalIndexOf(cardElement) : -1; + }; + Table2.prototype.getJsonTypeName = function() { + return "Table"; + }; + Table2._columnsProperty = new serialization_1.SerializableObjectCollectionProperty(serialization_1.Versions.v1_5, "columns", TableColumnDefinition); + Table2.firstRowAsHeadersProperty = new serialization_1.BoolProperty(serialization_1.Versions.v1_5, "firstRowAsHeaders", true); + Table2.showGridLinesProperty = new serialization_1.BoolProperty(serialization_1.Versions.v1_5, "showGridLines", true); + Table2.gridStyleProperty = new card_elements_1.ContainerStyleProperty(serialization_1.Versions.v1_5, "gridStyle"); + Table2.horizontalCellContentAlignmentProperty = new serialization_1.EnumProperty(serialization_1.Versions.v1_5, "horizontalCellContentAlignment", enums_1.HorizontalAlignment); + Table2.verticalCellContentAlignmentProperty = new serialization_1.EnumProperty(serialization_1.Versions.v1_5, "verticalCellContentAlignment", enums_1.VerticalAlignment); + __decorate([ + (0, serialization_1.property)(Table2._columnsProperty) + ], Table2.prototype, "_columns", void 0); + __decorate([ + (0, serialization_1.property)(Table2.firstRowAsHeadersProperty) + ], Table2.prototype, "firstRowAsHeaders", void 0); + __decorate([ + (0, serialization_1.property)(Table2.showGridLinesProperty) + ], Table2.prototype, "showGridLines", void 0); + __decorate([ + (0, serialization_1.property)(Table2.gridStyleProperty) + ], Table2.prototype, "gridStyle", null); + __decorate([ + (0, serialization_1.property)(Table2.horizontalCellContentAlignmentProperty) + ], Table2.prototype, "horizontalCellContentAlignment", void 0); + __decorate([ + (0, serialization_1.property)(Table2.verticalCellContentAlignmentProperty) + ], Table2.prototype, "verticalCellContentAlignment", void 0); + return Table2; + }(StylableContainer) + ); + exports.Table = Table; + registry_1.GlobalRegistry.defaultElements.register("Table", Table, serialization_1.Versions.v1_5); + } +}); + +// node_modules/adaptivecards/lib/channel-adapter.js +var require_channel_adapter = __commonJS({ + "node_modules/adaptivecards/lib/channel-adapter.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.ChannelAdapter = void 0; + var ChannelAdapter = ( + /** @class */ + /* @__PURE__ */ function() { + function ChannelAdapter2() { + } + return ChannelAdapter2; + }() + ); + exports.ChannelAdapter = ChannelAdapter; + } +}); + +// node_modules/adaptivecards/lib/activity-request.js +var require_activity_request = __commonJS({ + "node_modules/adaptivecards/lib/activity-request.js"(exports) { + "use strict"; + var __extends = exports && exports.__extends || /* @__PURE__ */ function() { + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { + d2.__proto__ = b2; + } || function(d2, b2) { + for (var p in b2) + if (Object.prototype.hasOwnProperty.call(b2, p)) + d2[p] = b2[p]; + }; + return extendStatics(d, b); + }; + return function(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { + this.constructor = d; + } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + }(); + Object.defineProperty(exports, "__esModule", { value: true }); + exports.LoginRequestResponse = exports.ErrorResponse = exports.SuccessResponse = exports.ActivityResponse = exports.ActivityRequestError = exports.ActivityRequestTrigger = void 0; + var ActivityRequestTrigger; + (function(ActivityRequestTrigger2) { + ActivityRequestTrigger2["Automatic"] = "automatic"; + ActivityRequestTrigger2["Manual"] = "manual"; + })(ActivityRequestTrigger = exports.ActivityRequestTrigger || (exports.ActivityRequestTrigger = {})); + var ActivityRequestError = ( + /** @class */ + /* @__PURE__ */ function() { + function ActivityRequestError2(code, message) { + this.code = code; + this.message = message; + } + return ActivityRequestError2; + }() + ); + exports.ActivityRequestError = ActivityRequestError; + var ActivityResponse = ( + /** @class */ + /* @__PURE__ */ function() { + function ActivityResponse2(request) { + this.request = request; + } + return ActivityResponse2; + }() + ); + exports.ActivityResponse = ActivityResponse; + var SuccessResponse = ( + /** @class */ + function(_super) { + __extends(SuccessResponse2, _super); + function SuccessResponse2(request, rawContent) { + var _this = _super.call(this, request) || this; + _this.request = request; + _this.rawContent = rawContent; + return _this; + } + return SuccessResponse2; + }(ActivityResponse) + ); + exports.SuccessResponse = SuccessResponse; + var ErrorResponse = ( + /** @class */ + function(_super) { + __extends(ErrorResponse2, _super); + function ErrorResponse2(request, error) { + var _this = _super.call(this, request) || this; + _this.request = request; + _this.error = error; + return _this; + } + return ErrorResponse2; + }(ActivityResponse) + ); + exports.ErrorResponse = ErrorResponse; + var LoginRequestResponse = ( + /** @class */ + function(_super) { + __extends(LoginRequestResponse2, _super); + function LoginRequestResponse2(request, auth) { + var _this = _super.call(this, request) || this; + _this.request = request; + _this._auth = auth; + for (var _i = 0, _a = _this._auth.buttons; _i < _a.length; _i++) { + var button = _a[_i]; + if (button.type === "signin" && button.value !== void 0) { + try { + new URL(button.value); + _this.signinButton = button; + break; + } catch (e) { + } + } + } + return _this; + } + Object.defineProperty(LoginRequestResponse2.prototype, "tokenExchangeResource", { + get: function() { + return this._auth.tokenExchangeResource; + }, + enumerable: false, + configurable: true + }); + return LoginRequestResponse2; + }(ActivityResponse) + ); + exports.LoginRequestResponse = LoginRequestResponse; + } +}); + +// node_modules/adaptivecards/lib/adaptive-applet.js +var require_adaptive_applet = __commonJS({ + "node_modules/adaptivecards/lib/adaptive-applet.js"(exports) { + "use strict"; + var __awaiter = exports && exports.__awaiter || function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve) { + resolve(value); + }); + } + return new (P || (P = Promise))(function(resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e) { + reject(e); + } + } + function step(result) { + result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + }; + var __generator = exports && exports.__generator || function(thisArg, body) { + var _ = { label: 0, sent: function() { + if (t[0] & 1) + throw t[1]; + return t[1]; + }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { + return this; + }), g; + function verb(n) { + return function(v) { + return step([n, v]); + }; + } + function step(op) { + if (f) + throw new TypeError("Generator is already executing."); + while (_) + try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) + return t; + if (y = 0, t) + op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: + case 1: + t = op; + break; + case 4: + _.label++; + return { value: op[1], done: false }; + case 5: + _.label++; + y = op[1]; + op = [0]; + continue; + case 7: + op = _.ops.pop(); + _.trys.pop(); + continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { + _ = 0; + continue; + } + if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) { + _.label = op[1]; + break; + } + if (op[0] === 6 && _.label < t[1]) { + _.label = t[1]; + t = op; + break; + } + if (t && _.label < t[2]) { + _.label = t[2]; + _.ops.push(op); + break; + } + if (t[2]) + _.ops.pop(); + _.trys.pop(); + continue; + } + op = body.call(thisArg, _); + } catch (e) { + op = [6, e]; + y = 0; + } finally { + f = t = 0; + } + if (op[0] & 5) + throw op[1]; + return { value: op[0] ? op[1] : void 0, done: true }; + } + }; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.AdaptiveApplet = void 0; + var Enums = require_enums(); + var Utils = require_utils(); + var shared_1 = require_shared(); + var activity_request_1 = require_activity_request(); + var strings_1 = require_strings(); + var card_elements_1 = require_card_elements(); + var serialization_1 = require_serialization(); + function logEvent(level, message) { + var optionalParams = []; + for (var _i = 2; _i < arguments.length; _i++) { + optionalParams[_i - 2] = arguments[_i]; + } + if (shared_1.GlobalSettings.applets.logEnabled) { + if (shared_1.GlobalSettings.applets.onLogEvent) { + shared_1.GlobalSettings.applets.onLogEvent(level, message, optionalParams); + } else { + switch (level) { + case Enums.LogLevel.Warning: + console.warn(message, optionalParams); + break; + case Enums.LogLevel.Error: + console.error(message, optionalParams); + break; + default: + console.log(message, optionalParams); + break; + } + } + } + } + var ActivityRequest = ( + /** @class */ + function() { + function ActivityRequest2(action, trigger, consecutiveRefreshes) { + this.action = action; + this.trigger = trigger; + this.consecutiveRefreshes = consecutiveRefreshes; + this.attemptNumber = 0; + } + ActivityRequest2.prototype.retryAsync = function() { + return __awaiter(this, void 0, void 0, function() { + return __generator(this, function(_a) { + if (this.onSend) { + this.onSend(this); + } + return [ + 2 + /*return*/ + ]; + }); + }); + }; + return ActivityRequest2; + }() + ); + var AdaptiveApplet = ( + /** @class */ + function() { + function AdaptiveApplet2() { + this._allowAutomaticCardUpdate = false; + this.renderedElement = document.createElement("div"); + this.renderedElement.className = "aaf-cardHost"; + this.renderedElement.style.position = "relative"; + this.renderedElement.style.display = "flex"; + this.renderedElement.style.flexDirection = "column"; + this._cardHostElement = document.createElement("div"); + this._refreshButtonHostElement = document.createElement("div"); + this._refreshButtonHostElement.className = "aaf-refreshButtonHost"; + this._refreshButtonHostElement.style.display = "none"; + this.renderedElement.appendChild(this._cardHostElement); + this.renderedElement.appendChild(this._refreshButtonHostElement); + } + AdaptiveApplet2.prototype.displayCard = function(card) { + if (card.renderedElement) { + Utils.clearElementChildren(this._cardHostElement); + this._refreshButtonHostElement.style.display = "none"; + this._cardHostElement.appendChild(card.renderedElement); + } else { + throw new Error("displayCard: undefined card."); + } + }; + AdaptiveApplet2.prototype.showManualRefreshButton = function(refreshAction) { + var _this = this; + var displayBuiltInManualRefreshButton = this.onShowManualRefreshButton ? this.onShowManualRefreshButton(this) : true; + if (displayBuiltInManualRefreshButton) { + this._refreshButtonHostElement.style.display = "none"; + var renderedRefreshButton = void 0; + if (this.onRenderManualRefreshButton) { + renderedRefreshButton = this.onRenderManualRefreshButton(this); + } else { + var message = strings_1.Strings.runtime.refreshThisCard(); + if (shared_1.GlobalSettings.applets.refresh.mode === Enums.RefreshMode.Automatic) { + var autoRefreshPausedMessage = strings_1.Strings.runtime.automaticRefreshPaused(); + if (autoRefreshPausedMessage[autoRefreshPausedMessage.length - 1] !== " ") { + autoRefreshPausedMessage += " "; + } + message = strings_1.Strings.runtime.clckToRestartAutomaticRefresh(); + } + var cardPayload = { + type: "AdaptiveCard", + version: "1.2", + body: [ + { + type: "RichTextBlock", + horizontalAlignment: "right", + inlines: [ + { + type: "TextRun", + text: message, + selectAction: { + type: "Action.Submit", + id: "refreshCard" + } + } + ] + } + ] + }; + var card = new card_elements_1.AdaptiveCard(); + card.parse(cardPayload, new card_elements_1.SerializationContext(serialization_1.Versions.v1_2)); + card.onExecuteAction = function(action) { + if (action.id === "refreshCard") { + Utils.clearElementChildren(_this._refreshButtonHostElement); + _this.internalExecuteAction(refreshAction, activity_request_1.ActivityRequestTrigger.Automatic, 0); + } + }; + renderedRefreshButton = card.render(); + } + if (renderedRefreshButton) { + Utils.clearElementChildren(this._refreshButtonHostElement); + this._refreshButtonHostElement.appendChild(renderedRefreshButton); + this._refreshButtonHostElement.style.removeProperty("display"); + } + } + }; + AdaptiveApplet2.prototype.createActivityRequest = function(action, trigger, consecutiveRefreshes) { + var _this = this; + if (this.card) { + var request_1 = new ActivityRequest(action, trigger, consecutiveRefreshes); + request_1.onSend = function(sender) { + sender.attemptNumber++; + void _this.internalSendActivityRequestAsync(request_1); + }; + var cancel = this.onPrepareActivityRequest ? !this.onPrepareActivityRequest(this, request_1, action) : false; + return cancel ? void 0 : request_1; + } else { + throw new Error("createActivityRequest: no card has been set."); + } + }; + AdaptiveApplet2.prototype.createMagicCodeInputCard = function(attemptNumber) { + var payload = { + type: "AdaptiveCard", + version: "1.0", + body: [ + { + type: "TextBlock", + color: "attention", + text: attemptNumber === 1 ? void 0 : "That didn't work... let's try again.", + wrap: true, + horizontalAlignment: "center" + }, + { + type: "TextBlock", + text: 'Please login in the popup. You will obtain a magic code. Paste that code below and select "Submit"', + wrap: true, + horizontalAlignment: "center" + }, + { + type: "Input.Text", + id: "magicCode", + placeholder: "Enter magic code" + }, + { + type: "ActionSet", + horizontalAlignment: "center", + actions: [ + { + type: "Action.Submit", + id: AdaptiveApplet2._submitMagicCodeActionId, + title: "Submit" + }, + { + type: "Action.Submit", + id: AdaptiveApplet2._cancelMagicCodeAuthActionId, + title: "Cancel" + } + ] + } + ] + }; + var card = new card_elements_1.AdaptiveCard(); + card.parse(payload); + return card; + }; + AdaptiveApplet2.prototype.cancelAutomaticRefresh = function() { + if (this._allowAutomaticCardUpdate) { + logEvent(Enums.LogLevel.Warning, "Automatic card refresh has been cancelled as a result of the user interacting with the card."); + } + this._allowAutomaticCardUpdate = false; + }; + AdaptiveApplet2.prototype.createSerializationContext = function() { + return this.onCreateSerializationContext ? this.onCreateSerializationContext(this) : new card_elements_1.SerializationContext(); + }; + AdaptiveApplet2.prototype.internalSetCard = function(payload, consecutiveRefreshes) { + var _this = this; + if (typeof payload === "object" && payload["type"] === "AdaptiveCard") { + this._cardPayload = payload; + } + if (this._cardPayload) { + try { + var card = new card_elements_1.AdaptiveCard(); + if (this.hostConfig) { + card.hostConfig = this.hostConfig; + } + var serializationContext = this.createSerializationContext(); + card.parse(this._cardPayload, serializationContext); + var doChangeCard = this.onCardChanging ? this.onCardChanging(this, this._cardPayload) : true; + if (doChangeCard) { + this._card = card; + if (this._card.authentication && this._card.authentication.tokenExchangeResource && this.onPrefetchSSOToken) { + this.onPrefetchSSOToken(this, this._card.authentication.tokenExchangeResource); + } + this._card.onExecuteAction = function(action) { + _this.cancelAutomaticRefresh(); + _this.internalExecuteAction(action, activity_request_1.ActivityRequestTrigger.Manual, 0); + }; + this._card.onInputValueChanged = function(_input) { + _this.cancelAutomaticRefresh(); + }; + this._card.render(); + if (this._card.renderedElement) { + this.displayCard(this._card); + if (this.onCardChanged) { + this.onCardChanged(this); + } + if (this._card.refresh) { + if (shared_1.GlobalSettings.applets.refresh.mode === Enums.RefreshMode.Automatic && consecutiveRefreshes < shared_1.GlobalSettings.applets.refresh.maximumConsecutiveAutomaticRefreshes) { + if (shared_1.GlobalSettings.applets.refresh.timeBetweenAutomaticRefreshes <= 0) { + logEvent(Enums.LogLevel.Info, "Triggering automatic card refresh number " + (consecutiveRefreshes + 1)); + this.internalExecuteAction(this._card.refresh.action, activity_request_1.ActivityRequestTrigger.Automatic, consecutiveRefreshes + 1); + } else { + logEvent(Enums.LogLevel.Info, "Scheduling automatic card refresh number " + (consecutiveRefreshes + 1) + " in " + shared_1.GlobalSettings.applets.refresh.timeBetweenAutomaticRefreshes + "ms"); + var action_1 = this._card.refresh.action; + this._allowAutomaticCardUpdate = true; + window.setTimeout(function() { + if (_this._allowAutomaticCardUpdate) { + _this.internalExecuteAction(action_1, activity_request_1.ActivityRequestTrigger.Automatic, consecutiveRefreshes + 1); + } + }, shared_1.GlobalSettings.applets.refresh.timeBetweenAutomaticRefreshes); + } + } else if (shared_1.GlobalSettings.applets.refresh.mode !== Enums.RefreshMode.Disabled) { + if (consecutiveRefreshes > 0) { + logEvent(Enums.LogLevel.Warning, "Stopping automatic refreshes after " + consecutiveRefreshes + " consecutive refreshes."); + } else { + logEvent(Enums.LogLevel.Warning, "The card has a refresh section, but automatic refreshes are disabled."); + } + if (shared_1.GlobalSettings.applets.refresh.allowManualRefreshesAfterAutomaticRefreshes || shared_1.GlobalSettings.applets.refresh.mode === Enums.RefreshMode.Manual) { + logEvent(Enums.LogLevel.Info, "Showing manual refresh button."); + this.showManualRefreshButton(this._card.refresh.action); + } + } + } + } + } + } catch (error) { + logEvent(Enums.LogLevel.Error, "setCard: " + error); + } + } + }; + AdaptiveApplet2.prototype.internalExecuteAction = function(action, trigger, consecutiveRefreshes) { + if (action instanceof card_elements_1.ExecuteAction) { + if (this.channelAdapter) { + var request = this.createActivityRequest(action, trigger, consecutiveRefreshes); + if (request) { + void request.retryAsync(); + } + } else { + throw new Error("internalExecuteAction: No channel adapter set."); + } + } + if (this.onAction) { + this.onAction(this, action); + } + }; + AdaptiveApplet2.prototype.createProgressOverlay = function(request) { + if (!this._progressOverlay) { + if (this.onCreateProgressOverlay) { + this._progressOverlay = this.onCreateProgressOverlay(this, request); + } else { + this._progressOverlay = document.createElement("div"); + this._progressOverlay.className = "aaf-progress-overlay"; + var spinner = document.createElement("div"); + spinner.className = "aaf-spinner"; + spinner.style.width = "28px"; + spinner.style.height = "28px"; + this._progressOverlay.appendChild(spinner); + } + } + return this._progressOverlay; + }; + AdaptiveApplet2.prototype.removeProgressOverlay = function(request) { + if (this.onRemoveProgressOverlay) { + this.onRemoveProgressOverlay(this, request); + } + if (this._progressOverlay !== void 0) { + this.renderedElement.removeChild(this._progressOverlay); + this._progressOverlay = void 0; + } + }; + AdaptiveApplet2.prototype.activityRequestSucceeded = function(response, parsedContent) { + if (this.onActivityRequestSucceeded) { + this.onActivityRequestSucceeded(this, response, parsedContent); + } + }; + AdaptiveApplet2.prototype.activityRequestFailed = function(response) { + return this.onActivityRequestFailed ? this.onActivityRequestFailed(this, response) : shared_1.GlobalSettings.applets.defaultTimeBetweenRetryAttempts; + }; + AdaptiveApplet2.prototype.showAuthCodeInputDialog = function(request) { + var _this = this; + var showBuiltInAuthCodeInputCard = this.onShowAuthCodeInputDialog ? this.onShowAuthCodeInputDialog(this, request) : true; + if (showBuiltInAuthCodeInputCard) { + var authCodeInputCard = this.createMagicCodeInputCard(request.attemptNumber); + authCodeInputCard.render(); + authCodeInputCard.onExecuteAction = function(submitMagicCodeAction) { + if (_this.card && submitMagicCodeAction instanceof card_elements_1.SubmitAction) { + switch (submitMagicCodeAction.id) { + case AdaptiveApplet2._submitMagicCodeActionId: + var authCode = void 0; + if (submitMagicCodeAction.data && typeof submitMagicCodeAction.data["magicCode"] === "string") { + authCode = submitMagicCodeAction.data["magicCode"]; + } + if (authCode) { + _this.displayCard(_this.card); + request.authCode = authCode; + void request.retryAsync(); + } else { + alert("Please enter the magic code you received."); + } + break; + case AdaptiveApplet2._cancelMagicCodeAuthActionId: + logEvent(Enums.LogLevel.Warning, "Authentication cancelled by user."); + _this.displayCard(_this.card); + break; + default: + logEvent(Enums.LogLevel.Error, "Unexpected action taken from magic code input card (id = " + submitMagicCodeAction.id + ")"); + alert(strings_1.Strings.magicCodeInputCard.somethingWentWrong()); + break; + } + } + }; + this.displayCard(authCodeInputCard); + } + }; + AdaptiveApplet2.prototype.internalSendActivityRequestAsync = function(request) { + return __awaiter(this, void 0, void 0, function() { + var overlay, done, _loop_1, this_1, state_1; + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + if (!this.channelAdapter) { + throw new Error("internalSendActivityRequestAsync: channelAdapter is not set."); + } + overlay = this.createProgressOverlay(request); + if (overlay !== void 0) { + this.renderedElement.appendChild(overlay); + } + done = false; + _loop_1 = function() { + var response, error_1, parsedContent, retryIn_1, attemptOAuth, left, top_1; + return __generator(this, function(_b) { + switch (_b.label) { + case 0: + response = void 0; + if (request.attemptNumber === 1) { + logEvent(Enums.LogLevel.Info, "Sending activity request to channel (attempt " + request.attemptNumber + ")"); + } else { + logEvent(Enums.LogLevel.Info, "Re-sending activity request to channel (attempt " + request.attemptNumber + ")"); + } + _b.label = 1; + case 1: + _b.trys.push([1, 3, , 4]); + return [4, this_1.channelAdapter.sendRequestAsync(request)]; + case 2: + response = _b.sent(); + return [3, 4]; + case 3: + error_1 = _b.sent(); + logEvent(Enums.LogLevel.Error, "Activity request failed: " + error_1); + this_1.removeProgressOverlay(request); + done = true; + return [3, 4]; + case 4: + if (!response) + return [3, 10]; + if (!(response instanceof activity_request_1.SuccessResponse)) + return [3, 5]; + this_1.removeProgressOverlay(request); + if (response.rawContent === void 0) { + throw new Error("internalSendActivityRequestAsync: Action.Execute result is undefined"); + } + parsedContent = response.rawContent; + try { + parsedContent = JSON.parse(response.rawContent); + } catch (_c) { + } + if (typeof parsedContent === "string") { + logEvent(Enums.LogLevel.Info, "The activity request returned a string after " + request.attemptNumber + " attempt(s)."); + this_1.activityRequestSucceeded(response, parsedContent); + } else if (typeof parsedContent === "object" && parsedContent["type"] === "AdaptiveCard") { + logEvent(Enums.LogLevel.Info, "The activity request returned an Adaptive Card after " + request.attemptNumber + " attempt(s)."); + this_1.internalSetCard(parsedContent, request.consecutiveRefreshes); + this_1.activityRequestSucceeded(response, this_1.card); + } else { + throw new Error("internalSendActivityRequestAsync: Action.Execute result is of unsupported type (" + typeof response.rawContent + ")"); + } + done = true; + return [3, 10]; + case 5: + if (!(response instanceof activity_request_1.ErrorResponse)) + return [3, 9]; + retryIn_1 = this_1.activityRequestFailed(response); + if (!(retryIn_1 >= 0 && request.attemptNumber < shared_1.GlobalSettings.applets.maximumRetryAttempts)) + return [3, 7]; + logEvent(Enums.LogLevel.Warning, "Activity request failed: ".concat(response.error.message, ". Retrying in ").concat(retryIn_1, "ms")); + request.attemptNumber++; + return [4, new Promise(function(resolve, _reject) { + window.setTimeout(function() { + resolve(); + }, retryIn_1); + })]; + case 6: + _b.sent(); + return [3, 8]; + case 7: + logEvent(Enums.LogLevel.Error, "Activity request failed: ".concat(response.error.message, ". Giving up after ").concat(request.attemptNumber, " attempt(s)")); + this_1.removeProgressOverlay(request); + done = true; + _b.label = 8; + case 8: + return [3, 10]; + case 9: + if (response instanceof activity_request_1.LoginRequestResponse) { + logEvent(Enums.LogLevel.Info, "The activity request returned a LoginRequestResponse after " + request.attemptNumber + " attempt(s)."); + if (request.attemptNumber <= shared_1.GlobalSettings.applets.maximumRetryAttempts) { + attemptOAuth = true; + if (response.tokenExchangeResource && this_1.onSSOTokenNeeded) { + attemptOAuth = !this_1.onSSOTokenNeeded(this_1, request, response.tokenExchangeResource); + } + if (attemptOAuth) { + this_1.removeProgressOverlay(request); + if (response.signinButton === void 0) { + throw new Error("internalSendActivityRequestAsync: the login request doesn't contain a valid signin URL."); + } + logEvent(Enums.LogLevel.Info, "Login required at " + response.signinButton.value); + if (this_1.onShowSigninPrompt) { + this_1.onShowSigninPrompt(this_1, request, response.signinButton); + } else { + this_1.showAuthCodeInputDialog(request); + left = window.screenX + (window.outerWidth - shared_1.GlobalSettings.applets.authPromptWidth) / 2; + top_1 = window.screenY + (window.outerHeight - shared_1.GlobalSettings.applets.authPromptHeight) / 2; + window.open(response.signinButton.value, response.signinButton.title ? response.signinButton.title : "Sign in", "width=".concat(shared_1.GlobalSettings.applets.authPromptWidth, ",height=").concat(shared_1.GlobalSettings.applets.authPromptHeight, ",left=").concat(left, ",top=").concat(top_1)); + } + } + } else { + logEvent(Enums.LogLevel.Error, "Authentication failed. Giving up after " + request.attemptNumber + " attempt(s)"); + alert(strings_1.Strings.magicCodeInputCard.authenticationFailed()); + } + return [2, "break"]; + } else { + throw new Error("Unhandled response type: " + JSON.stringify(response)); + } + _b.label = 10; + case 10: + return [ + 2 + /*return*/ + ]; + } + }); + }; + this_1 = this; + _a.label = 1; + case 1: + if (!!done) + return [3, 3]; + return [5, _loop_1()]; + case 2: + state_1 = _a.sent(); + if (state_1 === "break") + return [3, 3]; + return [3, 1]; + case 3: + return [ + 2 + /*return*/ + ]; + } + }); + }); + }; + AdaptiveApplet2.prototype.refreshCard = function() { + if (this._card && this._card.refresh) { + this.internalExecuteAction(this._card.refresh.action, activity_request_1.ActivityRequestTrigger.Manual, 0); + } + }; + AdaptiveApplet2.prototype.setCard = function(payload) { + this.internalSetCard(payload, 0); + }; + Object.defineProperty(AdaptiveApplet2.prototype, "card", { + get: function() { + return this._card; + }, + enumerable: false, + configurable: true + }); + AdaptiveApplet2._submitMagicCodeActionId = "submitMagicCode"; + AdaptiveApplet2._cancelMagicCodeAuthActionId = "cancelMagicCodeAuth"; + return AdaptiveApplet2; + }() + ); + exports.AdaptiveApplet = AdaptiveApplet; + } +}); + +// node_modules/adaptivecards/lib/adaptivecards.js +var require_adaptivecards = __commonJS({ + "node_modules/adaptivecards/lib/adaptivecards.js"(exports) { + var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { + if (k2 === void 0) + k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { + return m[k]; + } }; + } + Object.defineProperty(o, k2, desc); + } : function(o, m, k, k2) { + if (k2 === void 0) + k2 = k; + o[k2] = m[k]; + }); + var __exportStar = exports && exports.__exportStar || function(m, exports2) { + for (var p in m) + if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) + __createBinding(exports2, m, p); + }; + Object.defineProperty(exports, "__esModule", { value: true }); + __exportStar(require_strings(), exports); + __exportStar(require_enums(), exports); + __exportStar(require_shared(), exports); + __exportStar(require_utils(), exports); + __exportStar(require_serialization(), exports); + __exportStar(require_host_capabilities(), exports); + __exportStar(require_host_config(), exports); + __exportStar(require_registry(), exports); + __exportStar(require_card_object(), exports); + __exportStar(require_card_elements(), exports); + __exportStar(require_table(), exports); + __exportStar(require_channel_adapter(), exports); + __exportStar(require_activity_request(), exports); + __exportStar(require_adaptive_applet(), exports); + } +}); +export default require_adaptivecards(); +/*! Bundled license information: + +adaptivecards/lib/shared.js: + (** + * Fast UUID generator, RFC4122 version 4 compliant. + * @author Jeff Ward (jcward.com). + * @license MIT license + * @link http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136 + **) +*/ +//# sourceMappingURL=adaptivecards.js.map diff --git a/docs/.vitepress/cache/deps/adaptivecards.js.map b/docs/.vitepress/cache/deps/adaptivecards.js.map new file mode 100644 index 0000000..4b0a288 --- /dev/null +++ b/docs/.vitepress/cache/deps/adaptivecards.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../../../node_modules/adaptivecards/src/strings.ts", "../../../../node_modules/adaptivecards/src/enums.ts", "../../../../node_modules/adaptivecards/src/shared.ts", "../../../../node_modules/adaptivecards/src/utils.ts", "../../../../node_modules/adaptivecards/src/serialization.ts", "../../../../node_modules/adaptivecards/src/host-capabilities.ts", "../../../../node_modules/adaptivecards/src/host-config.ts", "../../../../node_modules/adaptivecards/src/registry.ts", "../../../../node_modules/adaptivecards/src/card-object.ts", "../../../../node_modules/adaptivecards/src/text-formatters.ts", "../../../../node_modules/adaptivecards/src/controls/constants.ts", "../../../../node_modules/adaptivecards/src/controls/menu-item.ts", "../../../../node_modules/adaptivecards/src/controls/collection.ts", "../../../../node_modules/adaptivecards/src/controls/popup-control.ts", "../../../../node_modules/adaptivecards/src/controls/popup-menu.ts", "../../../../node_modules/adaptivecards/src/controls/index.ts", "../../../../node_modules/adaptivecards/src/card-elements.ts", "../../../../node_modules/adaptivecards/src/table.ts", "../../../../node_modules/adaptivecards/src/channel-adapter.ts", "../../../../node_modules/adaptivecards/src/activity-request.ts", "../../../../node_modules/adaptivecards/src/adaptive-applet.ts", "../../../../node_modules/adaptivecards/src/adaptivecards.ts"], + "sourcesContent": ["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\r\nexport class Strings {\r\n static readonly errors = {\r\n unknownElementType: (typeName: string) =>\r\n `Unknown element type \"${typeName}\". Fallback will be used if present.`,\r\n unknownActionType: (typeName: string) =>\r\n `Unknown action type \"${typeName}\". Fallback will be used if present.`,\r\n elementTypeNotAllowed: (typeName: string) =>\r\n `Element type \"${typeName}\" is not allowed in this context.`,\r\n actionTypeNotAllowed: (typeName: string) =>\r\n `Action type \"${typeName}\" is not allowed in this context.`,\r\n invalidPropertyValue: (value: any, propertyName: string) =>\r\n `Invalid value \"${value}\" for property \"${propertyName}\".`,\r\n showCardMustHaveCard: () =>\r\n `\"An Action.ShowCard must have its \"card\" property set to a valid AdaptiveCard object.`,\r\n invalidColumnWidth: (invalidWidth: string) =>\r\n `Invalid column width \"${invalidWidth}\" - defaulting to \"auto\".`,\r\n invalidCardVersion: (defaultingToVersion: string) =>\r\n `Invalid card version. Defaulting to \"${defaultingToVersion}\".`,\r\n invalidVersionString: (versionString: string) =>\r\n `Invalid version string \"${versionString}\".`,\r\n propertyValueNotSupported: (\r\n value: any,\r\n propertyName: string,\r\n supportedInVersion: string,\r\n versionUsed: string\r\n ) =>\r\n `Value \"${value}\" for property \"${propertyName}\" is supported in version ${supportedInVersion}, but you are using version ${versionUsed}.`,\r\n propertyNotSupported: (\r\n propertyName: string,\r\n supportedInVersion: string,\r\n versionUsed: string\r\n ) =>\r\n `Property \"${propertyName}\" is supported in version ${supportedInVersion}, but you are using version ${versionUsed}.`,\r\n indexOutOfRange: (index: number) => `Index out of range (${index}).`,\r\n elementCannotBeUsedAsInline: () =>\r\n \"RichTextBlock.addInline: the specified card element cannot be used as a RichTextBlock inline.\",\r\n inlineAlreadyParented: () =>\r\n \"RichTextBlock.addInline: the specified inline already belongs to another RichTextBlock.\",\r\n interactivityNotAllowed: () => \"Interactivity is not allowed.\",\r\n inputsMustHaveUniqueId: () => \"All inputs must have a unique Id.\",\r\n choiceSetMustHaveAtLeastOneChoice: () =>\r\n \"An Input.ChoiceSet must have at least one choice defined.\",\r\n choiceSetChoicesMustHaveTitleAndValue: () =>\r\n \"All choices in an Input.ChoiceSet must have their title and value properties set.\",\r\n propertyMustBeSet: (propertyName: string) => `Property \"${propertyName}\" must be set.`,\r\n actionHttpHeadersMustHaveNameAndValue: () =>\r\n \"All headers of an Action.Http must have their name and value properties set.\",\r\n tooManyActions: (maximumActions: number) =>\r\n `Maximum number of actions exceeded (${maximumActions}).`,\r\n tooLittleTimeDelay: (minAutoplayDelay: number) =>\r\n `Autoplay Delay is too short (${minAutoplayDelay}).`,\r\n columnAlreadyBelongsToAnotherSet: () => \"This column already belongs to another ColumnSet.\",\r\n invalidCardType: () =>\r\n `Invalid or missing card type. Make sure the card's type property is set to \"AdaptiveCard\".`,\r\n unsupportedCardVersion: (version: string, maxSupportedVersion: string) =>\r\n `The specified card version (${version}) is not supported or still in preview. The latest released card version is ${maxSupportedVersion}.`,\r\n duplicateId: (id: string) => `Duplicate Id \"${id}\".`,\r\n markdownProcessingNotEnabled: () =>\r\n \"Markdown processing isn't enabled. Please see https://www.npmjs.com/package/adaptivecards#supporting-markdown\",\r\n processMarkdownEventRemoved: () =>\r\n \"The processMarkdown event has been removed. Please update your code and set onProcessMarkdown instead.\",\r\n elementAlreadyParented: () => \"The element already belongs to another container.\",\r\n actionAlreadyParented: () => \"The action already belongs to another element.\",\r\n elementTypeNotStandalone: (typeName: string) =>\r\n `Elements of type ${typeName} cannot be used as standalone elements.`\r\n };\r\n static readonly magicCodeInputCard = {\r\n tryAgain: () => \"That didn't work... let's try again.\",\r\n pleaseLogin: () =>\r\n 'Please login in the popup. You will obtain a magic code. Paste that code below and select \"Submit\"',\r\n enterMagicCode: () => \"Enter magic code\",\r\n pleaseEnterMagicCodeYouReceived: () => \"Please enter the magic code you received.\",\r\n submit: () => \"Submit\",\r\n cancel: () => \"Cancel\",\r\n somethingWentWrong: () => \"Something went wrong. This action can't be handled.\",\r\n authenticationFailed: () => \"Authentication failed.\"\r\n };\r\n static readonly runtime = {\r\n automaticRefreshPaused: () => \"Automatic refresh paused.\",\r\n clckToRestartAutomaticRefresh: () => \"Click to restart.\",\r\n refreshThisCard: () => \"Refresh this card\"\r\n };\r\n static readonly hints = {\r\n dontUseWeightedAndStrecthedColumnsInSameSet: () =>\r\n \"It is not recommended to use weighted and stretched columns in the same ColumnSet, because in such a situation stretched columns will always get the minimum amount of space.\"\r\n };\r\n static readonly defaults = {\r\n inlineActionTitle: () => \"Inline Action\",\r\n overflowButtonText: () => \"...\",\r\n mediaPlayerAriaLabel: () => \"Media content\",\r\n mediaPlayerPlayMedia: () => \"Play media\",\r\n youTubeVideoPlayer: () => \"YouTube video player\",\r\n vimeoVideoPlayer: () => \"Vimeo video player\",\r\n dailymotionVideoPlayer: () => \"Dailymotion video player\"\r\n };\r\n}\r\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n/*\r\n This should really be a string enum, e.g.\r\n\r\n export enum ContainerStyle {\r\n Default = \"default\",\r\n Emphasis = \"emphasis\"\r\n }\r\n\r\n However, some hosts do not use a version of TypeScript\r\n recent enough to understand string enums. This is\r\n a compatible construct that does not require using\r\n a more recent version of TypeScript.\r\n\r\n Also note the \"weird\" way these readonly fields are declared is to work around\r\n a breaking change introduced in TS 3.1 wrt d.ts generation. DO NOT CHANGE\r\n and adopt this syntax for all other static readonly fields.\r\n*/\r\n/* eslint-disable @typescript-eslint/no-extraneous-class, @typescript-eslint/naming-convention */\r\nexport class ContainerStyle {\r\n static readonly Default: \"default\" = \"default\";\r\n static readonly Emphasis: \"emphasis\" = \"emphasis\";\r\n static readonly Accent: \"accent\" = \"accent\";\r\n static readonly Good: \"good\" = \"good\";\r\n static readonly Attention: \"attention\" = \"attention\";\r\n static readonly Warning: \"warning\" = \"warning\";\r\n}\r\n\r\nexport class ActionStyle {\r\n static readonly Default: \"default\" = \"default\";\r\n static readonly Positive: \"positive\" = \"positive\";\r\n static readonly Destructive: \"destructive\" = \"destructive\";\r\n}\r\n\r\nexport class ActionMode {\r\n static readonly Primary: \"primary\" = \"primary\";\r\n static readonly Secondary: \"secondary\" = \"secondary\";\r\n}\r\n/* eslint-enable @typescript-eslint/no-extraneous-class, @typescript-eslint/naming-convention */\r\n\r\nexport enum Size {\r\n Auto,\r\n Stretch,\r\n Small,\r\n Medium,\r\n Large\r\n}\r\n\r\nexport enum ImageSize {\r\n Small,\r\n Medium,\r\n Large\r\n}\r\n\r\nexport enum SizeUnit {\r\n Weight,\r\n Pixel\r\n}\r\n\r\nexport enum TextSize {\r\n Small,\r\n Default,\r\n Medium,\r\n Large,\r\n ExtraLarge\r\n}\r\n\r\nexport enum TextWeight {\r\n Lighter,\r\n Default,\r\n Bolder\r\n}\r\n\r\nexport enum FontType {\r\n Default,\r\n Monospace\r\n}\r\n\r\nexport enum Spacing {\r\n None,\r\n Small,\r\n Default,\r\n Medium,\r\n Large,\r\n ExtraLarge,\r\n Padding\r\n}\r\n\r\nexport enum TextColor {\r\n Default,\r\n Dark,\r\n Light,\r\n Accent,\r\n Good,\r\n Warning,\r\n Attention\r\n}\r\n\r\nexport enum HorizontalAlignment {\r\n Left,\r\n Center,\r\n Right\r\n}\r\n\r\nexport enum VerticalAlignment {\r\n Top,\r\n Center,\r\n Bottom\r\n}\r\n\r\nexport enum ActionAlignment {\r\n Left,\r\n Center,\r\n Right,\r\n Stretch\r\n}\r\n\r\nexport enum ImageStyle {\r\n Default,\r\n Person\r\n}\r\n\r\nexport enum ShowCardActionMode {\r\n Inline,\r\n Popup\r\n}\r\n\r\nexport enum Orientation {\r\n Horizontal,\r\n Vertical\r\n}\r\n\r\nexport enum FillMode {\r\n Cover,\r\n RepeatHorizontally,\r\n RepeatVertically,\r\n Repeat\r\n}\r\n\r\nexport enum ActionIconPlacement {\r\n LeftOfTitle,\r\n AboveTitle\r\n}\r\n\r\nexport enum InputTextStyle {\r\n Text,\r\n Tel,\r\n Url,\r\n Email,\r\n Password\r\n}\r\n\r\nexport enum ValidationPhase {\r\n Parse,\r\n ToJSON,\r\n Validation\r\n}\r\n\r\nexport enum ValidationEvent {\r\n Hint,\r\n ActionTypeNotAllowed,\r\n CollectionCantBeEmpty,\r\n Deprecated,\r\n ElementTypeNotAllowed,\r\n InteractivityNotAllowed,\r\n InvalidPropertyValue,\r\n MissingCardType,\r\n PropertyCantBeNull,\r\n TooManyActions,\r\n UnknownActionType,\r\n UnknownElementType,\r\n UnsupportedCardVersion,\r\n DuplicateId,\r\n UnsupportedProperty,\r\n RequiredInputsShouldHaveLabel,\r\n RequiredInputsShouldHaveErrorMessage,\r\n Other\r\n}\r\n\r\nexport enum ContainerFitStatus {\r\n FullyInContainer,\r\n Overflowing,\r\n FullyOutOfContainer\r\n}\r\n\r\nexport enum TypeErrorType {\r\n UnknownType,\r\n ForbiddenType\r\n}\r\n\r\nexport enum RefreshMode {\r\n Disabled,\r\n Manual,\r\n Automatic\r\n}\r\n\r\nexport enum LogLevel {\r\n Info,\r\n Warning,\r\n Error\r\n}", "// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport * as Enums from \"./enums\";\r\n\r\nexport type Refresh = {\r\n mode: Enums.RefreshMode;\r\n timeBetweenAutomaticRefreshes: number;\r\n maximumConsecutiveAutomaticRefreshes: number;\r\n allowManualRefreshesAfterAutomaticRefreshes: boolean;\r\n};\r\n\r\nexport type AppletsSettings = {\r\n logEnabled: boolean;\r\n logLevel: Enums.LogLevel;\r\n maximumRetryAttempts: number;\r\n defaultTimeBetweenRetryAttempts: number;\r\n authPromptWidth: number;\r\n authPromptHeight: number;\r\n readonly refresh: Refresh;\r\n onLogEvent?: (level: Enums.LogLevel, message?: any, ...optionalParams: any[]) => void;\r\n};\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\r\nexport class GlobalSettings {\r\n static useAdvancedTextBlockTruncation: boolean = true;\r\n static useAdvancedCardBottomTruncation: boolean = false;\r\n static useMarkdownInRadioButtonAndCheckbox: boolean = true;\r\n static allowMarkForTextHighlighting: boolean = false;\r\n static alwaysBleedSeparators: boolean = false;\r\n static enableFullJsonRoundTrip: boolean = false;\r\n static displayInputValidationErrors: boolean = true;\r\n static allowPreProcessingPropertyValues: boolean = false;\r\n static setTabIndexAtCardRoot: boolean = true;\r\n static enableFallback: boolean = true;\r\n static useWebkitLineClamp: boolean = true;\r\n static allowMoreThanMaxActionsInOverflowMenu: boolean = false;\r\n static removePaddingFromContainersWithBackgroundImage: boolean = false;\r\n static resetInputsDirtyStateAfterActionExecution: boolean = true;\r\n\r\n static readonly applets: AppletsSettings = {\r\n logEnabled: true,\r\n logLevel: Enums.LogLevel.Error,\r\n maximumRetryAttempts: 3,\r\n defaultTimeBetweenRetryAttempts: 3000, // 3 seconds\r\n authPromptWidth: 400,\r\n authPromptHeight: 600,\r\n refresh: {\r\n mode: Enums.RefreshMode.Manual,\r\n timeBetweenAutomaticRefreshes: 3000, // 3 seconds\r\n maximumConsecutiveAutomaticRefreshes: 3,\r\n allowManualRefreshesAfterAutomaticRefreshes: true\r\n }\r\n };\r\n}\r\n\r\nexport const ContentTypes = {\r\n applicationJson: \"application/json\",\r\n applicationXWwwFormUrlencoded: \"application/x-www-form-urlencoded\"\r\n};\r\n\r\nexport interface ISeparationDefinition {\r\n spacing: number;\r\n lineThickness?: number;\r\n lineColor?: string;\r\n}\r\n\r\nexport interface IInput {\r\n id?: string;\r\n value?: string;\r\n validateValue(): boolean;\r\n}\r\n\r\nexport type Dictionary = { [key: string]: T };\r\n\r\nexport class StringWithSubstitutions {\r\n private _isProcessed: boolean = false;\r\n private _original?: string;\r\n private _processed?: string;\r\n\r\n getReferencedInputs(inputs: IInput[], referencedInputs: Dictionary) {\r\n if (!referencedInputs) {\r\n throw new Error(\"The referencedInputs parameter cannot be null.\");\r\n }\r\n\r\n if (this._original) {\r\n for (const input of inputs) {\r\n const matches = new RegExp(\"\\\\{{2}(\" + input.id + \").value\\\\}{2}\", \"gi\").exec(\r\n this._original\r\n );\r\n\r\n if (matches != null && input.id) {\r\n referencedInputs[input.id] = input;\r\n }\r\n }\r\n }\r\n }\r\n\r\n substituteInputValues(inputs: Dictionary, contentType: string) {\r\n this._processed = this._original;\r\n\r\n if (this._original) {\r\n const regEx = /\\{{2}([a-z0-9_$@]+).value\\}{2}/gi;\r\n let matches;\r\n\r\n while ((matches = regEx.exec(this._original)) !== null && this._processed) {\r\n for (const key of Object.keys(inputs)) {\r\n if (key.toLowerCase() === matches[1].toLowerCase()) {\r\n const matchedInput = inputs[key];\r\n\r\n let valueForReplace = \"\";\r\n\r\n if (matchedInput.value) {\r\n valueForReplace = matchedInput.value;\r\n }\r\n\r\n if (contentType === ContentTypes.applicationJson) {\r\n valueForReplace = JSON.stringify(valueForReplace);\r\n valueForReplace = valueForReplace.slice(1, -1);\r\n } else if (contentType === ContentTypes.applicationXWwwFormUrlencoded) {\r\n valueForReplace = encodeURIComponent(valueForReplace);\r\n }\r\n\r\n this._processed = this._processed.replace(matches[0], valueForReplace);\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._isProcessed = true;\r\n }\r\n\r\n getOriginal(): string | undefined {\r\n return this._original;\r\n }\r\n\r\n get(): string | undefined {\r\n if (!this._isProcessed) {\r\n return this._original;\r\n } else {\r\n return this._processed;\r\n }\r\n }\r\n\r\n set(value: string | undefined) {\r\n this._original = value;\r\n this._isProcessed = false;\r\n }\r\n}\r\n\r\nexport class SpacingDefinition {\r\n left: number = 0;\r\n top: number = 0;\r\n right: number = 0;\r\n bottom: number = 0;\r\n\r\n constructor(top: number = 0, right: number = 0, bottom: number = 0, left: number = 0) {\r\n this.top = top;\r\n this.right = right;\r\n this.bottom = bottom;\r\n this.left = left;\r\n }\r\n}\r\n\r\nexport class PaddingDefinition {\r\n top: Enums.Spacing = Enums.Spacing.None;\r\n right: Enums.Spacing = Enums.Spacing.None;\r\n bottom: Enums.Spacing = Enums.Spacing.None;\r\n left: Enums.Spacing = Enums.Spacing.None;\r\n\r\n constructor(\r\n top: Enums.Spacing = Enums.Spacing.None,\r\n right: Enums.Spacing = Enums.Spacing.None,\r\n bottom: Enums.Spacing = Enums.Spacing.None,\r\n left: Enums.Spacing = Enums.Spacing.None\r\n ) {\r\n this.top = top;\r\n this.right = right;\r\n this.bottom = bottom;\r\n this.left = left;\r\n }\r\n}\r\n\r\nexport class SizeAndUnit {\r\n physicalSize: number;\r\n unit: Enums.SizeUnit;\r\n\r\n static parse(input: string, requireUnitSpecifier: boolean = false): SizeAndUnit {\r\n const result = new SizeAndUnit(0, Enums.SizeUnit.Weight);\r\n\r\n if (typeof input === \"number\") {\r\n result.physicalSize = input;\r\n\r\n return result;\r\n } else if (typeof input === \"string\") {\r\n const regExp = /^([0-9]+)(px|\\*)?$/g;\r\n const matches = regExp.exec(input);\r\n const expectedMatchCount = requireUnitSpecifier ? 3 : 2;\r\n\r\n if (matches && matches.length >= expectedMatchCount) {\r\n result.physicalSize = parseInt(matches[1]);\r\n\r\n if (matches.length === 3) {\r\n if (matches[2] === \"px\") {\r\n result.unit = Enums.SizeUnit.Pixel;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n }\r\n\r\n throw new Error(\"Invalid size: \" + input);\r\n }\r\n\r\n constructor(physicalSize: number, unit: Enums.SizeUnit) {\r\n this.physicalSize = physicalSize;\r\n this.unit = unit;\r\n }\r\n}\r\n\r\nexport interface IResourceInformation {\r\n url: string;\r\n mimeType: string;\r\n}\r\n\r\n/**\r\n * Fast UUID generator, RFC4122 version 4 compliant.\r\n * @author Jeff Ward (jcward.com).\r\n * @license MIT license\r\n * @link http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\r\n **/\r\n/* eslint-disable @typescript-eslint/no-extraneous-class, @typescript-eslint/naming-convention, no-bitwise */\r\nexport class UUID {\r\n private static lut: string[] = [];\r\n\r\n static generate(): string {\r\n const d0 = (Math.random() * 0xffffffff) | 0;\r\n const d1 = (Math.random() * 0xffffffff) | 0;\r\n const d2 = (Math.random() * 0xffffffff) | 0;\r\n const d3 = (Math.random() * 0xffffffff) | 0;\r\n\r\n return (\r\n UUID.lut[d0 & 0xff] +\r\n UUID.lut[(d0 >> 8) & 0xff] +\r\n UUID.lut[(d0 >> 16) & 0xff] +\r\n UUID.lut[(d0 >> 24) & 0xff] +\r\n \"-\" +\r\n UUID.lut[d1 & 0xff] +\r\n UUID.lut[(d1 >> 8) & 0xff] +\r\n \"-\" +\r\n UUID.lut[((d1 >> 16) & 0x0f) | 0x40] +\r\n UUID.lut[(d1 >> 24) & 0xff] +\r\n \"-\" +\r\n UUID.lut[(d2 & 0x3f) | 0x80] +\r\n UUID.lut[(d2 >> 8) & 0xff] +\r\n \"-\" +\r\n UUID.lut[(d2 >> 16) & 0xff] +\r\n UUID.lut[(d2 >> 24) & 0xff] +\r\n UUID.lut[d3 & 0xff] +\r\n UUID.lut[(d3 >> 8) & 0xff] +\r\n UUID.lut[(d3 >> 16) & 0xff] +\r\n UUID.lut[(d3 >> 24) & 0xff]\r\n );\r\n }\r\n\r\n static initialize() {\r\n for (let i = 0; i < 256; i++) {\r\n UUID.lut[i] = (i < 16 ? \"0\" : \"\") + i.toString(16);\r\n }\r\n }\r\n}\r\n\r\nUUID.initialize();\r\n/* eslint-enable @typescript-eslint/no-extraneous-class, @typescript-eslint/naming-convention, no-bitwise */\r\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport * as Enums from \"./enums\";\r\nimport * as Shared from \"./shared\";\r\n\r\n// To work around TypeScript complaining about documentMode not being declared\r\n// on type Document\r\ndeclare global {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n interface Document {\r\n documentMode?: any;\r\n }\r\n}\r\n\r\nexport function isInternetExplorer(): boolean {\r\n // The documentMode property only exists in IE\r\n return window.document.documentMode !== undefined;\r\n}\r\n\r\nexport function isMobileOS(): boolean {\r\n const userAgent = window.navigator.userAgent;\r\n\r\n return (\r\n !!userAgent.match(/Android/i) || !!userAgent.match(/iPad/i) || !!userAgent.match(/iPhone/i)\r\n );\r\n}\r\n\r\n/**\r\n * Generate a UUID prepended with \"__ac-\"\r\n */\r\nexport function generateUniqueId(): string {\r\n return \"__ac-\" + Shared.UUID.generate();\r\n}\r\n\r\nexport function appendChild(node: Node, child: Node | undefined) {\r\n if (child) {\r\n node.appendChild(child);\r\n }\r\n}\r\n\r\nexport function parseString(obj: any, defaultValue?: string): string | undefined {\r\n return typeof obj === \"string\" ? obj : defaultValue;\r\n}\r\n\r\nexport function parseNumber(obj: any, defaultValue?: number): number | undefined {\r\n return typeof obj === \"number\" ? obj : defaultValue;\r\n}\r\n\r\nexport function parseBool(value: any, defaultValue?: boolean): boolean | undefined {\r\n if (typeof value === \"boolean\") {\r\n return value;\r\n } else if (typeof value === \"string\") {\r\n switch (value.toLowerCase()) {\r\n case \"true\":\r\n return true;\r\n case \"false\":\r\n return false;\r\n default:\r\n return defaultValue;\r\n }\r\n }\r\n\r\n return defaultValue;\r\n}\r\n\r\nexport function getEnumValueByName(\r\n enumType: { [s: number]: string },\r\n name: string\r\n): number | undefined {\r\n // eslint-disable-next-line guard-for-in\r\n for (const key in enumType) {\r\n const keyAsNumber = parseInt(key, 10);\r\n\r\n if (keyAsNumber >= 0) {\r\n const value = enumType[key];\r\n\r\n if (value && typeof value === \"string\" && value.toLowerCase() === name.toLowerCase()) {\r\n return keyAsNumber;\r\n }\r\n }\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport function parseEnum(\r\n enumType: { [s: number]: string },\r\n name: string,\r\n defaultValue?: number\r\n): number | undefined {\r\n if (!name) {\r\n return defaultValue;\r\n }\r\n\r\n const enumValue = getEnumValueByName(enumType, name);\r\n\r\n return enumValue !== undefined ? enumValue : defaultValue;\r\n}\r\n\r\nexport function stringToCssColor(color: string | undefined): string | undefined {\r\n if (color) {\r\n const regEx = /#([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})?/gi;\r\n const matches = regEx.exec(color);\r\n\r\n if (matches && matches[4]) {\r\n const a = parseInt(matches[1], 16) / 255;\r\n const r = parseInt(matches[2], 16);\r\n const g = parseInt(matches[3], 16);\r\n const b = parseInt(matches[4], 16);\r\n\r\n return \"rgba(\" + r + \",\" + g + \",\" + b + \",\" + a + \")\";\r\n }\r\n }\r\n\r\n return color;\r\n}\r\n\r\nfunction truncateWorker(\r\n element: HTMLElement,\r\n maxHeight: number,\r\n fullText: string,\r\n truncateAt: (text: string, idx: number) => void,\r\n lineHeight?: number\r\n) {\r\n const fits = () => {\r\n // Allow a one pixel overflow to account for rounding differences\r\n // between browsers\r\n return maxHeight - element.scrollHeight >= -1.0;\r\n };\r\n\r\n if (fits()) {\r\n return;\r\n }\r\n\r\n const breakableIndices = findBreakableIndices(fullText);\r\n let lo = 0;\r\n let hi = breakableIndices.length;\r\n let bestBreakIdx = 0;\r\n\r\n // Do a binary search for the longest string that fits\r\n while (lo < hi) {\r\n const mid = Math.floor((lo + hi) / 2);\r\n truncateAt(fullText, breakableIndices[mid]);\r\n\r\n if (fits()) {\r\n bestBreakIdx = breakableIndices[mid];\r\n lo = mid + 1;\r\n } else {\r\n hi = mid;\r\n }\r\n }\r\n\r\n truncateAt(fullText, bestBreakIdx);\r\n\r\n // If we have extra room, try to expand the string letter by letter\r\n // (covers the case where we have to break in the middle of a long word)\r\n if (lineHeight && maxHeight - element.scrollHeight >= lineHeight - 1.0) {\r\n let idx = findNextCharacter(fullText, bestBreakIdx);\r\n\r\n while (idx < fullText.length) {\r\n truncateAt(fullText, idx);\r\n\r\n if (fits()) {\r\n bestBreakIdx = idx;\r\n idx = findNextCharacter(fullText, idx);\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n truncateAt(fullText, bestBreakIdx);\r\n }\r\n}\r\n\r\nexport function truncateText(element: HTMLElement, maxHeight: number, lineHeight?: number) {\r\n truncateWorker(\r\n element,\r\n maxHeight,\r\n element.innerText,\r\n (text: string, idx: number) => {\r\n element.innerText = text.substring(0, idx) + \"...\";\r\n },\r\n lineHeight\r\n );\r\n}\r\n\r\n/**\r\n * {@link truncate} has been deprecated and is no longer in use internally. This policy passes\r\n * content through as it always has, which is _supposed_ to be dealing with text only (see {@link\r\n * TextBlock.truncateIfSupported}), but had a bug where it might actually pass through an element\r\n * for which innerHTML yielded actual HTML (since fixed).\r\n */\r\nconst ttDeprecatedPolicy = (typeof window === 'undefined') ? undefined : window.trustedTypes?.createPolicy(\"adaptivecards#deprecatedExportedFunctionPolicy\", {\r\n createHTML: (value) => value\r\n});\r\n\r\n/** @deprecated Use {@link truncateText} instead. */\r\nexport function truncate(element: HTMLElement, maxHeight: number, lineHeight?: number) {\r\n truncateWorker(\r\n element,\r\n maxHeight,\r\n element.innerHTML,\r\n (text: string, idx: number) => {\r\n const truncatedString = text.substring(0, idx) + \"...\";\r\n const truncatedHTML =\r\n ttDeprecatedPolicy?.createHTML(truncatedString) ?? truncatedString;\r\n element.innerHTML = truncatedHTML as string;\r\n },\r\n lineHeight\r\n );\r\n}\r\n\r\nfunction findBreakableIndices(html: string): number[] {\r\n const results: number[] = [];\r\n let idx = findNextCharacter(html, -1);\r\n\r\n while (idx < html.length) {\r\n if (html[idx] === \" \") {\r\n results.push(idx);\r\n }\r\n\r\n idx = findNextCharacter(html, idx);\r\n }\r\n\r\n return results;\r\n}\r\n\r\nfunction findNextCharacter(html: string, currIdx: number): number {\r\n currIdx += 1;\r\n\r\n // If we found the start of an HTML tag, keep advancing until we get\r\n // past it, so we don't end up truncating in the middle of the tag\r\n while (currIdx < html.length && html[currIdx] === \"<\") {\r\n while (currIdx < html.length && html[currIdx++] !== \">\") {\r\n continue;\r\n }\r\n }\r\n\r\n return currIdx;\r\n}\r\n\r\nexport function getFitStatus(element: HTMLElement, containerEnd: number): Enums.ContainerFitStatus {\r\n const start = element.offsetTop;\r\n const end = start + element.clientHeight;\r\n\r\n if (end <= containerEnd) {\r\n return Enums.ContainerFitStatus.FullyInContainer;\r\n } else if (start < containerEnd) {\r\n return Enums.ContainerFitStatus.Overflowing;\r\n } else {\r\n return Enums.ContainerFitStatus.FullyOutOfContainer;\r\n }\r\n}\r\n\r\nexport function getScrollX(): number {\r\n return window.pageXOffset;\r\n}\r\n\r\nexport function getScrollY(): number {\r\n return window.pageYOffset;\r\n}\r\n\r\nexport function clearElementChildren(element: HTMLElement) {\r\n while (element.firstChild) {\r\n element.removeChild(element.firstChild);\r\n }\r\n}", "// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { GlobalSettings, SizeAndUnit } from \"./shared\";\r\nimport * as Utils from \"./utils\";\r\nimport * as Enums from \"./enums\";\r\nimport { Strings } from \"./strings\";\r\n\r\nexport interface IValidationEvent {\r\n source?: SerializableObject;\r\n phase: Enums.ValidationPhase;\r\n event: Enums.ValidationEvent;\r\n message: string;\r\n}\r\n\r\nexport class Version {\r\n private _versionString: string;\r\n private _major: number;\r\n private _minor: number;\r\n private _isValid: boolean = true;\r\n private _label?: string;\r\n\r\n constructor(major: number = 1, minor: number = 1, label?: string) {\r\n this._major = major;\r\n this._minor = minor;\r\n this._label = label;\r\n }\r\n\r\n static parse(versionString: string, context: BaseSerializationContext): Version | undefined {\r\n if (!versionString) {\r\n return undefined;\r\n }\r\n\r\n const result = new Version();\r\n result._versionString = versionString;\r\n\r\n const regEx = /(\\d+).(\\d+)/gi;\r\n const matches = regEx.exec(versionString);\r\n\r\n if (matches != null && matches.length === 3) {\r\n result._major = parseInt(matches[1]);\r\n result._minor = parseInt(matches[2]);\r\n } else {\r\n result._isValid = false;\r\n }\r\n\r\n if (!result._isValid) {\r\n context.logParseEvent(\r\n undefined,\r\n Enums.ValidationEvent.InvalidPropertyValue,\r\n Strings.errors.invalidVersionString(result._versionString)\r\n );\r\n }\r\n\r\n return result;\r\n }\r\n\r\n toString(): string {\r\n return !this._isValid ? this._versionString : this._major + \".\" + this._minor;\r\n }\r\n\r\n toJSON(): any {\r\n return this.toString();\r\n }\r\n\r\n compareTo(otherVersion: Version): number {\r\n if (!this.isValid || !otherVersion.isValid) {\r\n throw new Error(\"Cannot compare invalid version.\");\r\n }\r\n\r\n if (this.major > otherVersion.major) {\r\n return 1;\r\n } else if (this.major < otherVersion.major) {\r\n return -1;\r\n } else if (this.minor > otherVersion.minor) {\r\n return 1;\r\n } else if (this.minor < otherVersion.minor) {\r\n return -1;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n get label(): string {\r\n return this._label ? this._label : this.toString();\r\n }\r\n\r\n get major(): number {\r\n return this._major;\r\n }\r\n\r\n get minor(): number {\r\n return this._minor;\r\n }\r\n\r\n get isValid(): boolean {\r\n return this._isValid;\r\n }\r\n}\r\n\r\nexport type TargetVersion = Version | \"*\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\r\nexport class Versions {\r\n /* eslint-disable @typescript-eslint/naming-convention */\r\n static readonly v1_0 = new Version(1, 0);\r\n static readonly v1_1 = new Version(1, 1);\r\n static readonly v1_2 = new Version(1, 2);\r\n static readonly v1_3 = new Version(1, 3);\r\n static readonly v1_4 = new Version(1, 4);\r\n static readonly v1_5 = new Version(1, 5);\r\n // If preview tag is added/removed from any version,\r\n // don't forget to update .ac-schema-version-1-?::after too in adaptivecards-site\\themes\\adaptivecards\\source\\css\\style.css\r\n static readonly v1_6 = new Version(1, 6, \"1.6 Preview\");\r\n static readonly latest = Versions.v1_5;\r\n /* eslint-enable @typescript-eslint/naming-convention */\r\n\r\n static getAllDeclaredVersions(): Version[] {\r\n const ctor = Versions;\r\n const properties: Version[] = [];\r\n\r\n for (const propertyName in ctor) {\r\n if (propertyName.match(/^v[0-9_]*$/)) {\r\n // filter latest\r\n try {\r\n const propertyValue = ctor[propertyName];\r\n\r\n if (propertyValue instanceof Version) {\r\n properties.push(propertyValue);\r\n }\r\n } catch {\r\n // If a property happens to have a getter function and\r\n // it throws an exception, we need to catch it here\r\n }\r\n }\r\n }\r\n return properties.sort((v1: Version, v2: Version) => v1.compareTo(v2));\r\n }\r\n}\r\n\r\nexport function isVersionLessOrEqual(\r\n version: TargetVersion,\r\n targetVersion: TargetVersion\r\n): boolean {\r\n if (version instanceof Version) {\r\n if (targetVersion instanceof Version) {\r\n return targetVersion.compareTo(version) >= 0;\r\n } else {\r\n // Target version is *\r\n return true;\r\n }\r\n } else {\r\n // Version is *\r\n return true;\r\n }\r\n}\r\n\r\nexport abstract class BaseSerializationContext {\r\n private _validationEvents: IValidationEvent[] = [];\r\n\r\n toJSONOriginalParam: any;\r\n targetVersion: Version;\r\n\r\n constructor(targetVersion: Version = Versions.latest) {\r\n this.targetVersion = targetVersion;\r\n }\r\n\r\n serializeValue(\r\n target: { [key: string]: any },\r\n propertyName: string,\r\n propertyValue: any,\r\n defaultValue: any = undefined,\r\n forceDeleteIfNullOrDefault: boolean = false\r\n ) {\r\n if (\r\n propertyValue === null ||\r\n propertyValue === undefined ||\r\n propertyValue === defaultValue\r\n ) {\r\n if (!GlobalSettings.enableFullJsonRoundTrip || forceDeleteIfNullOrDefault) {\r\n delete target[propertyName];\r\n }\r\n } else if (propertyValue === defaultValue) {\r\n delete target[propertyName];\r\n } else {\r\n target[propertyName] = propertyValue;\r\n }\r\n }\r\n\r\n serializeString(\r\n target: { [key: string]: any },\r\n propertyName: string,\r\n propertyValue?: string,\r\n defaultValue?: string\r\n ) {\r\n if (\r\n propertyValue === null ||\r\n propertyValue === undefined ||\r\n propertyValue === defaultValue\r\n ) {\r\n if (!GlobalSettings.enableFullJsonRoundTrip) {\r\n delete target[propertyName];\r\n }\r\n } else {\r\n target[propertyName] = propertyValue;\r\n }\r\n }\r\n\r\n serializeBool(\r\n target: { [key: string]: any },\r\n propertyName: string,\r\n propertyValue?: boolean,\r\n defaultValue?: boolean\r\n ) {\r\n if (\r\n propertyValue === null ||\r\n propertyValue === undefined ||\r\n propertyValue === defaultValue\r\n ) {\r\n if (!GlobalSettings.enableFullJsonRoundTrip) {\r\n delete target[propertyName];\r\n }\r\n } else {\r\n target[propertyName] = propertyValue;\r\n }\r\n }\r\n\r\n serializeNumber(\r\n target: { [key: string]: any },\r\n propertyName: string,\r\n propertyValue?: number,\r\n defaultValue?: number\r\n ) {\r\n if (\r\n propertyValue === null ||\r\n propertyValue === undefined ||\r\n propertyValue === defaultValue ||\r\n isNaN(propertyValue)\r\n ) {\r\n if (!GlobalSettings.enableFullJsonRoundTrip) {\r\n delete target[propertyName];\r\n }\r\n } else {\r\n target[propertyName] = propertyValue;\r\n }\r\n }\r\n\r\n serializeEnum(\r\n enumType: { [s: number]: string },\r\n target: { [key: string]: any },\r\n propertyName: string,\r\n propertyValue: number | undefined,\r\n defaultValue: number | undefined = undefined\r\n ) {\r\n if (\r\n propertyValue === null ||\r\n propertyValue === undefined ||\r\n propertyValue === defaultValue\r\n ) {\r\n if (!GlobalSettings.enableFullJsonRoundTrip) {\r\n delete target[propertyName];\r\n }\r\n } else {\r\n target[propertyName] = enumType[propertyValue];\r\n }\r\n }\r\n\r\n serializeArray(\r\n target: { [key: string]: any },\r\n propertyName: string,\r\n propertyValue: any[] | undefined\r\n ) {\r\n const items = [];\r\n\r\n if (propertyValue) {\r\n for (const item of propertyValue) {\r\n let serializedItem: any = undefined;\r\n\r\n if (item instanceof SerializableObject) {\r\n serializedItem = item.toJSON(this);\r\n } else if (item.toJSON) {\r\n serializedItem = item.toJSON();\r\n } else {\r\n serializedItem = item;\r\n }\r\n\r\n if (serializedItem !== undefined) {\r\n items.push(serializedItem);\r\n }\r\n }\r\n }\r\n\r\n if (items.length === 0) {\r\n if (target.hasOwnProperty(propertyName) && Array.isArray(target[propertyName])) {\r\n delete target[propertyName];\r\n }\r\n } else {\r\n this.serializeValue(target, propertyName, items);\r\n }\r\n }\r\n\r\n clearEvents() {\r\n this._validationEvents = [];\r\n }\r\n\r\n logEvent(\r\n source: SerializableObject | undefined,\r\n phase: Enums.ValidationPhase,\r\n event: Enums.ValidationEvent,\r\n message: string\r\n ) {\r\n this._validationEvents.push({\r\n source: source,\r\n phase: phase,\r\n event: event,\r\n message: message\r\n });\r\n }\r\n\r\n logParseEvent(\r\n source: SerializableObject | undefined,\r\n event: Enums.ValidationEvent,\r\n message: string\r\n ) {\r\n this.logEvent(source, Enums.ValidationPhase.Parse, event, message);\r\n }\r\n\r\n getEventAt(index: number): IValidationEvent {\r\n return this._validationEvents[index];\r\n }\r\n\r\n get eventCount(): number {\r\n return this._validationEvents.length;\r\n }\r\n}\r\n\r\nclass SimpleSerializationContext extends BaseSerializationContext {}\r\n\r\nexport class PropertyDefinition {\r\n private static _sequentialNumber: number = 0;\r\n\r\n getInternalName(): string {\r\n return this.name;\r\n }\r\n\r\n parse(\r\n sender: SerializableObject,\r\n source: PropertyBag,\r\n context: BaseSerializationContext\r\n ): any {\r\n return source[this.name];\r\n }\r\n\r\n toJSON(\r\n sender: SerializableObject,\r\n target: PropertyBag,\r\n value: any,\r\n context: BaseSerializationContext\r\n ): void {\r\n context.serializeValue(target, this.name, value, this.defaultValue);\r\n }\r\n\r\n readonly sequentialNumber: number;\r\n\r\n isSerializationEnabled: boolean = true;\r\n\r\n constructor(\r\n readonly targetVersion: Version,\r\n readonly name: string,\r\n readonly defaultValue?: any,\r\n readonly onGetInitialValue?: (sender: SerializableObject) => any\r\n ) {\r\n this.sequentialNumber = PropertyDefinition._sequentialNumber;\r\n\r\n PropertyDefinition._sequentialNumber++;\r\n }\r\n}\r\n\r\nexport class StringProperty extends PropertyDefinition {\r\n parse(\r\n sender: SerializableObject,\r\n source: PropertyBag,\r\n context: BaseSerializationContext\r\n ): string | undefined {\r\n const parsedValue = Utils.parseString(source[this.name], this.defaultValue);\r\n const isUndefined =\r\n parsedValue === undefined || (parsedValue === \"\" && this.treatEmptyAsUndefined);\r\n\r\n if (!isUndefined && this.regEx !== undefined) {\r\n const matches = this.regEx.exec(parsedValue);\r\n\r\n if (!matches) {\r\n context.logParseEvent(\r\n sender,\r\n Enums.ValidationEvent.InvalidPropertyValue,\r\n Strings.errors.invalidPropertyValue(parsedValue, this.name)\r\n );\r\n\r\n return undefined;\r\n }\r\n }\r\n\r\n return parsedValue;\r\n }\r\n\r\n toJSON(\r\n sender: SerializableObject,\r\n target: PropertyBag,\r\n value: string | undefined,\r\n context: BaseSerializationContext\r\n ) {\r\n context.serializeString(\r\n target,\r\n this.name,\r\n value === \"\" && this.treatEmptyAsUndefined ? undefined : value,\r\n this.defaultValue\r\n );\r\n }\r\n\r\n constructor(\r\n readonly targetVersion: Version,\r\n readonly name: string,\r\n readonly treatEmptyAsUndefined: boolean = true,\r\n readonly regEx?: RegExp,\r\n readonly defaultValue?: string,\r\n readonly onGetInitialValue?: (sender: SerializableObject) => string\r\n ) {\r\n super(targetVersion, name, defaultValue, onGetInitialValue);\r\n }\r\n}\r\n\r\nexport class BoolProperty extends PropertyDefinition {\r\n parse(\r\n sender: SerializableObject,\r\n source: PropertyBag,\r\n context: BaseSerializationContext\r\n ): boolean | undefined {\r\n return Utils.parseBool(source[this.name], this.defaultValue);\r\n }\r\n\r\n toJSON(\r\n sender: SerializableObject,\r\n target: object,\r\n value: boolean | undefined,\r\n context: BaseSerializationContext\r\n ) {\r\n context.serializeBool(target, this.name, value, this.defaultValue);\r\n }\r\n\r\n constructor(\r\n readonly targetVersion: Version,\r\n readonly name: string,\r\n readonly defaultValue?: boolean,\r\n readonly onGetInitialValue?: (sender: SerializableObject) => any\r\n ) {\r\n super(targetVersion, name, defaultValue, onGetInitialValue);\r\n }\r\n}\r\n\r\nexport class NumProperty extends PropertyDefinition {\r\n parse(\r\n sender: SerializableObject,\r\n source: PropertyBag,\r\n context: BaseSerializationContext\r\n ): number | undefined {\r\n return Utils.parseNumber(source[this.name], this.defaultValue);\r\n }\r\n\r\n toJSON(\r\n sender: SerializableObject,\r\n target: PropertyBag,\r\n value: number | undefined,\r\n context: BaseSerializationContext\r\n ) {\r\n context.serializeNumber(target, this.name, value, this.defaultValue);\r\n }\r\n\r\n constructor(\r\n readonly targetVersion: Version,\r\n readonly name: string,\r\n readonly defaultValue?: number,\r\n readonly onGetInitialValue?: (sender: SerializableObject) => any\r\n ) {\r\n super(targetVersion, name, defaultValue, onGetInitialValue);\r\n }\r\n}\r\n\r\nexport class PixelSizeProperty extends PropertyDefinition {\r\n parse(\r\n sender: SerializableObject,\r\n source: PropertyBag,\r\n context: BaseSerializationContext\r\n ): number | undefined {\r\n let result: number | undefined = undefined;\r\n const value = source[this.name];\r\n\r\n if (typeof value === \"string\") {\r\n let isValid = false;\r\n\r\n try {\r\n const size = SizeAndUnit.parse(value, true);\r\n\r\n if (size.unit === Enums.SizeUnit.Pixel) {\r\n result = size.physicalSize;\r\n\r\n isValid = true;\r\n }\r\n } catch {\r\n // Do nothing. A parse error is emitted below\r\n }\r\n\r\n if (!isValid) {\r\n context.logParseEvent(\r\n sender,\r\n Enums.ValidationEvent.InvalidPropertyValue,\r\n Strings.errors.invalidPropertyValue(source[this.name], \"minHeight\")\r\n );\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n toJSON(\r\n sender: SerializableObject,\r\n target: PropertyBag,\r\n value: number | undefined,\r\n context: BaseSerializationContext\r\n ) {\r\n context.serializeValue(\r\n target,\r\n this.name,\r\n typeof value === \"number\" && !isNaN(value) ? value + \"px\" : undefined\r\n );\r\n }\r\n}\r\n\r\nexport interface IVersionedValue {\r\n value: TValue;\r\n targetVersion?: Version;\r\n}\r\n\r\nexport class StringArrayProperty extends PropertyDefinition {\r\n parse(\r\n sender: SerializableObject,\r\n source: PropertyBag,\r\n context: BaseSerializationContext\r\n ): string[] | undefined {\r\n const sourceValue = source[this.name];\r\n\r\n if (sourceValue === undefined || !Array.isArray(sourceValue)) {\r\n return this.defaultValue;\r\n }\r\n\r\n const result: string[] = [];\r\n\r\n for (const value of sourceValue) {\r\n if (typeof value === \"string\") {\r\n result.push(value);\r\n } else {\r\n context.logParseEvent(\r\n sender,\r\n Enums.ValidationEvent.InvalidPropertyValue,\r\n `Invalid array value \"${JSON.stringify(\r\n value\r\n )}\" of type \"${typeof value}\" ignored for \"${this.name}\".`\r\n );\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n toJSON(\r\n sender: SerializableObject,\r\n target: PropertyBag,\r\n value: string[] | undefined,\r\n context: BaseSerializationContext\r\n ) {\r\n context.serializeArray(target, this.name, value);\r\n }\r\n\r\n constructor(\r\n readonly targetVersion: Version,\r\n readonly name: string,\r\n readonly defaultValue?: string[],\r\n readonly onGetInitialValue?: (sender: SerializableObject) => string[] | undefined\r\n ) {\r\n super(targetVersion, name, defaultValue, onGetInitialValue);\r\n }\r\n}\r\n\r\nexport class ValueSetProperty extends PropertyDefinition {\r\n isValidValue(value: string, context: BaseSerializationContext): boolean {\r\n for (const versionedValue of this.values) {\r\n if (value.toLowerCase() === versionedValue.value.toLowerCase()) {\r\n const targetVersion = versionedValue.targetVersion\r\n ? versionedValue.targetVersion\r\n : this.targetVersion;\r\n\r\n return targetVersion.compareTo(context.targetVersion) <= 0;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n parse(\r\n sender: SerializableObject,\r\n source: PropertyBag,\r\n context: BaseSerializationContext\r\n ): string | undefined {\r\n const sourceValue = source[this.name];\r\n\r\n if (sourceValue === undefined) {\r\n return this.defaultValue;\r\n }\r\n\r\n if (typeof sourceValue === \"string\") {\r\n for (const versionedValue of this.values) {\r\n if (sourceValue.toLowerCase() === versionedValue.value.toLowerCase()) {\r\n const targetVersion = versionedValue.targetVersion\r\n ? versionedValue.targetVersion\r\n : this.targetVersion;\r\n\r\n if (targetVersion.compareTo(context.targetVersion) <= 0) {\r\n return versionedValue.value;\r\n } else {\r\n context.logParseEvent(\r\n sender,\r\n Enums.ValidationEvent.InvalidPropertyValue,\r\n Strings.errors.propertyValueNotSupported(\r\n sourceValue,\r\n this.name,\r\n targetVersion.toString(),\r\n context.targetVersion.toString()\r\n )\r\n );\r\n\r\n return this.defaultValue;\r\n }\r\n }\r\n }\r\n }\r\n\r\n context.logParseEvent(\r\n sender,\r\n Enums.ValidationEvent.InvalidPropertyValue,\r\n Strings.errors.invalidPropertyValue(sourceValue, this.name)\r\n );\r\n\r\n return this.defaultValue;\r\n }\r\n\r\n toJSON(\r\n sender: SerializableObject,\r\n target: PropertyBag,\r\n value: string | undefined,\r\n context: BaseSerializationContext\r\n ) {\r\n let invalidValue = false;\r\n\r\n if (value !== undefined) {\r\n invalidValue = true;\r\n\r\n for (const versionedValue of this.values) {\r\n if (versionedValue.value === value) {\r\n const targetVersion = versionedValue.targetVersion\r\n ? versionedValue.targetVersion\r\n : this.targetVersion;\r\n\r\n if (targetVersion.compareTo(context.targetVersion) <= 0) {\r\n invalidValue = false;\r\n\r\n break;\r\n } else {\r\n context.logEvent(\r\n sender,\r\n Enums.ValidationPhase.ToJSON,\r\n Enums.ValidationEvent.InvalidPropertyValue,\r\n Strings.errors.propertyValueNotSupported(\r\n value,\r\n this.name,\r\n targetVersion.toString(),\r\n context.targetVersion.toString()\r\n )\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!invalidValue) {\r\n context.serializeValue(target, this.name, value, this.defaultValue, true);\r\n }\r\n }\r\n\r\n constructor(\r\n readonly targetVersion: Version,\r\n readonly name: string,\r\n readonly values: IVersionedValue[],\r\n readonly defaultValue?: string,\r\n readonly onGetInitialValue?: (sender: SerializableObject) => string\r\n ) {\r\n super(targetVersion, name, defaultValue, onGetInitialValue);\r\n }\r\n}\r\n\r\nexport class EnumProperty extends PropertyDefinition {\r\n private _values: IVersionedValue[] = [];\r\n\r\n parse(\r\n sender: SerializableObject,\r\n source: PropertyBag,\r\n context: BaseSerializationContext\r\n ): number | undefined {\r\n const sourceValue = source[this.name];\r\n\r\n if (typeof sourceValue !== \"string\") {\r\n return this.defaultValue;\r\n }\r\n\r\n const enumValue = Utils.getEnumValueByName(this.enumType, sourceValue);\r\n\r\n if (enumValue !== undefined) {\r\n for (const versionedValue of this.values) {\r\n if (versionedValue.value === enumValue) {\r\n const targetVersion = versionedValue.targetVersion\r\n ? versionedValue.targetVersion\r\n : this.targetVersion;\r\n\r\n if (targetVersion.compareTo(context.targetVersion) <= 0) {\r\n return enumValue;\r\n } else {\r\n context.logParseEvent(\r\n sender,\r\n Enums.ValidationEvent.InvalidPropertyValue,\r\n Strings.errors.propertyValueNotSupported(\r\n sourceValue,\r\n this.name,\r\n targetVersion.toString(),\r\n context.targetVersion.toString()\r\n )\r\n );\r\n\r\n return this.defaultValue;\r\n }\r\n }\r\n }\r\n }\r\n\r\n context.logParseEvent(\r\n sender,\r\n Enums.ValidationEvent.InvalidPropertyValue,\r\n Strings.errors.invalidPropertyValue(sourceValue, this.name)\r\n );\r\n\r\n return this.defaultValue;\r\n }\r\n\r\n toJSON(\r\n sender: SerializableObject,\r\n target: PropertyBag,\r\n value: number | undefined,\r\n context: BaseSerializationContext\r\n ) {\r\n let invalidValue = false;\r\n\r\n if (value !== undefined) {\r\n invalidValue = true;\r\n\r\n for (const versionedValue of this.values) {\r\n if (versionedValue.value === value) {\r\n const targetVersion = versionedValue.targetVersion\r\n ? versionedValue.targetVersion\r\n : this.targetVersion;\r\n\r\n if (targetVersion.compareTo(context.targetVersion) <= 0) {\r\n invalidValue = false;\r\n\r\n break;\r\n } else {\r\n context.logEvent(\r\n sender,\r\n Enums.ValidationPhase.ToJSON,\r\n Enums.ValidationEvent.InvalidPropertyValue,\r\n Strings.errors.invalidPropertyValue(value, this.name)\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!invalidValue) {\r\n context.serializeEnum(this.enumType, target, this.name, value, this.defaultValue);\r\n }\r\n }\r\n\r\n constructor(\r\n readonly targetVersion: Version,\r\n readonly name: string,\r\n readonly enumType: TEnum,\r\n readonly defaultValue?: number,\r\n values?: IVersionedValue[],\r\n readonly onGetInitialValue?: (sender: SerializableObject) => number\r\n ) {\r\n super(targetVersion, name, defaultValue, onGetInitialValue);\r\n\r\n if (!values) {\r\n // eslint-disable-next-line guard-for-in\r\n for (const key in enumType) {\r\n const keyAsNumber = parseInt(key, 10);\r\n\r\n if (keyAsNumber >= 0) {\r\n this._values.push({ value: keyAsNumber });\r\n }\r\n }\r\n } else {\r\n this._values = values;\r\n }\r\n }\r\n\r\n get values(): IVersionedValue[] {\r\n return this._values;\r\n }\r\n}\r\n\r\nexport type SerializableObjectType = { new (): SerializableObject };\r\n\r\nexport class SerializableObjectProperty extends PropertyDefinition {\r\n parse(\r\n sender: SerializableObject,\r\n source: PropertyBag,\r\n context: BaseSerializationContext\r\n ): SerializableObject | undefined {\r\n const sourceValue = source[this.name];\r\n\r\n if (sourceValue === undefined) {\r\n return this.onGetInitialValue ? this.onGetInitialValue(sender) : this.defaultValue;\r\n }\r\n\r\n const result = new this.objectType();\r\n result.parse(sourceValue, context);\r\n\r\n return result;\r\n }\r\n\r\n toJSON(\r\n sender: SerializableObject,\r\n target: PropertyBag,\r\n value: SerializableObject | undefined,\r\n context: BaseSerializationContext\r\n ) {\r\n let serializedValue: object | undefined = undefined;\r\n\r\n if (value !== undefined && !value.hasAllDefaultValues()) {\r\n serializedValue = value.toJSON(context);\r\n }\r\n\r\n if (typeof serializedValue === \"object\" && Object.keys(serializedValue).length === 0) {\r\n serializedValue = undefined;\r\n }\r\n\r\n context.serializeValue(target, this.name, serializedValue, this.defaultValue, true);\r\n }\r\n\r\n constructor(\r\n readonly targetVersion: Version,\r\n readonly name: string,\r\n readonly objectType: SerializableObjectType,\r\n readonly nullable: boolean = false,\r\n defaultValue?: SerializableObject\r\n ) {\r\n super(targetVersion, name, defaultValue, (sender: SerializableObject) => {\r\n return this.nullable ? undefined : new this.objectType();\r\n });\r\n }\r\n}\r\n\r\nexport class SerializableObjectCollectionProperty extends PropertyDefinition {\r\n parse(\r\n sender: SerializableObject,\r\n source: PropertyBag,\r\n context: BaseSerializationContext\r\n ): SerializableObject[] | undefined {\r\n const result: SerializableObject[] | undefined = [];\r\n\r\n const sourceCollection = source[this.name];\r\n\r\n if (Array.isArray(sourceCollection)) {\r\n for (const sourceItem of sourceCollection) {\r\n const item = new this.objectType();\r\n item.parse(sourceItem, context);\r\n\r\n result.push(item);\r\n\r\n if (this.onItemAdded) {\r\n this.onItemAdded(sender, item);\r\n }\r\n }\r\n }\r\n\r\n return result.length > 0\r\n ? result\r\n : this.onGetInitialValue\r\n ? this.onGetInitialValue(sender)\r\n : undefined;\r\n }\r\n\r\n toJSON(\r\n sender: SerializableObject,\r\n target: PropertyBag,\r\n value: SerializableObject[] | undefined,\r\n context: BaseSerializationContext\r\n ) {\r\n context.serializeArray(target, this.name, value);\r\n }\r\n\r\n constructor(\r\n readonly targetVersion: Version,\r\n readonly name: string,\r\n readonly objectType: SerializableObjectType,\r\n readonly onItemAdded?: (sender: SerializableObject, item: SerializableObject) => void\r\n ) {\r\n super(targetVersion, name, undefined, (sender: SerializableObject) => {\r\n return [];\r\n });\r\n }\r\n}\r\n\r\nexport class CustomProperty extends PropertyDefinition {\r\n parse(sender: SerializableObject, source: PropertyBag, context: BaseSerializationContext): T {\r\n return this.onParse(sender, this, source, context);\r\n }\r\n\r\n toJSON(\r\n sender: SerializableObject,\r\n target: PropertyBag,\r\n value: T,\r\n context: BaseSerializationContext\r\n ) {\r\n this.onToJSON(sender, this, target, value, context);\r\n }\r\n\r\n constructor(\r\n readonly targetVersion: Version,\r\n readonly name: string,\r\n readonly onParse: (\r\n sender: SerializableObject,\r\n property: PropertyDefinition,\r\n source: PropertyBag,\r\n context: BaseSerializationContext\r\n ) => T,\r\n readonly onToJSON: (\r\n sender: SerializableObject,\r\n property: PropertyDefinition,\r\n target: PropertyBag,\r\n value: T,\r\n context: BaseSerializationContext\r\n ) => void,\r\n readonly defaultValue?: T,\r\n readonly onGetInitialValue?: (sender: SerializableObject) => T\r\n ) {\r\n super(targetVersion, name, defaultValue, onGetInitialValue);\r\n\r\n if (!this.onParse) {\r\n throw new Error(\"CustomPropertyDefinition instances must have an onParse handler.\");\r\n }\r\n\r\n if (!this.onToJSON) {\r\n throw new Error(\"CustomPropertyDefinition instances must have an onToJSON handler.\");\r\n }\r\n }\r\n}\r\n\r\nexport class SerializableObjectSchema {\r\n private _properties: PropertyDefinition[] = [];\r\n\r\n indexOf(prop: PropertyDefinition): number {\r\n for (let i = 0; i < this._properties.length; i++) {\r\n if (this._properties[i] === prop) {\r\n return i;\r\n }\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n add(...properties: PropertyDefinition[]) {\r\n for (const prop of properties) {\r\n if (this.indexOf(prop) === -1) {\r\n this._properties.push(prop);\r\n }\r\n }\r\n }\r\n\r\n remove(...properties: PropertyDefinition[]) {\r\n for (const prop of properties) {\r\n while (true) {\r\n const index = this.indexOf(prop);\r\n\r\n if (index >= 0) {\r\n this._properties.splice(index, 1);\r\n } else {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n getItemAt(index: number): PropertyDefinition {\r\n return this._properties[index];\r\n }\r\n\r\n getCount(): number {\r\n return this._properties.length;\r\n }\r\n}\r\n\r\n// This is a decorator function, used to map SerializableObject descendant class members to\r\n// schema properties\r\nexport function property(prop: PropertyDefinition) {\r\n return function (target: any, propertyKey: string) {\r\n const descriptor = Object.getOwnPropertyDescriptor(target, propertyKey) || {};\r\n\r\n if (!descriptor.get && !descriptor.set) {\r\n descriptor.get = function (this: SerializableObject) {\r\n return this.getValue(prop);\r\n };\r\n descriptor.set = function (this: SerializableObject, value: any) {\r\n this.setValue(prop, value);\r\n };\r\n\r\n Object.defineProperty(target, propertyKey, descriptor);\r\n }\r\n };\r\n}\r\n\r\nexport type PropertyBag = { [propertyName: string]: any };\r\n\r\nexport abstract class SerializableObject {\r\n static onRegisterCustomProperties?: (\r\n sender: SerializableObject,\r\n schema: SerializableObjectSchema\r\n ) => void;\r\n static defaultMaxVersion: Version = Versions.latest;\r\n\r\n private static readonly _schemaCache: { [typeName: string]: SerializableObjectSchema } = {};\r\n\r\n private _propertyBag: PropertyBag = {};\r\n private _rawProperties: PropertyBag = {};\r\n\r\n protected abstract getSchemaKey(): string;\r\n\r\n protected getDefaultSerializationContext(): BaseSerializationContext {\r\n return new SimpleSerializationContext();\r\n }\r\n\r\n protected populateSchema(schema: SerializableObjectSchema) {\r\n const ctor = this.constructor;\r\n const properties: PropertyDefinition[] = [];\r\n\r\n // eslint-disable-next-line guard-for-in\r\n for (const propertyName in ctor) {\r\n try {\r\n const propertyValue = ctor[propertyName];\r\n\r\n if (propertyValue instanceof PropertyDefinition) {\r\n properties.push(propertyValue);\r\n }\r\n } catch {\r\n // If a property happens to have a getter function and\r\n // it throws an exception, we need to catch it here\r\n }\r\n }\r\n\r\n if (properties.length > 0) {\r\n const sortedProperties = properties.sort(\r\n (p1: PropertyDefinition, p2: PropertyDefinition) => {\r\n if (p1.sequentialNumber > p2.sequentialNumber) {\r\n return 1;\r\n } else if (p1.sequentialNumber < p2.sequentialNumber) {\r\n return -1;\r\n }\r\n\r\n return 0;\r\n }\r\n );\r\n\r\n schema.add(...sortedProperties);\r\n }\r\n\r\n if (SerializableObject.onRegisterCustomProperties) {\r\n SerializableObject.onRegisterCustomProperties(this, schema);\r\n }\r\n }\r\n\r\n protected getValue(prop: PropertyDefinition): any {\r\n return this._propertyBag.hasOwnProperty(prop.getInternalName())\r\n ? this._propertyBag[prop.getInternalName()]\r\n : prop.defaultValue;\r\n }\r\n\r\n protected setValue(prop: PropertyDefinition, value: any) {\r\n if (value === undefined || value === null) {\r\n delete this._propertyBag[prop.getInternalName()];\r\n } else {\r\n this._propertyBag[prop.getInternalName()] = value;\r\n }\r\n }\r\n\r\n protected internalParse(source: PropertyBag, context: BaseSerializationContext) {\r\n this._propertyBag = {};\r\n this._rawProperties = GlobalSettings.enableFullJsonRoundTrip ? (source ? source : {}) : {};\r\n\r\n if (source) {\r\n const s = this.getSchema();\r\n\r\n for (let i = 0; i < s.getCount(); i++) {\r\n const prop = s.getItemAt(i);\r\n\r\n if (prop.isSerializationEnabled) {\r\n let propertyValue = prop.onGetInitialValue\r\n ? prop.onGetInitialValue(this)\r\n : undefined;\r\n\r\n if (source.hasOwnProperty(prop.name)) {\r\n if (prop.targetVersion.compareTo(context.targetVersion) <= 0) {\r\n propertyValue = prop.parse(this, source, context);\r\n } else {\r\n context.logParseEvent(\r\n this,\r\n Enums.ValidationEvent.UnsupportedProperty,\r\n Strings.errors.propertyNotSupported(\r\n prop.name,\r\n prop.targetVersion.toString(),\r\n context.targetVersion.toString()\r\n )\r\n );\r\n }\r\n }\r\n\r\n this.setValue(prop, propertyValue);\r\n }\r\n }\r\n } else {\r\n this.resetDefaultValues();\r\n }\r\n }\r\n\r\n protected internalToJSON(target: PropertyBag, context: BaseSerializationContext) {\r\n const s = this.getSchema();\r\n const serializedProperties: string[] = [];\r\n\r\n for (let i = 0; i < s.getCount(); i++) {\r\n const prop = s.getItemAt(i);\r\n\r\n // Avoid serializing the same property multiple times. This is necessary\r\n // because some property definitions map to the same underlying schema\r\n // property\r\n if (\r\n prop.isSerializationEnabled &&\r\n prop.targetVersion.compareTo(context.targetVersion) <= 0 &&\r\n serializedProperties.indexOf(prop.name) === -1\r\n ) {\r\n prop.toJSON(this, target, this.getValue(prop), context);\r\n\r\n serializedProperties.push(prop.name);\r\n }\r\n }\r\n }\r\n\r\n protected shouldSerialize(_context: BaseSerializationContext): boolean {\r\n return true;\r\n }\r\n\r\n maxVersion: Version = SerializableObject.defaultMaxVersion;\r\n\r\n constructor() {\r\n const s = this.getSchema();\r\n\r\n for (let i = 0; i < s.getCount(); i++) {\r\n const prop = s.getItemAt(i);\r\n\r\n if (prop.onGetInitialValue) {\r\n this.setValue(prop, prop.onGetInitialValue(this));\r\n }\r\n }\r\n }\r\n\r\n parse(source: PropertyBag, context?: BaseSerializationContext) {\r\n this.internalParse(source, context ? context : new SimpleSerializationContext());\r\n }\r\n\r\n toJSON(context?: BaseSerializationContext): PropertyBag | undefined {\r\n let effectiveContext: BaseSerializationContext;\r\n\r\n if (context && context instanceof BaseSerializationContext) {\r\n effectiveContext = context;\r\n } else {\r\n effectiveContext = this.getDefaultSerializationContext();\r\n effectiveContext.toJSONOriginalParam = context;\r\n }\r\n\r\n if (this.shouldSerialize(effectiveContext)) {\r\n let result: PropertyBag;\r\n\r\n if (\r\n GlobalSettings.enableFullJsonRoundTrip &&\r\n this._rawProperties &&\r\n typeof this._rawProperties === \"object\"\r\n ) {\r\n result = this._rawProperties;\r\n } else {\r\n result = {};\r\n }\r\n\r\n this.internalToJSON(result, effectiveContext);\r\n\r\n return result;\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n hasDefaultValue(prop: PropertyDefinition): boolean {\r\n return this.getValue(prop) === prop.defaultValue;\r\n }\r\n\r\n hasAllDefaultValues(): boolean {\r\n const s = this.getSchema();\r\n\r\n for (let i = 0; i < s.getCount(); i++) {\r\n const prop = s.getItemAt(i);\r\n\r\n if (!this.hasDefaultValue(prop)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n resetDefaultValues() {\r\n const s = this.getSchema();\r\n\r\n for (let i = 0; i < s.getCount(); i++) {\r\n const prop = s.getItemAt(i);\r\n\r\n this.setValue(prop, prop.defaultValue);\r\n }\r\n }\r\n\r\n setCustomProperty(name: string, value: any) {\r\n const shouldDeleteProperty =\r\n (typeof value === \"string\" && !value) || value === undefined || value === null;\r\n\r\n if (shouldDeleteProperty) {\r\n delete this._rawProperties[name];\r\n } else {\r\n this._rawProperties[name] = value;\r\n }\r\n }\r\n\r\n getCustomProperty(name: string): any {\r\n return this._rawProperties[name];\r\n }\r\n\r\n getSchema(): SerializableObjectSchema {\r\n let schema: SerializableObjectSchema = SerializableObject._schemaCache[this.getSchemaKey()];\r\n\r\n if (!schema) {\r\n schema = new SerializableObjectSchema();\r\n\r\n this.populateSchema(schema);\r\n\r\n SerializableObject._schemaCache[this.getSchemaKey()] = schema;\r\n }\r\n\r\n return schema;\r\n }\r\n}\r\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport {\r\n TargetVersion,\r\n Version,\r\n SerializableObject,\r\n BaseSerializationContext,\r\n PropertyBag\r\n} from \"./serialization\";\r\n\r\nexport class HostCapabilities extends SerializableObject {\r\n private _capabilities: { [key: string]: TargetVersion } = {};\r\n\r\n protected getSchemaKey(): string {\r\n return \"HostCapabilities\";\r\n }\r\n\r\n protected internalParse(source: any, context: BaseSerializationContext) {\r\n super.internalParse(source, context);\r\n\r\n if (source) {\r\n // eslint-disable-next-line guard-for-in\r\n for (const name in source) {\r\n const jsonVersion = source[name];\r\n\r\n if (typeof jsonVersion === \"string\") {\r\n if (jsonVersion === \"*\") {\r\n this.addCapability(name, \"*\");\r\n } else {\r\n const version = Version.parse(jsonVersion, context);\r\n\r\n if (version?.isValid) {\r\n this.addCapability(name, version);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected internalToJSON(target: PropertyBag, context: BaseSerializationContext) {\r\n super.internalToJSON(target, context);\r\n\r\n // eslint-disable-next-line guard-for-in\r\n for (const key in this._capabilities) {\r\n target[key] = this._capabilities[key];\r\n }\r\n }\r\n\r\n addCapability(name: string, version: TargetVersion) {\r\n this._capabilities[name] = version;\r\n }\r\n\r\n removeCapability(name: string) {\r\n delete this._capabilities[name];\r\n }\r\n\r\n clear() {\r\n this._capabilities = {};\r\n }\r\n\r\n hasCapability(name: string, version: TargetVersion): boolean {\r\n if (this._capabilities.hasOwnProperty(name)) {\r\n if (version === \"*\" || this._capabilities[name] === \"*\") {\r\n return true;\r\n }\r\n\r\n return version.compareTo(this._capabilities[name]) <= 0;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n areAllMet(hostCapabilities: HostCapabilities): boolean {\r\n for (const capabilityName in this._capabilities) {\r\n if (\r\n !hostCapabilities.hasCapability(capabilityName, this._capabilities[capabilityName])\r\n ) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport * as Enums from \"./enums\";\r\nimport * as Utils from \"./utils\";\r\nimport * as Shared from \"./shared\";\r\nimport { HostCapabilities } from \"./host-capabilities\";\r\n\r\nfunction parseHostConfigEnum(\r\n targetEnum: { [s: number]: string },\r\n value: string | number,\r\n defaultValue: number\r\n): number {\r\n if (typeof value === \"string\") {\r\n const parsedValue = Utils.parseEnum(targetEnum, value, defaultValue);\r\n\r\n return parsedValue !== undefined ? parsedValue : defaultValue;\r\n } else if (typeof value === \"number\") {\r\n return value;\r\n } else {\r\n return defaultValue;\r\n }\r\n}\r\n\r\nexport class ColorDefinition {\r\n default: string = \"#000000\";\r\n subtle: string = \"#666666\";\r\n\r\n constructor(defaultColor?: string, subtleColor?: string) {\r\n if (defaultColor) {\r\n this.default = defaultColor;\r\n }\r\n\r\n if (subtleColor) {\r\n this.subtle = subtleColor;\r\n }\r\n }\r\n\r\n parse(obj?: any) {\r\n if (obj) {\r\n this.default = obj[\"default\"] || this.default;\r\n this.subtle = obj[\"subtle\"] || this.subtle;\r\n }\r\n }\r\n}\r\n\r\nexport class TextColorDefinition extends ColorDefinition {\r\n readonly highlightColors = new ColorDefinition(\"#22000000\", \"#11000000\");\r\n\r\n parse(obj?: any) {\r\n super.parse(obj);\r\n\r\n if (obj) {\r\n this.highlightColors.parse(obj[\"highlightColors\"]);\r\n }\r\n }\r\n}\r\n\r\nexport class AdaptiveCardConfig {\r\n allowCustomStyle: boolean = false;\r\n\r\n constructor(obj?: any) {\r\n if (obj) {\r\n this.allowCustomStyle = obj[\"allowCustomStyle\"] || this.allowCustomStyle;\r\n }\r\n }\r\n}\r\n\r\nexport class ImageSetConfig {\r\n imageSize: Enums.Size = Enums.Size.Medium;\r\n maxImageHeight: number = 100;\r\n\r\n constructor(obj?: any) {\r\n if (obj) {\r\n this.imageSize = obj[\"imageSize\"] != null ? obj[\"imageSize\"] : this.imageSize;\r\n this.maxImageHeight = Utils.parseNumber(obj[\"maxImageHeight\"], 100)!;\r\n }\r\n }\r\n\r\n toJSON() {\r\n return {\r\n imageSize: Enums.Size[this.imageSize],\r\n maxImageHeight: this.maxImageHeight\r\n };\r\n }\r\n}\r\n\r\nexport class MediaConfig {\r\n defaultPoster?: string;\r\n allowInlinePlayback: boolean = true;\r\n\r\n constructor(obj?: any) {\r\n if (obj) {\r\n this.defaultPoster = obj[\"defaultPoster\"];\r\n this.allowInlinePlayback = obj[\"allowInlinePlayback\"] || this.allowInlinePlayback;\r\n }\r\n }\r\n\r\n toJSON() {\r\n return {\r\n defaultPoster: this.defaultPoster,\r\n allowInlinePlayback: this.allowInlinePlayback\r\n };\r\n }\r\n}\r\n\r\nexport class TableConfig {\r\n cellSpacing: number = 8;\r\n\r\n constructor(obj?: any) {\r\n if (obj) {\r\n this.cellSpacing =\r\n obj.cellSpacing && typeof obj.cellSpacing === \"number\"\r\n ? obj.cellSpacing\r\n : this.cellSpacing;\r\n }\r\n }\r\n\r\n toJSON() {\r\n return {\r\n cellSpacing: this.cellSpacing\r\n };\r\n }\r\n}\r\n\r\nexport class BaseTextDefinition {\r\n size: Enums.TextSize = Enums.TextSize.Default;\r\n color: Enums.TextColor = Enums.TextColor.Default;\r\n isSubtle: boolean = false;\r\n weight: Enums.TextWeight = Enums.TextWeight.Default;\r\n\r\n constructor(obj?: any) {\r\n this.parse(obj);\r\n }\r\n\r\n parse(obj: any) {\r\n if (obj) {\r\n this.size = parseHostConfigEnum(Enums.TextSize, obj[\"size\"], this.size);\r\n this.color = parseHostConfigEnum(Enums.TextColor, obj[\"color\"], this.color);\r\n this.isSubtle =\r\n obj.isSubtle !== undefined && typeof obj.isSubtle === \"boolean\"\r\n ? obj.isSubtle\r\n : this.isSubtle;\r\n this.weight = parseHostConfigEnum(\r\n Enums.TextWeight,\r\n obj[\"weight\"],\r\n this.getDefaultWeight()\r\n );\r\n }\r\n }\r\n\r\n getDefaultWeight(): Enums.TextWeight {\r\n return Enums.TextWeight.Default;\r\n }\r\n\r\n toJSON(): any {\r\n return {\r\n size: Enums.TextSize[this.size],\r\n color: Enums.TextColor[this.color],\r\n isSubtle: this.isSubtle,\r\n weight: Enums.TextWeight[this.weight]\r\n };\r\n }\r\n}\r\n\r\nexport class TextStyleDefinition extends BaseTextDefinition {\r\n fontType: Enums.FontType = Enums.FontType.Default;\r\n\r\n parse(obj: any) {\r\n super.parse(obj);\r\n\r\n if (obj) {\r\n this.fontType = parseHostConfigEnum(Enums.FontType, obj.fontType, this.fontType);\r\n }\r\n }\r\n}\r\n\r\nexport class TextStyleSet {\r\n readonly default: TextStyleDefinition = new TextStyleDefinition();\r\n readonly heading: TextStyleDefinition = new TextStyleDefinition({\r\n size: \"Large\",\r\n weight: \"Bolder\"\r\n });\r\n readonly columnHeader: TextStyleDefinition = new TextStyleDefinition({\r\n weight: \"Bolder\"\r\n });\r\n\r\n constructor(obj?: any) {\r\n if (obj) {\r\n this.heading.parse(obj.heading);\r\n this.columnHeader.parse(obj.columnHeader);\r\n }\r\n }\r\n\r\n getStyleByName(name: string): TextStyleDefinition {\r\n switch (name.toLowerCase()) {\r\n case \"heading\":\r\n return this.heading;\r\n case \"columnHeader\":\r\n return this.columnHeader;\r\n default:\r\n return this.default;\r\n }\r\n }\r\n}\r\n\r\nexport class TextBlockConfig {\r\n headingLevel?: number;\r\n\r\n constructor(obj?: any) {\r\n if (obj) {\r\n this.headingLevel = Utils.parseNumber(obj.headingLevel);\r\n }\r\n }\r\n}\r\n\r\nexport class RequiredInputLabelTextDefinition extends BaseTextDefinition {\r\n suffix?: string = \" *\";\r\n suffixColor: Enums.TextColor = Enums.TextColor.Attention;\r\n\r\n parse(obj?: any) {\r\n super.parse(obj);\r\n\r\n if (obj) {\r\n this.suffix = obj[\"suffix\"] || this.suffix;\r\n this.suffixColor = parseHostConfigEnum(\r\n Enums.TextColor,\r\n obj[\"suffixColor\"],\r\n this.suffixColor\r\n );\r\n }\r\n }\r\n\r\n toJSON(): any {\r\n const result = super.toJSON();\r\n result[\"suffix\"] = this.suffix;\r\n result[\"suffixColor\"] = Enums.TextColor[this.suffixColor];\r\n\r\n return result;\r\n }\r\n}\r\n\r\nexport class InputLabelConfig {\r\n inputSpacing: Enums.Spacing = Enums.Spacing.Small;\r\n readonly requiredInputs: RequiredInputLabelTextDefinition =\r\n new RequiredInputLabelTextDefinition();\r\n readonly optionalInputs: BaseTextDefinition = new BaseTextDefinition();\r\n\r\n constructor(obj?: any) {\r\n if (obj) {\r\n this.inputSpacing = parseHostConfigEnum(\r\n Enums.Spacing,\r\n obj[\"inputSpacing\"],\r\n this.inputSpacing\r\n );\r\n this.requiredInputs = new RequiredInputLabelTextDefinition(obj[\"requiredInputs\"]);\r\n this.optionalInputs = new BaseTextDefinition(obj[\"optionalInputs\"]);\r\n }\r\n }\r\n}\r\n\r\nexport class InputConfig {\r\n readonly label: InputLabelConfig = new InputLabelConfig();\r\n readonly errorMessage: BaseTextDefinition = new BaseTextDefinition({\r\n color: Enums.TextColor.Attention\r\n });\r\n\r\n constructor(obj?: any) {\r\n if (obj) {\r\n this.label = new InputLabelConfig(obj[\"label\"]);\r\n this.errorMessage = new BaseTextDefinition(obj[\"errorMessage\"]);\r\n }\r\n }\r\n}\r\n\r\nexport class FactTextDefinition extends BaseTextDefinition {\r\n wrap: boolean = true;\r\n\r\n parse(obj?: any) {\r\n super.parse(obj);\r\n\r\n if (obj) {\r\n this.wrap = obj[\"wrap\"] != null ? obj[\"wrap\"] : this.wrap;\r\n }\r\n }\r\n\r\n toJSON(): any {\r\n const result = super.toJSON();\r\n result[\"wrap\"] = this.wrap;\r\n\r\n return result;\r\n }\r\n}\r\n\r\nexport class FactTitleDefinition extends FactTextDefinition {\r\n maxWidth?: number = 150;\r\n weight: Enums.TextWeight = Enums.TextWeight.Bolder;\r\n\r\n constructor(obj?: any) {\r\n super(obj);\r\n\r\n if (obj) {\r\n this.maxWidth = obj[\"maxWidth\"] != null ? obj[\"maxWidth\"] : this.maxWidth;\r\n this.weight = parseHostConfigEnum(\r\n Enums.TextWeight,\r\n obj[\"weight\"],\r\n Enums.TextWeight.Bolder\r\n );\r\n }\r\n }\r\n\r\n getDefaultWeight() {\r\n return Enums.TextWeight.Bolder;\r\n }\r\n}\r\n\r\nexport class FactSetConfig {\r\n readonly title: FactTitleDefinition = new FactTitleDefinition();\r\n readonly value: FactTextDefinition = new FactTextDefinition();\r\n spacing: number = 10;\r\n\r\n constructor(obj?: any) {\r\n if (obj) {\r\n this.title = new FactTitleDefinition(obj[\"title\"]);\r\n this.value = new FactTextDefinition(obj[\"value\"]);\r\n this.spacing =\r\n obj.spacing && obj.spacing != null ? obj.spacing && obj.spacing : this.spacing;\r\n }\r\n }\r\n}\r\n\r\nexport class ShowCardActionConfig {\r\n actionMode: Enums.ShowCardActionMode = Enums.ShowCardActionMode.Inline;\r\n inlineTopMargin: number = 16;\r\n style?: string = Enums.ContainerStyle.Emphasis;\r\n\r\n constructor(obj?: any) {\r\n if (obj) {\r\n this.actionMode = parseHostConfigEnum(\r\n Enums.ShowCardActionMode,\r\n obj[\"actionMode\"],\r\n Enums.ShowCardActionMode.Inline\r\n );\r\n this.inlineTopMargin =\r\n obj[\"inlineTopMargin\"] != null ? obj[\"inlineTopMargin\"] : this.inlineTopMargin;\r\n this.style =\r\n obj[\"style\"] && typeof obj[\"style\"] === \"string\"\r\n ? obj[\"style\"]\r\n : Enums.ContainerStyle.Emphasis;\r\n }\r\n }\r\n\r\n toJSON() {\r\n return {\r\n actionMode: Enums.ShowCardActionMode[this.actionMode],\r\n inlineTopMargin: this.inlineTopMargin,\r\n style: this.style\r\n };\r\n }\r\n}\r\n\r\nexport class ActionsConfig {\r\n maxActions: number = 5;\r\n spacing: Enums.Spacing = Enums.Spacing.Default;\r\n buttonSpacing: number = 20;\r\n readonly showCard: ShowCardActionConfig = new ShowCardActionConfig();\r\n preExpandSingleShowCardAction?: boolean = false;\r\n actionsOrientation: Enums.Orientation = Enums.Orientation.Horizontal;\r\n actionAlignment: Enums.ActionAlignment = Enums.ActionAlignment.Left;\r\n iconPlacement: Enums.ActionIconPlacement = Enums.ActionIconPlacement.LeftOfTitle;\r\n allowTitleToWrap: boolean = false;\r\n iconSize: number = 16;\r\n\r\n constructor(obj?: any) {\r\n if (obj) {\r\n this.maxActions = obj[\"maxActions\"] != null ? obj[\"maxActions\"] : this.maxActions;\r\n this.spacing = parseHostConfigEnum(\r\n Enums.Spacing,\r\n obj.spacing && obj.spacing,\r\n Enums.Spacing.Default\r\n );\r\n this.buttonSpacing =\r\n obj[\"buttonSpacing\"] != null ? obj[\"buttonSpacing\"] : this.buttonSpacing;\r\n this.showCard = new ShowCardActionConfig(obj[\"showCard\"]);\r\n this.preExpandSingleShowCardAction = Utils.parseBool(\r\n obj[\"preExpandSingleShowCardAction\"],\r\n false\r\n );\r\n this.actionsOrientation = parseHostConfigEnum(\r\n Enums.Orientation,\r\n obj[\"actionsOrientation\"],\r\n Enums.Orientation.Horizontal\r\n );\r\n this.actionAlignment = parseHostConfigEnum(\r\n Enums.ActionAlignment,\r\n obj[\"actionAlignment\"],\r\n Enums.ActionAlignment.Left\r\n );\r\n this.iconPlacement = parseHostConfigEnum(\r\n Enums.ActionIconPlacement,\r\n obj[\"iconPlacement\"],\r\n Enums.ActionIconPlacement.LeftOfTitle\r\n );\r\n this.allowTitleToWrap =\r\n obj[\"allowTitleToWrap\"] != null ? obj[\"allowTitleToWrap\"] : this.allowTitleToWrap;\r\n\r\n try {\r\n const sizeAndUnit = Shared.SizeAndUnit.parse(obj[\"iconSize\"]);\r\n\r\n if (sizeAndUnit.unit === Enums.SizeUnit.Pixel) {\r\n this.iconSize = sizeAndUnit.physicalSize;\r\n }\r\n } catch (e) {\r\n // Swallow this, keep default icon size\r\n }\r\n }\r\n }\r\n\r\n toJSON() {\r\n return {\r\n maxActions: this.maxActions,\r\n spacing: Enums.Spacing[this.spacing],\r\n buttonSpacing: this.buttonSpacing,\r\n showCard: this.showCard,\r\n preExpandSingleShowCardAction: this.preExpandSingleShowCardAction,\r\n actionsOrientation: Enums.Orientation[this.actionsOrientation],\r\n actionAlignment: Enums.ActionAlignment[this.actionAlignment]\r\n };\r\n }\r\n}\r\n\r\nexport class ColorSetDefinition {\r\n private parseSingleColor(obj: any, propertyName: string) {\r\n if (obj) {\r\n ((this)[propertyName] as TextColorDefinition).parse(obj[propertyName]);\r\n }\r\n }\r\n\r\n default: TextColorDefinition = new TextColorDefinition();\r\n dark: TextColorDefinition = new TextColorDefinition();\r\n light: TextColorDefinition = new TextColorDefinition();\r\n accent: TextColorDefinition = new TextColorDefinition();\r\n good: TextColorDefinition = new TextColorDefinition();\r\n warning: TextColorDefinition = new TextColorDefinition();\r\n attention: TextColorDefinition = new TextColorDefinition();\r\n\r\n constructor(obj?: any) {\r\n this.parse(obj);\r\n }\r\n\r\n parse(obj: any) {\r\n if (obj) {\r\n this.parseSingleColor(obj, \"default\");\r\n this.parseSingleColor(obj, \"dark\");\r\n this.parseSingleColor(obj, \"light\");\r\n this.parseSingleColor(obj, \"accent\");\r\n this.parseSingleColor(obj, \"good\");\r\n this.parseSingleColor(obj, \"warning\");\r\n this.parseSingleColor(obj, \"attention\");\r\n }\r\n }\r\n}\r\n\r\nexport class ContainerStyleDefinition {\r\n backgroundColor?: string;\r\n\r\n readonly foregroundColors: ColorSetDefinition = new ColorSetDefinition({\r\n \"default\": { default: \"#333333\", subtle: \"#EE333333\" },\r\n \"dark\": { default: \"#000000\", subtle: \"#66000000\" },\r\n \"light\": { default: \"#FFFFFF\", subtle: \"#33000000\" },\r\n \"accent\": { default: \"#2E89FC\", subtle: \"#882E89FC\" },\r\n \"good\": { default: \"#028A02\", subtle: \"#DD027502\" },\r\n \"warning\": { default: \"#E69500\", subtle: \"#DDE69500\" },\r\n \"attention\": { default: \"#CC3300\", subtle: \"#DDCC3300\" }\r\n });\r\n\r\n highlightBackgroundColor?: string;\r\n highlightForegroundColor?: string;\r\n borderColor?: string;\r\n\r\n parse(obj: any) {\r\n if (obj) {\r\n this.backgroundColor = obj[\"backgroundColor\"];\r\n\r\n this.foregroundColors.parse(obj[\"foregroundColors\"]);\r\n\r\n this.highlightBackgroundColor = obj[\"highlightBackgroundColor\"];\r\n this.highlightForegroundColor = obj[\"highlightForegroundColor\"];\r\n\r\n this.borderColor = obj[\"borderColor\"];\r\n }\r\n }\r\n\r\n constructor(obj?: any) {\r\n this.parse(obj);\r\n }\r\n\r\n get isBuiltIn(): boolean {\r\n return false;\r\n }\r\n}\r\n\r\nclass BuiltInContainerStyleDefinition extends ContainerStyleDefinition {\r\n get isBuiltIn(): boolean {\r\n return true;\r\n }\r\n}\r\n\r\nexport interface ILineHeightDefinitions {\r\n small: number;\r\n medium: number;\r\n default: number;\r\n large: number;\r\n extraLarge: number;\r\n}\r\n\r\nexport class ContainerStyleSet {\r\n private _allStyles: { [key: string]: ContainerStyleDefinition } = {};\r\n\r\n constructor(obj?: any) {\r\n this._allStyles[Enums.ContainerStyle.Default] = new BuiltInContainerStyleDefinition();\r\n this._allStyles[Enums.ContainerStyle.Emphasis] = new BuiltInContainerStyleDefinition();\r\n this._allStyles[Enums.ContainerStyle.Accent] = new BuiltInContainerStyleDefinition();\r\n this._allStyles[Enums.ContainerStyle.Good] = new BuiltInContainerStyleDefinition();\r\n this._allStyles[Enums.ContainerStyle.Attention] = new BuiltInContainerStyleDefinition();\r\n this._allStyles[Enums.ContainerStyle.Warning] = new BuiltInContainerStyleDefinition();\r\n\r\n if (obj) {\r\n this._allStyles[Enums.ContainerStyle.Default].parse(obj[Enums.ContainerStyle.Default]);\r\n this._allStyles[Enums.ContainerStyle.Emphasis].parse(\r\n obj[Enums.ContainerStyle.Emphasis]\r\n );\r\n this._allStyles[Enums.ContainerStyle.Accent].parse(obj[Enums.ContainerStyle.Accent]);\r\n this._allStyles[Enums.ContainerStyle.Good].parse(obj[Enums.ContainerStyle.Good]);\r\n this._allStyles[Enums.ContainerStyle.Attention].parse(\r\n obj[Enums.ContainerStyle.Attention]\r\n );\r\n this._allStyles[Enums.ContainerStyle.Warning].parse(obj[Enums.ContainerStyle.Warning]);\r\n\r\n const customStyleArray = obj[\"customStyles\"];\r\n\r\n if (customStyleArray && Array.isArray(customStyleArray)) {\r\n for (const customStyle of customStyleArray) {\r\n if (customStyle) {\r\n const styleName = customStyle[\"name\"];\r\n\r\n if (styleName && typeof styleName === \"string\") {\r\n if (this._allStyles.hasOwnProperty(styleName)) {\r\n this._allStyles[styleName].parse(customStyle[\"style\"]);\r\n } else {\r\n this._allStyles[styleName] = new ContainerStyleDefinition(\r\n customStyle[\"style\"]\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n toJSON() {\r\n const customStyleArray: any[] = [];\r\n\r\n Object.keys(this._allStyles).forEach((key) => {\r\n if (!this._allStyles[key].isBuiltIn) {\r\n customStyleArray.push({\r\n name: key,\r\n style: this._allStyles[key]\r\n });\r\n }\r\n });\r\n\r\n const result: any = {\r\n default: this.default,\r\n emphasis: this.emphasis\r\n };\r\n\r\n if (customStyleArray.length > 0) {\r\n result.customStyles = customStyleArray;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getStyleByName(\r\n name: string | undefined,\r\n defaultValue?: ContainerStyleDefinition\r\n ): ContainerStyleDefinition {\r\n if (name && this._allStyles.hasOwnProperty(name)) {\r\n return this._allStyles[name];\r\n } else {\r\n return defaultValue ? defaultValue : this._allStyles[Enums.ContainerStyle.Default];\r\n }\r\n }\r\n\r\n get default(): ContainerStyleDefinition {\r\n return this._allStyles[Enums.ContainerStyle.Default];\r\n }\r\n\r\n get emphasis(): ContainerStyleDefinition {\r\n return this._allStyles[Enums.ContainerStyle.Emphasis];\r\n }\r\n}\r\n\r\nexport interface IFontSizeDefinitions {\r\n small: number;\r\n default: number;\r\n medium: number;\r\n large: number;\r\n extraLarge: number;\r\n}\r\n\r\nexport interface IFontWeightDefinitions {\r\n lighter: number;\r\n default: number;\r\n bolder: number;\r\n}\r\n\r\nexport class FontTypeDefinition {\r\n static readonly monospace = new FontTypeDefinition(\"'Courier New', Courier, monospace\");\r\n\r\n fontFamily?: string = \"Segoe UI,Segoe,Segoe WP,Helvetica Neue,Helvetica,sans-serif\";\r\n\r\n fontSizes: IFontSizeDefinitions = {\r\n small: 12,\r\n default: 14,\r\n medium: 17,\r\n large: 21,\r\n extraLarge: 26\r\n };\r\n\r\n fontWeights: IFontWeightDefinitions = {\r\n lighter: 200,\r\n default: 400,\r\n bolder: 600\r\n };\r\n\r\n constructor(fontFamily?: string) {\r\n if (fontFamily) {\r\n this.fontFamily = fontFamily;\r\n }\r\n }\r\n\r\n parse(obj?: any) {\r\n this.fontFamily = obj[\"fontFamily\"] || this.fontFamily;\r\n this.fontSizes = {\r\n small: (obj.fontSizes && obj.fontSizes[\"small\"]) || this.fontSizes.small,\r\n default: (obj.fontSizes && obj.fontSizes[\"default\"]) || this.fontSizes.default,\r\n medium: (obj.fontSizes && obj.fontSizes[\"medium\"]) || this.fontSizes.medium,\r\n large: (obj.fontSizes && obj.fontSizes[\"large\"]) || this.fontSizes.large,\r\n extraLarge: (obj.fontSizes && obj.fontSizes[\"extraLarge\"]) || this.fontSizes.extraLarge\r\n };\r\n this.fontWeights = {\r\n lighter: (obj.fontWeights && obj.fontWeights[\"lighter\"]) || this.fontWeights.lighter,\r\n default: (obj.fontWeights && obj.fontWeights[\"default\"]) || this.fontWeights.default,\r\n bolder: (obj.fontWeights && obj.fontWeights[\"bolder\"]) || this.fontWeights.bolder\r\n };\r\n }\r\n}\r\n\r\nexport class FontTypeSet {\r\n default: FontTypeDefinition;\r\n monospace: FontTypeDefinition;\r\n\r\n constructor(obj?: any) {\r\n this.default = new FontTypeDefinition();\r\n this.monospace = new FontTypeDefinition(\"'Courier New', Courier, monospace\");\r\n\r\n if (obj) {\r\n this.default.parse(obj[\"default\"]);\r\n this.monospace.parse(obj[\"monospace\"]);\r\n }\r\n }\r\n\r\n getStyleDefinition(style: Enums.FontType | undefined): FontTypeDefinition {\r\n switch (style) {\r\n case Enums.FontType.Monospace:\r\n return this.monospace;\r\n case Enums.FontType.Default:\r\n default:\r\n return this.default;\r\n }\r\n }\r\n}\r\n\r\nexport class HostConfig {\r\n readonly hostCapabilities = new HostCapabilities();\r\n\r\n private _legacyFontType: FontTypeDefinition;\r\n\r\n choiceSetInputValueSeparator: string = \",\";\r\n supportsInteractivity: boolean = true;\r\n lineHeights?: ILineHeightDefinitions;\r\n fontTypes?: FontTypeSet;\r\n\r\n readonly spacing = {\r\n small: 3,\r\n default: 8,\r\n medium: 20,\r\n large: 30,\r\n extraLarge: 40,\r\n padding: 15\r\n };\r\n\r\n readonly separator = {\r\n lineThickness: 1,\r\n lineColor: \"#EEEEEE\"\r\n };\r\n\r\n readonly imageSizes = {\r\n small: 40,\r\n medium: 80,\r\n large: 160\r\n };\r\n\r\n readonly containerStyles: ContainerStyleSet = new ContainerStyleSet();\r\n readonly inputs: InputConfig = new InputConfig();\r\n readonly actions: ActionsConfig = new ActionsConfig();\r\n readonly adaptiveCard: AdaptiveCardConfig = new AdaptiveCardConfig();\r\n readonly imageSet: ImageSetConfig = new ImageSetConfig();\r\n readonly media: MediaConfig = new MediaConfig();\r\n readonly factSet: FactSetConfig = new FactSetConfig();\r\n readonly table: TableConfig = new TableConfig();\r\n readonly textStyles: TextStyleSet = new TextStyleSet();\r\n readonly textBlock: TextBlockConfig = new TextBlockConfig();\r\n\r\n cssClassNamePrefix?: string;\r\n alwaysAllowBleed: boolean = false;\r\n\r\n constructor(obj?: any) {\r\n if (obj) {\r\n if (typeof obj === \"string\" || obj instanceof String) {\r\n obj = JSON.parse(obj as string);\r\n }\r\n\r\n this.choiceSetInputValueSeparator =\r\n obj && typeof obj[\"choiceSetInputValueSeparator\"] === \"string\"\r\n ? obj[\"choiceSetInputValueSeparator\"]\r\n : this.choiceSetInputValueSeparator;\r\n this.supportsInteractivity =\r\n obj && typeof obj[\"supportsInteractivity\"] === \"boolean\"\r\n ? obj[\"supportsInteractivity\"]\r\n : this.supportsInteractivity;\r\n\r\n this._legacyFontType = new FontTypeDefinition();\r\n this._legacyFontType.parse(obj);\r\n\r\n if (obj.fontTypes) {\r\n this.fontTypes = new FontTypeSet(obj.fontTypes);\r\n }\r\n\r\n if (obj.lineHeights) {\r\n this.lineHeights = {\r\n small: obj.lineHeights[\"small\"],\r\n default: obj.lineHeights[\"default\"],\r\n medium: obj.lineHeights[\"medium\"],\r\n large: obj.lineHeights[\"large\"],\r\n extraLarge: obj.lineHeights[\"extraLarge\"]\r\n };\r\n }\r\n\r\n this.imageSizes = {\r\n small: (obj.imageSizes && obj.imageSizes[\"small\"]) || this.imageSizes.small,\r\n medium: (obj.imageSizes && obj.imageSizes[\"medium\"]) || this.imageSizes.medium,\r\n large: (obj.imageSizes && obj.imageSizes[\"large\"]) || this.imageSizes.large\r\n };\r\n\r\n this.containerStyles = new ContainerStyleSet(obj[\"containerStyles\"]);\r\n this.spacing = {\r\n small: (obj.spacing && obj.spacing[\"small\"]) || this.spacing.small,\r\n default: (obj.spacing && obj.spacing[\"default\"]) || this.spacing.default,\r\n medium: (obj.spacing && obj.spacing[\"medium\"]) || this.spacing.medium,\r\n large: (obj.spacing && obj.spacing[\"large\"]) || this.spacing.large,\r\n extraLarge: (obj.spacing && obj.spacing[\"extraLarge\"]) || this.spacing.extraLarge,\r\n padding: (obj.spacing && obj.spacing[\"padding\"]) || this.spacing.padding\r\n };\r\n\r\n this.separator = {\r\n lineThickness:\r\n (obj.separator && obj.separator[\"lineThickness\"]) ||\r\n this.separator.lineThickness,\r\n lineColor: (obj.separator && obj.separator[\"lineColor\"]) || this.separator.lineColor\r\n };\r\n\r\n this.inputs = new InputConfig(obj.inputs || this.inputs);\r\n this.actions = new ActionsConfig(obj.actions || this.actions);\r\n this.adaptiveCard = new AdaptiveCardConfig(obj.adaptiveCard || this.adaptiveCard);\r\n this.imageSet = new ImageSetConfig(obj[\"imageSet\"]);\r\n this.factSet = new FactSetConfig(obj[\"factSet\"]);\r\n this.textStyles = new TextStyleSet(obj[\"textStyles\"]);\r\n this.textBlock = new TextBlockConfig(obj[\"textBlock\"]);\r\n }\r\n }\r\n\r\n getFontTypeDefinition(style?: Enums.FontType): FontTypeDefinition {\r\n if (this.fontTypes) {\r\n return this.fontTypes.getStyleDefinition(style);\r\n } else {\r\n return style === Enums.FontType.Monospace\r\n ? FontTypeDefinition.monospace\r\n : this._legacyFontType;\r\n }\r\n }\r\n\r\n getEffectiveSpacing(spacing: Enums.Spacing): number {\r\n switch (spacing) {\r\n case Enums.Spacing.Small:\r\n return this.spacing.small;\r\n case Enums.Spacing.Default:\r\n return this.spacing.default;\r\n case Enums.Spacing.Medium:\r\n return this.spacing.medium;\r\n case Enums.Spacing.Large:\r\n return this.spacing.large;\r\n case Enums.Spacing.ExtraLarge:\r\n return this.spacing.extraLarge;\r\n case Enums.Spacing.Padding:\r\n return this.spacing.padding;\r\n default:\r\n return 0;\r\n }\r\n }\r\n\r\n paddingDefinitionToSpacingDefinition(\r\n paddingDefinition: Shared.PaddingDefinition\r\n ): Shared.SpacingDefinition {\r\n return new Shared.SpacingDefinition(\r\n this.getEffectiveSpacing(paddingDefinition.top),\r\n this.getEffectiveSpacing(paddingDefinition.right),\r\n this.getEffectiveSpacing(paddingDefinition.bottom),\r\n this.getEffectiveSpacing(paddingDefinition.left)\r\n );\r\n }\r\n\r\n makeCssClassNames(...classNames: string[]): string[] {\r\n const result: string[] = [];\r\n\r\n for (const className of classNames) {\r\n result.push((this.cssClassNamePrefix ? this.cssClassNamePrefix + \"-\" : \"\") + className);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n makeCssClassName(...classNames: string[]): string {\r\n const result = this.makeCssClassNames(...classNames).join(\" \");\r\n\r\n return result ? result : \"\";\r\n }\r\n\r\n get fontFamily(): string | undefined {\r\n return this._legacyFontType.fontFamily;\r\n }\r\n\r\n set fontFamily(value: string | undefined) {\r\n this._legacyFontType.fontFamily = value;\r\n }\r\n\r\n get fontSizes(): IFontSizeDefinitions {\r\n return this._legacyFontType.fontSizes;\r\n }\r\n\r\n get fontWeights(): IFontWeightDefinitions {\r\n return this._legacyFontType.fontWeights;\r\n }\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const defaultHostConfig: HostConfig = new HostConfig({\r\n supportsInteractivity: true,\r\n spacing: {\r\n small: 10,\r\n default: 20,\r\n medium: 30,\r\n large: 40,\r\n extraLarge: 50,\r\n padding: 20\r\n },\r\n separator: {\r\n lineThickness: 1,\r\n lineColor: \"#EEEEEE\"\r\n },\r\n fontTypes: {\r\n default: {\r\n fontFamily: \"'Segoe UI', Tahoma, Geneva, Verdana, sans-serif\",\r\n fontSizes: {\r\n small: 12,\r\n default: 14,\r\n medium: 17,\r\n large: 21,\r\n extraLarge: 26\r\n },\r\n fontWeights: {\r\n lighter: 200,\r\n default: 400,\r\n bolder: 600\r\n }\r\n },\r\n monospace: {\r\n fontFamily: \"'Courier New', Courier, monospace\",\r\n fontSizes: {\r\n small: 12,\r\n default: 14,\r\n medium: 17,\r\n large: 21,\r\n extraLarge: 26\r\n },\r\n fontWeights: {\r\n lighter: 200,\r\n default: 400,\r\n bolder: 600\r\n }\r\n }\r\n },\r\n imageSizes: {\r\n small: 40,\r\n medium: 80,\r\n large: 160\r\n },\r\n containerStyles: {\r\n default: {\r\n backgroundColor: \"#FFFFFF\",\r\n foregroundColors: {\r\n default: {\r\n default: \"#333333\",\r\n subtle: \"#EE333333\"\r\n },\r\n dark: {\r\n default: \"#000000\",\r\n subtle: \"#66000000\"\r\n },\r\n light: {\r\n default: \"#FFFFFF\",\r\n subtle: \"#33000000\"\r\n },\r\n accent: {\r\n default: \"#2E89FC\",\r\n subtle: \"#882E89FC\"\r\n },\r\n attention: {\r\n default: \"#cc3300\",\r\n subtle: \"#DDcc3300\"\r\n },\r\n good: {\r\n default: \"#028A02\",\r\n subtle: \"#DD027502\"\r\n },\r\n warning: {\r\n default: \"#e69500\",\r\n subtle: \"#DDe69500\"\r\n }\r\n }\r\n },\r\n emphasis: {\r\n backgroundColor: \"#08000000\",\r\n foregroundColors: {\r\n default: {\r\n default: \"#333333\",\r\n subtle: \"#EE333333\"\r\n },\r\n dark: {\r\n default: \"#000000\",\r\n subtle: \"#66000000\"\r\n },\r\n light: {\r\n default: \"#FFFFFF\",\r\n subtle: \"#33000000\"\r\n },\r\n accent: {\r\n default: \"#2E89FC\",\r\n subtle: \"#882E89FC\"\r\n },\r\n attention: {\r\n default: \"#cc3300\",\r\n subtle: \"#DDcc3300\"\r\n },\r\n good: {\r\n default: \"#028A02\",\r\n subtle: \"#DD027502\"\r\n },\r\n warning: {\r\n default: \"#e69500\",\r\n subtle: \"#DDe69500\"\r\n }\r\n }\r\n },\r\n accent: {\r\n backgroundColor: \"#C7DEF9\",\r\n foregroundColors: {\r\n default: {\r\n default: \"#333333\",\r\n subtle: \"#EE333333\"\r\n },\r\n dark: {\r\n default: \"#000000\",\r\n subtle: \"#66000000\"\r\n },\r\n light: {\r\n default: \"#FFFFFF\",\r\n subtle: \"#33000000\"\r\n },\r\n accent: {\r\n default: \"#2E89FC\",\r\n subtle: \"#882E89FC\"\r\n },\r\n attention: {\r\n default: \"#cc3300\",\r\n subtle: \"#DDcc3300\"\r\n },\r\n good: {\r\n default: \"#028A02\",\r\n subtle: \"#DD027502\"\r\n },\r\n warning: {\r\n default: \"#e69500\",\r\n subtle: \"#DDe69500\"\r\n }\r\n }\r\n },\r\n good: {\r\n backgroundColor: \"#CCFFCC\",\r\n foregroundColors: {\r\n default: {\r\n default: \"#333333\",\r\n subtle: \"#EE333333\"\r\n },\r\n dark: {\r\n default: \"#000000\",\r\n subtle: \"#66000000\"\r\n },\r\n light: {\r\n default: \"#FFFFFF\",\r\n subtle: \"#33000000\"\r\n },\r\n accent: {\r\n default: \"#2E89FC\",\r\n subtle: \"#882E89FC\"\r\n },\r\n attention: {\r\n default: \"#cc3300\",\r\n subtle: \"#DDcc3300\"\r\n },\r\n good: {\r\n default: \"#028A02\",\r\n subtle: \"#DD027502\"\r\n },\r\n warning: {\r\n default: \"#e69500\",\r\n subtle: \"#DDe69500\"\r\n }\r\n }\r\n },\r\n attention: {\r\n backgroundColor: \"#FFC5B2\",\r\n foregroundColors: {\r\n default: {\r\n default: \"#333333\",\r\n subtle: \"#EE333333\"\r\n },\r\n dark: {\r\n default: \"#000000\",\r\n subtle: \"#66000000\"\r\n },\r\n light: {\r\n default: \"#FFFFFF\",\r\n subtle: \"#33000000\"\r\n },\r\n accent: {\r\n default: \"#2E89FC\",\r\n subtle: \"#882E89FC\"\r\n },\r\n attention: {\r\n default: \"#cc3300\",\r\n subtle: \"#DDcc3300\"\r\n },\r\n good: {\r\n default: \"#028A02\",\r\n subtle: \"#DD027502\"\r\n },\r\n warning: {\r\n default: \"#e69500\",\r\n subtle: \"#DDe69500\"\r\n }\r\n }\r\n },\r\n warning: {\r\n backgroundColor: \"#FFE2B2\",\r\n foregroundColors: {\r\n default: {\r\n default: \"#333333\",\r\n subtle: \"#EE333333\"\r\n },\r\n dark: {\r\n default: \"#000000\",\r\n subtle: \"#66000000\"\r\n },\r\n light: {\r\n default: \"#FFFFFF\",\r\n subtle: \"#33000000\"\r\n },\r\n accent: {\r\n default: \"#2E89FC\",\r\n subtle: \"#882E89FC\"\r\n },\r\n attention: {\r\n default: \"#cc3300\",\r\n subtle: \"#DDcc3300\"\r\n },\r\n good: {\r\n default: \"#028A02\",\r\n subtle: \"#DD027502\"\r\n },\r\n warning: {\r\n default: \"#e69500\",\r\n subtle: \"#DDe69500\"\r\n }\r\n }\r\n }\r\n },\r\n inputs: {\r\n label: {\r\n requiredInputs: {\r\n weight: Enums.TextWeight.Bolder,\r\n suffix: \" *\",\r\n suffixColor: Enums.TextColor.Attention\r\n },\r\n optionalInputs: {\r\n weight: Enums.TextWeight.Bolder\r\n }\r\n },\r\n errorMessage: {\r\n color: Enums.TextColor.Attention,\r\n weight: Enums.TextWeight.Bolder\r\n }\r\n },\r\n actions: {\r\n maxActions: 5,\r\n spacing: Enums.Spacing.Default,\r\n buttonSpacing: 10,\r\n showCard: {\r\n actionMode: Enums.ShowCardActionMode.Inline,\r\n inlineTopMargin: 16\r\n },\r\n actionsOrientation: Enums.Orientation.Horizontal,\r\n actionAlignment: Enums.ActionAlignment.Left\r\n },\r\n adaptiveCard: {\r\n allowCustomStyle: false\r\n },\r\n imageSet: {\r\n imageSize: Enums.Size.Medium,\r\n maxImageHeight: 100\r\n },\r\n factSet: {\r\n title: {\r\n color: Enums.TextColor.Default,\r\n size: Enums.TextSize.Default,\r\n isSubtle: false,\r\n weight: Enums.TextWeight.Bolder,\r\n wrap: true,\r\n maxWidth: 150\r\n },\r\n value: {\r\n color: Enums.TextColor.Default,\r\n size: Enums.TextSize.Default,\r\n isSubtle: false,\r\n weight: Enums.TextWeight.Default,\r\n wrap: true\r\n },\r\n spacing: 10\r\n }\r\n});\r\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { CardElement, Action } from \"./card-elements\";\r\nimport { SerializableObject, Version, Versions } from \"./serialization\";\r\n\r\n/**\r\n * Describes whether a certain element can be parsed in a \"singleton\" context.\r\n * Specifically, is the element allowed to exist as an object in a context where the\r\n * parent expects an Array of elements (e.g. `AdaptiveCard.body`)\r\n *\r\n * @example - Singleton element in a container (note `items` contains an `object` rather than an `Array`)\r\n * ```json\r\n * {\r\n * \"type\": \"Container\",\r\n * \"items\": {\r\n * \"type\": \"AllowedSingletonElement\"\r\n * }\r\n * }\r\n * ```\r\n */\r\nexport enum ElementSingletonBehavior {\r\n /** Element only valid in a singleton context. */\r\n Only,\r\n /** Element is allowed in a singleton context, but not required to be a singleton. */\r\n Allowed,\r\n /** Element is not allowed to exist in a singleton context. */\r\n NotAllowed\r\n}\r\n\r\nexport interface ITypeRegistration {\r\n typeName: string;\r\n objectType: { new (): T };\r\n schemaVersion: Version;\r\n singletonBehavior: ElementSingletonBehavior;\r\n}\r\n\r\nexport class CardObjectRegistry {\r\n private _items: { [typeName: string]: ITypeRegistration } = {};\r\n\r\n findByName(typeName: string): ITypeRegistration | undefined {\r\n return this._items.hasOwnProperty(typeName) ? this._items[typeName] : undefined;\r\n }\r\n\r\n clear() {\r\n this._items = {};\r\n }\r\n\r\n copyTo(target: CardObjectRegistry) {\r\n const keys = Object.keys(this._items);\r\n\r\n for (const key of keys) {\r\n const typeRegistration = this._items[key];\r\n\r\n target.register(\r\n typeRegistration.typeName,\r\n typeRegistration.objectType,\r\n typeRegistration.schemaVersion,\r\n typeRegistration.singletonBehavior\r\n );\r\n }\r\n }\r\n\r\n register(\r\n typeName: string,\r\n objectType: { new (): T },\r\n schemaVersion: Version = Versions.v1_0,\r\n singletonBehavior: ElementSingletonBehavior = ElementSingletonBehavior.NotAllowed\r\n ) {\r\n let registrationInfo = this.findByName(typeName);\r\n\r\n if (registrationInfo !== undefined) {\r\n registrationInfo.objectType = objectType;\r\n } else {\r\n registrationInfo = {\r\n typeName: typeName,\r\n objectType: objectType,\r\n schemaVersion: schemaVersion,\r\n singletonBehavior: singletonBehavior\r\n };\r\n }\r\n\r\n this._items[typeName] = registrationInfo;\r\n }\r\n\r\n unregister(typeName: string) {\r\n delete this._items[typeName];\r\n }\r\n\r\n createInstance(typeName: string, targetVersion: Version): T | undefined {\r\n const registrationInfo = this.findByName(typeName);\r\n\r\n return registrationInfo && registrationInfo.schemaVersion.compareTo(targetVersion) <= 0\r\n ? new registrationInfo.objectType()\r\n : undefined;\r\n }\r\n\r\n getItemCount(): number {\r\n return Object.keys(this._items).length;\r\n }\r\n\r\n getItemAt(index: number): ITypeRegistration {\r\n return Object.keys(this._items).map((e) => this._items[e])[index];\r\n }\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\r\nexport class GlobalRegistry {\r\n private static _elements?: CardObjectRegistry;\r\n private static _actions?: CardObjectRegistry;\r\n\r\n static populateWithDefaultElements(registry: CardObjectRegistry) {\r\n registry.clear();\r\n\r\n GlobalRegistry.defaultElements.copyTo(registry);\r\n }\r\n\r\n static populateWithDefaultActions(registry: CardObjectRegistry) {\r\n registry.clear();\r\n\r\n GlobalRegistry.defaultActions.copyTo(registry);\r\n }\r\n\r\n static readonly defaultElements = new CardObjectRegistry();\r\n static readonly defaultActions = new CardObjectRegistry();\r\n static get elements(): CardObjectRegistry {\r\n if (!GlobalRegistry._elements) {\r\n GlobalRegistry._elements = new CardObjectRegistry();\r\n GlobalRegistry.populateWithDefaultElements(GlobalRegistry._elements);\r\n }\r\n\r\n return GlobalRegistry._elements;\r\n }\r\n\r\n static get actions(): CardObjectRegistry {\r\n if (!GlobalRegistry._actions) {\r\n GlobalRegistry._actions = new CardObjectRegistry();\r\n GlobalRegistry.populateWithDefaultActions(GlobalRegistry._actions);\r\n }\r\n\r\n return GlobalRegistry._actions;\r\n }\r\n\r\n static reset() {\r\n GlobalRegistry._elements = undefined;\r\n GlobalRegistry._actions = undefined;\r\n }\r\n}\r\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport * as Enums from \"./enums\";\r\nimport { Strings } from \"./strings\";\r\nimport { Dictionary, GlobalSettings } from \"./shared\";\r\nimport { HostConfig } from \"./host-config\";\r\nimport { HostCapabilities } from \"./host-capabilities\";\r\nimport {\r\n Versions,\r\n property,\r\n SerializableObject,\r\n StringProperty,\r\n SerializableObjectProperty,\r\n IValidationEvent,\r\n PropertyDefinition\r\n} from \"./serialization\";\r\n\r\nexport class ValidationResults {\r\n readonly allIds: Dictionary = {};\r\n readonly validationEvents: IValidationEvent[] = [];\r\n\r\n addFailure(cardObject: CardObject, event: Enums.ValidationEvent, message: string) {\r\n this.validationEvents.push({\r\n phase: Enums.ValidationPhase.Validation,\r\n source: cardObject,\r\n event: event,\r\n message: message\r\n });\r\n }\r\n}\r\n\r\nexport type CardObjectType = { new (): CardObject };\r\n\r\nexport abstract class CardObject extends SerializableObject {\r\n //#region Schema\r\n\r\n static readonly typeNameProperty = new StringProperty(\r\n Versions.v1_0,\r\n \"type\",\r\n undefined,\r\n undefined,\r\n undefined,\r\n (sender: object) => {\r\n return (sender).getJsonTypeName();\r\n }\r\n );\r\n static readonly idProperty = new StringProperty(Versions.v1_0, \"id\");\r\n static readonly requiresProperty = new SerializableObjectProperty(\r\n Versions.v1_2,\r\n \"requires\",\r\n HostCapabilities,\r\n false,\r\n new HostCapabilities()\r\n );\r\n\r\n protected getSchemaKey(): string {\r\n return this.getJsonTypeName();\r\n }\r\n\r\n @property(CardObject.idProperty)\r\n id?: string;\r\n\r\n @property(CardObject.requiresProperty)\r\n get requires(): HostCapabilities {\r\n return this.getValue(CardObject.requiresProperty);\r\n }\r\n\r\n //#endregion\r\n\r\n private _shouldFallback: boolean = false;\r\n\r\n protected _parent?: CardObject;\r\n protected _renderedElement?: HTMLElement;\r\n\r\n /**\r\n * Checks if this CardObject contains the given DOM Node.\r\n * @param node The DOM Node to look for.\r\n * @returns `true` if the DOM Node was found, `false` otherwise.\r\n */\r\n protected contains(node: Node): boolean {\r\n if (this._renderedElement) {\r\n return this._renderedElement.contains(node);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n onPreProcessPropertyValue?: (\r\n sender: CardObject,\r\n property: PropertyDefinition,\r\n value: any\r\n ) => any;\r\n\r\n abstract getJsonTypeName(): string;\r\n\r\n abstract get hostConfig(): HostConfig;\r\n\r\n preProcessPropertyValue(prop: PropertyDefinition, propertyValue?: any): any {\r\n const value = propertyValue === undefined ? this.getValue(prop) : propertyValue;\r\n\r\n if (GlobalSettings.allowPreProcessingPropertyValues) {\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n let currentObject: CardObject | undefined = this;\r\n\r\n while (currentObject && !currentObject.onPreProcessPropertyValue) {\r\n currentObject = currentObject.parent;\r\n }\r\n\r\n if (currentObject && currentObject.onPreProcessPropertyValue) {\r\n return currentObject.onPreProcessPropertyValue(this, prop, value);\r\n }\r\n }\r\n\r\n return value;\r\n }\r\n\r\n setParent(value: CardObject | undefined) {\r\n this._parent = value;\r\n }\r\n\r\n setShouldFallback(value: boolean) {\r\n this._shouldFallback = value;\r\n }\r\n\r\n shouldFallback(): boolean {\r\n return this._shouldFallback || !this.requires.areAllMet(this.hostConfig.hostCapabilities);\r\n }\r\n\r\n getRootObject(): CardObject {\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n let currentObject: CardObject = this;\r\n\r\n while (currentObject.parent) {\r\n currentObject = currentObject.parent;\r\n }\r\n\r\n return currentObject;\r\n }\r\n\r\n internalValidateProperties(context: ValidationResults) {\r\n if (this.id) {\r\n if (context.allIds.hasOwnProperty(this.id)) {\r\n if (context.allIds[this.id] === 1) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.DuplicateId,\r\n Strings.errors.duplicateId(this.id)\r\n );\r\n }\r\n\r\n context.allIds[this.id] += 1;\r\n } else {\r\n context.allIds[this.id] = 1;\r\n }\r\n }\r\n }\r\n\r\n validateProperties(): ValidationResults {\r\n const result = new ValidationResults();\r\n\r\n this.internalValidateProperties(result);\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Recursively searches this CardObject and any children to find the\r\n * innermost CardObject that owns the given DOM Node.\r\n *\r\n * @param node The DOM Node to look for.\r\n *\r\n * @returns The owner of the given DOM Node, or `undefined` if no owner was found.\r\n */\r\n findDOMNodeOwner(node: Node): CardObject | undefined {\r\n // default implementation for CardObjects with no associated children\r\n return this.contains(node) ? this : undefined;\r\n }\r\n\r\n releaseDOMResources() {\r\n // Do nothing in base implementation\r\n }\r\n\r\n get parent(): CardObject | undefined {\r\n return this._parent;\r\n }\r\n\r\n get renderedElement(): HTMLElement | undefined {\r\n return this._renderedElement;\r\n }\r\n}\r\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nabstract class AbstractTextFormatter {\r\n private _regularExpression: RegExp;\r\n\r\n protected abstract internalFormat(lang: string | undefined, matches: RegExpExecArray): string;\r\n\r\n constructor(regularExpression: RegExp) {\r\n this._regularExpression = regularExpression;\r\n }\r\n\r\n format(lang: string | undefined, input: string | undefined): string | undefined {\r\n let matches;\r\n\r\n if (input) {\r\n let result = input;\r\n\r\n while ((matches = this._regularExpression.exec(input)) != null) {\r\n result = result.replace(matches[0], this.internalFormat(lang, matches));\r\n }\r\n\r\n return result;\r\n } else {\r\n return input;\r\n }\r\n }\r\n}\r\n\r\nclass DateFormatter extends AbstractTextFormatter {\r\n protected internalFormat(lang: string | undefined, matches: RegExpExecArray): string {\r\n const date = new Date(Date.parse(matches[1]));\r\n const format = matches[2] !== undefined ? matches[2].toLowerCase() : \"compact\";\r\n\r\n if (format !== \"compact\") {\r\n return date.toLocaleDateString(lang, {\r\n day: \"numeric\",\r\n weekday: format,\r\n month: format,\r\n year: \"numeric\"\r\n } as Intl.DateTimeFormatOptions);\r\n } else {\r\n return date.toLocaleDateString();\r\n }\r\n }\r\n}\r\n\r\nclass TimeFormatter extends AbstractTextFormatter {\r\n protected internalFormat(lang: string | undefined, matches: RegExpExecArray): string {\r\n const date = new Date(Date.parse(matches[1]));\r\n\r\n return date.toLocaleTimeString(lang, { hour: \"numeric\", minute: \"2-digit\" });\r\n }\r\n}\r\n\r\nexport function formatText(lang: string | undefined, text: string | undefined): string | undefined {\r\n const formatters: AbstractTextFormatter[] = [\r\n new DateFormatter(\r\n /\\{{2}DATE\\((\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:Z|(?:(?:-|\\+)\\d{2}:\\d{2})))(?:, ?(COMPACT|LONG|SHORT))?\\)\\}{2}/g\r\n ),\r\n new TimeFormatter(\r\n /\\{{2}TIME\\((\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:Z|(?:(?:-|\\+)\\d{2}:\\d{2})))\\)\\}{2}/g\r\n )\r\n ];\r\n\r\n let result = text;\r\n\r\n for (const formatter of formatters) {\r\n result = formatter.format(lang, result);\r\n }\r\n\r\n return result;\r\n}\r\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\r\nexport class Constants {\r\n static readonly keys = {\r\n tab: \"Tab\",\r\n enter: \"Enter\",\r\n escape: \"Escape\",\r\n space: \" \",\r\n up: \"ArrowUp\",\r\n down: \"ArrowDown\",\r\n delete: \"Delete\"\r\n } as const;\r\n}\r\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { defaultHostConfig, HostConfig } from \"../host-config\";\r\nimport { Constants } from \"./constants\";\r\n\r\nexport class MenuItem {\r\n private _hostConfig?: HostConfig;\r\n private _element: HTMLElement;\r\n private _value: string;\r\n private _isEnabled: boolean = true;\r\n\r\n private click() {\r\n if (this.isEnabled && this.onClick) {\r\n this.onClick(this);\r\n }\r\n }\r\n\r\n private updateCssClasses() {\r\n if (this._element) {\r\n const effectiveHostConfig = this._hostConfig ? this._hostConfig : defaultHostConfig;\r\n\r\n this._element.className = effectiveHostConfig.makeCssClassName(\"ac-ctrl\");\r\n this._element.classList.add(\r\n effectiveHostConfig.makeCssClassName(\r\n this.isEnabled ? \"ac-ctrl-dropdown-item\" : \"ac-ctrl-dropdown-item-disabled\"\r\n )\r\n );\r\n\r\n if (!this.isEnabled) {\r\n this._element.classList.add(effectiveHostConfig.makeCssClassName(\"ac-disabled\"));\r\n }\r\n }\r\n }\r\n\r\n readonly key: string;\r\n\r\n onClick?: (item: MenuItem) => void;\r\n\r\n constructor(key: string, value: string) {\r\n this.key = key;\r\n this._value = value;\r\n }\r\n\r\n toString(): string {\r\n return this.value;\r\n }\r\n\r\n render(hostConfig?: HostConfig): HTMLElement {\r\n this._hostConfig = hostConfig;\r\n\r\n if (!this._element) {\r\n this._element = document.createElement(\"span\");\r\n this._element.innerText = this.value;\r\n this._element.setAttribute(\"role\", \"menuitem\");\r\n\r\n if (!this.isEnabled) {\r\n this._element.setAttribute(\"aria-disabled\", \"true\");\r\n }\r\n\r\n this._element.setAttribute(\"aria-current\", \"false\");\r\n this._element.onmouseup = (_e) => {\r\n this.click();\r\n };\r\n this._element.onkeydown = (e) => {\r\n if (e.key === Constants.keys.enter) {\r\n e.cancelBubble = true;\r\n\r\n this.click();\r\n }\r\n };\r\n\r\n this.updateCssClasses();\r\n }\r\n\r\n return this._element;\r\n }\r\n\r\n get value(): string {\r\n return this._value;\r\n }\r\n\r\n set value(newValue: string) {\r\n this._value = newValue;\r\n\r\n if (this._element) {\r\n this._element.innerText = newValue;\r\n }\r\n }\r\n\r\n get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n\r\n set isEnabled(value: boolean) {\r\n if (this._isEnabled !== value) {\r\n this._isEnabled = value;\r\n\r\n this.updateCssClasses();\r\n }\r\n }\r\n}\r\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nexport class Collection {\r\n private _items: Array = [];\r\n\r\n onItemAdded: (item: TItem) => void;\r\n onItemRemoved: (item: TItem) => void;\r\n\r\n get(index: number): TItem {\r\n return this._items[index];\r\n }\r\n\r\n add(item: TItem) {\r\n this._items.push(item);\r\n\r\n if (this.onItemAdded) {\r\n this.onItemAdded(item);\r\n }\r\n }\r\n\r\n remove(item: TItem) {\r\n const i = this._items.indexOf(item);\r\n\r\n if (i >= 0) {\r\n this._items = this._items.splice(i, 1);\r\n\r\n if (this.onItemRemoved) {\r\n this.onItemRemoved(item);\r\n }\r\n }\r\n }\r\n\r\n indexOf(item: TItem): number {\r\n return this._items.indexOf(item);\r\n }\r\n\r\n get length(): number {\r\n return this._items.length;\r\n }\r\n}\r\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { Constants } from \"./constants\";\r\nimport * as Utils from \"../utils\";\r\nimport { defaultHostConfig, HostConfig } from \"../host-config\";\r\n\r\nexport abstract class PopupControl {\r\n private _isOpen: boolean = false;\r\n private _overlayElement: HTMLElement;\r\n private _popupElement: HTMLElement;\r\n private _hostConfig?: HostConfig;\r\n\r\n protected abstract renderContent(): HTMLElement;\r\n\r\n onClose: (popupControl: PopupControl, wasCancelled: boolean) => void;\r\n\r\n keyDown(e: KeyboardEvent) {\r\n switch (e.key) {\r\n case Constants.keys.escape:\r\n this.closePopup(true);\r\n\r\n break;\r\n }\r\n }\r\n\r\n render(_rootElementBounds: ClientRect): HTMLElement {\r\n const element = document.createElement(\"div\");\r\n element.tabIndex = 0;\r\n element.className = this.hostConfig.makeCssClassName(\"ac-ctrl\", \"ac-ctrl-popup-container\");\r\n element.setAttribute(\"role\", \"dialog\");\r\n element.setAttribute(\"aria-modal\", \"true\");\r\n element.onkeydown = (e) => {\r\n this.keyDown(e);\r\n\r\n return !e.cancelBubble;\r\n };\r\n\r\n element.appendChild(this.renderContent());\r\n\r\n return element;\r\n }\r\n\r\n focus() {\r\n if (this._popupElement) {\r\n (this._popupElement.firstElementChild).focus();\r\n }\r\n }\r\n\r\n popup(rootElement: HTMLElement) {\r\n if (!this._isOpen) {\r\n this._overlayElement = document.createElement(\"div\");\r\n this._overlayElement.className = this.hostConfig.makeCssClassName(\"ac-ctrl-overlay\");\r\n this._overlayElement.tabIndex = 0;\r\n this._overlayElement.style.width = document.documentElement.scrollWidth + \"px\";\r\n this._overlayElement.style.height = document.documentElement.scrollHeight + \"px\";\r\n this._overlayElement.onfocus = (_e) => {\r\n this.closePopup(true);\r\n };\r\n\r\n document.body.appendChild(this._overlayElement);\r\n\r\n const rootElementBounds = rootElement.getBoundingClientRect();\r\n\r\n this._popupElement = this.render(rootElementBounds);\r\n this._popupElement.classList.remove(\r\n ...this.hostConfig.makeCssClassNames(\r\n \"ac-ctrl-slide\",\r\n \"ac-ctrl-slideLeftToRight\",\r\n \"ac-ctrl-slideRightToLeft\",\r\n \"ac-ctrl-slideTopToBottom\",\r\n \"ac-ctrl-slideRightToLeft\"\r\n )\r\n );\r\n\r\n window.addEventListener(\"resize\", (_e) => {\r\n this.closePopup(true);\r\n });\r\n\r\n const rootElementLabel = rootElement.getAttribute(\"aria-label\");\r\n if (rootElementLabel) {\r\n this._popupElement.setAttribute(\"aria-label\", rootElementLabel);\r\n }\r\n\r\n this._overlayElement.appendChild(this._popupElement);\r\n\r\n const popupElementBounds = this._popupElement.getBoundingClientRect();\r\n\r\n const availableSpaceBelow = window.innerHeight - rootElementBounds.bottom;\r\n const availableSpaceAbove = rootElementBounds.top;\r\n const availableSpaceRight = window.innerWidth - rootElementBounds.right;\r\n const availableSpaceLeft = rootElementBounds.left;\r\n\r\n let left = rootElementBounds.left + Utils.getScrollX();\r\n let top;\r\n\r\n if (\r\n availableSpaceAbove < popupElementBounds.height &&\r\n availableSpaceBelow < popupElementBounds.height\r\n ) {\r\n // Not enough space above or below root element\r\n const actualPopupHeight = Math.min(popupElementBounds.height, window.innerHeight);\r\n\r\n this._popupElement.style.maxHeight = actualPopupHeight + \"px\";\r\n\r\n if (actualPopupHeight < popupElementBounds.height) {\r\n top = Utils.getScrollY();\r\n } else {\r\n top =\r\n Utils.getScrollY() +\r\n rootElementBounds.top +\r\n (rootElementBounds.height - actualPopupHeight) / 2;\r\n }\r\n\r\n if (\r\n availableSpaceLeft < popupElementBounds.width &&\r\n availableSpaceRight < popupElementBounds.width\r\n ) {\r\n // Not enough space left or right of root element\r\n const actualPopupWidth = Math.min(popupElementBounds.width, window.innerWidth);\r\n\r\n this._popupElement.style.maxWidth = actualPopupWidth + \"px\";\r\n\r\n if (actualPopupWidth < popupElementBounds.width) {\r\n left = Utils.getScrollX();\r\n } else {\r\n left =\r\n Utils.getScrollX() +\r\n rootElementBounds.left +\r\n (rootElementBounds.width - actualPopupWidth) / 2;\r\n }\r\n } else {\r\n // Enough space on the left or right of the root element\r\n if (availableSpaceRight >= popupElementBounds.width) {\r\n left = Utils.getScrollX() + rootElementBounds.right;\r\n\r\n this._popupElement.classList.add(\r\n ...this.hostConfig.makeCssClassNames(\r\n \"ac-ctrl-slide\",\r\n \"ac-ctrl-slideLeftToRight\"\r\n )\r\n );\r\n } else {\r\n left =\r\n Utils.getScrollX() + rootElementBounds.left - popupElementBounds.width;\r\n\r\n this._popupElement.classList.add(\r\n ...this.hostConfig.makeCssClassNames(\r\n \"ac-ctrl-slide\",\r\n \"ac-ctrl-slideRightToLeft\"\r\n )\r\n );\r\n }\r\n }\r\n } else {\r\n // Enough space above or below root element\r\n if (availableSpaceBelow >= popupElementBounds.height) {\r\n top = Utils.getScrollY() + rootElementBounds.bottom;\r\n\r\n this._popupElement.classList.add(\r\n ...this.hostConfig.makeCssClassNames(\r\n \"ac-ctrl-slide\",\r\n \"ac-ctrl-slideTopToBottom\"\r\n )\r\n );\r\n } else {\r\n top = Utils.getScrollY() + rootElementBounds.top - popupElementBounds.height;\r\n\r\n this._popupElement.classList.add(\r\n ...this.hostConfig.makeCssClassNames(\r\n \"ac-ctrl-slide\",\r\n \"ac-ctrl-slideBottomToTop\"\r\n )\r\n );\r\n }\r\n\r\n if (availableSpaceRight < popupElementBounds.width) {\r\n left = Utils.getScrollX() + rootElementBounds.right - popupElementBounds.width;\r\n }\r\n }\r\n\r\n this._popupElement.style.left = left + \"px\";\r\n this._popupElement.style.top = top + \"px\";\r\n\r\n this._popupElement.focus();\r\n\r\n this._isOpen = true;\r\n }\r\n }\r\n\r\n closePopup(wasCancelled: boolean) {\r\n if (this._isOpen) {\r\n document.body.removeChild(this._overlayElement);\r\n\r\n this._isOpen = false;\r\n\r\n if (this.onClose) {\r\n this.onClose(this, wasCancelled);\r\n }\r\n }\r\n }\r\n\r\n get hostConfig(): HostConfig {\r\n return this._hostConfig ? this._hostConfig : defaultHostConfig;\r\n }\r\n\r\n set hostConfig(value: HostConfig) {\r\n this._hostConfig = value;\r\n }\r\n\r\n get isOpen(): boolean {\r\n return this._isOpen;\r\n }\r\n}\r\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { Constants } from \"./constants\";\r\nimport { Collection } from \"./collection\";\r\nimport { PopupControl } from \"./popup-control\";\r\nimport { MenuItem } from \"./menu-item\";\r\n\r\nexport class PopupMenu extends PopupControl {\r\n private _items: Collection = new Collection();\r\n private _renderedItems: Array = [];\r\n private _selectedIndex: number = -1;\r\n\r\n protected renderContent(): HTMLElement {\r\n const element = document.createElement(\"div\");\r\n element.className = this.hostConfig.makeCssClassName(\"ac-ctrl ac-popup\");\r\n element.setAttribute(\"role\", \"listbox\");\r\n\r\n for (let i = 0; i < this._items.length; i++) {\r\n const renderedItem = this._items.get(i).render(this.hostConfig);\r\n renderedItem.tabIndex = 0;\r\n\r\n element.appendChild(renderedItem);\r\n\r\n if (i === this.selectedIndex) {\r\n renderedItem.focus();\r\n }\r\n\r\n this._renderedItems.push(renderedItem);\r\n }\r\n\r\n return element;\r\n }\r\n\r\n keyDown(e: KeyboardEvent) {\r\n super.keyDown(e);\r\n\r\n let selectedItemIndex = this._selectedIndex;\r\n\r\n switch (e.key) {\r\n case Constants.keys.tab:\r\n this.closePopup(true);\r\n\r\n break;\r\n /*\r\n case Constants.keys.enter:\r\n if (this.selectedIndex >= 0) {\r\n this.selectedIndex = this.selectedIndex;\r\n\r\n this.close();\r\n }\r\n\r\n break;\r\n */\r\n case Constants.keys.up:\r\n if (selectedItemIndex <= 0) {\r\n selectedItemIndex = this._renderedItems.length - 1;\r\n } else {\r\n selectedItemIndex--;\r\n\r\n if (selectedItemIndex < 0) {\r\n selectedItemIndex = this._renderedItems.length - 1;\r\n }\r\n }\r\n\r\n this.selectedIndex = selectedItemIndex;\r\n\r\n e.cancelBubble = true;\r\n\r\n break;\r\n case Constants.keys.down:\r\n if (selectedItemIndex < 0) {\r\n selectedItemIndex = 0;\r\n } else {\r\n selectedItemIndex++;\r\n\r\n if (selectedItemIndex >= this._renderedItems.length) {\r\n selectedItemIndex = 0;\r\n }\r\n }\r\n\r\n this.selectedIndex = selectedItemIndex;\r\n\r\n e.cancelBubble = true;\r\n\r\n break;\r\n }\r\n }\r\n\r\n get items(): Collection {\r\n return this._items;\r\n }\r\n\r\n get selectedIndex(): number {\r\n return this._selectedIndex;\r\n }\r\n\r\n set selectedIndex(index: number) {\r\n if (index >= 0 && index < this._renderedItems.length) {\r\n this._renderedItems[index].focus();\r\n\r\n this._selectedIndex = index;\r\n }\r\n }\r\n}\r\n", "// Copyright (C) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nexport * from \"./menu-item\";\r\nexport * from \"./popup-menu\";\r\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport * as Enums from \"./enums\";\r\nimport {\r\n PaddingDefinition,\r\n GlobalSettings,\r\n SizeAndUnit,\r\n SpacingDefinition,\r\n ISeparationDefinition,\r\n Dictionary,\r\n StringWithSubstitutions,\r\n ContentTypes,\r\n IInput,\r\n IResourceInformation\r\n} from \"./shared\";\r\nimport * as Utils from \"./utils\";\r\nimport {\r\n HostConfig,\r\n defaultHostConfig,\r\n BaseTextDefinition,\r\n FontTypeDefinition,\r\n ColorSetDefinition,\r\n TextColorDefinition,\r\n ContainerStyleDefinition,\r\n TextStyleDefinition\r\n} from \"./host-config\";\r\nimport * as TextFormatters from \"./text-formatters\";\r\nimport { CardObject, ValidationResults } from \"./card-object\";\r\nimport {\r\n Versions,\r\n Version,\r\n property,\r\n BaseSerializationContext,\r\n SerializableObject,\r\n SerializableObjectSchema,\r\n StringProperty,\r\n BoolProperty,\r\n ValueSetProperty,\r\n EnumProperty,\r\n SerializableObjectCollectionProperty,\r\n SerializableObjectProperty,\r\n PixelSizeProperty,\r\n NumProperty,\r\n PropertyBag,\r\n CustomProperty,\r\n PropertyDefinition,\r\n StringArrayProperty\r\n} from \"./serialization\";\r\nimport { CardObjectRegistry, GlobalRegistry, ElementSingletonBehavior } from \"./registry\";\r\nimport { Strings } from \"./strings\";\r\nimport { MenuItem, PopupMenu } from \"./controls\";\r\n\r\n\r\nfunction clearElement(element: HTMLElement) : void {\r\n const trustedHtml = (typeof window === 'undefined') ? \"\" : (window.trustedTypes?.emptyHTML ?? \"\");\r\n element.innerHTML = trustedHtml as string;\r\n}\r\n\r\nexport function renderSeparation(\r\n hostConfig: HostConfig,\r\n separationDefinition: ISeparationDefinition,\r\n orientation: Enums.Orientation\r\n): HTMLElement | undefined {\r\n if (\r\n separationDefinition.spacing > 0 ||\r\n (separationDefinition.lineThickness && separationDefinition.lineThickness > 0)\r\n ) {\r\n const separator = document.createElement(\"div\");\r\n separator.className = hostConfig.makeCssClassName(\r\n \"ac-\" +\r\n (orientation === Enums.Orientation.Horizontal ? \"horizontal\" : \"vertical\") +\r\n \"-separator\"\r\n );\r\n separator.setAttribute(\"aria-hidden\", \"true\");\r\n\r\n const color = separationDefinition.lineColor\r\n ? Utils.stringToCssColor(separationDefinition.lineColor)\r\n : \"\";\r\n\r\n if (orientation === Enums.Orientation.Horizontal) {\r\n if (separationDefinition.lineThickness) {\r\n separator.style.paddingTop = separationDefinition.spacing / 2 + \"px\";\r\n separator.style.marginBottom = separationDefinition.spacing / 2 + \"px\";\r\n separator.style.borderBottom =\r\n separationDefinition.lineThickness + \"px solid \" + color;\r\n } else {\r\n separator.style.height = separationDefinition.spacing + \"px\";\r\n }\r\n } else {\r\n if (separationDefinition.lineThickness) {\r\n separator.style.paddingLeft = separationDefinition.spacing / 2 + \"px\";\r\n separator.style.marginRight = separationDefinition.spacing / 2 + \"px\";\r\n separator.style.borderRight =\r\n separationDefinition.lineThickness + \"px solid \" + color;\r\n } else {\r\n separator.style.width = separationDefinition.spacing + \"px\";\r\n }\r\n }\r\n\r\n separator.style.overflow = \"hidden\";\r\n separator.style.flex = \"0 0 auto\";\r\n\r\n return separator;\r\n } else {\r\n return undefined;\r\n }\r\n}\r\n\r\nexport type CardElementHeight = \"auto\" | \"stretch\";\r\n\r\nexport abstract class CardElement extends CardObject {\r\n //#region Schema\r\n\r\n static readonly langProperty = new StringProperty(\r\n Versions.v1_1,\r\n \"lang\",\r\n true,\r\n /^[a-z]{2,3}$/gi\r\n );\r\n static readonly isVisibleProperty = new BoolProperty(Versions.v1_2, \"isVisible\", true);\r\n static readonly separatorProperty = new BoolProperty(Versions.v1_0, \"separator\", false);\r\n static readonly heightProperty = new ValueSetProperty(\r\n Versions.v1_1,\r\n \"height\",\r\n [{ value: \"auto\" }, { value: \"stretch\" }],\r\n \"auto\"\r\n );\r\n static readonly horizontalAlignmentProperty = new EnumProperty(\r\n Versions.v1_0,\r\n \"horizontalAlignment\",\r\n Enums.HorizontalAlignment\r\n );\r\n static readonly spacingProperty = new EnumProperty(\r\n Versions.v1_0,\r\n \"spacing\",\r\n Enums.Spacing,\r\n Enums.Spacing.Default\r\n );\r\n\r\n @property(CardElement.horizontalAlignmentProperty)\r\n horizontalAlignment?: Enums.HorizontalAlignment;\r\n\r\n @property(CardElement.spacingProperty)\r\n spacing: Enums.Spacing;\r\n\r\n @property(CardElement.separatorProperty)\r\n separator: boolean;\r\n\r\n @property(CardElement.heightProperty)\r\n height: CardElementHeight;\r\n\r\n @property(CardElement.langProperty)\r\n get lang(): string | undefined {\r\n const lang = this.getValue(CardElement.langProperty);\r\n\r\n if (lang) {\r\n return lang;\r\n } else {\r\n if (this.parent) {\r\n return this.parent.lang;\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n }\r\n\r\n set lang(value: string | undefined) {\r\n this.setValue(CardElement.langProperty, value);\r\n }\r\n\r\n @property(CardElement.isVisibleProperty)\r\n get isVisible(): boolean {\r\n return this.getValue(CardElement.isVisibleProperty);\r\n }\r\n\r\n set isVisible(value: boolean) {\r\n // If the element is going to be hidden, reset any changes that were due\r\n // to overflow truncation (this ensures that if the element is later\r\n // un-hidden it has the right content)\r\n if (GlobalSettings.useAdvancedCardBottomTruncation && !value) {\r\n this.undoOverflowTruncation();\r\n }\r\n\r\n if (this.isVisible !== value) {\r\n this.setValue(CardElement.isVisibleProperty, value);\r\n\r\n this.updateRenderedElementVisibility();\r\n\r\n if (this._renderedElement) {\r\n raiseElementVisibilityChangedEvent(this);\r\n }\r\n }\r\n\r\n if (this._renderedElement) {\r\n this._renderedElement.setAttribute(\"aria-expanded\", value.toString());\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n private _hostConfig?: HostConfig;\r\n private _separatorElement?: HTMLElement;\r\n private _truncatedDueToOverflow: boolean = false;\r\n private _defaultRenderedElementDisplayMode?: string;\r\n private _padding?: PaddingDefinition;\r\n\r\n private internalRenderSeparator(): HTMLElement | undefined {\r\n const renderedSeparator = renderSeparation(\r\n this.hostConfig,\r\n {\r\n spacing: this.hostConfig.getEffectiveSpacing(this.spacing),\r\n lineThickness: this.separator ? this.hostConfig.separator.lineThickness : undefined,\r\n lineColor: this.separator ? this.hostConfig.separator.lineColor : undefined\r\n },\r\n this.separatorOrientation\r\n );\r\n\r\n if (\r\n GlobalSettings.alwaysBleedSeparators &&\r\n renderedSeparator &&\r\n this.separatorOrientation === Enums.Orientation.Horizontal\r\n ) {\r\n // Adjust separator's margins if the option to always bleed separators is turned on\r\n const parentContainer = this.getParentContainer();\r\n\r\n if (parentContainer && parentContainer.getEffectivePadding()) {\r\n const parentPhysicalPadding = this.hostConfig.paddingDefinitionToSpacingDefinition(\r\n parentContainer.getEffectivePadding()\r\n );\r\n\r\n renderedSeparator.style.marginLeft = \"-\" + parentPhysicalPadding.left + \"px\";\r\n renderedSeparator.style.marginRight = \"-\" + parentPhysicalPadding.right + \"px\";\r\n }\r\n }\r\n\r\n return renderedSeparator;\r\n }\r\n\r\n private updateRenderedElementVisibility() {\r\n const displayMode =\r\n this.isDesignMode() || this.isVisible\r\n ? this._defaultRenderedElementDisplayMode\r\n : \"none\";\r\n\r\n if (this._renderedElement) {\r\n if (displayMode) {\r\n this._renderedElement.style.display = displayMode;\r\n } else {\r\n this._renderedElement.style.removeProperty(\"display\");\r\n }\r\n }\r\n\r\n if (this._separatorElement) {\r\n if (this.parent && this.parent.isFirstElement(this)) {\r\n this._separatorElement.style.display = \"none\";\r\n } else {\r\n if (displayMode) {\r\n this._separatorElement.style.display = displayMode;\r\n } else {\r\n this._separatorElement.style.removeProperty(\"display\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n private hideElementDueToOverflow() {\r\n if (this._renderedElement && this.isVisible) {\r\n this._renderedElement.style.visibility = \"hidden\";\r\n\r\n this.isVisible = false;\r\n raiseElementVisibilityChangedEvent(this, false);\r\n }\r\n }\r\n\r\n private showElementHiddenDueToOverflow() {\r\n if (this._renderedElement && !this.isVisible) {\r\n this._renderedElement.style.removeProperty(\"visibility\");\r\n\r\n this.isVisible = true;\r\n raiseElementVisibilityChangedEvent(this, false);\r\n }\r\n }\r\n\r\n // Marked private to emulate internal access\r\n private handleOverflow(maxHeight: number) {\r\n if (this.isVisible || this.isHiddenDueToOverflow()) {\r\n const handled = this.truncateOverflow(maxHeight);\r\n\r\n // Even if we were unable to truncate the element to fit this time,\r\n // it still could have been previously truncated\r\n this._truncatedDueToOverflow = handled || this._truncatedDueToOverflow;\r\n\r\n if (!handled) {\r\n this.hideElementDueToOverflow();\r\n } else if (handled && !this.isVisible) {\r\n this.showElementHiddenDueToOverflow();\r\n }\r\n }\r\n }\r\n\r\n // Marked private to emulate internal access\r\n private resetOverflow(): boolean {\r\n let sizeChanged = false;\r\n\r\n if (this._truncatedDueToOverflow) {\r\n this.undoOverflowTruncation();\r\n this._truncatedDueToOverflow = false;\r\n sizeChanged = true;\r\n }\r\n\r\n if (this.isHiddenDueToOverflow()) {\r\n this.showElementHiddenDueToOverflow();\r\n }\r\n\r\n return sizeChanged;\r\n }\r\n\r\n protected getDefaultSerializationContext(): BaseSerializationContext {\r\n return new SerializationContext();\r\n }\r\n\r\n protected createPlaceholderElement(): HTMLElement {\r\n const styleDefinition = this.getEffectiveStyleDefinition();\r\n const foregroundCssColor = Utils.stringToCssColor(\r\n styleDefinition.foregroundColors.default.subtle\r\n );\r\n\r\n const element = document.createElement(\"div\");\r\n element.style.border = \"1px dashed \" + foregroundCssColor;\r\n element.style.padding = \"4px\";\r\n element.style.minHeight = \"32px\";\r\n element.style.fontSize = \"10px\";\r\n\r\n if (foregroundCssColor) {\r\n element.style.color = foregroundCssColor;\r\n }\r\n\r\n element.innerText = \"Empty \" + this.getJsonTypeName();\r\n\r\n return element;\r\n }\r\n\r\n protected adjustRenderedElementSize(renderedElement: HTMLElement) {\r\n if (this.height === \"auto\") {\r\n renderedElement.style.flex = \"0 0 auto\";\r\n } else {\r\n renderedElement.style.flex = \"1 1 auto\";\r\n }\r\n }\r\n\r\n protected isDisplayed(): boolean {\r\n return (\r\n this._renderedElement !== undefined &&\r\n this.isVisible &&\r\n this._renderedElement.offsetHeight > 0\r\n );\r\n }\r\n\r\n protected abstract internalRender(): HTMLElement | undefined;\r\n\r\n protected overrideInternalRender(): HTMLElement | undefined {\r\n return this.internalRender();\r\n }\r\n\r\n protected applyPadding() {\r\n if (this.separatorElement && this.separatorOrientation === Enums.Orientation.Horizontal) {\r\n if (GlobalSettings.alwaysBleedSeparators && !this.isBleeding()) {\r\n const padding = new PaddingDefinition();\r\n\r\n this.getImmediateSurroundingPadding(padding);\r\n\r\n const physicalPadding =\r\n this.hostConfig.paddingDefinitionToSpacingDefinition(padding);\r\n\r\n this.separatorElement.style.marginLeft = \"-\" + physicalPadding.left + \"px\";\r\n this.separatorElement.style.marginRight = \"-\" + physicalPadding.right + \"px\";\r\n } else {\r\n this.separatorElement.style.marginRight = \"0\";\r\n this.separatorElement.style.marginLeft = \"0\";\r\n }\r\n }\r\n }\r\n\r\n /*\r\n * Called when this element overflows the bottom of the card.\r\n * maxHeight will be the amount of space still available on the card (0 if\r\n * the element is fully off the card).\r\n */\r\n protected truncateOverflow(_maxHeight: number): boolean {\r\n // Child implementations should return true if the element handled\r\n // the truncation request such that its content fits within maxHeight,\r\n // false if the element should fall back to being hidden\r\n return false;\r\n }\r\n\r\n /*\r\n * This should reverse any changes performed in truncateOverflow().\r\n */\r\n protected undoOverflowTruncation() {\r\n return;\r\n }\r\n\r\n protected getDefaultPadding(): PaddingDefinition {\r\n return new PaddingDefinition();\r\n }\r\n\r\n protected getHasBackground(ignoreBackgroundImages: boolean = false): boolean {\r\n return false;\r\n }\r\n\r\n protected getHasBorder(): boolean {\r\n return false;\r\n }\r\n\r\n protected getPadding(): PaddingDefinition | undefined {\r\n return this._padding;\r\n }\r\n\r\n protected setPadding(value: PaddingDefinition | undefined) {\r\n this._padding = value;\r\n }\r\n\r\n protected shouldSerialize(context: SerializationContext): boolean {\r\n return context.elementRegistry.findByName(this.getJsonTypeName()) !== undefined;\r\n }\r\n\r\n protected get useDefaultSizing(): boolean {\r\n return true;\r\n }\r\n\r\n protected get separatorOrientation(): Enums.Orientation {\r\n return Enums.Orientation.Horizontal;\r\n }\r\n\r\n protected get defaultStyle(): string {\r\n return Enums.ContainerStyle.Default;\r\n }\r\n\r\n customCssSelector?: string;\r\n\r\n parse(source: any, context?: SerializationContext) {\r\n super.parse(source, context ? context : new SerializationContext());\r\n }\r\n\r\n asString(): string | undefined {\r\n return \"\";\r\n }\r\n\r\n isBleeding(): boolean {\r\n return false;\r\n }\r\n\r\n getEffectiveStyle(): string {\r\n if (this.parent) {\r\n return this.parent.getEffectiveStyle();\r\n }\r\n\r\n return this.defaultStyle;\r\n }\r\n\r\n getEffectiveStyleDefinition(): ContainerStyleDefinition {\r\n return this.hostConfig.containerStyles.getStyleByName(this.getEffectiveStyle());\r\n }\r\n\r\n getEffectiveTextStyleDefinition(): TextStyleDefinition {\r\n if (this.parent) {\r\n return this.parent.getEffectiveTextStyleDefinition();\r\n }\r\n\r\n return this.hostConfig.textStyles.default;\r\n }\r\n\r\n getForbiddenActionTypes(): ActionType[] {\r\n return [];\r\n }\r\n\r\n getImmediateSurroundingPadding(\r\n result: PaddingDefinition,\r\n processTop: boolean = true,\r\n processRight: boolean = true,\r\n processBottom: boolean = true,\r\n processLeft: boolean = true\r\n ) {\r\n if (this.parent) {\r\n let doProcessTop = processTop && this.parent.isTopElement(this);\r\n let doProcessRight = processRight && this.parent.isRightMostElement(this);\r\n let doProcessBottom = processBottom && this.parent.isBottomElement(this);\r\n let doProcessLeft = processLeft && this.parent.isLeftMostElement(this);\r\n\r\n const effectivePadding = this.parent.getEffectivePadding();\r\n\r\n if (effectivePadding) {\r\n if (doProcessTop && effectivePadding.top !== Enums.Spacing.None) {\r\n result.top = effectivePadding.top;\r\n\r\n doProcessTop = false;\r\n }\r\n\r\n if (doProcessRight && effectivePadding.right !== Enums.Spacing.None) {\r\n result.right = effectivePadding.right;\r\n\r\n doProcessRight = false;\r\n }\r\n\r\n if (doProcessBottom && effectivePadding.bottom !== Enums.Spacing.None) {\r\n result.bottom = effectivePadding.bottom;\r\n\r\n doProcessBottom = false;\r\n }\r\n\r\n if (doProcessLeft && effectivePadding.left !== Enums.Spacing.None) {\r\n result.left = effectivePadding.left;\r\n\r\n doProcessLeft = false;\r\n }\r\n }\r\n\r\n if (doProcessTop || doProcessRight || doProcessBottom || doProcessLeft) {\r\n this.parent.getImmediateSurroundingPadding(\r\n result,\r\n doProcessTop,\r\n doProcessRight,\r\n doProcessBottom,\r\n doProcessLeft\r\n );\r\n }\r\n }\r\n }\r\n\r\n getActionCount(): number {\r\n return 0;\r\n }\r\n\r\n getActionAt(index: number): Action | undefined {\r\n throw new Error(Strings.errors.indexOutOfRange(index));\r\n }\r\n\r\n indexOfAction(action: Action): number {\r\n for (let i = 0; i < this.getActionCount(); i++) {\r\n if (this.getActionAt(i) === action) {\r\n return i;\r\n }\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n remove(): boolean {\r\n if (this.parent && this.parent instanceof CardElementContainer) {\r\n return this.parent.removeItem(this);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n render(): HTMLElement | undefined {\r\n this._renderedElement = this.overrideInternalRender();\r\n this._separatorElement = this.internalRenderSeparator();\r\n\r\n if (this._renderedElement) {\r\n if (this.id) {\r\n this._renderedElement.id = this.id;\r\n }\r\n\r\n if (this.customCssSelector) {\r\n this._renderedElement.classList.add(this.customCssSelector);\r\n }\r\n\r\n this._renderedElement.style.boxSizing = \"border-box\";\r\n this._defaultRenderedElementDisplayMode = this._renderedElement.style.display\r\n ? this._renderedElement.style.display\r\n : undefined;\r\n\r\n this.adjustRenderedElementSize(this._renderedElement);\r\n this.updateLayout(false);\r\n } else if (this.isDesignMode()) {\r\n this._renderedElement = this.createPlaceholderElement();\r\n }\r\n\r\n this.getRootElement().updateActionsEnabledState();\r\n\r\n return this._renderedElement;\r\n }\r\n\r\n updateLayout(_processChildren: boolean = true) {\r\n this.updateRenderedElementVisibility();\r\n this.applyPadding();\r\n }\r\n\r\n updateActionsEnabledState() {\r\n const allActions = this.getRootElement().getAllActions();\r\n\r\n for (let action of allActions) {\r\n action.updateEnabledState();\r\n }\r\n }\r\n\r\n indexOf(_cardElement: CardElement): number {\r\n return -1;\r\n }\r\n\r\n isDesignMode(): boolean {\r\n const rootElement = this.getRootElement();\r\n\r\n return rootElement instanceof AdaptiveCard && rootElement.designMode;\r\n }\r\n\r\n isFirstElement(_element: CardElement): boolean {\r\n return true;\r\n }\r\n\r\n isLastElement(_element: CardElement): boolean {\r\n return true;\r\n }\r\n\r\n isAtTheVeryLeft(): boolean {\r\n return this.parent\r\n ? this.parent.isLeftMostElement(this) && this.parent.isAtTheVeryLeft()\r\n : true;\r\n }\r\n\r\n isAtTheVeryRight(): boolean {\r\n return this.parent\r\n ? this.parent.isRightMostElement(this) && this.parent.isAtTheVeryRight()\r\n : true;\r\n }\r\n\r\n isAtTheVeryTop(): boolean {\r\n return this.parent\r\n ? this.parent.isFirstElement(this) && this.parent.isAtTheVeryTop()\r\n : true;\r\n }\r\n\r\n isAtTheVeryBottom(): boolean {\r\n return this.parent\r\n ? this.parent.isLastElement(this) && this.parent.isAtTheVeryBottom()\r\n : true;\r\n }\r\n\r\n isBleedingAtTop(): boolean {\r\n return false;\r\n }\r\n\r\n isBleedingAtBottom(): boolean {\r\n return false;\r\n }\r\n\r\n isLeftMostElement(_element: CardElement): boolean {\r\n return true;\r\n }\r\n\r\n isRightMostElement(_element: CardElement): boolean {\r\n return true;\r\n }\r\n\r\n isTopElement(element: CardElement): boolean {\r\n return this.isFirstElement(element);\r\n }\r\n\r\n isBottomElement(element: CardElement): boolean {\r\n return this.isLastElement(element);\r\n }\r\n\r\n isHiddenDueToOverflow(): boolean {\r\n return (\r\n this._renderedElement !== undefined &&\r\n this._renderedElement.style.visibility === \"hidden\"\r\n );\r\n }\r\n\r\n getRootElement(): CardElement {\r\n return this.getRootObject() as CardElement;\r\n }\r\n\r\n getParentContainer(): Container | undefined {\r\n let currentElement = this.parent;\r\n\r\n while (currentElement) {\r\n if (currentElement instanceof Container) {\r\n return currentElement;\r\n }\r\n\r\n currentElement = currentElement.parent;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n getAllInputs(processActions: boolean = true): Input[] {\r\n return [];\r\n }\r\n\r\n getAllActions(): Action[] {\r\n const result: Action[] = [];\r\n\r\n for (let i = 0; i < this.getActionCount(); i++) {\r\n let action = this.getActionAt(i);\r\n\r\n if (action) {\r\n result.push(action);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getResourceInformation(): IResourceInformation[] {\r\n return [];\r\n }\r\n\r\n getElementById(id: string): CardElement | undefined {\r\n return this.id === id ? this : undefined;\r\n }\r\n\r\n getActionById(_id: string): Action | undefined {\r\n return undefined;\r\n }\r\n\r\n getEffectivePadding(): PaddingDefinition {\r\n const padding = this.getPadding();\r\n\r\n return padding ? padding : this.getDefaultPadding();\r\n }\r\n\r\n getEffectiveHorizontalAlignment(): Enums.HorizontalAlignment {\r\n if (this.horizontalAlignment !== undefined) {\r\n return this.horizontalAlignment;\r\n }\r\n\r\n if (this.parent) {\r\n return this.parent.getEffectiveHorizontalAlignment();\r\n }\r\n\r\n return Enums.HorizontalAlignment.Left;\r\n }\r\n\r\n get hostConfig(): HostConfig {\r\n if (this._hostConfig) {\r\n return this._hostConfig;\r\n } else {\r\n if (this.parent) {\r\n return this.parent.hostConfig;\r\n } else {\r\n return defaultHostConfig;\r\n }\r\n }\r\n }\r\n\r\n set hostConfig(value: HostConfig) {\r\n this._hostConfig = value;\r\n }\r\n\r\n get index(): number {\r\n if (this.parent) {\r\n return this.parent.indexOf(this);\r\n } else {\r\n return 0;\r\n }\r\n }\r\n\r\n get isInteractive(): boolean {\r\n return false;\r\n }\r\n\r\n get isStandalone(): boolean {\r\n return true;\r\n }\r\n\r\n get isInline(): boolean {\r\n return false;\r\n }\r\n\r\n get hasVisibleSeparator(): boolean {\r\n if (this.parent && this.separatorElement) {\r\n return !this.parent.isFirstElement(this) && (this.isVisible || this.isDesignMode());\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n get separatorElement(): HTMLElement | undefined {\r\n return this._separatorElement;\r\n }\r\n\r\n get parent(): CardElement | undefined {\r\n return this._parent;\r\n }\r\n\r\n getElementSingletonBehavior(): ElementSingletonBehavior {\r\n return ElementSingletonBehavior.NotAllowed;\r\n }\r\n}\r\n\r\nexport class ActionProperty extends PropertyDefinition {\r\n parse(\r\n sender: SerializableObject,\r\n source: PropertyBag,\r\n context: SerializationContext\r\n ): Action | undefined {\r\n const parent = sender;\r\n\r\n return context.parseAction(\r\n parent,\r\n source[this.name],\r\n this.forbiddenActionTypes,\r\n parent.isDesignMode()\r\n );\r\n }\r\n\r\n toJSON(\r\n sender: SerializableObject,\r\n target: PropertyBag,\r\n value: Action | undefined,\r\n context: SerializationContext\r\n ) {\r\n context.serializeValue(\r\n target,\r\n this.name,\r\n value ? value.toJSON(context) : undefined,\r\n undefined,\r\n true\r\n );\r\n }\r\n\r\n constructor(\r\n readonly targetVersion: Version,\r\n readonly name: string,\r\n readonly forbiddenActionTypes: string[] = []\r\n ) {\r\n super(targetVersion, name, undefined);\r\n }\r\n}\r\n\r\nexport abstract class BaseTextBlock extends CardElement {\r\n //#region Schema\r\n\r\n static readonly textProperty = new StringProperty(Versions.v1_0, \"text\", true);\r\n static readonly sizeProperty = new EnumProperty(Versions.v1_0, \"size\", Enums.TextSize);\r\n static readonly weightProperty = new EnumProperty(Versions.v1_0, \"weight\", Enums.TextWeight);\r\n static readonly colorProperty = new EnumProperty(Versions.v1_0, \"color\", Enums.TextColor);\r\n static readonly isSubtleProperty = new BoolProperty(Versions.v1_0, \"isSubtle\");\r\n static readonly fontTypeProperty = new EnumProperty(Versions.v1_2, \"fontType\", Enums.FontType);\r\n static readonly selectActionProperty = new ActionProperty(Versions.v1_1, \"selectAction\", [\r\n \"Action.ShowCard\"\r\n ]);\r\n\r\n protected populateSchema(schema: SerializableObjectSchema) {\r\n super.populateSchema(schema);\r\n\r\n // selectAction is declared on BaseTextBlock but is only exposed on TextRun,\r\n // so the property is removed from the BaseTextBlock schema.\r\n schema.remove(BaseTextBlock.selectActionProperty);\r\n }\r\n\r\n @property(BaseTextBlock.sizeProperty)\r\n size?: Enums.TextSize;\r\n\r\n @property(BaseTextBlock.weightProperty)\r\n weight?: Enums.TextWeight;\r\n\r\n @property(BaseTextBlock.colorProperty)\r\n color?: Enums.TextColor;\r\n\r\n @property(BaseTextBlock.fontTypeProperty)\r\n fontType?: Enums.FontType;\r\n\r\n @property(BaseTextBlock.isSubtleProperty)\r\n isSubtle?: boolean;\r\n\r\n @property(BaseTextBlock.textProperty)\r\n get text(): string | undefined {\r\n return this.getValue(BaseTextBlock.textProperty);\r\n }\r\n\r\n set text(value: string | undefined) {\r\n this.setText(value);\r\n }\r\n\r\n @property(BaseTextBlock.selectActionProperty)\r\n selectAction?: Action;\r\n\r\n //#endregion\r\n\r\n protected getFontSize(fontType: FontTypeDefinition): number {\r\n switch (this.effectiveSize) {\r\n case Enums.TextSize.Small:\r\n return fontType.fontSizes.small;\r\n case Enums.TextSize.Medium:\r\n return fontType.fontSizes.medium;\r\n case Enums.TextSize.Large:\r\n return fontType.fontSizes.large;\r\n case Enums.TextSize.ExtraLarge:\r\n return fontType.fontSizes.extraLarge;\r\n default:\r\n return fontType.fontSizes.default;\r\n }\r\n }\r\n\r\n protected getColorDefinition(\r\n colorSet: ColorSetDefinition,\r\n color: Enums.TextColor\r\n ): TextColorDefinition {\r\n switch (color) {\r\n case Enums.TextColor.Accent:\r\n return colorSet.accent;\r\n case Enums.TextColor.Dark:\r\n return colorSet.dark;\r\n case Enums.TextColor.Light:\r\n return colorSet.light;\r\n case Enums.TextColor.Good:\r\n return colorSet.good;\r\n case Enums.TextColor.Warning:\r\n return colorSet.warning;\r\n case Enums.TextColor.Attention:\r\n return colorSet.attention;\r\n default:\r\n return colorSet.default;\r\n }\r\n }\r\n\r\n protected setText(value: string | undefined) {\r\n this.setValue(BaseTextBlock.textProperty, value);\r\n }\r\n\r\n ariaHidden: boolean = false;\r\n\r\n constructor(text?: string) {\r\n super();\r\n\r\n if (text) {\r\n this.text = text;\r\n }\r\n }\r\n\r\n init(textDefinition: BaseTextDefinition) {\r\n this.size = textDefinition.size;\r\n this.weight = textDefinition.weight;\r\n this.color = textDefinition.color;\r\n this.isSubtle = textDefinition.isSubtle;\r\n }\r\n\r\n asString(): string | undefined {\r\n return this.text;\r\n }\r\n\r\n applyStylesTo(targetElement: HTMLElement) {\r\n const fontType = this.hostConfig.getFontTypeDefinition(this.effectiveFontType);\r\n\r\n if (fontType.fontFamily) {\r\n targetElement.style.fontFamily = fontType.fontFamily;\r\n }\r\n\r\n let fontSize: number;\r\n\r\n switch (this.effectiveSize) {\r\n case Enums.TextSize.Small:\r\n fontSize = fontType.fontSizes.small;\r\n break;\r\n case Enums.TextSize.Medium:\r\n fontSize = fontType.fontSizes.medium;\r\n break;\r\n case Enums.TextSize.Large:\r\n fontSize = fontType.fontSizes.large;\r\n break;\r\n case Enums.TextSize.ExtraLarge:\r\n fontSize = fontType.fontSizes.extraLarge;\r\n break;\r\n default:\r\n fontSize = fontType.fontSizes.default;\r\n break;\r\n }\r\n\r\n targetElement.style.fontSize = fontSize + \"px\";\r\n\r\n const colorDefinition = this.getColorDefinition(\r\n this.getEffectiveStyleDefinition().foregroundColors,\r\n this.effectiveColor\r\n );\r\n\r\n const targetColor = Utils.stringToCssColor(\r\n this.effectiveIsSubtle ? colorDefinition.subtle : colorDefinition.default\r\n );\r\n if (targetColor) {\r\n targetElement.style.color = targetColor;\r\n }\r\n\r\n let fontWeight: number;\r\n\r\n switch (this.effectiveWeight) {\r\n case Enums.TextWeight.Lighter:\r\n fontWeight = fontType.fontWeights.lighter;\r\n break;\r\n case Enums.TextWeight.Bolder:\r\n fontWeight = fontType.fontWeights.bolder;\r\n break;\r\n default:\r\n fontWeight = fontType.fontWeights.default;\r\n break;\r\n }\r\n\r\n targetElement.style.fontWeight = fontWeight.toString();\r\n\r\n if (this.ariaHidden) {\r\n targetElement.setAttribute(\"aria-hidden\", \"true\");\r\n }\r\n }\r\n\r\n getAllActions(): Action[] {\r\n const result = super.getAllActions();\r\n\r\n if (this.selectAction) {\r\n result.push(this.selectAction);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n get effectiveColor(): Enums.TextColor {\r\n return this.color !== undefined ? this.color : this.getEffectiveTextStyleDefinition().color;\r\n }\r\n\r\n get effectiveFontType(): Enums.FontType {\r\n return this.fontType !== undefined\r\n ? this.fontType\r\n : this.getEffectiveTextStyleDefinition().fontType;\r\n }\r\n\r\n get effectiveIsSubtle(): boolean {\r\n return this.isSubtle !== undefined\r\n ? this.isSubtle\r\n : this.getEffectiveTextStyleDefinition().isSubtle;\r\n }\r\n\r\n get effectiveSize(): Enums.TextSize {\r\n return this.size !== undefined ? this.size : this.getEffectiveTextStyleDefinition().size;\r\n }\r\n\r\n get effectiveWeight(): Enums.TextWeight {\r\n return this.weight !== undefined\r\n ? this.weight\r\n : this.getEffectiveTextStyleDefinition().weight;\r\n }\r\n}\r\n\r\nexport type TextBlockStyle = \"default\" | \"heading\" | \"columnHeader\";\r\n\r\nexport class TextBlock extends BaseTextBlock {\r\n //#region Schema\r\n\r\n static readonly wrapProperty = new BoolProperty(Versions.v1_0, \"wrap\", false);\r\n static readonly maxLinesProperty = new NumProperty(Versions.v1_0, \"maxLines\");\r\n static readonly styleProperty = new ValueSetProperty(Versions.v1_5, \"style\", [\r\n { value: \"default\" },\r\n { value: \"columnHeader\" },\r\n { value: \"heading\" }\r\n ]);\r\n\r\n @property(TextBlock.wrapProperty)\r\n wrap: boolean = false;\r\n\r\n @property(TextBlock.maxLinesProperty)\r\n maxLines?: number;\r\n\r\n @property(TextBlock.styleProperty)\r\n style?: TextBlockStyle;\r\n\r\n //#endregion\r\n\r\n private _computedLineHeight: number;\r\n private _originalInnerHtml: string;\r\n private _processedText?: string;\r\n private _treatAsPlainText: boolean = true;\r\n\r\n private restoreOriginalContent() {\r\n if (this.renderedElement !== undefined) {\r\n if (this.maxLines && this.maxLines > 0) {\r\n this.renderedElement.style.maxHeight =\r\n this._computedLineHeight * this.maxLines + \"px\";\r\n }\r\n\r\n const originalHtml = TextBlock._ttRoundtripPolicy?.createHTML(this._originalInnerHtml) ?? this._originalInnerHtml;\r\n this.renderedElement.innerHTML = originalHtml as string;\r\n }\r\n }\r\n\r\n private truncateIfSupported(maxHeight: number): boolean {\r\n if (this.renderedElement !== undefined) {\r\n // For now, only truncate TextBlocks that contain just a single\r\n // paragraph -- since the maxLines calculation doesn't take into\r\n // account Markdown lists\r\n const children = this.renderedElement.children;\r\n const isTextOnly = !children.length;\r\n const truncationSupported =\r\n isTextOnly ||\r\n (children.length === 1 && (children[0]).tagName.toLowerCase() === \"p\" && !(children[0]).children.length);\r\n\r\n if (truncationSupported) {\r\n const element = isTextOnly ? this.renderedElement : children[0];\r\n\r\n Utils.truncateText(element, maxHeight, this._computedLineHeight);\r\n\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n // Markdown processing is handled outside of Adaptive Cards. It's up to the host to ensure that markdown is safely\r\n // processed.\r\n private static readonly _ttMarkdownPolicy = (typeof window === 'undefined') ? undefined : window.trustedTypes?.createPolicy(\r\n \"adaptivecards#markdownPassthroughPolicy\",\r\n { createHTML: (value) => value }\r\n );\r\n\r\n // When \"advanced\" truncation is enabled (see GlobalSettings.useAdvancedCardBottomTruncation and\r\n // GlobalSettings.useAdvancedTextBlockTruncation), we store the original pre-truncation content in\r\n // _originalInnerHtml so that we can restore/recalculate truncation later if space availability has changed (see\r\n // TextBlock.restoreOriginalContent())\r\n private static readonly _ttRoundtripPolicy = (typeof window === 'undefined') ? undefined : window.trustedTypes?.createPolicy(\r\n \"adaptivecards#restoreContentsPolicy\",\r\n { createHTML: (value) => value }\r\n );\r\n\r\n protected setText(value: string) {\r\n super.setText(value);\r\n\r\n this._processedText = undefined;\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n this._processedText = undefined;\r\n\r\n if (this.text) {\r\n const preProcessedText = this.preProcessPropertyValue(BaseTextBlock.textProperty);\r\n const hostConfig = this.hostConfig;\r\n\r\n let element: HTMLElement;\r\n\r\n if (this.forElementId) {\r\n const labelElement = document.createElement(\"label\");\r\n labelElement.htmlFor = this.forElementId;\r\n\r\n element = labelElement;\r\n } else {\r\n element = document.createElement(\"div\");\r\n }\r\n\r\n element.classList.add(hostConfig.makeCssClassName(\"ac-textBlock\"));\r\n element.style.overflow = \"hidden\";\r\n\r\n this.applyStylesTo(element);\r\n\r\n if (this.style === \"heading\") {\r\n element.setAttribute(\"role\", \"heading\");\r\n\r\n const headingLevel = this.hostConfig.textBlock.headingLevel;\r\n\r\n if (headingLevel !== undefined && headingLevel > 0) {\r\n element.setAttribute(\"aria-level\", headingLevel.toString());\r\n }\r\n }\r\n\r\n if (this.selectAction && hostConfig.supportsInteractivity) {\r\n element.onclick = (e) => {\r\n if (this.selectAction && this.selectAction.isEffectivelyEnabled()) {\r\n e.preventDefault();\r\n e.cancelBubble = true;\r\n\r\n this.selectAction.execute();\r\n }\r\n };\r\n\r\n this.selectAction.setupElementForAccessibility(element);\r\n\r\n if (this.selectAction.isEffectivelyEnabled()) {\r\n element.classList.add(hostConfig.makeCssClassName(\"ac-selectable\"));\r\n }\r\n }\r\n\r\n if (!this._processedText) {\r\n this._treatAsPlainText = true;\r\n\r\n let formattedText = TextFormatters.formatText(this.lang, preProcessedText);\r\n\r\n if (this.useMarkdown && formattedText) {\r\n if (GlobalSettings.allowMarkForTextHighlighting) {\r\n formattedText = formattedText\r\n .replace(//g, \"===\")\r\n .replace(/<\\/mark>/g, \"/==/\");\r\n }\r\n\r\n const markdownProcessingResult = AdaptiveCard.applyMarkdown(formattedText);\r\n\r\n if (\r\n markdownProcessingResult.didProcess &&\r\n markdownProcessingResult.outputHtml\r\n ) {\r\n this._processedText = markdownProcessingResult.outputHtml;\r\n this._treatAsPlainText = false;\r\n\r\n // Only process tag if markdown processing was applied because\r\n // markdown processing is also responsible for sanitizing the input string\r\n if (GlobalSettings.allowMarkForTextHighlighting && this._processedText) {\r\n let markStyle: string = \"\";\r\n const effectiveStyle = this.getEffectiveStyleDefinition();\r\n\r\n if (effectiveStyle.highlightBackgroundColor) {\r\n markStyle +=\r\n \"background-color: \" +\r\n effectiveStyle.highlightBackgroundColor +\r\n \";\";\r\n }\r\n\r\n if (effectiveStyle.highlightForegroundColor) {\r\n markStyle +=\r\n \"color: \" + effectiveStyle.highlightForegroundColor + \";\";\r\n }\r\n\r\n if (markStyle) {\r\n markStyle = 'style=\"' + markStyle + '\"';\r\n }\r\n\r\n this._processedText = this._processedText\r\n .replace(/===/g, \"\")\r\n .replace(/\\/==\\//g, \"\");\r\n }\r\n } else {\r\n this._processedText = formattedText;\r\n this._treatAsPlainText = true;\r\n }\r\n } else {\r\n this._processedText = formattedText;\r\n this._treatAsPlainText = true;\r\n }\r\n }\r\n\r\n if (!this._processedText) {\r\n this._processedText = \"\";\r\n }\r\n\r\n if (this._treatAsPlainText) {\r\n element.innerText = this._processedText;\r\n } else {\r\n const processedHtml =\r\n TextBlock._ttMarkdownPolicy?.createHTML(this._processedText) ??\r\n this._processedText;\r\n element.innerHTML = processedHtml as string;\r\n }\r\n\r\n if (element.firstElementChild instanceof HTMLElement) {\r\n const firstElementChild = element.firstElementChild;\r\n firstElementChild.style.marginTop = \"0px\";\r\n firstElementChild.style.width = \"100%\";\r\n\r\n if (!this.wrap) {\r\n firstElementChild.style.overflow = \"hidden\";\r\n firstElementChild.style.textOverflow = \"ellipsis\";\r\n }\r\n }\r\n\r\n if (element.lastElementChild instanceof HTMLElement) {\r\n element.lastElementChild.style.marginBottom = \"0px\";\r\n }\r\n\r\n const anchors = element.getElementsByTagName(\"a\");\r\n\r\n for (const anchor of Array.from(anchors)) {\r\n anchor.classList.add(hostConfig.makeCssClassName(\"ac-anchor\"));\r\n anchor.target = \"_blank\";\r\n anchor.onclick = (e: MouseEvent) => {\r\n if (raiseAnchorClickedEvent(this, anchor, e)) {\r\n e.preventDefault();\r\n e.cancelBubble = true;\r\n }\r\n };\r\n anchor.oncontextmenu = (e: MouseEvent) => {\r\n if (raiseAnchorClickedEvent(this, anchor, e)) {\r\n e.preventDefault();\r\n e.cancelBubble = true;\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n }\r\n\r\n if (this.wrap) {\r\n element.style.wordWrap = \"break-word\";\r\n\r\n if (this.maxLines && this.maxLines > 0) {\r\n element.style.overflow = \"hidden\";\r\n\r\n if (Utils.isInternetExplorer() || !GlobalSettings.useWebkitLineClamp) {\r\n element.style.maxHeight = this._computedLineHeight * this.maxLines + \"px\";\r\n } else {\r\n // While non standard, --webkit-line-clamp works in every browser (except IE)\r\n // and is a great solution to support the maxLines feature with ellipsis\r\n // truncation. With --webkit-line-clamp there is need to use explicit line heights\r\n element.style.removeProperty(\"line-height\");\r\n element.style.display = \"-webkit-box\";\r\n element.style.webkitBoxOrient = \"vertical\";\r\n element.style.webkitLineClamp = this.maxLines.toString();\r\n }\r\n }\r\n } else {\r\n element.style.whiteSpace = \"nowrap\";\r\n element.style.textOverflow = \"ellipsis\";\r\n }\r\n\r\n if (\r\n GlobalSettings.useAdvancedTextBlockTruncation ||\r\n GlobalSettings.useAdvancedCardBottomTruncation\r\n ) {\r\n this._originalInnerHtml = element.innerHTML;\r\n }\r\n\r\n return element;\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n protected truncateOverflow(maxHeight: number): boolean {\r\n if (maxHeight >= this._computedLineHeight) {\r\n return this.truncateIfSupported(maxHeight);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n protected undoOverflowTruncation() {\r\n this.restoreOriginalContent();\r\n\r\n if (GlobalSettings.useAdvancedTextBlockTruncation && this.maxLines) {\r\n const maxHeight = this._computedLineHeight * this.maxLines;\r\n\r\n this.truncateIfSupported(maxHeight);\r\n }\r\n }\r\n\r\n useMarkdown: boolean = true;\r\n forElementId?: string;\r\n\r\n applyStylesTo(targetElement: HTMLElement) {\r\n super.applyStylesTo(targetElement);\r\n\r\n switch (this.getEffectiveHorizontalAlignment()) {\r\n case Enums.HorizontalAlignment.Center:\r\n targetElement.style.textAlign = \"center\";\r\n break;\r\n case Enums.HorizontalAlignment.Right:\r\n targetElement.style.textAlign = \"end\";\r\n break;\r\n default:\r\n targetElement.style.textAlign = \"start\";\r\n break;\r\n }\r\n\r\n const lineHeights = this.hostConfig.lineHeights;\r\n\r\n if (lineHeights) {\r\n switch (this.effectiveSize) {\r\n case Enums.TextSize.Small:\r\n this._computedLineHeight = lineHeights.small;\r\n break;\r\n case Enums.TextSize.Medium:\r\n this._computedLineHeight = lineHeights.medium;\r\n break;\r\n case Enums.TextSize.Large:\r\n this._computedLineHeight = lineHeights.large;\r\n break;\r\n case Enums.TextSize.ExtraLarge:\r\n this._computedLineHeight = lineHeights.extraLarge;\r\n break;\r\n default:\r\n this._computedLineHeight = lineHeights.default;\r\n break;\r\n }\r\n } else {\r\n // Looks like 1.33 is the magic number to compute line-height\r\n // from font size.\r\n this._computedLineHeight =\r\n this.getFontSize(this.hostConfig.getFontTypeDefinition(this.effectiveFontType)) *\r\n 1.33;\r\n }\r\n\r\n targetElement.style.lineHeight = this._computedLineHeight + \"px\";\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"TextBlock\";\r\n }\r\n\r\n getEffectiveTextStyleDefinition(): TextStyleDefinition {\r\n if (this.style) {\r\n return this.hostConfig.textStyles.getStyleByName(this.style);\r\n }\r\n\r\n return super.getEffectiveTextStyleDefinition();\r\n }\r\n\r\n updateLayout(processChildren: boolean = false) {\r\n super.updateLayout(processChildren);\r\n\r\n if (GlobalSettings.useAdvancedTextBlockTruncation && this.maxLines && this.isDisplayed()) {\r\n // Reset the element's innerHTML in case the available room for\r\n // content has increased\r\n this.restoreOriginalContent();\r\n this.truncateIfSupported(this._computedLineHeight * this.maxLines);\r\n }\r\n }\r\n}\r\n\r\nexport class TextRun extends BaseTextBlock {\r\n //#region Schema\r\n\r\n static readonly italicProperty = new BoolProperty(Versions.v1_2, \"italic\", false);\r\n static readonly strikethroughProperty = new BoolProperty(Versions.v1_2, \"strikethrough\", false);\r\n static readonly highlightProperty = new BoolProperty(Versions.v1_2, \"highlight\", false);\r\n static readonly underlineProperty = new BoolProperty(Versions.v1_3, \"underline\", false);\r\n\r\n protected populateSchema(schema: SerializableObjectSchema) {\r\n super.populateSchema(schema);\r\n\r\n schema.add(BaseTextBlock.selectActionProperty);\r\n }\r\n\r\n @property(TextRun.italicProperty)\r\n italic: boolean = false;\r\n\r\n @property(TextRun.strikethroughProperty)\r\n strikethrough: boolean = false;\r\n\r\n @property(TextRun.highlightProperty)\r\n highlight: boolean = false;\r\n\r\n @property(TextRun.underlineProperty)\r\n underline: boolean = false;\r\n\r\n //#endregion\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n if (this.text) {\r\n const preProcessedText = this.preProcessPropertyValue(BaseTextBlock.textProperty);\r\n const hostConfig = this.hostConfig;\r\n\r\n let formattedText = TextFormatters.formatText(this.lang, preProcessedText);\r\n\r\n if (!formattedText) {\r\n formattedText = \"\";\r\n }\r\n\r\n const element = document.createElement(\"span\");\r\n element.classList.add(hostConfig.makeCssClassName(\"ac-textRun\"));\r\n\r\n this.applyStylesTo(element);\r\n\r\n if (this.selectAction && hostConfig.supportsInteractivity) {\r\n const anchor = document.createElement(\"a\");\r\n anchor.classList.add(hostConfig.makeCssClassName(\"ac-anchor\"));\r\n\r\n const href = this.selectAction.getHref();\r\n\r\n anchor.href = href ? href : \"\";\r\n anchor.target = \"_blank\";\r\n anchor.onclick = (e) => {\r\n if (this.selectAction && this.selectAction.isEffectivelyEnabled()) {\r\n e.preventDefault();\r\n e.cancelBubble = true;\r\n\r\n this.selectAction.execute();\r\n }\r\n };\r\n\r\n this.selectAction.setupElementForAccessibility(anchor);\r\n\r\n anchor.innerText = formattedText;\r\n\r\n element.appendChild(anchor);\r\n } else {\r\n element.innerText = formattedText;\r\n }\r\n\r\n return element;\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n applyStylesTo(targetElement: HTMLElement) {\r\n super.applyStylesTo(targetElement);\r\n\r\n if (this.italic) {\r\n targetElement.style.fontStyle = \"italic\";\r\n }\r\n\r\n if (this.strikethrough) {\r\n targetElement.style.textDecoration = \"line-through\";\r\n }\r\n\r\n if (this.highlight) {\r\n const colorDefinition = this.getColorDefinition(\r\n this.getEffectiveStyleDefinition().foregroundColors,\r\n this.effectiveColor\r\n );\r\n\r\n const backgroundColor = Utils.stringToCssColor(\r\n this.effectiveIsSubtle\r\n ? colorDefinition.highlightColors.subtle\r\n : colorDefinition.highlightColors.default\r\n );\r\n if (backgroundColor) {\r\n targetElement.style.backgroundColor = backgroundColor;\r\n }\r\n }\r\n\r\n if (this.underline) {\r\n targetElement.style.textDecoration = \"underline\";\r\n }\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"TextRun\";\r\n }\r\n\r\n get isStandalone(): boolean {\r\n return false;\r\n }\r\n\r\n get isInline(): boolean {\r\n return true;\r\n }\r\n}\r\n\r\nexport class RichTextBlock extends CardElement {\r\n private _inlines: CardElement[] = [];\r\n\r\n private internalAddInline(inline: CardElement, forceAdd: boolean = false) {\r\n if (!inline.isInline) {\r\n throw new Error(Strings.errors.elementCannotBeUsedAsInline());\r\n }\r\n\r\n const doAdd: boolean = inline.parent === undefined || forceAdd;\r\n\r\n if (!doAdd && inline.parent !== this) {\r\n throw new Error(Strings.errors.inlineAlreadyParented());\r\n } else {\r\n inline.setParent(this);\r\n\r\n this._inlines.push(inline);\r\n }\r\n }\r\n\r\n protected internalParse(source: any, context: SerializationContext) {\r\n super.internalParse(source, context);\r\n\r\n this._inlines = [];\r\n\r\n if (Array.isArray(source[\"inlines\"])) {\r\n for (const jsonInline of source[\"inlines\"]) {\r\n let inline: CardElement | undefined;\r\n\r\n if (typeof jsonInline === \"string\") {\r\n const textRun = new TextRun();\r\n textRun.text = jsonInline;\r\n\r\n inline = textRun;\r\n } else {\r\n // No fallback for inlines in 1.2\r\n inline = context.parseElement(this, jsonInline, [], false);\r\n }\r\n\r\n if (inline) {\r\n this.internalAddInline(inline, true);\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected internalToJSON(target: PropertyBag, context: SerializationContext) {\r\n super.internalToJSON(target, context);\r\n\r\n if (this._inlines.length > 0) {\r\n const jsonInlines: any[] = [];\r\n\r\n for (const inline of this._inlines) {\r\n jsonInlines.push(inline.toJSON(context));\r\n }\r\n\r\n context.serializeValue(target, \"inlines\", jsonInlines);\r\n }\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n if (this._inlines.length > 0) {\r\n let element: HTMLElement;\r\n\r\n if (this.forElementId) {\r\n const labelElement = document.createElement(\"label\");\r\n labelElement.htmlFor = this.forElementId;\r\n\r\n element = labelElement;\r\n } else {\r\n element = document.createElement(\"div\");\r\n }\r\n\r\n element.className = this.hostConfig.makeCssClassName(\"ac-richTextBlock\");\r\n\r\n switch (this.getEffectiveHorizontalAlignment()) {\r\n case Enums.HorizontalAlignment.Center:\r\n element.style.textAlign = \"center\";\r\n break;\r\n case Enums.HorizontalAlignment.Right:\r\n element.style.textAlign = \"end\";\r\n break;\r\n default:\r\n element.style.textAlign = \"start\";\r\n break;\r\n }\r\n\r\n let renderedInlines: number = 0;\r\n\r\n for (const inline of this._inlines) {\r\n const renderedInline = inline.render();\r\n\r\n if (renderedInline) {\r\n element.appendChild(renderedInline);\r\n\r\n renderedInlines++;\r\n }\r\n }\r\n\r\n if (renderedInlines > 0) {\r\n return element;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n forElementId?: string;\r\n\r\n asString(): string | undefined {\r\n let result = \"\";\r\n\r\n for (const inline of this._inlines) {\r\n result += inline.asString();\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"RichTextBlock\";\r\n }\r\n\r\n getInlineCount(): number {\r\n return this._inlines.length;\r\n }\r\n\r\n getInlineAt(index: number): CardElement {\r\n if (index >= 0 && index < this._inlines.length) {\r\n return this._inlines[index];\r\n } else {\r\n throw new Error(Strings.errors.indexOutOfRange(index));\r\n }\r\n }\r\n\r\n addInline(inline: CardElement | string) {\r\n if (typeof inline === \"string\") {\r\n this.internalAddInline(new TextRun(inline));\r\n } else {\r\n this.internalAddInline(inline);\r\n }\r\n }\r\n\r\n removeInline(inline: CardElement): boolean {\r\n const index = this._inlines.indexOf(inline);\r\n\r\n if (index >= 0) {\r\n this._inlines[index].setParent(undefined);\r\n this._inlines.splice(index, 1);\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n\r\nexport class Fact extends SerializableObject {\r\n //#region Schema\r\n\r\n static readonly titleProperty = new StringProperty(Versions.v1_0, \"title\");\r\n static readonly valueProperty = new StringProperty(Versions.v1_0, \"value\");\r\n\r\n // For historic reasons, the \"title\" schema property is exposed as \"name\" in the OM.\r\n @property(Fact.titleProperty)\r\n name?: string;\r\n\r\n @property(Fact.valueProperty)\r\n value?: string;\r\n\r\n //#endregion\r\n\r\n protected getSchemaKey(): string {\r\n return \"Fact\";\r\n }\r\n\r\n constructor(name?: string, value?: string) {\r\n super();\r\n\r\n this.name = name;\r\n this.value = value;\r\n }\r\n}\r\n\r\nexport class FactSet extends CardElement {\r\n //#region Schema\r\n\r\n static readonly factsProperty = new SerializableObjectCollectionProperty(\r\n Versions.v1_0,\r\n \"facts\",\r\n Fact\r\n );\r\n\r\n @property(FactSet.factsProperty)\r\n facts: Fact[];\r\n\r\n //#endregion\r\n\r\n protected get useDefaultSizing(): boolean {\r\n return false;\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n let element: HTMLElement | undefined = undefined;\r\n const hostConfig = this.hostConfig;\r\n\r\n if (this.facts.length > 0) {\r\n element = document.createElement(\"table\");\r\n element.style.borderWidth = \"0px\";\r\n element.style.borderSpacing = \"0px\";\r\n element.style.borderStyle = \"none\";\r\n element.style.borderCollapse = \"collapse\";\r\n element.style.display = \"block\";\r\n element.style.overflow = \"hidden\";\r\n element.classList.add(hostConfig.makeCssClassName(\"ac-factset\"));\r\n element.setAttribute(\"role\", \"presentation\");\r\n\r\n for (let i = 0; i < this.facts.length; i++) {\r\n const trElement = document.createElement(\"tr\");\r\n\r\n if (i > 0) {\r\n trElement.style.marginTop = hostConfig.factSet.spacing + \"px\";\r\n }\r\n\r\n // Title column\r\n let tdElement = document.createElement(\"td\");\r\n tdElement.style.padding = \"0\";\r\n tdElement.classList.add(hostConfig.makeCssClassName(\"ac-fact-title\"));\r\n\r\n if (hostConfig.factSet.title.maxWidth) {\r\n tdElement.style.maxWidth = hostConfig.factSet.title.maxWidth + \"px\";\r\n }\r\n\r\n tdElement.style.verticalAlign = \"top\";\r\n\r\n let textBlock = new TextBlock();\r\n textBlock.setParent(this);\r\n textBlock.text =\r\n !this.facts[i].name && this.isDesignMode() ? \"Title\" : this.facts[i].name;\r\n textBlock.size = hostConfig.factSet.title.size;\r\n textBlock.color = hostConfig.factSet.title.color;\r\n textBlock.isSubtle = hostConfig.factSet.title.isSubtle;\r\n textBlock.weight = hostConfig.factSet.title.weight;\r\n textBlock.wrap = hostConfig.factSet.title.wrap;\r\n textBlock.spacing = Enums.Spacing.None;\r\n\r\n Utils.appendChild(tdElement, textBlock.render());\r\n Utils.appendChild(trElement, tdElement);\r\n\r\n // Spacer column\r\n tdElement = document.createElement(\"td\");\r\n tdElement.style.width = \"10px\";\r\n\r\n Utils.appendChild(trElement, tdElement);\r\n\r\n // Value column\r\n tdElement = document.createElement(\"td\");\r\n tdElement.style.padding = \"0\";\r\n tdElement.style.verticalAlign = \"top\";\r\n tdElement.classList.add(hostConfig.makeCssClassName(\"ac-fact-value\"));\r\n\r\n textBlock = new TextBlock();\r\n textBlock.setParent(this);\r\n textBlock.text = this.facts[i].value;\r\n textBlock.size = hostConfig.factSet.value.size;\r\n textBlock.color = hostConfig.factSet.value.color;\r\n textBlock.isSubtle = hostConfig.factSet.value.isSubtle;\r\n textBlock.weight = hostConfig.factSet.value.weight;\r\n textBlock.wrap = hostConfig.factSet.value.wrap;\r\n textBlock.spacing = Enums.Spacing.None;\r\n\r\n Utils.appendChild(tdElement, textBlock.render());\r\n Utils.appendChild(trElement, tdElement);\r\n Utils.appendChild(element, trElement);\r\n }\r\n }\r\n\r\n return element;\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"FactSet\";\r\n }\r\n}\r\n\r\nclass ImageDimensionProperty extends PropertyDefinition {\r\n getInternalName(): string {\r\n return this.internalName;\r\n }\r\n\r\n parse(\r\n sender: SerializableObject,\r\n source: PropertyBag,\r\n context: BaseSerializationContext\r\n ): number | undefined {\r\n let result: number | undefined = undefined;\r\n const sourceValue = source[this.name];\r\n\r\n if (sourceValue === undefined) {\r\n return this.defaultValue;\r\n }\r\n\r\n let isValid = false;\r\n\r\n if (typeof sourceValue === \"string\") {\r\n try {\r\n const size = SizeAndUnit.parse(sourceValue, true);\r\n\r\n if (size.unit === Enums.SizeUnit.Pixel) {\r\n result = size.physicalSize;\r\n\r\n isValid = true;\r\n }\r\n } catch {\r\n // Swallow the exception\r\n }\r\n\r\n // If the source value isn't valid per this property definition,\r\n // check its validity per the fallback property, if specified\r\n if (!isValid && this.fallbackProperty) {\r\n isValid = this.fallbackProperty.isValidValue(sourceValue, context);\r\n }\r\n }\r\n\r\n if (!isValid) {\r\n context.logParseEvent(\r\n sender,\r\n Enums.ValidationEvent.InvalidPropertyValue,\r\n Strings.errors.invalidPropertyValue(sourceValue, this.name)\r\n );\r\n }\r\n\r\n return result;\r\n }\r\n\r\n toJSON(\r\n sender: SerializableObject,\r\n target: PropertyBag,\r\n value: number | undefined,\r\n context: BaseSerializationContext\r\n ) {\r\n context.serializeValue(\r\n target,\r\n this.name,\r\n typeof value === \"number\" && !isNaN(value) ? value + \"px\" : undefined\r\n );\r\n }\r\n\r\n constructor(\r\n readonly targetVersion: Version,\r\n readonly name: string,\r\n readonly internalName: string,\r\n readonly fallbackProperty?: ValueSetProperty\r\n ) {\r\n super(targetVersion, name);\r\n }\r\n}\r\n\r\nexport class Image extends CardElement {\r\n //#region Schema\r\n\r\n static readonly urlProperty = new StringProperty(Versions.v1_0, \"url\");\r\n static readonly altTextProperty = new StringProperty(Versions.v1_0, \"altText\");\r\n static readonly backgroundColorProperty = new StringProperty(Versions.v1_1, \"backgroundColor\");\r\n static readonly styleProperty = new EnumProperty(\r\n Versions.v1_0,\r\n \"style\",\r\n Enums.ImageStyle,\r\n Enums.ImageStyle.Default\r\n );\r\n static readonly sizeProperty = new EnumProperty(\r\n Versions.v1_0,\r\n \"size\",\r\n Enums.Size,\r\n Enums.Size.Auto\r\n );\r\n static readonly pixelWidthProperty = new ImageDimensionProperty(\r\n Versions.v1_1,\r\n \"width\",\r\n \"pixelWidth\"\r\n );\r\n static readonly pixelHeightProperty = new ImageDimensionProperty(\r\n Versions.v1_1,\r\n \"height\",\r\n \"pixelHeight\",\r\n CardElement.heightProperty\r\n );\r\n static readonly selectActionProperty = new ActionProperty(Versions.v1_1, \"selectAction\", [\r\n \"Action.ShowCard\"\r\n ]);\r\n\r\n protected populateSchema(schema: SerializableObjectSchema) {\r\n super.populateSchema(schema);\r\n\r\n schema.remove(CardElement.heightProperty);\r\n }\r\n\r\n @property(Image.urlProperty)\r\n url?: string;\r\n\r\n @property(Image.altTextProperty)\r\n altText?: string;\r\n\r\n @property(Image.backgroundColorProperty)\r\n backgroundColor?: string;\r\n\r\n @property(Image.sizeProperty)\r\n size: Enums.Size = Enums.Size.Auto;\r\n\r\n @property(Image.styleProperty)\r\n style: Enums.ImageStyle = Enums.ImageStyle.Default;\r\n\r\n @property(Image.pixelWidthProperty)\r\n pixelWidth?: number;\r\n\r\n @property(Image.pixelHeightProperty)\r\n pixelHeight?: number;\r\n\r\n @property(Image.selectActionProperty)\r\n selectAction?: Action;\r\n\r\n //#endregion\r\n\r\n private applySize(element: HTMLElement) {\r\n if (this.pixelWidth || this.pixelHeight) {\r\n if (this.pixelWidth) {\r\n element.style.width = this.pixelWidth + \"px\";\r\n }\r\n\r\n if (this.pixelHeight) {\r\n element.style.height = this.pixelHeight + \"px\";\r\n }\r\n } else {\r\n if (this.maxHeight) {\r\n // If the image is constrained in height, we set its height property and\r\n // auto and stretch are ignored (default to medium). THis is necessary for\r\n // ImageSet which uses a maximum image height as opposed to the cards width\r\n // as a constraining dimension\r\n switch (this.size) {\r\n case Enums.Size.Small:\r\n element.style.height = this.hostConfig.imageSizes.small + \"px\";\r\n break;\r\n case Enums.Size.Large:\r\n element.style.height = this.hostConfig.imageSizes.large + \"px\";\r\n break;\r\n default:\r\n element.style.height = this.hostConfig.imageSizes.medium + \"px\";\r\n break;\r\n }\r\n\r\n element.style.maxHeight = this.maxHeight + \"px\";\r\n } else {\r\n switch (this.size) {\r\n case Enums.Size.Stretch:\r\n element.style.width = \"100%\";\r\n break;\r\n case Enums.Size.Auto:\r\n element.style.maxWidth = \"100%\";\r\n break;\r\n case Enums.Size.Small:\r\n element.style.width = this.hostConfig.imageSizes.small + \"px\";\r\n break;\r\n case Enums.Size.Large:\r\n element.style.width = this.hostConfig.imageSizes.large + \"px\";\r\n break;\r\n case Enums.Size.Medium:\r\n element.style.width = this.hostConfig.imageSizes.medium + \"px\";\r\n break;\r\n }\r\n\r\n element.style.maxHeight = \"100%\";\r\n }\r\n }\r\n }\r\n\r\n protected get useDefaultSizing() {\r\n return false;\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n let element: HTMLElement | undefined = undefined;\r\n\r\n if (this.url) {\r\n element = document.createElement(\"div\");\r\n element.style.display = \"flex\";\r\n element.style.alignItems = \"flex-start\";\r\n\r\n // Cache hostConfig to avoid walking the parent hierarchy multiple times\r\n const hostConfig = this.hostConfig;\r\n\r\n switch (this.getEffectiveHorizontalAlignment()) {\r\n case Enums.HorizontalAlignment.Center:\r\n element.style.justifyContent = \"center\";\r\n break;\r\n case Enums.HorizontalAlignment.Right:\r\n element.style.justifyContent = \"flex-end\";\r\n break;\r\n default:\r\n element.style.justifyContent = \"flex-start\";\r\n break;\r\n }\r\n\r\n const imageElement = document.createElement(\"img\");\r\n imageElement.onload = (_e: Event) => {\r\n raiseImageLoadedEvent(this);\r\n };\r\n imageElement.onerror = (_e: Event) => {\r\n if (this.renderedElement) {\r\n const card = this.getRootElement() as AdaptiveCard;\r\n\r\n this.renderedElement;\r\n\r\n if (card && card.designMode) {\r\n const errorElement = document.createElement(\"div\");\r\n errorElement.style.display = \"flex\";\r\n errorElement.style.alignItems = \"center\";\r\n errorElement.style.justifyContent = \"center\";\r\n errorElement.style.backgroundColor = \"#EEEEEE\";\r\n errorElement.style.color = \"black\";\r\n errorElement.innerText = \":-(\";\r\n errorElement.style.padding = \"10px\";\r\n\r\n this.applySize(errorElement);\r\n\r\n this.renderedElement.appendChild(errorElement);\r\n }\r\n }\r\n\r\n raiseImageLoadedEvent(this);\r\n };\r\n imageElement.style.minWidth = \"0\";\r\n imageElement.classList.add(hostConfig.makeCssClassName(\"ac-image\"));\r\n\r\n if (this.selectAction && hostConfig.supportsInteractivity) {\r\n imageElement.onkeypress = (e) => {\r\n if (\r\n this.selectAction &&\r\n this.selectAction.isEffectivelyEnabled() &&\r\n (e.code === \"Enter\" || e.code === \"Space\")\r\n ) {\r\n // enter or space pressed\r\n e.preventDefault();\r\n e.cancelBubble = true;\r\n\r\n this.selectAction.execute();\r\n }\r\n };\r\n\r\n imageElement.onclick = (e) => {\r\n if (this.selectAction && this.selectAction.isEffectivelyEnabled()) {\r\n e.preventDefault();\r\n e.cancelBubble = true;\r\n\r\n this.selectAction.execute();\r\n }\r\n };\r\n\r\n this.selectAction.setupElementForAccessibility(imageElement);\r\n\r\n if (this.selectAction.isEffectivelyEnabled()) {\r\n imageElement.classList.add(hostConfig.makeCssClassName(\"ac-selectable\"));\r\n }\r\n }\r\n\r\n this.applySize(imageElement);\r\n\r\n if (this.style === Enums.ImageStyle.Person) {\r\n imageElement.style.borderRadius = \"50%\";\r\n imageElement.style.backgroundPosition = \"50% 50%\";\r\n imageElement.style.backgroundRepeat = \"no-repeat\";\r\n }\r\n\r\n const backgroundColor = Utils.stringToCssColor(this.backgroundColor);\r\n if (backgroundColor) {\r\n imageElement.style.backgroundColor = backgroundColor;\r\n }\r\n\r\n imageElement.src = this.preProcessPropertyValue(Image.urlProperty);\r\n\r\n const altTextProperty = this.preProcessPropertyValue(Image.altTextProperty);\r\n if (altTextProperty) {\r\n imageElement.alt = altTextProperty;\r\n }\r\n\r\n element.appendChild(imageElement);\r\n }\r\n\r\n return element;\r\n }\r\n\r\n maxHeight?: number;\r\n\r\n getJsonTypeName(): string {\r\n return \"Image\";\r\n }\r\n\r\n getAllActions(): Action[] {\r\n const result = super.getAllActions();\r\n\r\n if (this.selectAction) {\r\n result.push(this.selectAction);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getActionById(id: string) {\r\n let result = super.getActionById(id);\r\n\r\n if (!result && this.selectAction) {\r\n result = this.selectAction.getActionById(id);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getResourceInformation(): IResourceInformation[] {\r\n return this.url ? [{ url: this.url, mimeType: \"image\" }] : [];\r\n }\r\n}\r\n\r\nexport abstract class CardElementContainer extends CardElement {\r\n //#region Schema\r\n\r\n static readonly selectActionProperty = new ActionProperty(Versions.v1_1, \"selectAction\", [\r\n \"Action.ShowCard\"\r\n ]);\r\n\r\n protected populateSchema(schema: SerializableObjectSchema) {\r\n super.populateSchema(schema);\r\n\r\n if (!this.isSelectable) {\r\n schema.remove(CardElementContainer.selectActionProperty);\r\n }\r\n }\r\n\r\n @property(CardElementContainer.selectActionProperty)\r\n protected _selectAction?: Action;\r\n\r\n //#endregion\r\n\r\n protected isElementAllowed(element: CardElement) {\r\n return this.hostConfig.supportsInteractivity || !element.isInteractive;\r\n }\r\n\r\n protected applyPadding() {\r\n super.applyPadding();\r\n\r\n if (!this.renderedElement) {\r\n return;\r\n }\r\n\r\n let physicalPadding = new SpacingDefinition();\r\n\r\n if (this.getEffectivePadding()) {\r\n physicalPadding = this.hostConfig.paddingDefinitionToSpacingDefinition(\r\n this.getEffectivePadding()\r\n );\r\n }\r\n\r\n this.renderedElement.style.paddingTop = physicalPadding.top + \"px\";\r\n this.renderedElement.style.paddingRight = physicalPadding.right + \"px\";\r\n this.renderedElement.style.paddingBottom = physicalPadding.bottom + \"px\";\r\n this.renderedElement.style.paddingLeft = physicalPadding.left + \"px\";\r\n\r\n this.renderedElement.style.marginRight = \"0\";\r\n this.renderedElement.style.marginLeft = \"0\";\r\n }\r\n\r\n protected get isSelectable(): boolean {\r\n return false;\r\n }\r\n\r\n // This function is kept but return [] when removing Carousel from code\r\n protected forbiddenChildElements(): string[] {\r\n return [];\r\n }\r\n\r\n abstract getItemCount(): number;\r\n abstract getItemAt(index: number): CardElement;\r\n abstract getFirstVisibleRenderedItem(): CardElement | undefined;\r\n abstract getLastVisibleRenderedItem(): CardElement | undefined;\r\n abstract removeItem(item: CardElement): boolean;\r\n\r\n allowVerticalOverflow: boolean = false;\r\n\r\n releaseDOMResources() {\r\n super.releaseDOMResources();\r\n\r\n for (let i = 0; i < this.getItemCount(); i++) {\r\n this.getItemAt(i).releaseDOMResources();\r\n }\r\n }\r\n\r\n internalValidateProperties(context: ValidationResults) {\r\n super.internalValidateProperties(context);\r\n\r\n for (let i = 0; i < this.getItemCount(); i++) {\r\n const item = this.getItemAt(i);\r\n\r\n if (!this.hostConfig.supportsInteractivity && item.isInteractive) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.InteractivityNotAllowed,\r\n Strings.errors.interactivityNotAllowed()\r\n );\r\n }\r\n\r\n if (!this.isElementAllowed(item)) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.InteractivityNotAllowed,\r\n Strings.errors.elementTypeNotAllowed(item.getJsonTypeName())\r\n );\r\n }\r\n\r\n item.internalValidateProperties(context);\r\n }\r\n\r\n if (this._selectAction) {\r\n this._selectAction.internalValidateProperties(context);\r\n }\r\n }\r\n\r\n render(): HTMLElement | undefined {\r\n const element = super.render();\r\n\r\n if (element) {\r\n const hostConfig = this.hostConfig;\r\n\r\n if (this.allowVerticalOverflow) {\r\n element.style.overflowX = \"hidden\";\r\n element.style.overflowY = \"auto\";\r\n }\r\n\r\n if (\r\n element &&\r\n this.isSelectable &&\r\n this._selectAction &&\r\n hostConfig.supportsInteractivity\r\n ) {\r\n element.onclick = (e) => {\r\n if (this._selectAction && this._selectAction.isEffectivelyEnabled()) {\r\n e.preventDefault();\r\n e.cancelBubble = true;\r\n\r\n this._selectAction.execute();\r\n }\r\n };\r\n\r\n element.onkeypress = (e) => {\r\n if (\r\n this._selectAction &&\r\n this._selectAction.isEffectivelyEnabled() &&\r\n (e.code === \"Enter\" || e.code === \"Space\")\r\n ) {\r\n // Enter or space pressed\r\n e.preventDefault();\r\n e.cancelBubble = true;\r\n\r\n this._selectAction.execute();\r\n }\r\n };\r\n\r\n this._selectAction.setupElementForAccessibility(element);\r\n\r\n if (this._selectAction.isEffectivelyEnabled()) {\r\n element.classList.add(hostConfig.makeCssClassName(\"ac-selectable\"));\r\n }\r\n }\r\n }\r\n\r\n return element;\r\n }\r\n\r\n updateLayout(processChildren: boolean = true) {\r\n super.updateLayout(processChildren);\r\n\r\n if (processChildren) {\r\n for (let i = 0; i < this.getItemCount(); i++) {\r\n this.getItemAt(i).updateLayout();\r\n }\r\n }\r\n }\r\n\r\n getAllInputs(processActions: boolean = true): Input[] {\r\n let result: Input[] = [];\r\n\r\n for (let i = 0; i < this.getItemCount(); i++) {\r\n result.push(...this.getItemAt(i).getAllInputs(processActions));\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getAllActions(): Action[] {\r\n const result = super.getAllActions();\r\n\r\n for (let i = 0; i < this.getItemCount(); i++) {\r\n result.push(...this.getItemAt(i).getAllActions());\r\n }\r\n\r\n if (this._selectAction) {\r\n result.push(this._selectAction);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getResourceInformation(): IResourceInformation[] {\r\n let result: IResourceInformation[] = [];\r\n\r\n for (let i = 0; i < this.getItemCount(); i++) {\r\n result.push(...this.getItemAt(i).getResourceInformation());\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getElementById(id: string): CardElement | undefined {\r\n let result = super.getElementById(id);\r\n\r\n if (!result) {\r\n for (let i = 0; i < this.getItemCount(); i++) {\r\n result = this.getItemAt(i).getElementById(id);\r\n\r\n if (result) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n findDOMNodeOwner(node: Node): CardObject | undefined {\r\n let target: CardObject | undefined = undefined;\r\n\r\n for (let i = 0; i < this.getItemCount(); i++) {\r\n // recur through child elements\r\n target = this.getItemAt(i).findDOMNodeOwner(node);\r\n\r\n if (target) {\r\n return target;\r\n }\r\n }\r\n\r\n // If not found in children, check the actions\r\n for (let i = 0; i < this.getActionCount(); i++) {\r\n target = this.getActionAt(i)?.findDOMNodeOwner(node);\r\n\r\n if (target) {\r\n return target;\r\n }\r\n }\r\n\r\n // if not found in children or actions, defer to parent implementation\r\n return super.findDOMNodeOwner(node);\r\n }\r\n}\r\n\r\nexport class ImageSet extends CardElementContainer {\r\n //#region Schema\r\n\r\n static readonly imagesProperty = new SerializableObjectCollectionProperty(\r\n Versions.v1_0,\r\n \"images\",\r\n Image,\r\n (sender: SerializableObject, item: Image) => {\r\n item.setParent(sender);\r\n }\r\n );\r\n static readonly imageSizeProperty = new EnumProperty(\r\n Versions.v1_0,\r\n \"imageSize\",\r\n Enums.ImageSize,\r\n Enums.ImageSize.Medium\r\n );\r\n\r\n @property(ImageSet.imagesProperty)\r\n private _images: Image[] = [];\r\n\r\n @property(ImageSet.imageSizeProperty)\r\n imageSize: Enums.ImageSize = Enums.ImageSize.Medium;\r\n\r\n //#endregion\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n let element: HTMLElement | undefined = undefined;\r\n\r\n if (this._images.length > 0) {\r\n element = document.createElement(\"div\");\r\n element.style.display = \"flex\";\r\n element.style.flexWrap = \"wrap\";\r\n\r\n for (const image of this._images) {\r\n switch (this.imageSize) {\r\n case Enums.ImageSize.Small:\r\n image.size = Enums.Size.Small;\r\n break;\r\n case Enums.ImageSize.Large:\r\n image.size = Enums.Size.Large;\r\n break;\r\n default:\r\n image.size = Enums.Size.Medium;\r\n break;\r\n }\r\n\r\n image.maxHeight = this.hostConfig.imageSet.maxImageHeight;\r\n\r\n const renderedImage = image.render();\r\n\r\n if (renderedImage) {\r\n renderedImage.style.display = \"inline-flex\";\r\n renderedImage.style.margin = \"0px\";\r\n renderedImage.style.marginRight = \"10px\";\r\n\r\n Utils.appendChild(element, renderedImage);\r\n }\r\n }\r\n }\r\n\r\n return element;\r\n }\r\n\r\n getItemCount(): number {\r\n return this._images.length;\r\n }\r\n\r\n getItemAt(index: number): CardElement {\r\n return this._images[index];\r\n }\r\n\r\n getFirstVisibleRenderedItem(): CardElement | undefined {\r\n return this._images && this._images.length > 0 ? this._images[0] : undefined;\r\n }\r\n\r\n getLastVisibleRenderedItem(): CardElement | undefined {\r\n return this._images && this._images.length > 0\r\n ? this._images[this._images.length - 1]\r\n : undefined;\r\n }\r\n\r\n removeItem(item: CardElement): boolean {\r\n if (item instanceof Image) {\r\n const itemIndex = this._images.indexOf(item);\r\n\r\n if (itemIndex >= 0) {\r\n this._images.splice(itemIndex, 1);\r\n\r\n item.setParent(undefined);\r\n\r\n this.updateLayout();\r\n\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"ImageSet\";\r\n }\r\n\r\n addImage(image: Image) {\r\n if (!image.parent) {\r\n this._images.push(image);\r\n\r\n image.setParent(this);\r\n } else {\r\n throw new Error(\"This image already belongs to another ImageSet\");\r\n }\r\n }\r\n\r\n indexOf(cardElement: CardElement): number {\r\n return cardElement instanceof Image ? this._images.indexOf(cardElement) : -1;\r\n }\r\n}\r\n\r\nexport abstract class ContentSource extends SerializableObject {\r\n //#region Schema\r\n\r\n static readonly mimeTypeProperty = new StringProperty(Versions.v1_1, \"mimeType\");\r\n static readonly urlProperty = new StringProperty(Versions.v1_1, \"url\");\r\n\r\n @property(ContentSource.mimeTypeProperty)\r\n mimeType?: string;\r\n\r\n @property(ContentSource.urlProperty)\r\n url?: string;\r\n\r\n //#endregion\r\n\r\n constructor(url?: string, mimeType?: string) {\r\n super();\r\n\r\n this.url = url;\r\n this.mimeType = mimeType;\r\n }\r\n\r\n isValid(): boolean {\r\n return this.mimeType && this.url ? true : false;\r\n }\r\n}\r\n\r\nexport class CaptionSource extends ContentSource {\r\n //#region Schema\r\n\r\n static readonly labelProperty = new StringProperty(Versions.v1_6, \"label\");\r\n\r\n @property(CaptionSource.labelProperty)\r\n label?: string;\r\n\r\n //#endregion\r\n\r\n constructor(url?: string, mimeType?: string, label?: string) {\r\n super(url, mimeType);\r\n\r\n this.label = label;\r\n }\r\n\r\n protected getSchemaKey(): string {\r\n return \"CaptionSource\";\r\n }\r\n\r\n render(): HTMLElement | undefined {\r\n let result: HTMLTrackElement | undefined = undefined;\r\n\r\n if (this.isValid()) {\r\n result = document.createElement(\"track\");\r\n result.src = this.url!;\r\n result.kind = \"captions\";\r\n result.label = this.label!;\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nexport class MediaSource extends ContentSource {\r\n protected getSchemaKey(): string {\r\n return \"MediaSource\";\r\n }\r\n\r\n render(): HTMLElement | undefined {\r\n let result: HTMLSourceElement | undefined = undefined;\r\n\r\n if (this.isValid()) {\r\n result = document.createElement(\"source\");\r\n result.src = this.url!;\r\n result.type = this.mimeType!;\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nexport abstract class MediaPlayer {\r\n private _posterUrl?: string;\r\n\r\n abstract canPlay(): boolean;\r\n abstract render(): HTMLElement;\r\n abstract fetchVideoDetails(): Promise;\r\n\r\n play() {\r\n // Do nothing in base implementation\r\n }\r\n\r\n get posterUrl(): string | undefined {\r\n return this._posterUrl;\r\n }\r\n\r\n protected set posterUrl(value: string | undefined) {\r\n this._posterUrl = value;\r\n }\r\n\r\n get selectedMediaType(): string | undefined {\r\n return undefined;\r\n }\r\n}\r\n\r\nexport class HTML5MediaPlayer extends MediaPlayer {\r\n private _selectedMediaType?: string;\r\n private _selectedSources: MediaSource[] = [];\r\n private _captionSources: CaptionSource[] = [];\r\n private _mediaElement?: HTMLMediaElement;\r\n\r\n private processSources() {\r\n this._selectedSources = [];\r\n this._captionSources = [];\r\n this._selectedMediaType = undefined;\r\n\r\n for (const source of this.owner.sources) {\r\n const mimeComponents = source.mimeType ? source.mimeType.split(\"/\") : [];\r\n\r\n if (mimeComponents.length === 2) {\r\n if (!this._selectedMediaType) {\r\n const index = HTML5MediaPlayer.supportedMediaTypes.indexOf(mimeComponents[0]);\r\n\r\n if (index >= 0) {\r\n this._selectedMediaType = HTML5MediaPlayer.supportedMediaTypes[index];\r\n }\r\n }\r\n if (mimeComponents[0] === this._selectedMediaType) {\r\n this._selectedSources.push(source);\r\n }\r\n }\r\n }\r\n\r\n this._captionSources.push(...this.owner.captionSources);\r\n }\r\n\r\n static readonly supportedMediaTypes = [\"audio\", \"video\"];\r\n\r\n constructor(readonly owner: Media) {\r\n super();\r\n\r\n this.processSources();\r\n }\r\n\r\n canPlay(): boolean {\r\n return this._selectedSources.length > 0;\r\n }\r\n\r\n async fetchVideoDetails() {\r\n // Nothing to fetch for the HTML5 media player\r\n }\r\n\r\n render(): HTMLElement {\r\n if (this._selectedMediaType === \"video\") {\r\n this._mediaElement = document.createElement(\"video\");\r\n } else {\r\n this._mediaElement = document.createElement(\"audio\");\r\n }\r\n\r\n this._mediaElement.setAttribute(\r\n \"aria-label\",\r\n this.owner.altText ? this.owner.altText : Strings.defaults.mediaPlayerAriaLabel()\r\n );\r\n this._mediaElement.setAttribute(\"webkit-playsinline\", \"\");\r\n this._mediaElement.setAttribute(\"playsinline\", \"\");\r\n // We enable crossorigin for cases where the caption file has a different domain than\r\n // the video file. If the caption file lives in a different domain than the video file\r\n // and crossorigin is not set, then the caption file will fail to load.\r\n this._mediaElement.setAttribute(\"crossorigin\", \"\");\r\n this._mediaElement.autoplay = true;\r\n this._mediaElement.controls = true;\r\n\r\n if (Utils.isMobileOS()) {\r\n this._mediaElement.muted = true;\r\n }\r\n\r\n this._mediaElement.preload = \"none\";\r\n this._mediaElement.style.width = \"100%\";\r\n\r\n for (const source of this.owner.sources) {\r\n const renderedSource = source.render();\r\n\r\n Utils.appendChild(this._mediaElement, renderedSource);\r\n }\r\n\r\n for (const captionSource of this.owner.captionSources) {\r\n if (captionSource.mimeType == \"vtt\") {\r\n const renderedCaptionSource = captionSource.render();\r\n\r\n Utils.appendChild(this._mediaElement, renderedCaptionSource);\r\n }\r\n }\r\n\r\n return this._mediaElement;\r\n }\r\n\r\n play() {\r\n if (this._mediaElement) {\r\n this._mediaElement.play();\r\n }\r\n }\r\n\r\n get selectedMediaType(): string | undefined {\r\n return this._selectedMediaType;\r\n }\r\n}\r\n\r\nexport abstract class CustomMediaPlayer extends MediaPlayer {\r\n constructor(matches: RegExpExecArray) {\r\n super();\r\n }\r\n}\r\n\r\nexport abstract class IFrameMediaMediaPlayer extends CustomMediaPlayer {\r\n private _videoId?: string;\r\n\r\n constructor(matches: RegExpExecArray, readonly iFrameTitle?: string) {\r\n super(matches);\r\n\r\n if (matches.length >= 2) {\r\n this._videoId = matches[1];\r\n }\r\n }\r\n\r\n abstract getEmbedVideoUrl(): string;\r\n\r\n canPlay(): boolean {\r\n return this._videoId !== undefined;\r\n }\r\n\r\n render(): HTMLElement {\r\n let container = document.createElement(\"div\");\r\n container.style.position = \"relative\";\r\n container.style.width = \"100%\";\r\n container.style.height = \"0\";\r\n container.style.paddingBottom = \"56.25%\";\r\n\r\n let iFrame = document.createElement(\"iframe\");\r\n iFrame.style.position = \"absolute\";\r\n iFrame.style.top = \"0\";\r\n iFrame.style.left = \"0\";\r\n iFrame.style.width = \"100%\";\r\n iFrame.style.height = \"100%\";\r\n iFrame.src = this.getEmbedVideoUrl();\r\n iFrame.frameBorder = \"0\";\r\n\r\n if (this.iFrameTitle) {\r\n iFrame.title = this.iFrameTitle;\r\n }\r\n\r\n iFrame.allow =\r\n \"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\";\r\n iFrame.allowFullscreen = true;\r\n\r\n container.appendChild(iFrame);\r\n\r\n return container;\r\n }\r\n\r\n get videoId(): string | undefined {\r\n return this._videoId;\r\n }\r\n}\r\n\r\nexport class VimeoPlayer extends IFrameMediaMediaPlayer {\r\n async fetchVideoDetails(): Promise {\r\n const oEmbedUrl = `https://vimeo.com/api/oembed.json?url=${this.getEmbedVideoUrl()}`;\r\n\r\n let response = await fetch(oEmbedUrl);\r\n\r\n if (response.ok) {\r\n let json = await response.json();\r\n\r\n this.posterUrl = json[\"thumbnail_url\"];\r\n }\r\n }\r\n\r\n getEmbedVideoUrl(): string {\r\n return `https://player.vimeo.com/video/${this.videoId}?autoplay=1`;\r\n }\r\n}\r\n\r\nexport class DailymotionPlayer extends IFrameMediaMediaPlayer {\r\n async fetchVideoDetails(): Promise {\r\n const apiUrl = `https://api.dailymotion.com/video/${this.videoId}?fields=thumbnail_720_url`;\r\n\r\n let response = await fetch(apiUrl);\r\n\r\n if (response.ok) {\r\n let json = await response.json();\r\n\r\n this.posterUrl = json[\"thumbnail_720_url\"];\r\n }\r\n }\r\n\r\n getEmbedVideoUrl(): string {\r\n return `https://www.dailymotion.com/embed/video/${this.videoId}?autoplay=1`;\r\n }\r\n}\r\n\r\nexport class YouTubePlayer extends IFrameMediaMediaPlayer {\r\n private _startTimeIndex?: number;\r\n\r\n constructor(matches: RegExpExecArray, readonly iFrameTitle?: string) {\r\n super(matches, iFrameTitle);\r\n\r\n if (matches.length >= 3 && matches[2] !== undefined) {\r\n this._startTimeIndex = parseInt(matches[2]);\r\n }\r\n }\r\n\r\n async fetchVideoDetails(): Promise {\r\n this.posterUrl = this.videoId\r\n ? `https://img.youtube.com/vi/${this.videoId}/maxresdefault.jpg`\r\n : undefined;\r\n }\r\n\r\n getEmbedVideoUrl(): string {\r\n let url = `https://www.youtube.com/embed/${this.videoId}?autoplay=1`;\r\n\r\n if (this._startTimeIndex !== undefined) {\r\n url += `&start=${this._startTimeIndex}`;\r\n }\r\n\r\n return url;\r\n }\r\n}\r\n\r\nexport interface ICustomMediaPlayer {\r\n urlPatterns: RegExp[];\r\n createMediaPlayer: (matches: RegExpExecArray) => CustomMediaPlayer;\r\n}\r\n\r\nexport class Media extends CardElement {\r\n static customMediaPlayers: ICustomMediaPlayer[] = [\r\n {\r\n urlPatterns: [\r\n /^(?:https?:\\/\\/)?(?:www.)?youtube.com\\/watch\\?(?=.*v=([\\w\\d-_]+))(?=(?:.*t=(\\d+))?).*/gi,\r\n /^(?:https?:\\/\\/)?youtu.be\\/([\\w\\d-_]+)(?:\\?t=(\\d+))?/gi\r\n ],\r\n createMediaPlayer: (matches) =>\r\n new YouTubePlayer(matches, Strings.defaults.youTubeVideoPlayer())\r\n },\r\n {\r\n urlPatterns: [/^(?:https?:\\/\\/)?vimeo.com\\/([\\w\\d-_]+).*/gi],\r\n createMediaPlayer: (matches) =>\r\n new VimeoPlayer(matches, Strings.defaults.vimeoVideoPlayer())\r\n },\r\n {\r\n urlPatterns: [/^(?:https?:\\/\\/)?(?:www.)?dailymotion.com\\/video\\/([\\w\\d-_]+).*/gi],\r\n createMediaPlayer: (matches) =>\r\n new DailymotionPlayer(matches, Strings.defaults.dailymotionVideoPlayer())\r\n }\r\n ];\r\n\r\n //#region Schema\r\n\r\n static readonly sourcesProperty = new SerializableObjectCollectionProperty(\r\n Versions.v1_1,\r\n \"sources\",\r\n MediaSource\r\n );\r\n static readonly captionSourcesProperty = new SerializableObjectCollectionProperty(\r\n Versions.v1_6,\r\n \"captionSources\",\r\n CaptionSource\r\n );\r\n static readonly posterProperty = new StringProperty(Versions.v1_1, \"poster\");\r\n static readonly altTextProperty = new StringProperty(Versions.v1_1, \"altText\");\r\n\r\n @property(Media.sourcesProperty)\r\n sources: MediaSource[] = [];\r\n\r\n @property(Media.captionSourcesProperty)\r\n captionSources: CaptionSource[] = [];\r\n\r\n @property(Media.posterProperty)\r\n poster?: string;\r\n\r\n @property(Media.altTextProperty)\r\n altText?: string;\r\n\r\n //#endregion\r\n\r\n private _mediaPlayer: MediaPlayer;\r\n\r\n private createMediaPlayer(): MediaPlayer {\r\n for (let provider of Media.customMediaPlayers) {\r\n for (let source of this.sources) {\r\n if (source.url) {\r\n for (let pattern of provider.urlPatterns) {\r\n let matches = pattern.exec(source.url);\r\n\r\n if (matches !== null) {\r\n return provider.createMediaPlayer(matches);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return new HTML5MediaPlayer(this);\r\n }\r\n\r\n private handlePlayButtonInvoke(event: UIEvent): void {\r\n if (this.hostConfig.media.allowInlinePlayback) {\r\n event.preventDefault();\r\n event.cancelBubble = true;\r\n\r\n if (this.renderedElement) {\r\n const mediaPlayerElement = this._mediaPlayer.render();\r\n clearElement(this.renderedElement);\r\n this.renderedElement.appendChild(mediaPlayerElement);\r\n\r\n this._mediaPlayer.play();\r\n\r\n mediaPlayerElement.focus();\r\n }\r\n } else {\r\n if (Media.onPlay) {\r\n event.preventDefault();\r\n event.cancelBubble = true;\r\n\r\n Media.onPlay(this);\r\n }\r\n }\r\n }\r\n\r\n private async displayPoster() {\r\n if (this.renderedElement) {\r\n const playButtonArrowWidth = 12;\r\n const playButtonArrowHeight = 15;\r\n\r\n const posterRootElement = document.createElement(\"div\");\r\n posterRootElement.className = this.hostConfig.makeCssClassName(\"ac-media-poster\");\r\n posterRootElement.setAttribute(\"role\", \"contentinfo\");\r\n posterRootElement.setAttribute(\r\n \"aria-label\",\r\n this.altText ? this.altText : Strings.defaults.mediaPlayerAriaLabel()\r\n );\r\n posterRootElement.style.position = \"relative\";\r\n posterRootElement.style.display = \"flex\";\r\n\r\n let posterUrl = this.poster ? this.poster : this._mediaPlayer.posterUrl;\r\n\r\n if (!posterUrl) {\r\n posterUrl = this.hostConfig.media.defaultPoster;\r\n }\r\n\r\n if (posterUrl) {\r\n const posterImageElement = document.createElement(\"img\");\r\n posterImageElement.style.width = \"100%\";\r\n posterImageElement.style.height = \"100%\";\r\n posterImageElement.setAttribute(\"role\", \"presentation\");\r\n\r\n posterImageElement.onerror = (_e: Event) => {\r\n if (posterImageElement.parentNode) {\r\n posterImageElement.parentNode.removeChild(posterImageElement);\r\n }\r\n\r\n posterRootElement.classList.add(\"empty\");\r\n posterRootElement.style.minHeight = \"150px\";\r\n };\r\n\r\n posterImageElement.src = posterUrl;\r\n\r\n posterRootElement.appendChild(posterImageElement);\r\n } else {\r\n posterRootElement.classList.add(\"empty\");\r\n posterRootElement.style.minHeight = \"150px\";\r\n }\r\n\r\n if (this.hostConfig.supportsInteractivity && this._mediaPlayer.canPlay()) {\r\n const playButtonOuterElement = document.createElement(\"div\");\r\n playButtonOuterElement.tabIndex = 0;\r\n playButtonOuterElement.setAttribute(\"role\", \"button\");\r\n playButtonOuterElement.setAttribute(\r\n \"aria-label\",\r\n Strings.defaults.mediaPlayerPlayMedia()\r\n );\r\n playButtonOuterElement.className =\r\n this.hostConfig.makeCssClassName(\"ac-media-playButton\");\r\n playButtonOuterElement.style.display = \"flex\";\r\n playButtonOuterElement.style.alignItems = \"center\";\r\n playButtonOuterElement.style.justifyContent = \"center\";\r\n playButtonOuterElement.onclick = (e) => {\r\n this.handlePlayButtonInvoke(e);\r\n };\r\n\r\n playButtonOuterElement.onkeypress = (e: KeyboardEvent) => {\r\n if (e.code === \"Enter\" || e.code === \"Space\") {\r\n // space or enter\r\n this.handlePlayButtonInvoke(e);\r\n }\r\n };\r\n\r\n const playButtonInnerElement = document.createElement(\"div\");\r\n playButtonInnerElement.className = this.hostConfig.makeCssClassName(\r\n \"ac-media-playButton-arrow\"\r\n );\r\n playButtonInnerElement.style.width = playButtonArrowWidth + \"px\";\r\n playButtonInnerElement.style.height = playButtonArrowHeight + \"px\";\r\n playButtonInnerElement.style.borderTopWidth = playButtonArrowHeight / 2 + \"px\";\r\n playButtonInnerElement.style.borderBottomWidth = playButtonArrowHeight / 2 + \"px\";\r\n playButtonInnerElement.style.borderLeftWidth = playButtonArrowWidth + \"px\";\r\n playButtonInnerElement.style.borderRightWidth = \"0\";\r\n playButtonInnerElement.style.borderStyle = \"solid\";\r\n playButtonInnerElement.style.borderTopColor = \"transparent\";\r\n playButtonInnerElement.style.borderRightColor = \"transparent\";\r\n playButtonInnerElement.style.borderBottomColor = \"transparent\";\r\n playButtonInnerElement.style.transform =\r\n \"translate(\" + playButtonArrowWidth / 10 + \"px,0px)\";\r\n\r\n playButtonOuterElement.appendChild(playButtonInnerElement);\r\n\r\n const playButtonContainer = document.createElement(\"div\");\r\n playButtonContainer.style.position = \"absolute\";\r\n playButtonContainer.style.left = \"0\";\r\n playButtonContainer.style.top = \"0\";\r\n playButtonContainer.style.width = \"100%\";\r\n playButtonContainer.style.height = \"100%\";\r\n playButtonContainer.style.display = \"flex\";\r\n playButtonContainer.style.justifyContent = \"center\";\r\n playButtonContainer.style.alignItems = \"center\";\r\n\r\n playButtonContainer.appendChild(playButtonOuterElement);\r\n posterRootElement.appendChild(playButtonContainer);\r\n }\r\n\r\n clearElement(this.renderedElement);\r\n this.renderedElement.appendChild(posterRootElement);\r\n }\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n const element = document.createElement(\"div\");\r\n element.className = this.hostConfig.makeCssClassName(\"ac-media\");\r\n\r\n return element;\r\n }\r\n\r\n static onPlay?: (sender: Media) => void;\r\n\r\n render(): HTMLElement | undefined {\r\n let result = super.render();\r\n\r\n if (result) {\r\n this._mediaPlayer = this.createMediaPlayer();\r\n\r\n this._mediaPlayer.fetchVideoDetails().then(() => this.displayPoster());\r\n }\r\n\r\n return result;\r\n }\r\n\r\n releaseDOMResources() {\r\n super.releaseDOMResources();\r\n\r\n this.displayPoster();\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"Media\";\r\n }\r\n\r\n getResourceInformation(): IResourceInformation[] {\r\n const result: IResourceInformation[] = [];\r\n\r\n if (this._mediaPlayer) {\r\n const posterUrl = this.poster ? this.poster : this.hostConfig.media.defaultPoster;\r\n\r\n if (posterUrl) {\r\n result.push({ url: posterUrl, mimeType: \"image\" });\r\n }\r\n }\r\n\r\n for (const mediaSource of this.sources) {\r\n if (mediaSource.isValid()) {\r\n result.push({\r\n /* eslint-disable @typescript-eslint/no-unnecessary-type-assertion -- `mediaSource.url` is of type `string | undefined`, but is validated by `isValid()` call */\r\n url: mediaSource.url!,\r\n mimeType: mediaSource.mimeType!\r\n /* eslint-enable @typescript-eslint/no-unnecessary-type-assertion */\r\n });\r\n }\r\n }\r\n\r\n for (const captionSource of this.captionSources) {\r\n if (captionSource.isValid()) {\r\n result.push({\r\n /* eslint-disable @typescript-eslint/no-unnecessary-type-assertion -- `captionSource.url` is of type `string | undefined`, but is validated by `isValid()` call */\r\n url: captionSource.url!,\r\n mimeType: captionSource.mimeType!\r\n /* eslint-enable @typescript-eslint/no-unnecessary-type-assertion */\r\n });\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n get selectedMediaType(): string | undefined {\r\n return this._mediaPlayer.selectedMediaType;\r\n }\r\n}\r\n\r\nexport abstract class Input extends CardElement implements IInput {\r\n //#region Schema\r\n\r\n static readonly labelProperty = new StringProperty(Versions.v1_3, \"label\", true);\r\n static readonly isRequiredProperty = new BoolProperty(Versions.v1_3, \"isRequired\", false);\r\n static readonly errorMessageProperty = new StringProperty(Versions.v1_3, \"errorMessage\", true);\r\n\r\n @property(Input.labelProperty)\r\n label?: string;\r\n\r\n @property(Input.isRequiredProperty)\r\n isRequired: boolean;\r\n\r\n @property(Input.errorMessageProperty)\r\n errorMessage?: string;\r\n\r\n //#endregion\r\n\r\n private _outerContainerElement: HTMLElement;\r\n private _inputControlContainerElement: HTMLElement;\r\n private _renderedErrorMessageElement?: HTMLElement;\r\n private _renderedLabelElement?: HTMLElement;\r\n private _renderedInputControlElement?: HTMLElement;\r\n private _oldValue: any;\r\n\r\n protected getAllLabelIds(): string[] {\r\n const labelIds: string[] = [];\r\n\r\n if (this.labelledBy) {\r\n labelIds.push(this.labelledBy);\r\n }\r\n\r\n if (this._renderedLabelElement) {\r\n labelIds.push(this._renderedLabelElement.id);\r\n }\r\n\r\n if (this._renderedErrorMessageElement) {\r\n labelIds.push(this._renderedErrorMessageElement.id);\r\n }\r\n\r\n return labelIds;\r\n }\r\n\r\n protected updateInputControlAriaLabelledBy() {\r\n if (this._renderedInputControlElement) {\r\n const labelIds: string[] = this.getAllLabelIds();\r\n\r\n if (labelIds.length > 0) {\r\n this._renderedInputControlElement.setAttribute(\r\n \"aria-labelledby\",\r\n labelIds.join(\" \")\r\n );\r\n } else {\r\n this._renderedInputControlElement.removeAttribute(\"aria-labelledby\");\r\n }\r\n }\r\n }\r\n\r\n protected get isNullable(): boolean {\r\n return true;\r\n }\r\n\r\n protected get renderedInputControlElement(): HTMLElement | undefined {\r\n return this._renderedInputControlElement;\r\n }\r\n\r\n protected get inputControlContainerElement(): HTMLElement {\r\n return this._inputControlContainerElement;\r\n }\r\n\r\n protected overrideInternalRender(): HTMLElement | undefined {\r\n const hostConfig = this.hostConfig;\r\n\r\n this._outerContainerElement = document.createElement(\"div\");\r\n this._outerContainerElement.style.display = \"flex\";\r\n this._outerContainerElement.style.flexDirection = \"column\";\r\n\r\n const renderedInputControlId = Utils.generateUniqueId();\r\n\r\n if (this.label) {\r\n const labelRichTextBlock = new RichTextBlock();\r\n labelRichTextBlock.setParent(this);\r\n labelRichTextBlock.forElementId = renderedInputControlId;\r\n\r\n const labelInline = new TextRun(this.label);\r\n labelRichTextBlock.addInline(labelInline);\r\n\r\n if (this.isRequired) {\r\n labelInline.init(hostConfig.inputs.label.requiredInputs);\r\n\r\n const isRequiredCueInline = new TextRun(\r\n hostConfig.inputs.label.requiredInputs.suffix\r\n );\r\n isRequiredCueInline.color = hostConfig.inputs.label.requiredInputs.suffixColor;\r\n isRequiredCueInline.ariaHidden = true;\r\n\r\n labelRichTextBlock.addInline(isRequiredCueInline);\r\n } else {\r\n labelInline.init(hostConfig.inputs.label.optionalInputs);\r\n }\r\n\r\n this._renderedLabelElement = labelRichTextBlock.render();\r\n\r\n if (this._renderedLabelElement) {\r\n this._renderedLabelElement.id = Utils.generateUniqueId();\r\n this._renderedLabelElement.style.marginBottom =\r\n hostConfig.getEffectiveSpacing(hostConfig.inputs.label.inputSpacing) + \"px\";\r\n\r\n this._outerContainerElement.appendChild(this._renderedLabelElement);\r\n }\r\n }\r\n\r\n this._inputControlContainerElement = document.createElement(\"div\");\r\n this._inputControlContainerElement.className =\r\n hostConfig.makeCssClassName(\"ac-input-container\");\r\n this._inputControlContainerElement.style.display = \"flex\";\r\n\r\n if (this.height === \"stretch\") {\r\n this._inputControlContainerElement.style.alignItems = \"stretch\";\r\n this._inputControlContainerElement.style.flex = \"1 1 auto\";\r\n }\r\n\r\n this._renderedInputControlElement = this.internalRender();\r\n\r\n if (this._renderedInputControlElement) {\r\n this._renderedInputControlElement.id = renderedInputControlId;\r\n this._renderedInputControlElement.style.minWidth = \"0px\";\r\n\r\n if (this.isNullable && this.isRequired) {\r\n this._renderedInputControlElement.setAttribute(\"aria-required\", \"true\");\r\n this._renderedInputControlElement.classList.add(\r\n hostConfig.makeCssClassName(\"ac-input-required\")\r\n );\r\n }\r\n\r\n this._inputControlContainerElement.appendChild(this._renderedInputControlElement);\r\n this._outerContainerElement.appendChild(this._inputControlContainerElement);\r\n\r\n this.updateInputControlAriaLabelledBy();\r\n\r\n return this._outerContainerElement;\r\n }\r\n\r\n this.resetDirtyState();\r\n\r\n return undefined;\r\n }\r\n\r\n protected valueChanged() {\r\n this.getRootElement().updateActionsEnabledState();\r\n\r\n if (this.isValid()) {\r\n this.resetValidationFailureCue();\r\n }\r\n\r\n if (this.onValueChanged) {\r\n this.onValueChanged(this);\r\n }\r\n\r\n raiseInputValueChangedEvent(this);\r\n }\r\n\r\n protected resetValidationFailureCue() {\r\n if (this.renderedInputControlElement) {\r\n this.renderedInputControlElement.classList.remove(\r\n this.hostConfig.makeCssClassName(\"ac-input-validation-failed\")\r\n );\r\n\r\n this.updateInputControlAriaLabelledBy();\r\n\r\n if (this._renderedErrorMessageElement) {\r\n this._outerContainerElement.removeChild(this._renderedErrorMessageElement);\r\n\r\n this._renderedErrorMessageElement = undefined;\r\n }\r\n }\r\n }\r\n\r\n protected showValidationErrorMessage() {\r\n if (\r\n this.renderedElement &&\r\n this.errorMessage &&\r\n GlobalSettings.displayInputValidationErrors\r\n ) {\r\n const errorMessageTextBlock = new TextBlock();\r\n errorMessageTextBlock.setParent(this);\r\n errorMessageTextBlock.text = this.errorMessage;\r\n errorMessageTextBlock.wrap = true;\r\n errorMessageTextBlock.init(this.hostConfig.inputs.errorMessage);\r\n\r\n this._renderedErrorMessageElement = errorMessageTextBlock.render();\r\n\r\n if (this._renderedErrorMessageElement) {\r\n this._renderedErrorMessageElement.id = Utils.generateUniqueId();\r\n this._outerContainerElement.appendChild(this._renderedErrorMessageElement);\r\n\r\n this.updateInputControlAriaLabelledBy();\r\n }\r\n }\r\n }\r\n\r\n onValueChanged: (sender: Input) => void;\r\n\r\n labelledBy?: string;\r\n\r\n abstract isSet(): boolean;\r\n\r\n focus() {\r\n if (this._renderedInputControlElement) {\r\n this._renderedInputControlElement.focus();\r\n }\r\n }\r\n\r\n isValid(): boolean {\r\n return true;\r\n }\r\n\r\n isDirty(): boolean {\r\n return this.value !== this._oldValue;\r\n }\r\n\r\n resetDirtyState() {\r\n this._oldValue = this.value;\r\n }\r\n\r\n internalValidateProperties(context: ValidationResults) {\r\n super.internalValidateProperties(context);\r\n\r\n if (!this.id) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.PropertyCantBeNull,\r\n Strings.errors.inputsMustHaveUniqueId()\r\n );\r\n }\r\n\r\n if (this.isRequired) {\r\n if (!this.label) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.RequiredInputsShouldHaveLabel,\r\n \"Required inputs should have a label\"\r\n );\r\n }\r\n\r\n if (!this.errorMessage) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.RequiredInputsShouldHaveErrorMessage,\r\n \"Required inputs should have an error message\"\r\n );\r\n }\r\n }\r\n }\r\n\r\n validateValue(): boolean {\r\n this.resetValidationFailureCue();\r\n\r\n const result = this.isRequired ? this.isSet() && this.isValid() : this.isValid();\r\n\r\n if (!result && this.renderedInputControlElement) {\r\n this.renderedInputControlElement.classList.add(\r\n this.hostConfig.makeCssClassName(\"ac-input-validation-failed\")\r\n );\r\n\r\n this.showValidationErrorMessage();\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getAllInputs(processActions: boolean = true): Input[] {\r\n return [this];\r\n }\r\n\r\n render(): HTMLElement | undefined {\r\n let result = super.render();\r\n\r\n this.resetDirtyState();\r\n\r\n return result;\r\n }\r\n\r\n abstract get value(): any;\r\n\r\n get isInteractive(): boolean {\r\n return true;\r\n }\r\n}\r\n\r\nexport class TextInput extends Input {\r\n //#region Schema\r\n\r\n static readonly valueProperty = new StringProperty(Versions.v1_0, \"value\");\r\n static readonly maxLengthProperty = new NumProperty(Versions.v1_0, \"maxLength\");\r\n static readonly isMultilineProperty = new BoolProperty(Versions.v1_0, \"isMultiline\", false);\r\n static readonly placeholderProperty = new StringProperty(Versions.v1_0, \"placeholder\");\r\n static readonly styleProperty = new EnumProperty(\r\n Versions.v1_0,\r\n \"style\",\r\n Enums.InputTextStyle,\r\n Enums.InputTextStyle.Text,\r\n [\r\n { value: Enums.InputTextStyle.Text },\r\n { value: Enums.InputTextStyle.Tel },\r\n { value: Enums.InputTextStyle.Url },\r\n { value: Enums.InputTextStyle.Email },\r\n { value: Enums.InputTextStyle.Password, targetVersion: Versions.v1_5 }\r\n ]\r\n );\r\n static readonly inlineActionProperty = new ActionProperty(Versions.v1_0, \"inlineAction\", [\r\n \"Action.ShowCard\"\r\n ]);\r\n static readonly regexProperty = new StringProperty(Versions.v1_3, \"regex\", true);\r\n\r\n @property(TextInput.valueProperty)\r\n defaultValue?: string;\r\n\r\n @property(TextInput.maxLengthProperty)\r\n maxLength?: number;\r\n\r\n @property(TextInput.isMultilineProperty)\r\n isMultiline: boolean = false;\r\n\r\n @property(TextInput.placeholderProperty)\r\n placeholder?: string;\r\n\r\n @property(TextInput.styleProperty)\r\n style: Enums.InputTextStyle = Enums.InputTextStyle.Text;\r\n\r\n @property(TextInput.inlineActionProperty)\r\n inlineAction?: Action;\r\n\r\n @property(TextInput.regexProperty)\r\n regex?: string;\r\n\r\n //#endregion\r\n\r\n private setupInput(input: HTMLInputElement | HTMLTextAreaElement) {\r\n input.style.flex = \"1 1 auto\";\r\n\r\n input.tabIndex = this.isDesignMode() ? -1 : 0;\r\n\r\n if (this.placeholder) {\r\n input.placeholder = this.placeholder;\r\n input.setAttribute(\"aria-label\", this.placeholder);\r\n }\r\n\r\n if (this.defaultValue) {\r\n input.value = this.defaultValue;\r\n }\r\n\r\n if (this.maxLength && this.maxLength > 0) {\r\n input.maxLength = this.maxLength;\r\n }\r\n\r\n input.oninput = () => {\r\n this.valueChanged();\r\n };\r\n input.onkeypress = (e: KeyboardEvent) => {\r\n // Ctrl+Enter pressed\r\n if (\r\n e.ctrlKey &&\r\n e.code === \"Enter\" &&\r\n this.inlineAction &&\r\n this.inlineAction.isEffectivelyEnabled()\r\n ) {\r\n this.inlineAction.execute();\r\n }\r\n };\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n let result: HTMLInputElement | HTMLTextAreaElement;\r\n\r\n if (this.isMultiline && this.style !== Enums.InputTextStyle.Password) {\r\n result = document.createElement(\"textarea\");\r\n result.className = this.hostConfig.makeCssClassName(\r\n \"ac-input\",\r\n \"ac-textInput\",\r\n \"ac-multiline\"\r\n );\r\n\r\n if (this.height === \"stretch\") {\r\n result.style.height = \"initial\";\r\n }\r\n } else {\r\n result = document.createElement(\"input\");\r\n result.className = this.hostConfig.makeCssClassName(\"ac-input\", \"ac-textInput\");\r\n result.type = Enums.InputTextStyle[this.style].toLowerCase();\r\n }\r\n\r\n this.setupInput(result);\r\n\r\n return result;\r\n }\r\n\r\n protected overrideInternalRender(): HTMLElement | undefined {\r\n const renderedInputControl = super.overrideInternalRender();\r\n\r\n if (this.inlineAction) {\r\n const button = document.createElement(\"button\");\r\n button.className = this.hostConfig.makeCssClassName(\r\n this.inlineAction.isEffectivelyEnabled()\r\n ? \"ac-inlineActionButton\"\r\n : \"ac-inlineActionButton-disabled\"\r\n );\r\n\r\n button.onclick = (e) => {\r\n if (this.inlineAction && this.inlineAction.isEffectivelyEnabled()) {\r\n e.preventDefault();\r\n e.cancelBubble = true;\r\n\r\n this.inlineAction.execute();\r\n }\r\n };\r\n\r\n if (this.inlineAction.iconUrl) {\r\n button.classList.add(\"iconOnly\");\r\n\r\n const icon = document.createElement(\"img\");\r\n icon.style.height = \"100%\";\r\n icon.setAttribute(\"role\", \"presentation\");\r\n\r\n // The below trick is necessary as a workaround in Chrome where the icon is initially displayed\r\n // at its native size then resized to 100% of the button's height. This cfreates an unpleasant\r\n // flicker. On top of that, Chrome's flex implementation fails to prperly re-layout the button\r\n // after the image has loaded and been gicven its final size. The below trick also fixes that.\r\n icon.style.display = \"none\";\r\n icon.onload = () => {\r\n icon.style.removeProperty(\"display\");\r\n };\r\n icon.onerror = () => {\r\n button.removeChild(icon);\r\n button.classList.remove(\"iconOnly\");\r\n button.classList.add(\"textOnly\");\r\n button.textContent =\r\n this.inlineAction && this.inlineAction.title\r\n ? this.inlineAction.title\r\n : Strings.defaults.inlineActionTitle();\r\n };\r\n\r\n icon.src = this.inlineAction.iconUrl;\r\n\r\n button.appendChild(icon);\r\n button.title = this.inlineAction.title\r\n ? this.inlineAction.title\r\n : Strings.defaults.inlineActionTitle();\r\n } else {\r\n button.classList.add(\"textOnly\");\r\n button.textContent = this.inlineAction.title\r\n ? this.inlineAction.title\r\n : Strings.defaults.inlineActionTitle();\r\n }\r\n\r\n this.inlineAction.setupElementForAccessibility(button, true);\r\n\r\n button.style.marginLeft = \"8px\";\r\n\r\n this.inputControlContainerElement.appendChild(button);\r\n }\r\n\r\n return renderedInputControl;\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"Input.Text\";\r\n }\r\n\r\n getAllActions(): Action[] {\r\n const result = super.getAllActions();\r\n\r\n if (this.inlineAction) {\r\n result.push(this.inlineAction);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getActionById(id: string) {\r\n let result = super.getActionById(id);\r\n\r\n if (!result && this.inlineAction) {\r\n result = this.inlineAction.getActionById(id);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n isSet(): boolean {\r\n return this.value ? true : false;\r\n }\r\n\r\n isValid(): boolean {\r\n if (!this.value) {\r\n return true;\r\n }\r\n\r\n if (this.regex) {\r\n return new RegExp(this.regex, \"g\").test(this.value);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n get value(): string | undefined {\r\n if (this.renderedInputControlElement) {\r\n if (this.isMultiline) {\r\n return (this.renderedInputControlElement).value;\r\n } else {\r\n return (this.renderedInputControlElement).value;\r\n }\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n}\r\n\r\nexport class ToggleInput extends Input {\r\n //#region Schema\r\n\r\n static readonly valueProperty = new StringProperty(Versions.v1_0, \"value\");\r\n static readonly titleProperty = new StringProperty(Versions.v1_0, \"title\");\r\n static readonly valueOnProperty = new StringProperty(\r\n Versions.v1_0,\r\n \"valueOn\",\r\n true,\r\n undefined,\r\n \"true\",\r\n (sender: SerializableObject) => {\r\n return \"true\";\r\n }\r\n );\r\n static readonly valueOffProperty = new StringProperty(\r\n Versions.v1_0,\r\n \"valueOff\",\r\n true,\r\n undefined,\r\n \"false\",\r\n (sender: SerializableObject) => {\r\n return \"false\";\r\n }\r\n );\r\n static readonly wrapProperty = new BoolProperty(Versions.v1_2, \"wrap\", false);\r\n\r\n @property(ToggleInput.valueProperty)\r\n defaultValue?: string;\r\n\r\n @property(ToggleInput.titleProperty)\r\n title?: string;\r\n\r\n @property(ToggleInput.valueOnProperty)\r\n valueOn: string = \"true\";\r\n\r\n @property(ToggleInput.valueOffProperty)\r\n valueOff: string = \"false\";\r\n\r\n @property(ToggleInput.wrapProperty)\r\n wrap: boolean = false;\r\n\r\n //#endregion\r\n\r\n private _checkboxInputElement: HTMLInputElement;\r\n private _checkboxInputLabelElement: HTMLElement | undefined;\r\n private _oldCheckboxValue: boolean;\r\n\r\n protected updateInputControlAriaLabelledBy() {\r\n if (this._checkboxInputElement) {\r\n let joinedLabelIds = this.getAllLabelIds().join(\" \");\r\n\r\n if (this._checkboxInputLabelElement && this._checkboxInputLabelElement.id) {\r\n joinedLabelIds += \" \" + this._checkboxInputLabelElement.id;\r\n }\r\n\r\n if (joinedLabelIds) {\r\n this._checkboxInputElement.setAttribute(\"aria-labelledby\", joinedLabelIds);\r\n } else {\r\n this._checkboxInputElement.removeAttribute(\"aria-labelledby\");\r\n }\r\n }\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n const element = document.createElement(\"div\");\r\n element.className = this.hostConfig.makeCssClassName(\"ac-input\", \"ac-toggleInput\");\r\n element.style.width = \"100%\";\r\n element.style.display = \"flex\";\r\n element.style.alignItems = \"center\";\r\n\r\n this._checkboxInputElement = document.createElement(\"input\");\r\n this._checkboxInputElement.id = Utils.generateUniqueId();\r\n this._checkboxInputElement.type = \"checkbox\";\r\n this._checkboxInputElement.style.display = \"inline-block\";\r\n this._checkboxInputElement.style.verticalAlign = \"middle\";\r\n this._checkboxInputElement.style.margin = \"0\";\r\n this._checkboxInputElement.style.flex = \"0 0 auto\";\r\n\r\n if (this.title) {\r\n this._checkboxInputElement.setAttribute(\"aria-label\", this.title);\r\n }\r\n\r\n if (this.isRequired) {\r\n this._checkboxInputElement.setAttribute(\"aria-required\", \"true\");\r\n }\r\n\r\n this._checkboxInputElement.tabIndex = this.isDesignMode() ? -1 : 0;\r\n\r\n if (this.defaultValue === this.valueOn) {\r\n this._checkboxInputElement.checked = true;\r\n }\r\n\r\n this._oldCheckboxValue = this._checkboxInputElement.checked;\r\n\r\n this._checkboxInputElement.onchange = () => {\r\n this.valueChanged();\r\n };\r\n\r\n Utils.appendChild(element, this._checkboxInputElement);\r\n\r\n if (this.title || this.isDesignMode()) {\r\n const label = new TextBlock();\r\n label.setParent(this);\r\n label.forElementId = this._checkboxInputElement.id;\r\n label.hostConfig = this.hostConfig;\r\n label.text = !this.title ? this.getJsonTypeName() : this.title;\r\n label.useMarkdown = GlobalSettings.useMarkdownInRadioButtonAndCheckbox;\r\n label.wrap = this.wrap;\r\n\r\n this._checkboxInputLabelElement = label.render();\r\n\r\n if (this._checkboxInputLabelElement) {\r\n this._checkboxInputLabelElement.id = Utils.generateUniqueId();\r\n this._checkboxInputLabelElement.style.display = \"inline-block\";\r\n this._checkboxInputLabelElement.style.flex = \"1 1 auto\";\r\n this._checkboxInputLabelElement.style.marginLeft = \"6px\";\r\n this._checkboxInputLabelElement.style.verticalAlign = \"middle\";\r\n\r\n const spacerElement = document.createElement(\"div\");\r\n spacerElement.style.width = \"6px\";\r\n\r\n Utils.appendChild(element, spacerElement);\r\n Utils.appendChild(element, this._checkboxInputLabelElement);\r\n }\r\n }\r\n\r\n return element;\r\n }\r\n\r\n protected get isNullable(): boolean {\r\n return false;\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"Input.Toggle\";\r\n }\r\n\r\n focus() {\r\n if (this._checkboxInputElement) {\r\n this._checkboxInputElement.focus();\r\n }\r\n }\r\n\r\n isSet(): boolean {\r\n if (this.isRequired) {\r\n return this.value === this.valueOn;\r\n }\r\n\r\n return this.value ? true : false;\r\n }\r\n\r\n isDirty(): boolean {\r\n return this._checkboxInputElement\r\n ? this._checkboxInputElement.checked !== this._oldCheckboxValue\r\n : false;\r\n }\r\n\r\n get value(): string | undefined {\r\n if (this._checkboxInputElement) {\r\n return this._checkboxInputElement.checked ? this.valueOn : this.valueOff;\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n}\r\n\r\nexport class Choice extends SerializableObject {\r\n //#region Schema\r\n\r\n static readonly titleProperty = new StringProperty(Versions.v1_0, \"title\");\r\n static readonly valueProperty = new StringProperty(Versions.v1_0, \"value\");\r\n\r\n @property(Choice.titleProperty)\r\n title?: string;\r\n\r\n @property(Choice.valueProperty)\r\n value?: string;\r\n\r\n //#endregion\r\n\r\n protected getSchemaKey(): string {\r\n return \"Choice\";\r\n }\r\n\r\n constructor(title?: string, value?: string) {\r\n super();\r\n\r\n this.title = title;\r\n this.value = value;\r\n }\r\n}\r\n\r\nexport class ChoiceSetInput extends Input {\r\n //#region Schema\r\n\r\n static readonly valueProperty = new StringProperty(Versions.v1_0, \"value\");\r\n static readonly choicesProperty = new SerializableObjectCollectionProperty(\r\n Versions.v1_0,\r\n \"choices\",\r\n Choice\r\n );\r\n static readonly styleProperty = new ValueSetProperty(\r\n Versions.v1_0,\r\n \"style\",\r\n [\r\n { value: \"compact\" },\r\n { value: \"expanded\" },\r\n { value: \"filtered\", targetVersion: Versions.v1_5 }\r\n ],\r\n \"compact\"\r\n );\r\n static readonly isMultiSelectProperty = new BoolProperty(Versions.v1_0, \"isMultiSelect\", false);\r\n static readonly placeholderProperty = new StringProperty(Versions.v1_0, \"placeholder\");\r\n static readonly wrapProperty = new BoolProperty(Versions.v1_2, \"wrap\", false);\r\n\r\n @property(ChoiceSetInput.valueProperty)\r\n defaultValue?: string;\r\n\r\n @property(ChoiceSetInput.styleProperty)\r\n style?: \"compact\" | \"expanded\" | \"filtered\";\r\n\r\n get isCompact(): boolean {\r\n return !this.style || this.style === \"compact\";\r\n }\r\n\r\n set isCompact(value: boolean) {\r\n this.style = value ? undefined : \"expanded\";\r\n }\r\n\r\n @property(ChoiceSetInput.isMultiSelectProperty)\r\n isMultiSelect: boolean = false;\r\n\r\n @property(ChoiceSetInput.placeholderProperty)\r\n placeholder?: string;\r\n\r\n @property(ChoiceSetInput.wrapProperty)\r\n wrap: boolean = false;\r\n\r\n @property(ChoiceSetInput.choicesProperty)\r\n choices: Choice[] = [];\r\n\r\n //#endregion\r\n\r\n private static _uniqueCategoryCounter = 0;\r\n\r\n private static getUniqueCategoryName(): string {\r\n const uniqueCategoryName = \"__ac-category\" + ChoiceSetInput._uniqueCategoryCounter;\r\n\r\n ChoiceSetInput._uniqueCategoryCounter++;\r\n\r\n return uniqueCategoryName;\r\n }\r\n\r\n private _uniqueCategoryName: string;\r\n private _selectElement: HTMLSelectElement | undefined;\r\n private _textInput: HTMLInputElement | undefined;\r\n private _toggleInputs: HTMLInputElement[] | undefined;\r\n private _labels: Array;\r\n\r\n // Make sure `aria-current` is applied to the currently-selected item\r\n private internalApplyAriaCurrent(): void {\r\n if (this._selectElement) {\r\n const options = this._selectElement.options;\r\n\r\n if (options) {\r\n for (const option of Array.from(options)) {\r\n if (option.selected) {\r\n option.setAttribute(\"aria-current\", \"true\");\r\n } else {\r\n option.removeAttribute(\"aria-current\");\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private renderCompoundInput(\r\n cssClassName: string,\r\n type: \"checkbox\" | \"radio\",\r\n defaultValues: string[] | undefined\r\n ): HTMLElement {\r\n const element = document.createElement(\"div\");\r\n element.className = this.hostConfig.makeCssClassName(\"ac-input\", cssClassName);\r\n element.style.width = \"100%\";\r\n\r\n element.tabIndex = this.isDesignMode() ? -1 : 0;\r\n\r\n this._toggleInputs = [];\r\n this._labels = [];\r\n\r\n for (const choice of this.choices) {\r\n const input = document.createElement(\"input\");\r\n input.id = Utils.generateUniqueId();\r\n input.type = type;\r\n input.style.margin = \"0\";\r\n input.style.display = \"inline-block\";\r\n input.style.verticalAlign = \"middle\";\r\n input.style.flex = \"0 0 auto\";\r\n input.name = this.id ? this.id : this._uniqueCategoryName;\r\n\r\n if (this.isRequired) {\r\n input.setAttribute(\"aria-required\", \"true\");\r\n }\r\n\r\n input.tabIndex = this.isDesignMode() ? -1 : 0;\r\n\r\n if (choice.value) {\r\n input.value = choice.value;\r\n }\r\n\r\n if (choice.title) {\r\n input.setAttribute(\"aria-label\", choice.title);\r\n }\r\n\r\n if (defaultValues && choice.value) {\r\n if (defaultValues.indexOf(choice.value) >= 0) {\r\n input.checked = true;\r\n }\r\n }\r\n\r\n input.onchange = () => {\r\n this.valueChanged();\r\n };\r\n\r\n this._toggleInputs.push(input);\r\n\r\n const compoundInput = document.createElement(\"div\");\r\n compoundInput.style.display = \"flex\";\r\n compoundInput.style.alignItems = \"center\";\r\n\r\n Utils.appendChild(compoundInput, input);\r\n\r\n const label = new TextBlock();\r\n label.setParent(this);\r\n label.forElementId = input.id;\r\n label.hostConfig = this.hostConfig;\r\n label.text = choice.title ? choice.title : \"Choice \" + this._toggleInputs.length;\r\n label.useMarkdown = GlobalSettings.useMarkdownInRadioButtonAndCheckbox;\r\n label.wrap = this.wrap;\r\n\r\n const labelElement = label.render();\r\n\r\n this._labels.push(labelElement);\r\n\r\n if (labelElement) {\r\n labelElement.id = Utils.generateUniqueId();\r\n labelElement.style.display = \"inline-block\";\r\n labelElement.style.flex = \"1 1 auto\";\r\n labelElement.style.marginLeft = \"6px\";\r\n labelElement.style.verticalAlign = \"middle\";\r\n\r\n const spacerElement = document.createElement(\"div\");\r\n spacerElement.style.width = \"6px\";\r\n\r\n Utils.appendChild(compoundInput, spacerElement);\r\n Utils.appendChild(compoundInput, labelElement);\r\n }\r\n\r\n Utils.appendChild(element, compoundInput);\r\n }\r\n\r\n return element;\r\n }\r\n\r\n protected updateInputControlAriaLabelledBy() {\r\n if (\r\n (this.isMultiSelect || this.style === \"expanded\") &&\r\n this._toggleInputs &&\r\n this._labels\r\n ) {\r\n const labelIds: string[] = this.getAllLabelIds();\r\n\r\n for (let i = 0; i < this._toggleInputs.length; i++) {\r\n let joinedLabelIds = labelIds.join(\" \");\r\n const label = this._labels[i];\r\n\r\n if (label && label.id) {\r\n joinedLabelIds += \" \" + label.id;\r\n }\r\n\r\n if (joinedLabelIds) {\r\n this._toggleInputs[i].setAttribute(\"aria-labelledby\", joinedLabelIds);\r\n } else {\r\n this._toggleInputs[i].removeAttribute(\"aria-labelledby\");\r\n }\r\n }\r\n } else {\r\n super.updateInputControlAriaLabelledBy();\r\n }\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n this._uniqueCategoryName = ChoiceSetInput.getUniqueCategoryName();\r\n\r\n if (this.isMultiSelect) {\r\n // Render as a list of toggle inputs\r\n return this.renderCompoundInput(\r\n \"ac-choiceSetInput-multiSelect\",\r\n \"checkbox\",\r\n this.defaultValue\r\n ? this.defaultValue.split(this.hostConfig.choiceSetInputValueSeparator)\r\n : undefined\r\n );\r\n } else {\r\n if (this.style === \"expanded\") {\r\n // Render as a series of radio buttons\r\n return this.renderCompoundInput(\r\n \"ac-choiceSetInput-expanded\",\r\n \"radio\",\r\n this.defaultValue ? [this.defaultValue] : undefined\r\n );\r\n } else if (this.style === \"filtered\") {\r\n // Render as a text input coupled with a datalist\r\n const inputContainer = document.createElement(\"div\");\r\n inputContainer.style.width = \"100%\";\r\n\r\n this._textInput = document.createElement(\"input\");\r\n this._textInput.className = this.hostConfig.makeCssClassName(\r\n \"ac-input\",\r\n \"ac-multichoiceInput\",\r\n \"ac-choiceSetInput-filtered\"\r\n );\r\n this._textInput.type = \"text\";\r\n this._textInput.style.width = \"100%\";\r\n this._textInput.oninput = () => {\r\n this.valueChanged();\r\n\r\n if (this._textInput) {\r\n // Remove aria-label when value is not empty so narration software doesn't\r\n // read the placeholder\r\n if (this.value) {\r\n this._textInput.removeAttribute(\"placeholder\");\r\n this._textInput.removeAttribute(\"aria-label\");\r\n } else if (this.placeholder) {\r\n this._textInput.placeholder = this.placeholder;\r\n this._textInput.setAttribute(\"aria-label\", this.placeholder);\r\n }\r\n }\r\n };\r\n\r\n if (this.defaultValue) {\r\n this._textInput.value = this.defaultValue;\r\n }\r\n\r\n if (this.placeholder && !this._textInput.value) {\r\n this._textInput.placeholder = this.placeholder;\r\n this._textInput.setAttribute(\"aria-label\", this.placeholder);\r\n }\r\n\r\n this._textInput.tabIndex = this.isDesignMode() ? -1 : 0;\r\n\r\n const dataList = document.createElement(\"datalist\");\r\n dataList.id = Utils.generateUniqueId();\r\n\r\n for (const choice of this.choices) {\r\n const option = document.createElement(\"option\");\r\n // To fix https://stackoverflow.com/questions/29882361/show-datalist-labels-but-submit-the-actual-value\r\n // value is mapped to choice.title other than choice.value\r\n if (choice.title) {\r\n option.value = choice.title;\r\n option.setAttribute(\"aria-label\", choice.title);\r\n }\r\n\r\n option.tabIndex = this.isDesignMode() ? -1 : 0;\r\n\r\n dataList.appendChild(option);\r\n }\r\n\r\n this._textInput.setAttribute(\"list\", dataList.id);\r\n\r\n inputContainer.append(this._textInput, dataList);\r\n\r\n return inputContainer;\r\n } else {\r\n // Render as a combo box\r\n this._selectElement = document.createElement(\"select\");\r\n this._selectElement.className = this.hostConfig.makeCssClassName(\r\n \"ac-input\",\r\n \"ac-multichoiceInput\",\r\n \"ac-choiceSetInput-compact\"\r\n );\r\n this._selectElement.style.width = \"100%\";\r\n\r\n this._selectElement.tabIndex = this.isDesignMode() ? -1 : 0;\r\n\r\n const placeholderOption = document.createElement(\"option\");\r\n placeholderOption.selected = true;\r\n placeholderOption.disabled = true;\r\n placeholderOption.hidden = true;\r\n placeholderOption.value = \"\";\r\n\r\n if (this.placeholder) {\r\n placeholderOption.text = this.placeholder;\r\n }\r\n\r\n Utils.appendChild(this._selectElement, placeholderOption);\r\n\r\n for (const choice of this.choices) {\r\n const option = document.createElement(\"option\");\r\n option.value = choice.value!;\r\n\r\n if (choice.title) {\r\n option.text = choice.title;\r\n option.setAttribute(\"aria-label\", choice.title);\r\n }\r\n\r\n option.tabIndex = this.isDesignMode() ? -1 : 0;\r\n\r\n if (choice.value === this.defaultValue) {\r\n option.selected = true;\r\n }\r\n\r\n Utils.appendChild(this._selectElement, option);\r\n }\r\n\r\n this._selectElement.onchange = () => {\r\n this.internalApplyAriaCurrent();\r\n this.valueChanged();\r\n };\r\n\r\n this.internalApplyAriaCurrent();\r\n\r\n return this._selectElement;\r\n }\r\n }\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"Input.ChoiceSet\";\r\n }\r\n\r\n focus() {\r\n if (this._toggleInputs && (this.isMultiSelect || this.style === \"expanded\")) {\r\n if (this._toggleInputs.length > 0) {\r\n this._toggleInputs[0].focus();\r\n }\r\n } else if (this._textInput) {\r\n this._textInput.focus();\r\n } else {\r\n super.focus();\r\n }\r\n }\r\n\r\n internalValidateProperties(context: ValidationResults) {\r\n super.internalValidateProperties(context);\r\n\r\n if (this.choices.length === 0) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.CollectionCantBeEmpty,\r\n Strings.errors.choiceSetMustHaveAtLeastOneChoice()\r\n );\r\n }\r\n\r\n for (const choice of this.choices) {\r\n if (!choice.title || !choice.value) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.PropertyCantBeNull,\r\n Strings.errors.choiceSetChoicesMustHaveTitleAndValue()\r\n );\r\n }\r\n }\r\n }\r\n\r\n isSet(): boolean {\r\n return this.value ? true : false;\r\n }\r\n\r\n isValid(): boolean {\r\n if (this._textInput) {\r\n if (this.value === \"\" || this.value === this.placeholder) {\r\n return true;\r\n }\r\n for (const choice of this.choices) {\r\n if (this.value === choice.value) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n return super.isValid();\r\n }\r\n\r\n get value(): string | undefined {\r\n if (!this.isMultiSelect) {\r\n if (this._selectElement) {\r\n return this._selectElement.selectedIndex > 0\r\n ? this._selectElement.value\r\n : undefined;\r\n } else if (this._textInput) {\r\n for (const choice of this.choices) {\r\n if (choice.title && this._textInput.value === choice.title) {\r\n return choice.value;\r\n }\r\n }\r\n return this._textInput.value;\r\n } else if (this._toggleInputs && this._toggleInputs.length > 0) {\r\n for (const toggleInput of this._toggleInputs) {\r\n if (toggleInput.checked) {\r\n return toggleInput.value;\r\n }\r\n }\r\n }\r\n\r\n return undefined;\r\n } else {\r\n if (!this._toggleInputs || this._toggleInputs.length === 0) {\r\n return undefined;\r\n }\r\n\r\n let result: string = \"\";\r\n\r\n for (const toggleInput of this._toggleInputs) {\r\n if (toggleInput.checked) {\r\n if (result !== \"\") {\r\n result += this.hostConfig.choiceSetInputValueSeparator;\r\n }\r\n\r\n result += toggleInput.value;\r\n }\r\n }\r\n\r\n return result ? result : undefined;\r\n }\r\n }\r\n}\r\n\r\nexport class NumberInput extends Input {\r\n //#region Schema\r\n\r\n static readonly valueProperty = new NumProperty(Versions.v1_0, \"value\");\r\n static readonly placeholderProperty = new StringProperty(Versions.v1_0, \"placeholder\");\r\n static readonly minProperty = new NumProperty(Versions.v1_0, \"min\");\r\n static readonly maxProperty = new NumProperty(Versions.v1_0, \"max\");\r\n\r\n @property(NumberInput.valueProperty)\r\n defaultValue?: number;\r\n\r\n @property(NumberInput.minProperty)\r\n min?: number;\r\n\r\n @property(NumberInput.maxProperty)\r\n max?: number;\r\n\r\n @property(NumberInput.placeholderProperty)\r\n placeholder?: string;\r\n\r\n //#endregion\r\n\r\n private _numberInputElement: HTMLInputElement;\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n this._numberInputElement = document.createElement(\"input\");\r\n this._numberInputElement.setAttribute(\"type\", \"number\");\r\n\r\n if (this.min !== undefined) {\r\n this._numberInputElement.setAttribute(\"min\", this.min.toString());\r\n }\r\n\r\n if (this.max !== undefined) {\r\n this._numberInputElement.setAttribute(\"max\", this.max.toString());\r\n }\r\n\r\n this._numberInputElement.className = this.hostConfig.makeCssClassName(\r\n \"ac-input\",\r\n \"ac-numberInput\"\r\n );\r\n this._numberInputElement.style.width = \"100%\";\r\n\r\n this._numberInputElement.tabIndex = this.isDesignMode() ? -1 : 0;\r\n\r\n if (this.defaultValue !== undefined) {\r\n this._numberInputElement.valueAsNumber = this.defaultValue;\r\n }\r\n\r\n if (this.placeholder) {\r\n this._numberInputElement.placeholder = this.placeholder;\r\n this._numberInputElement.setAttribute(\"aria-label\", this.placeholder);\r\n }\r\n\r\n this._numberInputElement.oninput = () => {\r\n this.valueChanged();\r\n };\r\n\r\n return this._numberInputElement;\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"Input.Number\";\r\n }\r\n\r\n isSet(): boolean {\r\n return this.value !== undefined && !isNaN(this.value);\r\n }\r\n\r\n isValid(): boolean {\r\n if (this.value === undefined) {\r\n return !this.isRequired;\r\n }\r\n\r\n let result = true;\r\n\r\n if (this.min !== undefined) {\r\n result = result && this.value >= this.min;\r\n }\r\n\r\n if (this.max !== undefined) {\r\n result = result && this.value <= this.max;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n get value(): number | undefined {\r\n return this._numberInputElement ? this._numberInputElement.valueAsNumber : undefined;\r\n }\r\n\r\n set value(value: number | undefined) {\r\n if (value && this._numberInputElement) {\r\n this._numberInputElement.value = value.toString();\r\n }\r\n }\r\n}\r\n\r\nexport class DateInput extends Input {\r\n //#region Schema\r\n\r\n static readonly valueProperty = new StringProperty(Versions.v1_0, \"value\");\r\n static readonly placeholderProperty = new StringProperty(Versions.v1_0, \"placeholder\");\r\n static readonly minProperty = new StringProperty(Versions.v1_0, \"min\");\r\n static readonly maxProperty = new StringProperty(Versions.v1_0, \"max\");\r\n\r\n @property(DateInput.valueProperty)\r\n defaultValue?: string;\r\n\r\n @property(DateInput.minProperty)\r\n min?: string;\r\n\r\n @property(DateInput.maxProperty)\r\n max?: string;\r\n\r\n @property(DateInput.placeholderProperty)\r\n placeholder?: string;\r\n\r\n //#endregion\r\n\r\n private _dateInputElement: HTMLInputElement;\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n this._dateInputElement = document.createElement(\"input\");\r\n this._dateInputElement.setAttribute(\"type\", \"date\");\r\n\r\n if (this.min) {\r\n this._dateInputElement.setAttribute(\"min\", this.min);\r\n }\r\n\r\n if (this.max) {\r\n this._dateInputElement.setAttribute(\"max\", this.max);\r\n }\r\n\r\n if (this.placeholder) {\r\n this._dateInputElement.placeholder = this.placeholder;\r\n this._dateInputElement.setAttribute(\"aria-label\", this.placeholder);\r\n }\r\n\r\n this._dateInputElement.tabIndex = this.isDesignMode() ? -1 : 0;\r\n\r\n this._dateInputElement.className = this.hostConfig.makeCssClassName(\r\n \"ac-input\",\r\n \"ac-dateInput\"\r\n );\r\n this._dateInputElement.style.width = \"100%\";\r\n\r\n this._dateInputElement.oninput = () => {\r\n this.valueChanged();\r\n };\r\n\r\n if (this.defaultValue) {\r\n this._dateInputElement.value = this.defaultValue;\r\n }\r\n\r\n return this._dateInputElement;\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"Input.Date\";\r\n }\r\n\r\n isSet(): boolean {\r\n return this.value ? true : false;\r\n }\r\n\r\n isValid(): boolean {\r\n if (!this.value) {\r\n return !this.isRequired;\r\n }\r\n\r\n const valueAsDate = new Date(this.value);\r\n\r\n let result = true;\r\n\r\n if (this.min) {\r\n const minDate = new Date(this.min);\r\n\r\n result = result && valueAsDate >= minDate;\r\n }\r\n\r\n if (this.max) {\r\n const maxDate = new Date(this.max);\r\n\r\n result = result && valueAsDate <= maxDate;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n get value(): string | undefined {\r\n return this._dateInputElement ? this._dateInputElement.value : undefined;\r\n }\r\n}\r\n\r\nexport class TimeProperty extends CustomProperty {\r\n constructor(readonly targetVersion: Version, readonly name: string) {\r\n super(\r\n targetVersion,\r\n name,\r\n (\r\n sender: SerializableObject,\r\n prop: PropertyDefinition,\r\n source: PropertyBag,\r\n context: BaseSerializationContext\r\n ) => {\r\n const value = source[prop.name];\r\n\r\n if (typeof value === \"string\" && value && /^[0-9]{2}:[0-9]{2}$/.test(value)) {\r\n return value;\r\n }\r\n\r\n return undefined;\r\n },\r\n (\r\n sender: SerializableObject,\r\n prop: PropertyDefinition,\r\n target: PropertyBag,\r\n value: string | undefined,\r\n context: BaseSerializationContext\r\n ) => {\r\n context.serializeValue(target, prop.name, value);\r\n }\r\n );\r\n }\r\n}\r\n\r\nexport class TimeInput extends Input {\r\n private static convertTimeStringToDate(timeString: string): Date {\r\n return new Date(\"1973-09-04T\" + timeString + \":00Z\");\r\n }\r\n\r\n //#region Schema\r\n\r\n static readonly valueProperty = new TimeProperty(Versions.v1_0, \"value\");\r\n static readonly placeholderProperty = new StringProperty(Versions.v1_0, \"placeholder\");\r\n static readonly minProperty = new TimeProperty(Versions.v1_0, \"min\");\r\n static readonly maxProperty = new TimeProperty(Versions.v1_0, \"max\");\r\n\r\n @property(TimeInput.valueProperty)\r\n defaultValue?: string;\r\n\r\n @property(TimeInput.minProperty)\r\n min?: string;\r\n\r\n @property(TimeInput.maxProperty)\r\n max?: string;\r\n\r\n @property(TimeInput.placeholderProperty)\r\n placeholder?: string;\r\n\r\n //#endregion\r\n\r\n private _timeInputElement: HTMLInputElement;\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n this._timeInputElement = document.createElement(\"input\");\r\n this._timeInputElement.setAttribute(\"type\", \"time\");\r\n\r\n if (this.min) {\r\n this._timeInputElement.setAttribute(\"min\", this.min);\r\n }\r\n\r\n if (this.max) {\r\n this._timeInputElement.setAttribute(\"max\", this.max);\r\n }\r\n\r\n this._timeInputElement.className = this.hostConfig.makeCssClassName(\r\n \"ac-input\",\r\n \"ac-timeInput\"\r\n );\r\n this._timeInputElement.style.width = \"100%\";\r\n this._timeInputElement.oninput = () => {\r\n this.valueChanged();\r\n };\r\n\r\n if (this.placeholder) {\r\n this._timeInputElement.placeholder = this.placeholder;\r\n this._timeInputElement.setAttribute(\"aria-label\", this.placeholder);\r\n }\r\n\r\n this._timeInputElement.tabIndex = this.isDesignMode() ? -1 : 0;\r\n\r\n if (this.defaultValue) {\r\n this._timeInputElement.value = this.defaultValue;\r\n }\r\n\r\n return this._timeInputElement;\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"Input.Time\";\r\n }\r\n\r\n isSet(): boolean {\r\n return this.value ? true : false;\r\n }\r\n\r\n isValid(): boolean {\r\n if (!this.value) {\r\n return !this.isRequired;\r\n }\r\n\r\n const valueAsDate = TimeInput.convertTimeStringToDate(this.value);\r\n\r\n let result = true;\r\n\r\n if (this.min) {\r\n const minDate = TimeInput.convertTimeStringToDate(this.min);\r\n\r\n result = result && valueAsDate >= minDate;\r\n }\r\n\r\n if (this.max) {\r\n const maxDate = TimeInput.convertTimeStringToDate(this.max);\r\n\r\n result = result && valueAsDate <= maxDate;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n get value(): string | undefined {\r\n return this._timeInputElement ? this._timeInputElement.value : undefined;\r\n }\r\n}\r\n\r\nexport const enum ActionButtonState {\r\n Normal,\r\n Expanded,\r\n Subdued\r\n}\r\n\r\nexport type ActionType = { new (): Action };\r\n\r\nexport abstract class Action extends CardObject {\r\n //#region Schema\r\n\r\n static readonly titleProperty = new StringProperty(Versions.v1_0, \"title\");\r\n static readonly iconUrlProperty = new StringProperty(Versions.v1_1, \"iconUrl\");\r\n static readonly styleProperty = new ValueSetProperty(\r\n Versions.v1_2,\r\n \"style\",\r\n [\r\n { value: Enums.ActionStyle.Default },\r\n { value: Enums.ActionStyle.Positive },\r\n { value: Enums.ActionStyle.Destructive }\r\n ],\r\n Enums.ActionStyle.Default\r\n );\r\n static readonly modeProperty = new ValueSetProperty(\r\n Versions.v1_5,\r\n \"mode\",\r\n [{ value: Enums.ActionMode.Primary }, { value: Enums.ActionMode.Secondary }],\r\n Enums.ActionMode.Primary\r\n );\r\n static readonly tooltipProperty = new StringProperty(Versions.v1_5, \"tooltip\");\r\n static readonly isEnabledProperty = new BoolProperty(Versions.v1_5, \"isEnabled\", true);\r\n\r\n @property(Action.titleProperty)\r\n title?: string;\r\n\r\n @property(Action.iconUrlProperty)\r\n iconUrl?: string;\r\n\r\n @property(Action.styleProperty)\r\n style: string = Enums.ActionStyle.Default;\r\n\r\n @property(Action.modeProperty)\r\n mode: string = Enums.ActionMode.Primary;\r\n\r\n @property(Action.tooltipProperty)\r\n tooltip?: string;\r\n\r\n @property(Action.isEnabledProperty)\r\n isEnabled: boolean;\r\n\r\n //#endregion\r\n\r\n private renderButtonContent() {\r\n if (this.renderedElement) {\r\n // Cache hostConfig for perf\r\n const hostConfig = this.hostConfig;\r\n\r\n const titleElement = document.createElement(\"div\");\r\n titleElement.style.overflow = \"hidden\";\r\n titleElement.style.textOverflow = \"ellipsis\";\r\n\r\n if (\r\n !(\r\n hostConfig.actions.iconPlacement === Enums.ActionIconPlacement.AboveTitle ||\r\n hostConfig.actions.allowTitleToWrap\r\n )\r\n ) {\r\n titleElement.style.whiteSpace = \"nowrap\";\r\n }\r\n\r\n if (this.title) {\r\n titleElement.innerText = this.title;\r\n }\r\n\r\n if (!this.iconUrl) {\r\n this.renderedElement.classList.add(\"noIcon\");\r\n this.renderedElement.appendChild(titleElement);\r\n } else {\r\n const iconElement = document.createElement(\"img\");\r\n iconElement.src = this.iconUrl;\r\n iconElement.style.width = hostConfig.actions.iconSize + \"px\";\r\n iconElement.style.height = hostConfig.actions.iconSize + \"px\";\r\n iconElement.style.flex = \"0 0 auto\";\r\n\r\n if (hostConfig.actions.iconPlacement === Enums.ActionIconPlacement.AboveTitle) {\r\n this.renderedElement.classList.add(\"iconAbove\");\r\n this.renderedElement.style.flexDirection = \"column\";\r\n\r\n if (this.title) {\r\n iconElement.style.marginBottom = \"6px\";\r\n }\r\n } else {\r\n this.renderedElement.classList.add(\"iconLeft\");\r\n\r\n iconElement.style.maxHeight = \"100%\";\r\n\r\n if (this.title) {\r\n iconElement.style.marginRight = \"6px\";\r\n }\r\n }\r\n\r\n this.renderedElement.appendChild(iconElement);\r\n this.renderedElement.appendChild(titleElement);\r\n }\r\n }\r\n }\r\n\r\n private getParentContainer(): Container | undefined {\r\n if (this.parent instanceof Container) {\r\n return this.parent;\r\n }\r\n\r\n return this.parent ? this.parent.getParentContainer() : undefined;\r\n }\r\n\r\n private _state: ActionButtonState = ActionButtonState.Normal;\r\n private _actionCollection?: ActionCollection; // hold the reference to its action collection\r\n private _isFocusable: boolean = true;\r\n\r\n isDesignMode(): boolean {\r\n const rootElement = this.getRootObject();\r\n\r\n return rootElement instanceof CardElement && rootElement.isDesignMode();\r\n }\r\n\r\n protected updateCssClasses() {\r\n if (this.parent && this.renderedElement) {\r\n const hostConfig = this.parent.hostConfig;\r\n\r\n this.renderedElement.className = hostConfig.makeCssClassName(\r\n this.isEffectivelyEnabled() ? \"ac-pushButton\" : \"ac-pushButton-disabled\"\r\n );\r\n\r\n const parentContainer = this.getParentContainer();\r\n\r\n if (parentContainer) {\r\n const parentContainerStyle = parentContainer.getEffectiveStyle();\r\n\r\n if (parentContainerStyle) {\r\n this.renderedElement.classList.add(\"style-\" + parentContainerStyle);\r\n }\r\n }\r\n\r\n this.renderedElement.tabIndex = !this.isDesignMode() && this.isFocusable ? 0 : -1;\r\n\r\n switch (this._state) {\r\n case ActionButtonState.Normal:\r\n // No additional classes needed\r\n break;\r\n\r\n case ActionButtonState.Expanded:\r\n this.renderedElement.classList.add(hostConfig.makeCssClassName(\"expanded\"));\r\n break;\r\n case ActionButtonState.Subdued:\r\n this.renderedElement.classList.add(hostConfig.makeCssClassName(\"subdued\"));\r\n break;\r\n }\r\n\r\n if (this.style && this.isEffectivelyEnabled()) {\r\n if (this.style === Enums.ActionStyle.Positive) {\r\n this.renderedElement.classList.add(\r\n ...hostConfig.makeCssClassNames(\"primary\", \"style-positive\")\r\n );\r\n } else {\r\n this.renderedElement.classList.add(\r\n ...hostConfig.makeCssClassNames(\"style-\" + this.style.toLowerCase())\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected getDefaultSerializationContext(): BaseSerializationContext {\r\n return new SerializationContext();\r\n }\r\n\r\n protected internalGetReferencedInputs(): Dictionary {\r\n return {};\r\n }\r\n\r\n protected internalPrepareForExecution(_inputs: Dictionary | undefined) {\r\n // Do nothing in base implementation\r\n }\r\n\r\n protected internalValidateInputs(referencedInputs: Dictionary | undefined): Input[] {\r\n const result: Input[] = [];\r\n\r\n if (referencedInputs) {\r\n for (const key of Object.keys(referencedInputs)) {\r\n const input = referencedInputs[key];\r\n\r\n if (!input.validateValue()) {\r\n result.push(input);\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n protected shouldSerialize(context: SerializationContext): boolean {\r\n return context.actionRegistry.findByName(this.getJsonTypeName()) !== undefined;\r\n }\r\n\r\n protected raiseExecuteActionEvent() {\r\n if (this.onExecute) {\r\n this.onExecute(this);\r\n }\r\n\r\n raiseExecuteActionEvent(this);\r\n }\r\n\r\n protected internalAfterExecute() {\r\n let rootObject = this.getRootObject();\r\n\r\n if (rootObject instanceof CardElement) {\r\n rootObject.updateActionsEnabledState();\r\n }\r\n }\r\n\r\n onExecute: (sender: Action) => void;\r\n\r\n getHref(): string | undefined {\r\n return \"\";\r\n }\r\n\r\n getAriaRole(): string {\r\n return \"button\";\r\n }\r\n\r\n setupElementForAccessibility(element: HTMLElement, promoteTooltipToLabel: boolean = false) {\r\n element.tabIndex = this.isEffectivelyEnabled() && !this.isDesignMode() ? 0 : -1;\r\n\r\n element.setAttribute(\"role\", this.getAriaRole());\r\n\r\n if (element instanceof HTMLButtonElement) {\r\n element.disabled = !this.isEffectivelyEnabled();\r\n }\r\n\r\n if (!this.isEffectivelyEnabled()) {\r\n element.setAttribute(\"aria-disabled\", \"true\");\r\n } else {\r\n element.removeAttribute(\"aria-disabled\");\r\n element.classList.add(this.hostConfig.makeCssClassName(\"ac-selectable\"));\r\n }\r\n\r\n if (this.title) {\r\n element.setAttribute(\"aria-label\", this.title);\r\n element.title = this.title;\r\n } else {\r\n element.removeAttribute(\"aria-label\");\r\n element.removeAttribute(\"title\");\r\n }\r\n\r\n if (this.tooltip) {\r\n const targetAriaAttribute = promoteTooltipToLabel\r\n ? this.title\r\n ? \"aria-description\"\r\n : \"aria-label\"\r\n : \"aria-description\";\r\n\r\n element.setAttribute(targetAriaAttribute, this.tooltip);\r\n element.title = this.tooltip;\r\n }\r\n }\r\n\r\n parse(source: any, context?: SerializationContext) {\r\n return super.parse(source, context ? context : new SerializationContext());\r\n }\r\n\r\n render() {\r\n const buttonElement = document.createElement(\"button\");\r\n buttonElement.type = \"button\";\r\n buttonElement.style.display = \"flex\";\r\n buttonElement.style.alignItems = \"center\";\r\n buttonElement.style.justifyContent = \"center\";\r\n buttonElement.onclick = (e) => {\r\n if (this.isEffectivelyEnabled()) {\r\n e.preventDefault();\r\n e.cancelBubble = true;\r\n\r\n this.execute();\r\n }\r\n };\r\n\r\n this._renderedElement = buttonElement;\r\n\r\n this.renderButtonContent();\r\n this.updateCssClasses();\r\n this.setupElementForAccessibility(buttonElement);\r\n }\r\n\r\n execute() {\r\n if (this._actionCollection) {\r\n this._actionCollection.actionExecuted(this);\r\n }\r\n\r\n this.raiseExecuteActionEvent();\r\n this.internalAfterExecute();\r\n }\r\n\r\n prepareForExecution(): boolean {\r\n const referencedInputs = this.getReferencedInputs();\r\n const invalidInputs = this.internalValidateInputs(referencedInputs);\r\n\r\n if (invalidInputs.length > 0) {\r\n invalidInputs[0].focus();\r\n\r\n return false;\r\n }\r\n\r\n this.internalPrepareForExecution(referencedInputs);\r\n\r\n return true;\r\n }\r\n\r\n remove(): boolean {\r\n if (this._actionCollection) {\r\n return this._actionCollection.removeAction(this);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n getAllInputs(processActions: boolean = true): Input[] {\r\n return [];\r\n }\r\n\r\n getAllActions(): Action[] {\r\n return [this];\r\n }\r\n\r\n getResourceInformation(): IResourceInformation[] {\r\n return this.iconUrl ? [{ url: this.iconUrl, mimeType: \"image\" }] : [];\r\n }\r\n\r\n getActionById(id: string): Action | undefined {\r\n return this.id === id ? this : undefined;\r\n }\r\n\r\n getReferencedInputs(): Dictionary | undefined {\r\n return this.internalGetReferencedInputs();\r\n }\r\n\r\n /**\r\n * Validates the inputs associated with this action.\r\n *\r\n * @returns A list of inputs that failed validation, or an empty array if no input failed validation.\r\n */\r\n validateInputs(): Input[] {\r\n return this.internalValidateInputs(this.getReferencedInputs());\r\n }\r\n\r\n updateEnabledState() {\r\n // Do nothing in base implementation\r\n }\r\n\r\n isEffectivelyEnabled(): boolean {\r\n return this.isEnabled;\r\n }\r\n\r\n get isPrimary(): boolean {\r\n return this.style === Enums.ActionStyle.Positive;\r\n }\r\n\r\n set isPrimary(value: boolean) {\r\n if (value) {\r\n this.style = Enums.ActionStyle.Positive;\r\n } else {\r\n if (this.style === Enums.ActionStyle.Positive) {\r\n this.style = Enums.ActionStyle.Default;\r\n }\r\n }\r\n }\r\n\r\n get hostConfig(): HostConfig {\r\n return this.parent ? this.parent.hostConfig : defaultHostConfig;\r\n }\r\n\r\n get parent(): CardElement | undefined {\r\n return this._parent;\r\n }\r\n\r\n get state(): ActionButtonState {\r\n return this._state;\r\n }\r\n\r\n set state(value: ActionButtonState) {\r\n if (this._state !== value) {\r\n this._state = value;\r\n\r\n this.updateCssClasses();\r\n }\r\n }\r\n\r\n get isFocusable(): boolean {\r\n return this._isFocusable;\r\n }\r\n\r\n set isFocusable(value: boolean) {\r\n if (this._isFocusable !== value) {\r\n this._isFocusable = value;\r\n\r\n this.updateCssClasses();\r\n }\r\n }\r\n}\r\n\r\nexport abstract class SubmitActionBase extends Action {\r\n //#region Schema\r\n\r\n static readonly dataProperty = new PropertyDefinition(Versions.v1_0, \"data\");\r\n static readonly associatedInputsProperty = new CustomProperty(\r\n Versions.v1_3,\r\n \"associatedInputs\",\r\n (\r\n sender: SerializableObject,\r\n prop: PropertyDefinition,\r\n source: PropertyBag,\r\n context: BaseSerializationContext\r\n ) => {\r\n const value = source[prop.name];\r\n\r\n if (value !== undefined && typeof value === \"string\") {\r\n return value.toLowerCase() === \"none\" ? \"none\" : \"auto\";\r\n }\r\n\r\n return undefined;\r\n },\r\n (\r\n sender: SerializableObject,\r\n prop: PropertyDefinition,\r\n target: PropertyBag,\r\n value: string | undefined,\r\n context: BaseSerializationContext\r\n ) => {\r\n context.serializeValue(target, prop.name, value);\r\n }\r\n );\r\n static readonly disabledUnlessAssociatedInputsChangeProperty = new BoolProperty(\r\n Versions.v1_6,\r\n \"disabledUnlessAssociatedInputsChange\",\r\n false\r\n );\r\n\r\n @property(SubmitActionBase.dataProperty)\r\n private _originalData?: PropertyBag;\r\n\r\n @property(SubmitActionBase.associatedInputsProperty)\r\n associatedInputs?: \"auto\" | \"none\";\r\n\r\n @property(SubmitActionBase.disabledUnlessAssociatedInputsChangeProperty)\r\n disabledUnlessAssociatedInputsChange: boolean = false;\r\n\r\n //#endregion\r\n\r\n private _isPrepared: boolean = false;\r\n private _processedData?: PropertyBag;\r\n private _areReferencedInputsDirty: boolean = false;\r\n\r\n protected internalGetReferencedInputs(): Dictionary {\r\n const result: Dictionary = {};\r\n\r\n if (this.associatedInputs !== \"none\") {\r\n let current: CardElement | undefined = this.parent;\r\n let inputs: Input[] = [];\r\n\r\n while (current) {\r\n inputs.push(...current.getAllInputs(false));\r\n\r\n current = current.parent;\r\n }\r\n\r\n for (const input of inputs) {\r\n if (input.id) {\r\n result[input.id] = input;\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n protected internalPrepareForExecution(inputs: Dictionary | undefined) {\r\n if (this._originalData) {\r\n this._processedData = JSON.parse(JSON.stringify(this._originalData));\r\n } else {\r\n this._processedData = {};\r\n }\r\n\r\n if (this._processedData && inputs) {\r\n for (const key of Object.keys(inputs)) {\r\n const input = inputs[key];\r\n\r\n if (input.id && input.isSet()) {\r\n this._processedData[input.id] =\r\n typeof input.value === \"string\" ? input.value : input.value.toString();\r\n }\r\n }\r\n }\r\n\r\n this._isPrepared = true;\r\n }\r\n\r\n protected internalAfterExecute() {\r\n if (GlobalSettings.resetInputsDirtyStateAfterActionExecution) {\r\n this.resetReferencedInputsDirtyState();\r\n }\r\n }\r\n\r\n resetReferencedInputsDirtyState() {\r\n let referencedInputs = this.getReferencedInputs();\r\n\r\n this._areReferencedInputsDirty = false;\r\n\r\n if (referencedInputs) {\r\n for (const key of Object.keys(referencedInputs)) {\r\n const input = referencedInputs[key];\r\n\r\n input.resetDirtyState();\r\n }\r\n }\r\n }\r\n\r\n updateEnabledState() {\r\n this._areReferencedInputsDirty = false;\r\n\r\n let referencedInputs = this.getReferencedInputs();\r\n\r\n if (referencedInputs) {\r\n for (const key of Object.keys(referencedInputs)) {\r\n const input = referencedInputs[key];\r\n\r\n if (input.isDirty()) {\r\n this._areReferencedInputsDirty = true;\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.updateCssClasses();\r\n\r\n if (this._renderedElement) {\r\n this.setupElementForAccessibility(this._renderedElement);\r\n }\r\n }\r\n\r\n isEffectivelyEnabled(): boolean {\r\n let result = super.isEffectivelyEnabled();\r\n\r\n return this.disabledUnlessAssociatedInputsChange\r\n ? result && this._areReferencedInputsDirty\r\n : result;\r\n }\r\n\r\n get data(): object | undefined {\r\n return this._isPrepared ? this._processedData : this._originalData;\r\n }\r\n\r\n set data(value: object | undefined) {\r\n this._originalData = value;\r\n this._isPrepared = false;\r\n }\r\n}\r\n\r\nexport class SubmitAction extends SubmitActionBase {\r\n // Note the \"weird\" way this field is declared is to work around a breaking\r\n // change introduced in TS 3.1 wrt d.ts generation. DO NOT CHANGE\r\n static readonly JsonTypeName: \"Action.Submit\" = \"Action.Submit\";\r\n\r\n getJsonTypeName(): string {\r\n return SubmitAction.JsonTypeName;\r\n }\r\n}\r\n\r\nexport class ExecuteAction extends SubmitActionBase {\r\n // Note the \"weird\" way this field is declared is to work around a breaking\r\n // change introduced in TS 3.1 wrt d.ts generation. DO NOT CHANGE\r\n static readonly JsonTypeName: \"Action.Execute\" = \"Action.Execute\";\r\n\r\n //#region Schema\r\n\r\n static readonly verbProperty = new StringProperty(Versions.v1_4, \"verb\");\r\n\r\n @property(ExecuteAction.verbProperty)\r\n verb: string;\r\n\r\n //#endregion\r\n\r\n getJsonTypeName(): string {\r\n return ExecuteAction.JsonTypeName;\r\n }\r\n}\r\n\r\nexport class OpenUrlAction extends Action {\r\n //#region Schema\r\n\r\n static readonly urlProperty = new StringProperty(Versions.v1_0, \"url\");\r\n\r\n @property(OpenUrlAction.urlProperty)\r\n url?: string;\r\n\r\n //#endregion\r\n\r\n // Note the \"weird\" way this field is declared is to work around a breaking\r\n // change introduced in TS 3.1 wrt d.ts generation. DO NOT CHANGE\r\n static readonly JsonTypeName: \"Action.OpenUrl\" = \"Action.OpenUrl\";\r\n\r\n getJsonTypeName(): string {\r\n return OpenUrlAction.JsonTypeName;\r\n }\r\n\r\n getAriaRole(): string {\r\n return \"link\";\r\n }\r\n\r\n internalValidateProperties(context: ValidationResults) {\r\n super.internalValidateProperties(context);\r\n\r\n if (!this.url) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.PropertyCantBeNull,\r\n Strings.errors.propertyMustBeSet(\"url\")\r\n );\r\n }\r\n }\r\n\r\n getHref(): string | undefined {\r\n return this.url;\r\n }\r\n}\r\n\r\nexport class ToggleVisibilityAction extends Action {\r\n //#region Schema\r\n\r\n static readonly targetElementsProperty = new CustomProperty(\r\n Versions.v1_2,\r\n \"targetElements\",\r\n (\r\n sender: SerializableObject,\r\n prop: PropertyDefinition,\r\n source: PropertyBag,\r\n context: BaseSerializationContext\r\n ) => {\r\n const result: PropertyBag = {};\r\n\r\n if (Array.isArray(source[prop.name])) {\r\n for (const item of source[prop.name]) {\r\n if (typeof item === \"string\") {\r\n result[item] = undefined;\r\n } else if (typeof item === \"object\") {\r\n const elementId = item[\"elementId\"];\r\n\r\n if (typeof elementId === \"string\") {\r\n result[elementId] = Utils.parseBool(item[\"isVisible\"]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n },\r\n (\r\n sender: SerializableObject,\r\n prop: PropertyDefinition,\r\n target: PropertyBag,\r\n value: PropertyBag,\r\n context: BaseSerializationContext\r\n ) => {\r\n const targetElements: any[] = [];\r\n\r\n for (const id of Object.keys(value)) {\r\n if (typeof value[id] === \"boolean\") {\r\n targetElements.push({\r\n elementId: id,\r\n isVisible: value[id]\r\n });\r\n } else {\r\n targetElements.push(id);\r\n }\r\n }\r\n\r\n context.serializeArray(target, prop.name, targetElements);\r\n },\r\n {},\r\n (sender: SerializableObject) => {\r\n return {};\r\n }\r\n );\r\n\r\n @property(ToggleVisibilityAction.targetElementsProperty)\r\n targetElements: { [key: string]: any } = {};\r\n\r\n //#endregion\r\n\r\n // Note the \"weird\" way this field is declared is to work around a breaking\r\n // change introduced in TS 3.1 wrt d.ts generation. DO NOT CHANGE\r\n static readonly JsonTypeName: \"Action.ToggleVisibility\" = \"Action.ToggleVisibility\";\r\n\r\n private updateAriaControlsAttribute() {\r\n // apply aria labels to make it clear which elements this action will toggle\r\n if (this.targetElements) {\r\n const elementIds = Object.keys(this.targetElements);\r\n\r\n if (this._renderedElement) {\r\n if (elementIds.length > 0) {\r\n this._renderedElement.setAttribute(\"aria-controls\", elementIds.join(\" \"));\r\n } else {\r\n this._renderedElement.removeAttribute(\"aria-controls\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n internalValidateProperties(context: ValidationResults) {\r\n super.internalValidateProperties(context);\r\n\r\n if (!this.targetElements) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.PropertyCantBeNull,\r\n Strings.errors.propertyMustBeSet(\"targetElements\")\r\n );\r\n }\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return ToggleVisibilityAction.JsonTypeName;\r\n }\r\n\r\n render() {\r\n super.render();\r\n\r\n this.updateAriaControlsAttribute();\r\n }\r\n\r\n execute() {\r\n super.execute();\r\n if (this.parent) {\r\n for (const elementId of Object.keys(this.targetElements)) {\r\n const targetElement = this.parent.getRootElement().getElementById(elementId);\r\n\r\n if (targetElement) {\r\n if (typeof this.targetElements[elementId] === \"boolean\") {\r\n targetElement.isVisible = this.targetElements[elementId];\r\n } else {\r\n targetElement.isVisible = !targetElement.isVisible;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n addTargetElement(elementId: string, isVisible: boolean | undefined = undefined) {\r\n this.targetElements[elementId] = isVisible;\r\n this.updateAriaControlsAttribute();\r\n }\r\n\r\n removeTargetElement(elementId: string) {\r\n delete this.targetElements[elementId];\r\n this.updateAriaControlsAttribute();\r\n }\r\n}\r\n\r\nclass StringWithSubstitutionProperty extends PropertyDefinition {\r\n parse(\r\n sender: SerializableObject,\r\n source: PropertyBag,\r\n context: BaseSerializationContext\r\n ): StringWithSubstitutions {\r\n const result = new StringWithSubstitutions();\r\n result.set(Utils.parseString(source[this.name]));\r\n\r\n return result;\r\n }\r\n\r\n toJSON(\r\n sender: SerializableObject,\r\n target: PropertyBag,\r\n value: StringWithSubstitutions,\r\n context: BaseSerializationContext\r\n ): void {\r\n context.serializeValue(target, this.name, value.getOriginal());\r\n }\r\n\r\n constructor(readonly targetVersion: Version, readonly name: string) {\r\n super(targetVersion, name, undefined, () => {\r\n return new StringWithSubstitutions();\r\n });\r\n }\r\n}\r\n\r\nexport class HttpHeader extends SerializableObject {\r\n //#region Schema\r\n\r\n static readonly nameProperty = new StringProperty(Versions.v1_0, \"name\");\r\n static readonly valueProperty = new StringWithSubstitutionProperty(Versions.v1_0, \"value\");\r\n\r\n protected getSchemaKey(): string {\r\n return \"HttpHeader\";\r\n }\r\n\r\n @property(HttpHeader.nameProperty)\r\n name: string;\r\n\r\n @property(HttpHeader.valueProperty)\r\n private _value: StringWithSubstitutions;\r\n\r\n //#endregion\r\n\r\n constructor(name: string = \"\", value: string = \"\") {\r\n super();\r\n\r\n this.name = name;\r\n this.value = value;\r\n }\r\n\r\n getReferencedInputs(inputs: Input[], referencedInputs: Dictionary) {\r\n this._value.getReferencedInputs(inputs, referencedInputs);\r\n }\r\n\r\n prepareForExecution(inputs: Dictionary) {\r\n this._value.substituteInputValues(inputs, ContentTypes.applicationXWwwFormUrlencoded);\r\n }\r\n\r\n get value(): string | undefined {\r\n return this._value.get();\r\n }\r\n\r\n set value(newValue: string | undefined) {\r\n this._value.set(newValue);\r\n }\r\n}\r\n\r\nexport class HttpAction extends Action {\r\n //#region Schema\r\n\r\n static readonly urlProperty = new StringWithSubstitutionProperty(Versions.v1_0, \"url\");\r\n static readonly bodyProperty = new StringWithSubstitutionProperty(Versions.v1_0, \"body\");\r\n static readonly methodProperty = new StringProperty(Versions.v1_0, \"method\");\r\n static readonly headersProperty = new SerializableObjectCollectionProperty(\r\n Versions.v1_0,\r\n \"headers\",\r\n HttpHeader\r\n );\r\n static readonly ignoreInputValidationProperty = new BoolProperty(\r\n Versions.v1_3,\r\n \"ignoreInputValidation\",\r\n false\r\n );\r\n\r\n @property(HttpAction.urlProperty)\r\n private _url: StringWithSubstitutions;\r\n\r\n @property(HttpAction.bodyProperty)\r\n private _body: StringWithSubstitutions;\r\n\r\n @property(HttpAction.methodProperty)\r\n method?: string;\r\n\r\n @property(HttpAction.headersProperty)\r\n headers: HttpHeader[];\r\n\r\n @property(HttpAction.ignoreInputValidationProperty)\r\n private _ignoreInputValidation: boolean = false;\r\n\r\n //#endregion\r\n\r\n // Note the \"weird\" way this field is declared is to work around a breaking\r\n // change introduced in TS 3.1 wrt d.ts generation. DO NOT CHANGE\r\n static readonly JsonTypeName: \"Action.Http\" = \"Action.Http\";\r\n\r\n protected internalGetReferencedInputs(): Dictionary {\r\n const allInputs = this.parent ? this.parent.getRootElement().getAllInputs() : [];\r\n const result: Dictionary = {};\r\n\r\n this._url.getReferencedInputs(allInputs, result);\r\n\r\n for (const header of this.headers) {\r\n header.getReferencedInputs(allInputs, result);\r\n }\r\n\r\n this._body.getReferencedInputs(allInputs, result);\r\n\r\n return result;\r\n }\r\n\r\n protected internalPrepareForExecution(inputs: Dictionary | undefined) {\r\n if (inputs) {\r\n this._url.substituteInputValues(inputs, ContentTypes.applicationXWwwFormUrlencoded);\r\n\r\n let contentType = ContentTypes.applicationJson;\r\n\r\n for (const header of this.headers) {\r\n header.prepareForExecution(inputs);\r\n\r\n if (header.name && header.name.toLowerCase() === \"content-type\") {\r\n contentType = header.value!;\r\n }\r\n }\r\n\r\n this._body.substituteInputValues(inputs, contentType);\r\n }\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return HttpAction.JsonTypeName;\r\n }\r\n\r\n internalValidateProperties(context: ValidationResults) {\r\n super.internalValidateProperties(context);\r\n\r\n if (!this.url) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.PropertyCantBeNull,\r\n Strings.errors.propertyMustBeSet(\"url\")\r\n );\r\n }\r\n\r\n if (this.headers.length > 0) {\r\n for (const header of this.headers) {\r\n if (!header.name) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.PropertyCantBeNull,\r\n Strings.errors.actionHttpHeadersMustHaveNameAndValue()\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n get ignoreInputValidation(): boolean {\r\n return this._ignoreInputValidation;\r\n }\r\n\r\n set ignoreInputValidation(value: boolean) {\r\n this._ignoreInputValidation = value;\r\n }\r\n\r\n get url(): string | undefined {\r\n return this._url.get();\r\n }\r\n\r\n set url(value: string | undefined) {\r\n this._url.set(value);\r\n }\r\n\r\n get body(): string | undefined {\r\n return this._body.get();\r\n }\r\n\r\n set body(value: string | undefined) {\r\n this._body.set(value);\r\n }\r\n}\r\n\r\nexport class ShowCardAction extends Action {\r\n // Note the \"weird\" way this field is declared is to work around a breaking\r\n // change introduced in TS 3.1 wrt d.ts generation. DO NOT CHANGE\r\n static readonly JsonTypeName: \"Action.ShowCard\" = \"Action.ShowCard\";\r\n\r\n protected updateCssClasses() {\r\n super.updateCssClasses();\r\n\r\n if (this.renderedElement) {\r\n const effectiveHostConfig = this.parent ? this.parent.hostConfig : defaultHostConfig;\r\n\r\n this.renderedElement.classList.add(effectiveHostConfig.makeCssClassName(\"expandable\"));\r\n this.renderedElement.setAttribute(\r\n \"aria-expanded\",\r\n (this.state === ActionButtonState.Expanded).toString()\r\n );\r\n }\r\n }\r\n\r\n protected internalParse(source: any, context: SerializationContext) {\r\n super.internalParse(source, context);\r\n\r\n const jsonCard = source[\"card\"];\r\n\r\n if (jsonCard) {\r\n this.card.parse(jsonCard, context);\r\n } else {\r\n context.logParseEvent(\r\n this,\r\n Enums.ValidationEvent.PropertyCantBeNull,\r\n Strings.errors.showCardMustHaveCard()\r\n );\r\n }\r\n }\r\n\r\n protected internalToJSON(target: PropertyBag, context: SerializationContext) {\r\n super.internalToJSON(target, context);\r\n\r\n if (this.card) {\r\n context.serializeValue(target, \"card\", this.card.toJSON(context));\r\n }\r\n }\r\n\r\n protected raiseExecuteActionEvent() {\r\n if (this.hostConfig.actions.showCard.actionMode === Enums.ShowCardActionMode.Popup) {\r\n // Only raise the event in Popup mode.\r\n super.raiseExecuteActionEvent();\r\n }\r\n }\r\n\r\n readonly card: AdaptiveCard = new InlineAdaptiveCard();\r\n\r\n releaseDOMResources() {\r\n super.releaseDOMResources();\r\n\r\n this.card.releaseDOMResources();\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return ShowCardAction.JsonTypeName;\r\n }\r\n\r\n internalValidateProperties(context: ValidationResults) {\r\n super.internalValidateProperties(context);\r\n\r\n this.card.internalValidateProperties(context);\r\n }\r\n\r\n setParent(value: CardElement) {\r\n super.setParent(value);\r\n\r\n this.card.setParent(value);\r\n }\r\n\r\n getAllInputs(processActions: boolean = true): Input[] {\r\n return this.card.getAllInputs(processActions);\r\n }\r\n\r\n getAllActions(): Action[] {\r\n const result = super.getAllActions();\r\n\r\n result.push(...this.card.getAllActions());\r\n\r\n return result;\r\n }\r\n\r\n getResourceInformation(): IResourceInformation[] {\r\n let result = super.getResourceInformation();\r\n\r\n result.push(...this.card.getResourceInformation());\r\n\r\n return result;\r\n }\r\n\r\n getActionById(id: string): Action | undefined {\r\n let result = super.getActionById(id);\r\n\r\n if (!result) {\r\n result = this.card.getActionById(id);\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nclass OverflowAction extends Action {\r\n static readonly JsonTypeName: \"Action.Overflow\" = \"Action.Overflow\";\r\n private _actions: Action[];\r\n\r\n constructor(actions: Action[]) {\r\n super();\r\n this._actions = actions;\r\n\r\n this.title = Strings.defaults.overflowButtonText();\r\n }\r\n\r\n getActions(): readonly Action[] {\r\n return this._actions;\r\n }\r\n\r\n getAllActions(): Action[] {\r\n const result = super.getAllActions();\r\n\r\n result.push(...this._actions);\r\n\r\n return result;\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return ShowCardAction.JsonTypeName;\r\n }\r\n\r\n execute() {\r\n const shouldDisplayPopupMenu = !raiseDisplayOverflowActionMenuEvent(\r\n this,\r\n this.renderedElement\r\n );\r\n\r\n if (shouldDisplayPopupMenu && this.renderedElement) {\r\n const contextMenu = new PopupMenu();\r\n contextMenu.hostConfig = this.hostConfig;\r\n\r\n for (let i = 0; i < this._actions.length; i++) {\r\n const menuItem = new MenuItem(i.toString(), this._actions[i].title ?? \"\");\r\n menuItem.isEnabled = this._actions[i].isEnabled;\r\n menuItem.onClick = () => {\r\n const actionToExecute = this._actions[i];\r\n\r\n contextMenu.closePopup(false);\r\n\r\n if (actionToExecute.isEnabled) {\r\n actionToExecute.execute();\r\n }\r\n };\r\n\r\n contextMenu.items.add(menuItem);\r\n }\r\n\r\n contextMenu.popup(this.renderedElement);\r\n }\r\n }\r\n}\r\n\r\nclass ActionCollection {\r\n private _owner: CardElement;\r\n private _actionCardContainer: HTMLDivElement;\r\n private _expandedAction?: ShowCardAction;\r\n private _actionCard?: HTMLElement;\r\n\r\n private isActionAllowed(action: Action): boolean {\r\n const forbiddenTypes = this._owner.getForbiddenActionTypes();\r\n\r\n if (forbiddenTypes) {\r\n for (const forbiddenType of forbiddenTypes) {\r\n if (action.constructor === forbiddenType) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private refreshContainer() {\r\n clearElement(this._actionCardContainer);\r\n\r\n if (!this._actionCard) {\r\n this._actionCardContainer.style.marginTop = \"0px\";\r\n\r\n return;\r\n }\r\n\r\n this._actionCardContainer.style.marginTop =\r\n this.renderedActionCount > 0\r\n ? this._owner.hostConfig.actions.showCard.inlineTopMargin + \"px\"\r\n : \"0px\";\r\n\r\n const padding = this._owner.getEffectivePadding();\r\n\r\n this._owner.getImmediateSurroundingPadding(padding);\r\n\r\n const physicalPadding =\r\n this._owner.hostConfig.paddingDefinitionToSpacingDefinition(padding);\r\n\r\n if (this._actionCard) {\r\n this._actionCard.style.paddingLeft = physicalPadding.left + \"px\";\r\n this._actionCard.style.paddingRight = physicalPadding.right + \"px\";\r\n\r\n this._actionCard.style.marginLeft = \"-\" + physicalPadding.left + \"px\";\r\n this._actionCard.style.marginRight = \"-\" + physicalPadding.right + \"px\";\r\n\r\n if (physicalPadding.bottom !== 0 && !this._owner.isDesignMode()) {\r\n this._actionCard.style.paddingBottom = physicalPadding.bottom + \"px\";\r\n this._actionCard.style.marginBottom = \"-\" + physicalPadding.bottom + \"px\";\r\n }\r\n\r\n Utils.appendChild(this._actionCardContainer, this._actionCard);\r\n }\r\n }\r\n\r\n private layoutChanged() {\r\n this._owner.getRootElement().updateLayout();\r\n }\r\n\r\n private showActionCard(\r\n action: ShowCardAction,\r\n suppressStyle: boolean = false,\r\n raiseEvent: boolean = true\r\n ) {\r\n (action.card).suppressStyle = suppressStyle;\r\n\r\n // Always re-render a ShowCard action in design mode; reuse already rendered ShowCard (if available) otherwise\r\n const renderedCard =\r\n action.card.renderedElement && !this._owner.isDesignMode()\r\n ? action.card.renderedElement\r\n : action.card.render();\r\n\r\n this._actionCard = renderedCard;\r\n this._expandedAction = action;\r\n\r\n this.refreshContainer();\r\n\r\n if (raiseEvent) {\r\n this.layoutChanged();\r\n\r\n raiseInlineCardExpandedEvent(action, true);\r\n }\r\n }\r\n\r\n private collapseExpandedAction() {\r\n for (const action of this._renderedActions) {\r\n action.state = ActionButtonState.Normal;\r\n }\r\n\r\n const previouslyExpandedAction = this._expandedAction;\r\n\r\n this._expandedAction = undefined;\r\n this._actionCard = undefined;\r\n\r\n this.refreshContainer();\r\n\r\n if (previouslyExpandedAction) {\r\n this.layoutChanged();\r\n\r\n raiseInlineCardExpandedEvent(previouslyExpandedAction, false);\r\n }\r\n }\r\n\r\n private expandShowCardAction(action: ShowCardAction, raiseEvent: boolean) {\r\n let afterSelectedAction = false;\r\n\r\n for (const renderedAction of this._renderedActions) {\r\n // Remove actions after selected action from tabOrder if the actions are oriented horizontally, to skip focus directly to expanded card\r\n if (\r\n this._owner.hostConfig.actions.actionsOrientation == Enums.Orientation.Horizontal &&\r\n afterSelectedAction\r\n ) {\r\n renderedAction.isFocusable = false;\r\n }\r\n\r\n if (renderedAction !== action) {\r\n renderedAction.state = ActionButtonState.Subdued;\r\n } else {\r\n renderedAction.state = ActionButtonState.Expanded;\r\n\r\n afterSelectedAction = true;\r\n\r\n if (renderedAction.renderedElement) {\r\n renderedAction.renderedElement.onblur = (_e) => {\r\n for (const ra of this._renderedActions) {\r\n ra.isFocusable = true;\r\n }\r\n };\r\n }\r\n }\r\n }\r\n\r\n this.showActionCard(\r\n action,\r\n !(this._owner.isAtTheVeryLeft() && this._owner.isAtTheVeryRight()),\r\n raiseEvent\r\n );\r\n }\r\n\r\n private _items: Action[] = [];\r\n private _overflowAction?: OverflowAction;\r\n private _renderedActions: Action[] = [];\r\n\r\n constructor(owner: CardElement) {\r\n this._owner = owner;\r\n }\r\n\r\n releaseDOMResources() {\r\n for (let action of this._renderedActions) {\r\n action.releaseDOMResources();\r\n }\r\n }\r\n\r\n actionExecuted(action: Action) {\r\n if (!(action instanceof ShowCardAction)) {\r\n this.collapseExpandedAction();\r\n } else {\r\n if (action === this._expandedAction) {\r\n this.collapseExpandedAction();\r\n } else if (\r\n this._owner.hostConfig.actions.showCard.actionMode ===\r\n Enums.ShowCardActionMode.Inline\r\n ) {\r\n this.expandShowCardAction(action, true);\r\n }\r\n }\r\n }\r\n\r\n parse(source: any, context: SerializationContext) {\r\n this.clear();\r\n\r\n if (Array.isArray(source)) {\r\n for (const jsonAction of source) {\r\n let forbiddenActions: string[] = [];\r\n\r\n // If the action owner is a ContainerWithActions, we should check for forbidden actions\r\n if (this._owner instanceof ContainerWithActions) {\r\n forbiddenActions = this._owner.getForbiddenActionNames();\r\n }\r\n\r\n const action = context.parseAction(\r\n this._owner,\r\n jsonAction,\r\n forbiddenActions,\r\n !this._owner.isDesignMode()\r\n );\r\n\r\n if (action) {\r\n this.addAction(action);\r\n }\r\n }\r\n }\r\n }\r\n\r\n toJSON(target: PropertyBag, propertyName: string, context: SerializationContext): any {\r\n context.serializeArray(target, propertyName, this._items);\r\n }\r\n\r\n getActionAt(id: number): Action | undefined {\r\n return this._items[id];\r\n }\r\n\r\n getActionCount(): number {\r\n return this._items.length;\r\n }\r\n\r\n getActionById(id: string): Action | undefined {\r\n let result: Action | undefined = undefined;\r\n\r\n for (const item of this._items) {\r\n result = item.getActionById(id);\r\n\r\n if (result) {\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n validateProperties(context: ValidationResults) {\r\n if (\r\n this._owner.hostConfig.actions.maxActions &&\r\n this._items.length > this._owner.hostConfig.actions.maxActions\r\n ) {\r\n context.addFailure(\r\n this._owner,\r\n Enums.ValidationEvent.TooManyActions,\r\n Strings.errors.tooManyActions(this._owner.hostConfig.actions.maxActions)\r\n );\r\n }\r\n\r\n if (this._items.length > 0 && !this._owner.hostConfig.supportsInteractivity) {\r\n context.addFailure(\r\n this._owner,\r\n Enums.ValidationEvent.InteractivityNotAllowed,\r\n Strings.errors.interactivityNotAllowed()\r\n );\r\n }\r\n\r\n for (const item of this._items) {\r\n if (!this.isActionAllowed(item)) {\r\n context.addFailure(\r\n this._owner,\r\n Enums.ValidationEvent.ActionTypeNotAllowed,\r\n Strings.errors.actionTypeNotAllowed(item.getJsonTypeName())\r\n );\r\n }\r\n\r\n item.internalValidateProperties(context);\r\n }\r\n }\r\n\r\n render(orientation: Enums.Orientation): HTMLElement | undefined {\r\n // Cache hostConfig for better perf\r\n const hostConfig = this._owner.hostConfig;\r\n\r\n if (!hostConfig.supportsInteractivity) {\r\n return undefined;\r\n }\r\n\r\n const element = document.createElement(\"div\");\r\n const maxActions = hostConfig.actions.maxActions\r\n ? Math.min(hostConfig.actions.maxActions, this._items.length)\r\n : this._items.length;\r\n\r\n this._actionCardContainer = document.createElement(\"div\");\r\n this._renderedActions = [];\r\n\r\n if (\r\n hostConfig.actions.preExpandSingleShowCardAction &&\r\n maxActions === 1 &&\r\n this._items[0] instanceof ShowCardAction &&\r\n this.isActionAllowed(this._items[0])\r\n ) {\r\n this.showActionCard(this._items[0], true);\r\n this._renderedActions.push(this._items[0]);\r\n } else {\r\n const buttonStrip = document.createElement(\"div\");\r\n buttonStrip.className = hostConfig.makeCssClassName(\"ac-actionSet\");\r\n buttonStrip.style.display = \"flex\";\r\n\r\n if (orientation === Enums.Orientation.Horizontal) {\r\n buttonStrip.style.flexDirection = \"row\";\r\n\r\n if (\r\n this._owner.horizontalAlignment &&\r\n hostConfig.actions.actionAlignment !== Enums.ActionAlignment.Stretch\r\n ) {\r\n switch (this._owner.horizontalAlignment) {\r\n case Enums.HorizontalAlignment.Center:\r\n buttonStrip.style.justifyContent = \"center\";\r\n break;\r\n case Enums.HorizontalAlignment.Right:\r\n buttonStrip.style.justifyContent = \"flex-end\";\r\n break;\r\n default:\r\n buttonStrip.style.justifyContent = \"flex-start\";\r\n break;\r\n }\r\n } else {\r\n switch (hostConfig.actions.actionAlignment) {\r\n case Enums.ActionAlignment.Center:\r\n buttonStrip.style.justifyContent = \"center\";\r\n break;\r\n case Enums.ActionAlignment.Right:\r\n buttonStrip.style.justifyContent = \"flex-end\";\r\n break;\r\n default:\r\n buttonStrip.style.justifyContent = \"flex-start\";\r\n break;\r\n }\r\n }\r\n } else {\r\n buttonStrip.style.flexDirection = \"column\";\r\n\r\n if (\r\n this._owner.horizontalAlignment &&\r\n hostConfig.actions.actionAlignment !== Enums.ActionAlignment.Stretch\r\n ) {\r\n switch (this._owner.horizontalAlignment) {\r\n case Enums.HorizontalAlignment.Center:\r\n buttonStrip.style.alignItems = \"center\";\r\n break;\r\n case Enums.HorizontalAlignment.Right:\r\n buttonStrip.style.alignItems = \"flex-end\";\r\n break;\r\n default:\r\n buttonStrip.style.alignItems = \"flex-start\";\r\n break;\r\n }\r\n } else {\r\n switch (hostConfig.actions.actionAlignment) {\r\n case Enums.ActionAlignment.Center:\r\n buttonStrip.style.alignItems = \"center\";\r\n break;\r\n case Enums.ActionAlignment.Right:\r\n buttonStrip.style.alignItems = \"flex-end\";\r\n break;\r\n case Enums.ActionAlignment.Stretch:\r\n buttonStrip.style.alignItems = \"stretch\";\r\n break;\r\n default:\r\n buttonStrip.style.alignItems = \"flex-start\";\r\n break;\r\n }\r\n }\r\n }\r\n\r\n const allowedActions = this._items.filter(this.isActionAllowed.bind(this));\r\n\r\n let primaryActions: Action[] = [];\r\n const secondaryActions: Action[] = [];\r\n\r\n if (!this._owner.isDesignMode()) {\r\n allowedActions.forEach((action) =>\r\n action.mode === Enums.ActionMode.Secondary\r\n ? secondaryActions.push(action)\r\n : primaryActions.push(action)\r\n );\r\n\r\n // If primaryActions.length > maxActions, extra actions are moved to overflow\r\n const overflowPrimaryActions = primaryActions.splice(hostConfig.actions.maxActions);\r\n\r\n if (GlobalSettings.allowMoreThanMaxActionsInOverflowMenu) {\r\n secondaryActions.push(...overflowPrimaryActions);\r\n }\r\n\r\n let shouldRenderOverflowActionButton = true;\r\n\r\n if (secondaryActions.length > 0) {\r\n if (!this._overflowAction) {\r\n this._overflowAction = new OverflowAction(secondaryActions);\r\n this._overflowAction.setParent(this._owner);\r\n this._overflowAction[\"_actionCollection\"] = this;\r\n }\r\n\r\n const isRootAction = this._owner instanceof AdaptiveCard && !this._owner.parent;\r\n shouldRenderOverflowActionButton = !raiseRenderOverflowActionsEvent(\r\n this._overflowAction,\r\n isRootAction\r\n );\r\n }\r\n\r\n if (this._overflowAction && shouldRenderOverflowActionButton) {\r\n primaryActions.push(this._overflowAction);\r\n }\r\n } else {\r\n primaryActions = allowedActions;\r\n }\r\n\r\n for (let i = 0; i < primaryActions.length; i++) {\r\n const action = primaryActions[i];\r\n action.render();\r\n\r\n if (action.renderedElement) {\r\n if (\r\n hostConfig.actions.actionsOrientation === Enums.Orientation.Horizontal &&\r\n hostConfig.actions.actionAlignment === Enums.ActionAlignment.Stretch\r\n ) {\r\n action.renderedElement.style.flex = \"0 1 100%\";\r\n } else {\r\n action.renderedElement.style.flex = \"0 1 auto\";\r\n }\r\n\r\n buttonStrip.appendChild(action.renderedElement);\r\n\r\n this._renderedActions.push(action);\r\n\r\n if (i < primaryActions.length - 1 && hostConfig.actions.buttonSpacing > 0) {\r\n const spacer = document.createElement(\"div\");\r\n\r\n if (orientation === Enums.Orientation.Horizontal) {\r\n spacer.style.flex = \"0 0 auto\";\r\n spacer.style.width = hostConfig.actions.buttonSpacing + \"px\";\r\n } else {\r\n spacer.style.height = hostConfig.actions.buttonSpacing + \"px\";\r\n }\r\n\r\n Utils.appendChild(buttonStrip, spacer);\r\n }\r\n }\r\n }\r\n\r\n const buttonStripContainer = document.createElement(\"div\");\r\n buttonStripContainer.style.overflow = \"hidden\";\r\n buttonStripContainer.appendChild(buttonStrip);\r\n\r\n Utils.appendChild(element, buttonStripContainer);\r\n }\r\n\r\n Utils.appendChild(element, this._actionCardContainer);\r\n\r\n for (const renderedAction of this._renderedActions) {\r\n if (renderedAction.state === ActionButtonState.Expanded) {\r\n this.expandShowCardAction(renderedAction, false);\r\n\r\n break;\r\n }\r\n }\r\n\r\n return this._renderedActions.length > 0 ? element : undefined;\r\n }\r\n\r\n addAction(action: Action) {\r\n if (!action) {\r\n throw new Error(\"The action parameter cannot be null.\");\r\n }\r\n\r\n if ((!action.parent || action.parent === this._owner) && this._items.indexOf(action) < 0) {\r\n this._items.push(action);\r\n\r\n if (!action.parent) {\r\n action.setParent(this._owner);\r\n }\r\n\r\n action[\"_actionCollection\"] = this;\r\n } else {\r\n throw new Error(Strings.errors.actionAlreadyParented());\r\n }\r\n }\r\n\r\n removeAction(action: Action): boolean {\r\n if (this.expandedAction && this._expandedAction === action) {\r\n this.collapseExpandedAction();\r\n }\r\n\r\n const actionIndex = this._items.indexOf(action);\r\n\r\n if (actionIndex >= 0) {\r\n this._items.splice(actionIndex, 1);\r\n\r\n action.setParent(undefined);\r\n\r\n action[\"_actionCollection\"] = undefined;\r\n\r\n for (let i = 0; i < this._renderedActions.length; i++) {\r\n if (this._renderedActions[i] === action) {\r\n this._renderedActions.splice(i, 1);\r\n\r\n break;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n clear() {\r\n this._items = [];\r\n this._renderedActions = [];\r\n this._expandedAction = undefined;\r\n }\r\n\r\n getAllInputs(processActions: boolean = true): Input[] {\r\n let result: Input[] = [];\r\n\r\n if (processActions) {\r\n for (const action of this._items) {\r\n result.push(...action.getAllInputs());\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getResourceInformation(): IResourceInformation[] {\r\n let result: IResourceInformation[] = [];\r\n\r\n for (const action of this._items) {\r\n result.push(...action.getResourceInformation());\r\n }\r\n\r\n return result;\r\n }\r\n\r\n get renderedActionCount(): number {\r\n return this._renderedActions.length;\r\n }\r\n\r\n get expandedAction(): ShowCardAction | undefined {\r\n return this._expandedAction;\r\n }\r\n}\r\n\r\nexport class ActionSet extends CardElement {\r\n //#region Schema\r\n\r\n static readonly orientationProperty = new EnumProperty(\r\n Versions.v1_1,\r\n \"orientation\",\r\n Enums.Orientation\r\n );\r\n\r\n @property(ActionSet.orientationProperty)\r\n orientation?: Enums.Orientation;\r\n\r\n //#endregion\r\n\r\n private _actionCollection: ActionCollection;\r\n\r\n protected internalParse(source: any, context: SerializationContext) {\r\n super.internalParse(source, context);\r\n\r\n this._actionCollection.parse(source[\"actions\"], context);\r\n }\r\n\r\n protected internalToJSON(target: PropertyBag, context: SerializationContext) {\r\n super.internalToJSON(target, context);\r\n\r\n this._actionCollection.toJSON(target, \"actions\", context);\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n return this._actionCollection.render(\r\n this.orientation !== undefined\r\n ? this.orientation\r\n : this.hostConfig.actions.actionsOrientation\r\n );\r\n }\r\n\r\n constructor() {\r\n super();\r\n\r\n this._actionCollection = new ActionCollection(this);\r\n }\r\n\r\n releaseDOMResources() {\r\n super.releaseDOMResources();\r\n\r\n this._actionCollection.releaseDOMResources();\r\n }\r\n\r\n isBleedingAtBottom(): boolean {\r\n if (this._actionCollection.renderedActionCount === 0) {\r\n return super.isBleedingAtBottom();\r\n } else {\r\n if (this._actionCollection.getActionCount() === 1) {\r\n return (\r\n this._actionCollection.expandedAction !== undefined &&\r\n !this.hostConfig.actions.preExpandSingleShowCardAction\r\n );\r\n } else {\r\n return this._actionCollection.expandedAction !== undefined;\r\n }\r\n }\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"ActionSet\";\r\n }\r\n\r\n getActionCount(): number {\r\n return this._actionCollection.getActionCount();\r\n }\r\n\r\n getActionAt(index: number): Action | undefined {\r\n if (index >= 0 && index < this.getActionCount()) {\r\n return this._actionCollection.getActionAt(index);\r\n } else {\r\n return super.getActionAt(index);\r\n }\r\n }\r\n\r\n getActionById(id: string): Action | undefined {\r\n const result: Action | undefined = this._actionCollection.getActionById(id);\r\n\r\n return result ? result : super.getActionById(id);\r\n }\r\n\r\n getAllActions(): Action[] {\r\n const result = super.getAllActions();\r\n\r\n for (let i = 0; i < this.getActionCount(); i++) {\r\n let action = this.getActionAt(i);\r\n\r\n if (action) {\r\n result.push(action);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n internalValidateProperties(context: ValidationResults) {\r\n super.internalValidateProperties(context);\r\n\r\n this._actionCollection.validateProperties(context);\r\n }\r\n\r\n addAction(action: Action) {\r\n this._actionCollection.addAction(action);\r\n }\r\n\r\n getAllInputs(processActions: boolean = true): Input[] {\r\n return processActions ? this._actionCollection.getAllInputs() : [];\r\n }\r\n\r\n getResourceInformation(): IResourceInformation[] {\r\n return this._actionCollection.getResourceInformation();\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n findDOMNodeOwner(node: Node): CardObject | undefined {\r\n let target: CardObject | undefined = undefined;\r\n\r\n for (let i = 0; i < this.getActionCount(); i++) {\r\n const action = this.getActionAt(i);\r\n\r\n if (action) {\r\n // recur through each Action\r\n target = action.findDOMNodeOwner(node);\r\n\r\n if (target) {\r\n return target;\r\n }\r\n }\r\n }\r\n\r\n // if not found in any Action, defer to parent implementation\r\n return super.findDOMNodeOwner(node);\r\n }\r\n\r\n get isInteractive(): boolean {\r\n return true;\r\n }\r\n}\r\n\r\nexport class ContainerStyleProperty extends ValueSetProperty {\r\n constructor(\r\n readonly targetVersion: Version,\r\n readonly name: string,\r\n readonly defaultValue?: string,\r\n readonly onGetInitialValue?: (sender: SerializableObject) => string\r\n ) {\r\n super(\r\n targetVersion,\r\n name,\r\n [\r\n { value: Enums.ContainerStyle.Default },\r\n { value: Enums.ContainerStyle.Emphasis },\r\n { targetVersion: Versions.v1_2, value: Enums.ContainerStyle.Accent },\r\n { targetVersion: Versions.v1_2, value: Enums.ContainerStyle.Good },\r\n { targetVersion: Versions.v1_2, value: Enums.ContainerStyle.Attention },\r\n { targetVersion: Versions.v1_2, value: Enums.ContainerStyle.Warning }\r\n ],\r\n defaultValue,\r\n onGetInitialValue\r\n );\r\n }\r\n}\r\n\r\nexport abstract class StylableCardElementContainer extends CardElementContainer {\r\n //#region Schema\r\n\r\n static readonly styleProperty = new ContainerStyleProperty(Versions.v1_0, \"style\");\r\n\r\n @property(StylableCardElementContainer.styleProperty)\r\n get style(): string | undefined {\r\n if (this.allowCustomStyle) {\r\n const style = this.getValue(StylableCardElementContainer.styleProperty);\r\n\r\n if (style && this.hostConfig.containerStyles.getStyleByName(style)) {\r\n return style;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n set style(value: string | undefined) {\r\n this.setValue(StylableCardElementContainer.styleProperty, value);\r\n }\r\n\r\n //#endregion\r\n\r\n protected get allowCustomStyle(): boolean {\r\n return true;\r\n }\r\n\r\n protected get hasExplicitStyle(): boolean {\r\n return this.getValue(StylableCardElementContainer.styleProperty) !== undefined;\r\n }\r\n\r\n protected applyBorder() {\r\n // No border in base implementation\r\n }\r\n\r\n protected applyBackground() {\r\n if (this.renderedElement) {\r\n const styleDefinition = this.hostConfig.containerStyles.getStyleByName(\r\n this.style,\r\n this.hostConfig.containerStyles.getStyleByName(this.defaultStyle)\r\n );\r\n\r\n if (styleDefinition.backgroundColor) {\r\n const bgColor = Utils.stringToCssColor(styleDefinition.backgroundColor);\r\n if (bgColor) {\r\n this.renderedElement.style.backgroundColor = bgColor;\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected applyPadding() {\r\n super.applyPadding();\r\n\r\n if (!this.renderedElement) {\r\n return;\r\n }\r\n\r\n let physicalPadding = new SpacingDefinition();\r\n\r\n if (this.getEffectivePadding()) {\r\n physicalPadding = this.hostConfig.paddingDefinitionToSpacingDefinition(\r\n this.getEffectivePadding()\r\n );\r\n }\r\n\r\n this.renderedElement.style.paddingTop = physicalPadding.top + \"px\";\r\n this.renderedElement.style.paddingRight = physicalPadding.right + \"px\";\r\n this.renderedElement.style.paddingBottom = physicalPadding.bottom + \"px\";\r\n this.renderedElement.style.paddingLeft = physicalPadding.left + \"px\";\r\n\r\n if (this.isBleeding()) {\r\n // Bleed into the first parent that does have padding\r\n const padding = new PaddingDefinition();\r\n\r\n this.getImmediateSurroundingPadding(padding);\r\n\r\n const surroundingPadding =\r\n this.hostConfig.paddingDefinitionToSpacingDefinition(padding);\r\n\r\n this.renderedElement.style.marginRight = \"-\" + surroundingPadding.right + \"px\";\r\n this.renderedElement.style.marginLeft = \"-\" + surroundingPadding.left + \"px\";\r\n\r\n if (!this.isDesignMode()) {\r\n this.renderedElement.style.marginTop = \"-\" + surroundingPadding.top + \"px\";\r\n this.renderedElement.style.marginBottom = \"-\" + surroundingPadding.bottom + \"px\";\r\n }\r\n\r\n if (\r\n this.separatorElement &&\r\n this.separatorOrientation === Enums.Orientation.Horizontal\r\n ) {\r\n this.separatorElement.style.marginLeft = \"-\" + surroundingPadding.left + \"px\";\r\n this.separatorElement.style.marginRight = \"-\" + surroundingPadding.right + \"px\";\r\n }\r\n } else {\r\n this.renderedElement.style.marginRight = \"0\";\r\n this.renderedElement.style.marginLeft = \"0\";\r\n this.renderedElement.style.marginTop = \"0\";\r\n this.renderedElement.style.marginBottom = \"0\";\r\n\r\n if (\r\n this.separatorElement &&\r\n this.separatorOrientation === Enums.Orientation.Horizontal\r\n ) {\r\n this.separatorElement.style.marginRight = \"0\";\r\n this.separatorElement.style.marginLeft = \"0\";\r\n }\r\n }\r\n }\r\n\r\n protected getHasBackground(ignoreBackgroundImages: boolean = false): boolean {\r\n let currentElement: CardElement | undefined = this.parent;\r\n\r\n while (currentElement) {\r\n let currentElementHasBackgroundImage: boolean = false;\r\n\r\n if (ignoreBackgroundImages) {\r\n currentElementHasBackgroundImage = false;\r\n } else {\r\n currentElementHasBackgroundImage =\r\n currentElement instanceof Container\r\n ? currentElement.backgroundImage.isValid()\r\n : false;\r\n }\r\n\r\n if (currentElement instanceof StylableCardElementContainer) {\r\n if (\r\n this.hasExplicitStyle &&\r\n (currentElement.getEffectiveStyle() !== this.getEffectiveStyle() ||\r\n currentElementHasBackgroundImage)\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n currentElement = currentElement.parent;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n protected getDefaultPadding(): PaddingDefinition {\r\n return this.getHasBackground() || this.getHasBorder()\r\n ? new PaddingDefinition(\r\n Enums.Spacing.Padding,\r\n Enums.Spacing.Padding,\r\n Enums.Spacing.Padding,\r\n Enums.Spacing.Padding\r\n )\r\n : super.getDefaultPadding();\r\n }\r\n\r\n internalValidateProperties(context: ValidationResults) {\r\n super.internalValidateProperties(context);\r\n\r\n const explicitStyle = this.getValue(StylableCardElementContainer.styleProperty);\r\n\r\n if (explicitStyle !== undefined) {\r\n const styleDefinition = this.hostConfig.containerStyles.getStyleByName(explicitStyle);\r\n\r\n if (!styleDefinition) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.InvalidPropertyValue,\r\n Strings.errors.invalidPropertyValue(explicitStyle, \"style\")\r\n );\r\n }\r\n }\r\n }\r\n\r\n render(): HTMLElement | undefined {\r\n const renderedElement = super.render();\r\n\r\n if (renderedElement && this.getHasBackground()) {\r\n this.applyBackground();\r\n }\r\n\r\n this.applyBorder();\r\n\r\n return renderedElement;\r\n }\r\n\r\n getEffectiveStyle(): string {\r\n const effectiveStyle = this.style;\r\n\r\n return effectiveStyle ? effectiveStyle : super.getEffectiveStyle();\r\n }\r\n}\r\n\r\nexport abstract class ContainerBase extends StylableCardElementContainer {\r\n //#region Schema\r\n\r\n static readonly bleedProperty = new BoolProperty(Versions.v1_2, \"bleed\", false);\r\n static readonly minHeightProperty = new PixelSizeProperty(Versions.v1_2, \"minHeight\");\r\n\r\n @property(ContainerBase.bleedProperty)\r\n private _bleed: boolean = false;\r\n\r\n @property(ContainerBase.minHeightProperty)\r\n minPixelHeight?: number;\r\n\r\n //#endregion\r\n\r\n protected adjustRenderedElementSize(renderedElement: HTMLElement) {\r\n super.adjustRenderedElementSize(renderedElement);\r\n\r\n if (this.minPixelHeight) {\r\n renderedElement.style.minHeight = this.minPixelHeight + \"px\";\r\n }\r\n }\r\n\r\n protected getHasExpandedAction(): boolean {\r\n return false;\r\n }\r\n\r\n protected getBleed(): boolean {\r\n return this._bleed;\r\n }\r\n\r\n protected setBleed(value: boolean) {\r\n this._bleed = value;\r\n }\r\n\r\n protected get renderedActionCount(): number {\r\n return 0;\r\n }\r\n\r\n isBleeding(): boolean {\r\n return (this.getHasBackground() || this.hostConfig.alwaysAllowBleed) && this.getBleed();\r\n }\r\n}\r\n\r\nexport class BackgroundImage extends SerializableObject {\r\n //#region Schema\r\n\r\n static readonly urlProperty = new StringProperty(Versions.v1_0, \"url\");\r\n static readonly fillModeProperty = new EnumProperty(\r\n Versions.v1_2,\r\n \"fillMode\",\r\n Enums.FillMode,\r\n Enums.FillMode.Cover\r\n );\r\n static readonly horizontalAlignmentProperty = new EnumProperty(\r\n Versions.v1_2,\r\n \"horizontalAlignment\",\r\n Enums.HorizontalAlignment,\r\n Enums.HorizontalAlignment.Left\r\n );\r\n static readonly verticalAlignmentProperty = new EnumProperty(\r\n Versions.v1_2,\r\n \"verticalAlignment\",\r\n Enums.VerticalAlignment,\r\n Enums.VerticalAlignment.Top\r\n );\r\n\r\n @property(BackgroundImage.urlProperty)\r\n url?: string;\r\n\r\n @property(BackgroundImage.fillModeProperty)\r\n fillMode: Enums.FillMode;\r\n\r\n @property(BackgroundImage.horizontalAlignmentProperty)\r\n horizontalAlignment: Enums.HorizontalAlignment;\r\n\r\n @property(BackgroundImage.verticalAlignmentProperty)\r\n verticalAlignment: Enums.VerticalAlignment;\r\n\r\n //#endregion\r\n\r\n protected getSchemaKey(): string {\r\n return \"BackgroundImage\";\r\n }\r\n\r\n protected internalParse(source: any, context: BaseSerializationContext) {\r\n if (typeof source === \"string\") {\r\n this.resetDefaultValues();\r\n this.url = source;\r\n } else {\r\n return super.internalParse(source, context);\r\n }\r\n }\r\n\r\n apply(element: CardElement) {\r\n if (this.url && element.renderedElement) {\r\n element.renderedElement.style.backgroundImage =\r\n \"url('\" +\r\n element.preProcessPropertyValue(BackgroundImage.urlProperty, this.url) +\r\n \"')\";\r\n\r\n switch (this.fillMode) {\r\n case Enums.FillMode.Repeat:\r\n element.renderedElement.style.backgroundRepeat = \"repeat\";\r\n break;\r\n case Enums.FillMode.RepeatHorizontally:\r\n element.renderedElement.style.backgroundRepeat = \"repeat-x\";\r\n break;\r\n case Enums.FillMode.RepeatVertically:\r\n element.renderedElement.style.backgroundRepeat = \"repeat-y\";\r\n break;\r\n case Enums.FillMode.Cover:\r\n default:\r\n element.renderedElement.style.backgroundRepeat = \"no-repeat\";\r\n element.renderedElement.style.backgroundSize = \"cover\";\r\n break;\r\n }\r\n\r\n switch (this.horizontalAlignment) {\r\n case Enums.HorizontalAlignment.Left:\r\n break;\r\n case Enums.HorizontalAlignment.Center:\r\n element.renderedElement.style.backgroundPositionX = \"center\";\r\n break;\r\n case Enums.HorizontalAlignment.Right:\r\n element.renderedElement.style.backgroundPositionX = \"right\";\r\n break;\r\n }\r\n\r\n switch (this.verticalAlignment) {\r\n case Enums.VerticalAlignment.Top:\r\n break;\r\n case Enums.VerticalAlignment.Center:\r\n element.renderedElement.style.backgroundPositionY = \"center\";\r\n break;\r\n case Enums.VerticalAlignment.Bottom:\r\n element.renderedElement.style.backgroundPositionY = \"bottom\";\r\n break;\r\n }\r\n }\r\n }\r\n\r\n isValid(): boolean {\r\n return this.url ? true : false;\r\n }\r\n}\r\n\r\nexport class Container extends ContainerBase {\r\n //#region Schema\r\n static readonly backgroundImageProperty = new SerializableObjectProperty(\r\n Versions.v1_0,\r\n \"backgroundImage\",\r\n BackgroundImage\r\n );\r\n static readonly verticalContentAlignmentProperty = new EnumProperty(\r\n Versions.v1_1,\r\n \"verticalContentAlignment\",\r\n Enums.VerticalAlignment\r\n );\r\n static readonly rtlProperty = new BoolProperty(Versions.v1_0, \"rtl\");\r\n\r\n @property(Container.backgroundImageProperty)\r\n get backgroundImage(): BackgroundImage {\r\n return this.getValue(Container.backgroundImageProperty);\r\n }\r\n\r\n @property(Container.verticalContentAlignmentProperty)\r\n verticalContentAlignment?: Enums.VerticalAlignment;\r\n\r\n @property(Container.rtlProperty)\r\n rtl?: boolean;\r\n\r\n //#endregion\r\n\r\n private _items: CardElement[] = [];\r\n private _renderedItems: CardElement[] = [];\r\n\r\n protected insertItemAt(item: CardElement, index: number, forceInsert: boolean) {\r\n if (!item.parent || forceInsert) {\r\n if (item.isStandalone) {\r\n if (index < 0 || index >= this._items.length) {\r\n this._items.push(item);\r\n } else {\r\n this._items.splice(index, 0, item);\r\n }\r\n\r\n item.setParent(this);\r\n } else {\r\n throw new Error(Strings.errors.elementTypeNotStandalone(item.getJsonTypeName()));\r\n }\r\n } else {\r\n throw new Error(Strings.errors.elementAlreadyParented());\r\n }\r\n }\r\n\r\n protected getItemsCollectionPropertyName(): string {\r\n return \"items\";\r\n }\r\n\r\n protected applyBackground() {\r\n if (this.backgroundImage.isValid() && this.renderedElement) {\r\n this.backgroundImage.apply(this);\r\n }\r\n\r\n super.applyBackground();\r\n }\r\n\r\n protected applyRTL(element: HTMLElement) {\r\n if (this.rtl !== undefined) {\r\n element.dir = this.rtl ? \"rtl\" : \"ltr\";\r\n }\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n this._renderedItems = [];\r\n\r\n // Cache hostConfig to avoid walking the parent hierarchy several times\r\n const hostConfig = this.hostConfig;\r\n\r\n const element = document.createElement(\"div\");\r\n\r\n this.applyRTL(element);\r\n\r\n element.classList.add(hostConfig.makeCssClassName(\"ac-container\"));\r\n element.style.display = \"flex\";\r\n element.style.flexDirection = \"column\";\r\n\r\n if (GlobalSettings.useAdvancedCardBottomTruncation) {\r\n // Forces the container to be at least as tall as its content.\r\n //\r\n // Fixes a quirk in Chrome where, for nested flex elements, the\r\n // inner element's height would never exceed the outer element's\r\n // height. This caused overflow truncation to break -- containers\r\n // would always be measured as not overflowing, since their heights\r\n // were constrained by their parents as opposed to truly reflecting\r\n // the height of their content.\r\n //\r\n // See the \"Browser Rendering Notes\" section of this answer:\r\n // https://stackoverflow.com/questions/36247140/why-doesnt-flex-item-shrink-past-content-size\r\n element.style.minHeight = \"-webkit-min-content\";\r\n }\r\n\r\n switch (this.getEffectiveVerticalContentAlignment()) {\r\n case Enums.VerticalAlignment.Center:\r\n element.style.justifyContent = \"center\";\r\n break;\r\n case Enums.VerticalAlignment.Bottom:\r\n element.style.justifyContent = \"flex-end\";\r\n break;\r\n default:\r\n element.style.justifyContent = \"flex-start\";\r\n break;\r\n }\r\n\r\n if (this._items.length > 0) {\r\n for (const item of this._items) {\r\n const renderedItem = this.isElementAllowed(item) ? item.render() : undefined;\r\n\r\n if (renderedItem) {\r\n if (this._renderedItems.length > 0 && item.separatorElement) {\r\n item.separatorElement.style.flex = \"0 0 auto\";\r\n\r\n Utils.appendChild(element, item.separatorElement);\r\n }\r\n\r\n Utils.appendChild(element, renderedItem);\r\n\r\n this._renderedItems.push(item);\r\n }\r\n }\r\n } else {\r\n if (this.isDesignMode()) {\r\n const placeholderElement = this.createPlaceholderElement();\r\n placeholderElement.style.width = \"100%\";\r\n placeholderElement.style.height = \"100%\";\r\n\r\n element.appendChild(placeholderElement);\r\n }\r\n }\r\n\r\n return element;\r\n }\r\n\r\n protected truncateOverflow(maxHeight: number): boolean {\r\n if (this.renderedElement) {\r\n // Add 1 to account for rounding differences between browsers\r\n const boundary = this.renderedElement.offsetTop + maxHeight + 1;\r\n\r\n const handleElement = (cardElement: CardElement) => {\r\n const elt = cardElement.renderedElement;\r\n\r\n if (elt) {\r\n switch (Utils.getFitStatus(elt, boundary)) {\r\n case Enums.ContainerFitStatus.FullyInContainer:\r\n const sizeChanged = cardElement[\"resetOverflow\"]();\r\n // If the element's size changed after resetting content,\r\n // we have to check if it still fits fully in the card\r\n if (sizeChanged) {\r\n handleElement(cardElement);\r\n }\r\n break;\r\n case Enums.ContainerFitStatus.Overflowing:\r\n const containerMaxHeight = boundary - elt.offsetTop;\r\n cardElement[\"handleOverflow\"](containerMaxHeight);\r\n break;\r\n case Enums.ContainerFitStatus.FullyOutOfContainer:\r\n cardElement[\"handleOverflow\"](0);\r\n break;\r\n }\r\n }\r\n };\r\n\r\n for (const item of this._items) {\r\n handleElement(item);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n protected undoOverflowTruncation() {\r\n for (const item of this._items) {\r\n item[\"resetOverflow\"]();\r\n }\r\n }\r\n\r\n protected getHasBackground(ignoreBackgroundImages: boolean = false): boolean {\r\n let result = ignoreBackgroundImages ? false : this.backgroundImage.isValid();\r\n\r\n return result || super.getHasBackground(ignoreBackgroundImages);\r\n }\r\n\r\n protected canHostSingletons() {\r\n return false;\r\n }\r\n\r\n protected internalParse(source: any, context: SerializationContext) {\r\n super.internalParse(source, context);\r\n\r\n this.clear();\r\n this.setShouldFallback(false);\r\n\r\n let jsonItems = source[this.getItemsCollectionPropertyName()];\r\n\r\n if (\r\n !Array.isArray(jsonItems) &&\r\n typeof jsonItems === \"object\" &&\r\n this.canHostSingletons()\r\n ) {\r\n const typeName = Utils.parseString(jsonItems[\"type\"]);\r\n if (typeName) {\r\n const registration = context.elementRegistry.findByName(typeName);\r\n if (registration?.singletonBehavior !== ElementSingletonBehavior.NotAllowed) {\r\n const element = context.parseElement(\r\n this,\r\n jsonItems,\r\n [],\r\n !this.isDesignMode(),\r\n true\r\n );\r\n\r\n if (element) {\r\n this.insertItemAt(element, -1, true);\r\n }\r\n }\r\n }\r\n } else if (Array.isArray(jsonItems)) {\r\n for (const item of jsonItems) {\r\n const element = context.parseElement(\r\n this,\r\n item,\r\n this.forbiddenChildElements(),\r\n !this.isDesignMode()\r\n );\r\n\r\n if (element) {\r\n this.insertItemAt(element, -1, true);\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected internalToJSON(target: PropertyBag, context: SerializationContext) {\r\n super.internalToJSON(target, context);\r\n\r\n const collectionPropertyName = this.getItemsCollectionPropertyName();\r\n\r\n if (\r\n this._items.length === 1 &&\r\n this._items[0].getElementSingletonBehavior() === ElementSingletonBehavior.Only\r\n ) {\r\n // If the element is only allowed in a singleton context, parse it to an object instead of an array\r\n context.serializeValue(target, collectionPropertyName, this._items[0].toJSON(context));\r\n } else {\r\n context.serializeArray(target, collectionPropertyName, this._items);\r\n }\r\n }\r\n\r\n protected get isSelectable(): boolean {\r\n return true;\r\n }\r\n\r\n getEffectivePadding(): PaddingDefinition {\r\n if (\r\n GlobalSettings.removePaddingFromContainersWithBackgroundImage &&\r\n !this.getHasBackground(true)\r\n ) {\r\n return new PaddingDefinition();\r\n }\r\n\r\n return super.getEffectivePadding();\r\n }\r\n\r\n getEffectiveVerticalContentAlignment(): Enums.VerticalAlignment {\r\n if (this.verticalContentAlignment !== undefined) {\r\n return this.verticalContentAlignment;\r\n }\r\n\r\n const parentContainer = this.getParentContainer();\r\n\r\n return parentContainer\r\n ? parentContainer.getEffectiveVerticalContentAlignment()\r\n : Enums.VerticalAlignment.Top;\r\n }\r\n\r\n getItemCount(): number {\r\n return this._items.length;\r\n }\r\n\r\n getItemAt(index: number): CardElement {\r\n return this._items[index];\r\n }\r\n\r\n getFirstVisibleRenderedItem(): CardElement | undefined {\r\n if (this.renderedElement && this._renderedItems && this._renderedItems.length > 0) {\r\n for (const item of this._renderedItems) {\r\n if (item.isVisible) {\r\n return item;\r\n }\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n getLastVisibleRenderedItem(): CardElement | undefined {\r\n if (this.renderedElement && this._renderedItems && this._renderedItems.length > 0) {\r\n for (let i = this._renderedItems.length - 1; i >= 0; i--) {\r\n if (this._renderedItems[i].isVisible) {\r\n return this._renderedItems[i];\r\n }\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"Container\";\r\n }\r\n\r\n isFirstElement(element: CardElement): boolean {\r\n const designMode = this.isDesignMode();\r\n\r\n for (const item of this._items) {\r\n if (item.isVisible || designMode) {\r\n return item === element;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n isLastElement(element: CardElement): boolean {\r\n const designMode = this.isDesignMode();\r\n\r\n for (let i = this._items.length - 1; i >= 0; i--) {\r\n if (this._items[i].isVisible || designMode) {\r\n return this._items[i] === element;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n isRtl(): boolean {\r\n if (this.rtl !== undefined) {\r\n return this.rtl;\r\n } else {\r\n const parentContainer = this.getParentContainer();\r\n\r\n return parentContainer ? parentContainer.isRtl() : false;\r\n }\r\n }\r\n\r\n isBleedingAtTop(): boolean {\r\n const firstRenderedItem = this.getFirstVisibleRenderedItem();\r\n\r\n return (\r\n this.isBleeding() || (firstRenderedItem ? firstRenderedItem.isBleedingAtTop() : false)\r\n );\r\n }\r\n\r\n isBleedingAtBottom(): boolean {\r\n const lastRenderedItem = this.getLastVisibleRenderedItem();\r\n\r\n return (\r\n this.isBleeding() ||\r\n (lastRenderedItem\r\n ? lastRenderedItem.isBleedingAtBottom() &&\r\n lastRenderedItem.getEffectiveStyle() === this.getEffectiveStyle()\r\n : false)\r\n );\r\n }\r\n\r\n indexOf(cardElement: CardElement): number {\r\n return this._items.indexOf(cardElement);\r\n }\r\n\r\n addItem(item: CardElement) {\r\n this.insertItemAt(item, -1, false);\r\n }\r\n\r\n insertItemBefore(item: CardElement, insertBefore: CardElement) {\r\n this.insertItemAt(item, this._items.indexOf(insertBefore), false);\r\n }\r\n\r\n insertItemAfter(item: CardElement, insertAfter: CardElement) {\r\n this.insertItemAt(item, this._items.indexOf(insertAfter) + 1, false);\r\n }\r\n\r\n removeItem(item: CardElement): boolean {\r\n const itemIndex = this._items.indexOf(item);\r\n\r\n if (itemIndex >= 0) {\r\n this._items.splice(itemIndex, 1);\r\n\r\n item.setParent(undefined);\r\n\r\n this.updateLayout();\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n clear() {\r\n this._items = [];\r\n this._renderedItems = [];\r\n }\r\n\r\n getResourceInformation(): IResourceInformation[] {\r\n const result = super.getResourceInformation();\r\n\r\n if (this.backgroundImage.isValid()) {\r\n result.push({\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion -- validated by `isValid()`\r\n url: this.backgroundImage.url!,\r\n mimeType: \"image\"\r\n });\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getActionById(id: string): Action | undefined {\r\n let result: Action | undefined = super.getActionById(id);\r\n\r\n if (!result) {\r\n if (this.selectAction) {\r\n result = this.selectAction.getActionById(id);\r\n }\r\n\r\n if (!result) {\r\n for (const item of this._items) {\r\n result = item.getActionById(id);\r\n\r\n if (result) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n get padding(): PaddingDefinition | undefined {\r\n return this.getPadding();\r\n }\r\n\r\n set padding(value: PaddingDefinition | undefined) {\r\n this.setPadding(value);\r\n }\r\n\r\n get selectAction(): Action | undefined {\r\n return this._selectAction;\r\n }\r\n\r\n set selectAction(value: Action | undefined) {\r\n this._selectAction = value;\r\n }\r\n\r\n get bleed(): boolean {\r\n return this.getBleed();\r\n }\r\n\r\n set bleed(value: boolean) {\r\n this.setBleed(value);\r\n }\r\n}\r\n\r\nexport type ColumnWidth = SizeAndUnit | \"auto\" | \"stretch\";\r\n\r\nexport class Column extends Container {\r\n //#region Schema\r\n\r\n static readonly widthProperty = new CustomProperty(\r\n Versions.v1_0,\r\n \"width\",\r\n (\r\n sender: SerializableObject,\r\n prop: PropertyDefinition,\r\n source: PropertyBag,\r\n context: BaseSerializationContext\r\n ) => {\r\n let result: ColumnWidth = prop.defaultValue;\r\n const value = source[prop.name];\r\n let invalidWidth = false;\r\n\r\n if (typeof value === \"number\" && !isNaN(value)) {\r\n result = new SizeAndUnit(value, Enums.SizeUnit.Weight);\r\n } else if (value === \"auto\" || value === \"stretch\") {\r\n result = value;\r\n } else if (typeof value === \"string\") {\r\n try {\r\n result = SizeAndUnit.parse(value);\r\n\r\n if (\r\n result.unit === Enums.SizeUnit.Pixel &&\r\n prop.targetVersion.compareTo(context.targetVersion) > 0\r\n ) {\r\n invalidWidth = true;\r\n }\r\n } catch (e) {\r\n invalidWidth = true;\r\n }\r\n } else {\r\n invalidWidth = true;\r\n }\r\n\r\n if (invalidWidth) {\r\n context.logParseEvent(\r\n sender,\r\n Enums.ValidationEvent.InvalidPropertyValue,\r\n Strings.errors.invalidColumnWidth(value)\r\n );\r\n\r\n result = \"auto\";\r\n }\r\n\r\n return result;\r\n },\r\n (\r\n sender: SerializableObject,\r\n property: PropertyDefinition,\r\n target: PropertyBag,\r\n value: ColumnWidth,\r\n context: BaseSerializationContext\r\n ) => {\r\n if (value instanceof SizeAndUnit) {\r\n if (value.unit === Enums.SizeUnit.Pixel) {\r\n context.serializeValue(target, \"width\", value.physicalSize + \"px\");\r\n } else {\r\n context.serializeNumber(target, \"width\", value.physicalSize);\r\n }\r\n } else {\r\n context.serializeValue(target, \"width\", value);\r\n }\r\n },\r\n \"stretch\"\r\n );\r\n\r\n @property(Column.widthProperty)\r\n width: ColumnWidth = \"stretch\";\r\n\r\n //#endregion\r\n\r\n private _computedWeight: number = 0;\r\n\r\n protected adjustRenderedElementSize(renderedElement: HTMLElement) {\r\n const minDesignTimeColumnHeight = 20;\r\n\r\n if (this.isDesignMode()) {\r\n renderedElement.style.minWidth = \"20px\";\r\n renderedElement.style.minHeight =\r\n (!this.minPixelHeight\r\n ? minDesignTimeColumnHeight\r\n : Math.max(this.minPixelHeight, minDesignTimeColumnHeight)) + \"px\";\r\n } else {\r\n renderedElement.style.minWidth = \"0\";\r\n\r\n if (this.minPixelHeight) {\r\n renderedElement.style.minHeight = this.minPixelHeight + \"px\";\r\n }\r\n }\r\n\r\n if (this.width === \"auto\") {\r\n renderedElement.style.flex = \"0 1 auto\";\r\n } else if (this.width === \"stretch\") {\r\n renderedElement.style.flex = \"1 1 50px\";\r\n } else if (this.width instanceof SizeAndUnit) {\r\n if (this.width.unit === Enums.SizeUnit.Pixel) {\r\n renderedElement.style.flex = \"0 0 auto\";\r\n renderedElement.style.width = this.width.physicalSize + \"px\";\r\n } else {\r\n renderedElement.style.flex =\r\n \"1 1 \" +\r\n (this._computedWeight > 0 ? this._computedWeight : this.width.physicalSize) +\r\n \"%\";\r\n }\r\n }\r\n }\r\n\r\n protected shouldSerialize(_context: SerializationContext): boolean {\r\n return true;\r\n }\r\n\r\n protected get separatorOrientation(): Enums.Orientation {\r\n return Enums.Orientation.Vertical;\r\n }\r\n\r\n constructor(width: ColumnWidth = \"stretch\") {\r\n super();\r\n\r\n this.width = width;\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"Column\";\r\n }\r\n\r\n get hasVisibleSeparator(): boolean {\r\n if (this.parent && this.parent instanceof ColumnSet) {\r\n return this.separatorElement !== undefined && !this.parent.isLeftMostElement(this);\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n get isStandalone(): boolean {\r\n return false;\r\n }\r\n}\r\n\r\nexport class ColumnSet extends ContainerBase {\r\n private _columns: Column[] = [];\r\n private _renderedColumns: Column[];\r\n\r\n private createColumnInstance(source: any, context: SerializationContext): Column | undefined {\r\n return context.parseCardObject(\r\n this,\r\n source,\r\n [],\r\n !this.isDesignMode(),\r\n (typeName: string) => {\r\n return !typeName || typeName === \"Column\" ? new Column() : undefined;\r\n },\r\n (typeName: string, _errorType: Enums.TypeErrorType) => {\r\n context.logParseEvent(\r\n undefined,\r\n Enums.ValidationEvent.ElementTypeNotAllowed,\r\n Strings.errors.elementTypeNotAllowed(typeName)\r\n );\r\n }\r\n );\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n this._renderedColumns = [];\r\n\r\n if (this._columns.length > 0) {\r\n // Cache hostConfig to avoid walking the parent hierarchy several times\r\n const hostConfig = this.hostConfig;\r\n\r\n const element = document.createElement(\"div\");\r\n element.className = hostConfig.makeCssClassName(\"ac-columnSet\");\r\n element.style.display = \"flex\";\r\n\r\n if (GlobalSettings.useAdvancedCardBottomTruncation) {\r\n // See comment in Container.internalRender()\r\n element.style.minHeight = \"-webkit-min-content\";\r\n }\r\n\r\n switch (this.getEffectiveHorizontalAlignment()) {\r\n case Enums.HorizontalAlignment.Center:\r\n element.style.justifyContent = \"center\";\r\n break;\r\n case Enums.HorizontalAlignment.Right:\r\n element.style.justifyContent = \"flex-end\";\r\n break;\r\n default:\r\n element.style.justifyContent = \"flex-start\";\r\n break;\r\n }\r\n\r\n let totalWeight: number = 0;\r\n\r\n for (const column of this._columns) {\r\n if (\r\n column.width instanceof SizeAndUnit &&\r\n column.width.unit === Enums.SizeUnit.Weight\r\n ) {\r\n totalWeight += column.width.physicalSize;\r\n }\r\n }\r\n\r\n for (const column of this._columns) {\r\n if (\r\n column.width instanceof SizeAndUnit &&\r\n column.width.unit === Enums.SizeUnit.Weight &&\r\n totalWeight > 0\r\n ) {\r\n const computedWeight = (100 / totalWeight) * column.width.physicalSize;\r\n\r\n // Best way to emulate \"internal\" access I know of\r\n column[\"_computedWeight\"] = computedWeight;\r\n }\r\n\r\n const renderedColumn = column.render();\r\n\r\n if (renderedColumn) {\r\n if (this._renderedColumns.length > 0 && column.separatorElement) {\r\n column.separatorElement.style.flex = \"0 0 auto\";\r\n\r\n Utils.appendChild(element, column.separatorElement);\r\n }\r\n\r\n Utils.appendChild(element, renderedColumn);\r\n\r\n this._renderedColumns.push(column);\r\n }\r\n }\r\n\r\n return this._renderedColumns.length > 0 ? element : undefined;\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n protected truncateOverflow(maxHeight: number): boolean {\r\n for (const column of this._columns) {\r\n column[\"handleOverflow\"](maxHeight);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n protected undoOverflowTruncation() {\r\n for (const column of this._columns) {\r\n column[\"resetOverflow\"]();\r\n }\r\n }\r\n\r\n protected get isSelectable(): boolean {\r\n return true;\r\n }\r\n\r\n protected internalParse(source: any, context: SerializationContext) {\r\n super.internalParse(source, context);\r\n\r\n this._columns = [];\r\n this._renderedColumns = [];\r\n\r\n const jsonColumns = source[\"columns\"];\r\n\r\n if (Array.isArray(jsonColumns)) {\r\n for (const item of jsonColumns) {\r\n const column = this.createColumnInstance(item, context);\r\n\r\n if (column) {\r\n this._columns.push(column);\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected internalToJSON(target: PropertyBag, context: SerializationContext) {\r\n super.internalToJSON(target, context);\r\n\r\n context.serializeArray(target, \"columns\", this._columns);\r\n }\r\n\r\n isFirstElement(element: CardElement): boolean {\r\n for (const column of this._columns) {\r\n if (column.isVisible) {\r\n return column === element;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n isBleedingAtTop(): boolean {\r\n if (this.isBleeding()) {\r\n return true;\r\n }\r\n\r\n if (this._renderedColumns && this._renderedColumns.length > 0) {\r\n for (const column of this._columns) {\r\n if (column.isBleedingAtTop()) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n isBleedingAtBottom(): boolean {\r\n if (this.isBleeding()) {\r\n return true;\r\n }\r\n\r\n if (this._renderedColumns && this._renderedColumns.length > 0) {\r\n for (const column of this._columns) {\r\n if (column.isBleedingAtBottom()) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n getItemCount(): number {\r\n return this._columns.length;\r\n }\r\n\r\n getFirstVisibleRenderedItem(): CardElement | undefined {\r\n if (this.renderedElement && this._renderedColumns && this._renderedColumns.length > 0) {\r\n return this._renderedColumns[0];\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n getLastVisibleRenderedItem(): CardElement | undefined {\r\n if (this.renderedElement && this._renderedColumns && this._renderedColumns.length > 0) {\r\n return this._renderedColumns[this._renderedColumns.length - 1];\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n getColumnAt(index: number): Column {\r\n return this._columns[index];\r\n }\r\n\r\n getItemAt(index: number): CardElement {\r\n return this.getColumnAt(index);\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"ColumnSet\";\r\n }\r\n\r\n internalValidateProperties(context: ValidationResults) {\r\n super.internalValidateProperties(context);\r\n\r\n let weightedColumns: number = 0;\r\n let stretchedColumns: number = 0;\r\n\r\n for (const column of this._columns) {\r\n if (typeof column.width === \"number\") {\r\n weightedColumns++;\r\n } else if (column.width === \"stretch\") {\r\n stretchedColumns++;\r\n }\r\n }\r\n\r\n if (weightedColumns > 0 && stretchedColumns > 0) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.Hint,\r\n Strings.hints.dontUseWeightedAndStrecthedColumnsInSameSet()\r\n );\r\n }\r\n }\r\n\r\n addColumn(column: Column) {\r\n if (!column.parent) {\r\n this._columns.push(column);\r\n\r\n column.setParent(this);\r\n } else {\r\n throw new Error(Strings.errors.columnAlreadyBelongsToAnotherSet());\r\n }\r\n }\r\n\r\n removeItem(item: CardElement): boolean {\r\n if (item instanceof Column) {\r\n const itemIndex = this._columns.indexOf(item);\r\n\r\n if (itemIndex >= 0) {\r\n this._columns.splice(itemIndex, 1);\r\n\r\n item.setParent(undefined);\r\n\r\n this.updateLayout();\r\n\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n indexOf(cardElement: CardElement): number {\r\n return cardElement instanceof Column ? this._columns.indexOf(cardElement) : -1;\r\n }\r\n\r\n isLeftMostElement(element: CardElement): boolean {\r\n return this._columns.indexOf(element) === 0;\r\n }\r\n\r\n isRightMostElement(element: CardElement): boolean {\r\n return this._columns.indexOf(element) === this._columns.length - 1;\r\n }\r\n\r\n isTopElement(element: CardElement): boolean {\r\n return this._columns.indexOf(element) >= 0;\r\n }\r\n\r\n isBottomElement(element: CardElement): boolean {\r\n return this._columns.indexOf(element) >= 0;\r\n }\r\n\r\n getActionById(id: string): Action | undefined {\r\n let result: Action | undefined = undefined;\r\n\r\n for (const column of this._columns) {\r\n result = column.getActionById(id);\r\n\r\n if (result) {\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n get bleed(): boolean {\r\n return this.getBleed();\r\n }\r\n\r\n set bleed(value: boolean) {\r\n this.setBleed(value);\r\n }\r\n\r\n get padding(): PaddingDefinition | undefined {\r\n return this.getPadding();\r\n }\r\n\r\n set padding(value: PaddingDefinition | undefined) {\r\n this.setPadding(value);\r\n }\r\n\r\n get selectAction(): Action | undefined {\r\n return this._selectAction;\r\n }\r\n\r\n set selectAction(value: Action | undefined) {\r\n this._selectAction = value;\r\n }\r\n}\r\n\r\nfunction raiseImageLoadedEvent(image: Image) {\r\n const card = image.getRootElement() as AdaptiveCard;\r\n const onImageLoadedHandler =\r\n card && card.onImageLoaded ? card.onImageLoaded : AdaptiveCard.onImageLoaded;\r\n\r\n if (onImageLoadedHandler) {\r\n onImageLoadedHandler(image);\r\n }\r\n}\r\n\r\nfunction raiseAnchorClickedEvent(\r\n element: CardElement,\r\n anchor: HTMLAnchorElement,\r\n ev?: MouseEvent\r\n): boolean {\r\n const card = element.getRootElement() as AdaptiveCard;\r\n const onAnchorClickedHandler =\r\n card && card.onAnchorClicked ? card.onAnchorClicked : AdaptiveCard.onAnchorClicked;\r\n\r\n return onAnchorClickedHandler !== undefined\r\n ? onAnchorClickedHandler(element, anchor, ev)\r\n : false;\r\n}\r\n\r\nfunction raiseExecuteActionEvent(action: Action) {\r\n const card = action.parent ? (action.parent.getRootElement() as AdaptiveCard) : undefined;\r\n const onExecuteActionHandler =\r\n card && card.onExecuteAction ? card.onExecuteAction : AdaptiveCard.onExecuteAction;\r\n\r\n if (action.prepareForExecution() && onExecuteActionHandler) {\r\n onExecuteActionHandler(action);\r\n }\r\n}\r\n\r\nfunction raiseInlineCardExpandedEvent(action: ShowCardAction, isExpanded: boolean) {\r\n const card = action.parent ? (action.parent.getRootElement() as AdaptiveCard) : undefined;\r\n const onInlineCardExpandedHandler =\r\n card && card.onInlineCardExpanded\r\n ? card.onInlineCardExpanded\r\n : AdaptiveCard.onInlineCardExpanded;\r\n\r\n if (onInlineCardExpandedHandler) {\r\n onInlineCardExpandedHandler(action, isExpanded);\r\n }\r\n}\r\n\r\nfunction raiseInputValueChangedEvent(input: Input) {\r\n const card = input.getRootElement() as AdaptiveCard;\r\n const onInputValueChangedHandler =\r\n card && card.onInputValueChanged\r\n ? card.onInputValueChanged\r\n : AdaptiveCard.onInputValueChanged;\r\n\r\n if (onInputValueChangedHandler) {\r\n onInputValueChangedHandler(input);\r\n }\r\n}\r\n\r\nfunction raiseElementVisibilityChangedEvent(\r\n element: CardElement,\r\n shouldUpdateLayout: boolean = true\r\n) {\r\n const rootElement = element.getRootElement();\r\n\r\n if (shouldUpdateLayout) {\r\n rootElement.updateLayout();\r\n }\r\n\r\n const card = rootElement as AdaptiveCard;\r\n const onElementVisibilityChangedHandler =\r\n card && card.onElementVisibilityChanged\r\n ? card.onElementVisibilityChanged\r\n : AdaptiveCard.onElementVisibilityChanged;\r\n\r\n if (onElementVisibilityChangedHandler !== undefined) {\r\n onElementVisibilityChangedHandler(element);\r\n }\r\n}\r\n\r\n/**\r\n * @returns return false to continue with default context menu; return true to skip SDK default context menu\r\n */\r\nfunction raiseDisplayOverflowActionMenuEvent(\r\n action: OverflowAction,\r\n target?: HTMLElement\r\n): boolean {\r\n const card = action.parent ? (action.parent.getRootElement() as AdaptiveCard) : undefined;\r\n const onDisplayOverflowActionMenuHandler =\r\n card && card.onDisplayOverflowActionMenu\r\n ? card.onDisplayOverflowActionMenu\r\n : AdaptiveCard.onDisplayOverflowActionMenu;\r\n\r\n return onDisplayOverflowActionMenuHandler !== undefined\r\n ? onDisplayOverflowActionMenuHandler(action.getActions(), target)\r\n : false;\r\n}\r\n\r\n/**\r\n * @returns return false to continue with default action button; return true to skip SDK default action button\r\n */\r\nfunction raiseRenderOverflowActionsEvent(\r\n action: OverflowAction,\r\n isAtRootLevelActions: boolean\r\n): boolean {\r\n const card = action.parent ? (action.parent.getRootElement() as AdaptiveCard) : undefined;\r\n const onRenderOverflowActionsHandler =\r\n card && card.onRenderOverflowActions\r\n ? card.onRenderOverflowActions\r\n : AdaptiveCard.onRenderOverflowActions;\r\n\r\n return onRenderOverflowActionsHandler !== undefined\r\n ? onRenderOverflowActionsHandler(action.getActions(), isAtRootLevelActions)\r\n : false;\r\n}\r\n\r\nexport abstract class ContainerWithActions extends Container {\r\n private _actionCollection: ActionCollection;\r\n\r\n protected internalParse(source: any, context: SerializationContext) {\r\n super.internalParse(source, context);\r\n\r\n this.parseActions(source, context);\r\n }\r\n\r\n protected parseActions(source: any, context: SerializationContext) {\r\n this._actionCollection.parse(source[\"actions\"], context);\r\n }\r\n\r\n protected internalToJSON(target: PropertyBag, context: SerializationContext) {\r\n super.internalToJSON(target, context);\r\n\r\n this._actionCollection.toJSON(target, \"actions\", context);\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n const element = super.internalRender();\r\n\r\n if (element) {\r\n const renderedActions = this._actionCollection.render(\r\n this.hostConfig.actions.actionsOrientation\r\n );\r\n\r\n if (renderedActions) {\r\n Utils.appendChild(\r\n element,\r\n renderSeparation(\r\n this.hostConfig,\r\n {\r\n spacing: this.hostConfig.getEffectiveSpacing(\r\n this.hostConfig.actions.spacing\r\n )\r\n },\r\n Enums.Orientation.Horizontal\r\n )\r\n );\r\n Utils.appendChild(element, renderedActions);\r\n }\r\n\r\n if (this.renderIfEmpty) {\r\n return element;\r\n } else {\r\n return element.children.length > 0 ? element : undefined;\r\n }\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n protected getHasExpandedAction(): boolean {\r\n if (this.renderedActionCount === 0) {\r\n return false;\r\n } else if (this.renderedActionCount === 1) {\r\n return (\r\n this._actionCollection.expandedAction !== undefined &&\r\n !this.hostConfig.actions.preExpandSingleShowCardAction\r\n );\r\n } else {\r\n return this._actionCollection.expandedAction !== undefined;\r\n }\r\n }\r\n\r\n protected get renderedActionCount(): number {\r\n return this._actionCollection.renderedActionCount;\r\n }\r\n\r\n protected get renderIfEmpty(): boolean {\r\n return false;\r\n }\r\n\r\n constructor() {\r\n super();\r\n\r\n this._actionCollection = new ActionCollection(this);\r\n }\r\n\r\n releaseDOMResources() {\r\n super.releaseDOMResources();\r\n\r\n this._actionCollection.releaseDOMResources();\r\n }\r\n\r\n getActionCount(): number {\r\n return this._actionCollection.getActionCount();\r\n }\r\n\r\n getActionAt(index: number): Action | undefined {\r\n if (index >= 0 && index < this.getActionCount()) {\r\n return this._actionCollection.getActionAt(index);\r\n } else {\r\n return super.getActionAt(index);\r\n }\r\n }\r\n\r\n getActionById(id: string): Action | undefined {\r\n const result: Action | undefined = this._actionCollection.getActionById(id);\r\n\r\n return result ? result : super.getActionById(id);\r\n }\r\n\r\n internalValidateProperties(context: ValidationResults) {\r\n super.internalValidateProperties(context);\r\n\r\n if (this._actionCollection) {\r\n this._actionCollection.validateProperties(context);\r\n }\r\n }\r\n\r\n isLastElement(element: CardElement): boolean {\r\n return super.isLastElement(element) && this._actionCollection.getActionCount() === 0;\r\n }\r\n\r\n addAction(action: Action) {\r\n this._actionCollection.addAction(action);\r\n }\r\n\r\n clear() {\r\n super.clear();\r\n\r\n this._actionCollection.clear();\r\n }\r\n\r\n getAllInputs(processActions: boolean = true): Input[] {\r\n let result = super.getAllInputs(processActions);\r\n\r\n if (processActions) {\r\n result.push(...this._actionCollection.getAllInputs(processActions));\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getResourceInformation(): IResourceInformation[] {\r\n let result = super.getResourceInformation();\r\n\r\n result.push(...this._actionCollection.getResourceInformation());\r\n\r\n return result;\r\n }\r\n\r\n isBleedingAtBottom(): boolean {\r\n if (this._actionCollection.renderedActionCount === 0) {\r\n return super.isBleedingAtBottom();\r\n } else {\r\n if (this._actionCollection.getActionCount() === 1) {\r\n return (\r\n this._actionCollection.expandedAction !== undefined &&\r\n !this.hostConfig.actions.preExpandSingleShowCardAction\r\n );\r\n } else {\r\n return this._actionCollection.expandedAction !== undefined;\r\n }\r\n }\r\n }\r\n\r\n getForbiddenActionNames(): string[] {\r\n return [];\r\n }\r\n\r\n get isStandalone(): boolean {\r\n return false;\r\n }\r\n}\r\n\r\nexport interface IMarkdownProcessingResult {\r\n didProcess: boolean;\r\n outputHtml?: any;\r\n}\r\n\r\nexport class RefreshActionProperty extends PropertyDefinition {\r\n parse(\r\n sender: RefreshDefinition,\r\n source: PropertyBag,\r\n context: SerializationContext\r\n ): ExecuteAction | undefined {\r\n const action = context.parseAction(sender.parent, source[this.name], [], false);\r\n\r\n if (action !== undefined) {\r\n if (action instanceof ExecuteAction) {\r\n return action;\r\n }\r\n\r\n context.logParseEvent(\r\n sender,\r\n Enums.ValidationEvent.ActionTypeNotAllowed,\r\n Strings.errors.actionTypeNotAllowed(action.getJsonTypeName())\r\n );\r\n }\r\n\r\n context.logParseEvent(\r\n sender,\r\n Enums.ValidationEvent.PropertyCantBeNull,\r\n Strings.errors.propertyMustBeSet(\"action\")\r\n );\r\n\r\n return undefined;\r\n }\r\n\r\n toJSON(\r\n sender: SerializableObject,\r\n target: PropertyBag,\r\n value: ExecuteAction | undefined,\r\n context: SerializationContext\r\n ) {\r\n context.serializeValue(\r\n target,\r\n this.name,\r\n value ? value.toJSON(context) : undefined,\r\n undefined,\r\n true\r\n );\r\n }\r\n\r\n constructor(readonly targetVersion: Version, readonly name: string) {\r\n super(targetVersion, name, undefined);\r\n }\r\n}\r\n\r\nexport class RefreshDefinition extends SerializableObject {\r\n //#region Schema\r\n\r\n static readonly actionProperty = new RefreshActionProperty(Versions.v1_4, \"action\");\r\n static readonly userIdsProperty = new StringArrayProperty(Versions.v1_4, \"userIds\");\r\n\r\n @property(RefreshDefinition.actionProperty)\r\n get action(): ExecuteAction {\r\n return this.getValue(RefreshDefinition.actionProperty);\r\n }\r\n\r\n set action(value: ExecuteAction) {\r\n this.setValue(RefreshDefinition.actionProperty, value);\r\n\r\n if (value) {\r\n value.setParent(this.parent);\r\n }\r\n }\r\n\r\n @property(RefreshDefinition.userIdsProperty)\r\n userIds?: string[];\r\n\r\n protected getSchemaKey(): string {\r\n return \"RefreshDefinition\";\r\n }\r\n\r\n //#endregion\r\n\r\n parent: CardElement;\r\n}\r\n\r\nexport class AuthCardButton extends SerializableObject {\r\n //#region Schema\r\n\r\n static readonly typeProperty = new StringProperty(Versions.v1_4, \"type\");\r\n static readonly titleProperty = new StringProperty(Versions.v1_4, \"title\");\r\n static readonly imageProperty = new StringProperty(Versions.v1_4, \"image\");\r\n static readonly valueProperty = new StringProperty(Versions.v1_4, \"value\");\r\n\r\n protected getSchemaKey(): string {\r\n return \"AuthCardButton\";\r\n }\r\n\r\n //#endregion\r\n\r\n @property(AuthCardButton.typeProperty)\r\n type: string;\r\n\r\n @property(AuthCardButton.titleProperty)\r\n title?: string;\r\n\r\n @property(AuthCardButton.imageProperty)\r\n image?: string;\r\n\r\n @property(AuthCardButton.valueProperty)\r\n value: string;\r\n}\r\n\r\nexport class TokenExchangeResource extends SerializableObject {\r\n //#region Schema\r\n\r\n static readonly idProperty = new StringProperty(Versions.v1_4, \"id\");\r\n static readonly uriProperty = new StringProperty(Versions.v1_4, \"uri\");\r\n static readonly providerIdProperty = new StringProperty(Versions.v1_4, \"providerId\");\r\n\r\n protected getSchemaKey(): string {\r\n return \"TokenExchangeResource\";\r\n }\r\n\r\n //#endregion\r\n\r\n @property(TokenExchangeResource.idProperty)\r\n id?: string;\r\n\r\n @property(TokenExchangeResource.uriProperty)\r\n uri?: string;\r\n\r\n @property(TokenExchangeResource.providerIdProperty)\r\n providerId?: string;\r\n}\r\n\r\nexport class Authentication extends SerializableObject {\r\n //#region Schema\r\n\r\n static readonly textProperty = new StringProperty(Versions.v1_4, \"text\");\r\n static readonly connectionNameProperty = new StringProperty(Versions.v1_4, \"connectionName\");\r\n static readonly buttonsProperty = new SerializableObjectCollectionProperty(\r\n Versions.v1_4,\r\n \"buttons\",\r\n AuthCardButton\r\n );\r\n static readonly tokenExchangeResourceProperty = new SerializableObjectProperty(\r\n Versions.v1_4,\r\n \"tokenExchangeResource\",\r\n TokenExchangeResource,\r\n true\r\n );\r\n\r\n protected getSchemaKey(): string {\r\n return \"Authentication\";\r\n }\r\n\r\n //#endregion\r\n\r\n @property(Authentication.textProperty)\r\n text?: string;\r\n\r\n @property(Authentication.connectionNameProperty)\r\n connectionName?: string;\r\n\r\n @property(Authentication.buttonsProperty)\r\n buttons: AuthCardButton[];\r\n\r\n @property(Authentication.tokenExchangeResourceProperty)\r\n tokenExchangeResource?: TokenExchangeResource;\r\n}\r\n\r\n// @dynamic\r\nexport class AdaptiveCard extends ContainerWithActions {\r\n static readonly schemaUrl = \"http://adaptivecards.io/schemas/adaptive-card.json\";\r\n\r\n //#region Schema\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected static readonly $schemaProperty = new CustomProperty(\r\n Versions.v1_0,\r\n \"$schema\",\r\n (\r\n sender: SerializableObject,\r\n property: PropertyDefinition,\r\n source: PropertyBag,\r\n context: BaseSerializationContext\r\n ) => {\r\n return AdaptiveCard.schemaUrl;\r\n },\r\n (\r\n sender: SerializableObject,\r\n prop: PropertyDefinition,\r\n target: PropertyBag,\r\n value: Versions | undefined,\r\n context: BaseSerializationContext\r\n ) => {\r\n context.serializeValue(target, prop.name, AdaptiveCard.schemaUrl);\r\n }\r\n );\r\n\r\n static readonly versionProperty = new CustomProperty(\r\n Versions.v1_0,\r\n \"version\",\r\n (\r\n sender: SerializableObject,\r\n prop: PropertyDefinition,\r\n source: PropertyBag,\r\n context: BaseSerializationContext\r\n ) => {\r\n let version = Version.parse(source[prop.name], context);\r\n\r\n if (version === undefined) {\r\n version = Versions.latest;\r\n\r\n context.logParseEvent(\r\n sender,\r\n Enums.ValidationEvent.InvalidPropertyValue,\r\n Strings.errors.invalidCardVersion(version.toString())\r\n );\r\n }\r\n\r\n return version;\r\n },\r\n (\r\n sender: SerializableObject,\r\n prop: PropertyDefinition,\r\n target: PropertyBag,\r\n value: Version | undefined,\r\n context: BaseSerializationContext\r\n ) => {\r\n if (value !== undefined) {\r\n context.serializeValue(target, prop.name, value.toString());\r\n }\r\n },\r\n Versions.v1_0\r\n );\r\n\r\n static readonly fallbackTextProperty = new StringProperty(Versions.v1_0, \"fallbackText\");\r\n static readonly speakProperty = new StringProperty(Versions.v1_0, \"speak\");\r\n static readonly refreshProperty = new SerializableObjectProperty(\r\n Versions.v1_4,\r\n \"refresh\",\r\n RefreshDefinition,\r\n true\r\n );\r\n static readonly authenticationProperty = new SerializableObjectProperty(\r\n Versions.v1_4,\r\n \"authentication\",\r\n Authentication,\r\n true\r\n );\r\n\r\n @property(AdaptiveCard.versionProperty)\r\n version: Version;\r\n\r\n @property(AdaptiveCard.fallbackTextProperty)\r\n fallbackText?: string;\r\n\r\n @property(AdaptiveCard.speakProperty)\r\n speak?: string;\r\n\r\n @property(AdaptiveCard.refreshProperty)\r\n get refresh(): RefreshDefinition | undefined {\r\n return this.getValue(AdaptiveCard.refreshProperty);\r\n }\r\n\r\n set refresh(value: RefreshDefinition | undefined) {\r\n this.setValue(AdaptiveCard.refreshProperty, value);\r\n\r\n if (value) {\r\n value.parent = this;\r\n }\r\n }\r\n\r\n @property(AdaptiveCard.authenticationProperty)\r\n authentication?: Authentication;\r\n\r\n //#endregion\r\n\r\n private static _haveWarnedAboutNoMarkdownProcessing = false;\r\n\r\n static onAnchorClicked?: (\r\n element: CardElement,\r\n anchor: HTMLAnchorElement,\r\n ev?: MouseEvent\r\n ) => boolean;\r\n static onExecuteAction?: (action: Action) => void;\r\n static onElementVisibilityChanged?: (element: CardElement) => void;\r\n static onImageLoaded?: (image: Image) => void;\r\n static onInlineCardExpanded?: (action: ShowCardAction, isExpanded: boolean) => void;\r\n static onInputValueChanged?: (input: Input) => void;\r\n static onProcessMarkdown?: (text: string, result: IMarkdownProcessingResult) => void;\r\n static onDisplayOverflowActionMenu?: (\r\n actions: readonly Action[],\r\n target?: HTMLElement\r\n ) => boolean;\r\n static onRenderOverflowActions?: (\r\n actions: readonly Action[],\r\n isRootLevelActions: boolean\r\n ) => boolean;\r\n\r\n static get processMarkdown(): (text: string) => string {\r\n throw new Error(Strings.errors.processMarkdownEventRemoved());\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n static set processMarkdown(_value: (text: string) => string) {\r\n throw new Error(Strings.errors.processMarkdownEventRemoved());\r\n }\r\n\r\n static applyMarkdown(text: string): IMarkdownProcessingResult {\r\n const result: IMarkdownProcessingResult = {\r\n didProcess: false\r\n };\r\n\r\n if (AdaptiveCard.onProcessMarkdown) {\r\n AdaptiveCard.onProcessMarkdown(text, result);\r\n } else if ((window).markdownit) {\r\n // Check for markdownit\r\n const markdownIt: any = (window).markdownit;\r\n result.outputHtml = markdownIt().render(text);\r\n result.didProcess = true;\r\n } else if (!AdaptiveCard._haveWarnedAboutNoMarkdownProcessing) {\r\n // eslint-disable-next-line no-console\r\n console.warn(Strings.errors.markdownProcessingNotEnabled);\r\n AdaptiveCard._haveWarnedAboutNoMarkdownProcessing = true;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private _fallbackCard?: AdaptiveCard;\r\n\r\n private isVersionSupported(): boolean {\r\n if (this.bypassVersionCheck) {\r\n return true;\r\n } else {\r\n const unsupportedVersion: boolean =\r\n !this.version ||\r\n !this.version.isValid ||\r\n this.maxVersion.major < this.version.major ||\r\n (this.maxVersion.major === this.version.major &&\r\n this.maxVersion.minor < this.version.minor);\r\n\r\n return !unsupportedVersion;\r\n }\r\n }\r\n\r\n protected getDefaultSerializationContext(): BaseSerializationContext {\r\n return new SerializationContext(this.version);\r\n }\r\n\r\n protected getItemsCollectionPropertyName(): string {\r\n return \"body\";\r\n }\r\n\r\n protected canHostSingletons() {\r\n return true;\r\n }\r\n\r\n protected internalParse(source: any, context: SerializationContext) {\r\n this._fallbackCard = undefined;\r\n\r\n const fallbackElement = context.parseElement(\r\n undefined,\r\n source[\"fallback\"],\r\n this.forbiddenChildElements(),\r\n !this.isDesignMode()\r\n );\r\n\r\n if (fallbackElement) {\r\n this._fallbackCard = new AdaptiveCard();\r\n this._fallbackCard.addItem(fallbackElement);\r\n }\r\n\r\n super.internalParse(source, context);\r\n }\r\n\r\n protected internalToJSON(target: PropertyBag, context: SerializationContext) {\r\n this.setValue(AdaptiveCard.versionProperty, context.targetVersion);\r\n\r\n super.internalToJSON(target, context);\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n const renderedElement = super.internalRender();\r\n\r\n if (GlobalSettings.useAdvancedCardBottomTruncation && renderedElement) {\r\n // Unlike containers, the root card element should be allowed to\r\n // be shorter than its content (otherwise the overflow truncation\r\n // logic would never get triggered)\r\n renderedElement.style.removeProperty(\"minHeight\");\r\n }\r\n\r\n return renderedElement;\r\n }\r\n\r\n protected getHasBackground(ignoreBackgroundImages: boolean = false): boolean {\r\n return true;\r\n }\r\n\r\n protected getDefaultPadding(): PaddingDefinition {\r\n return new PaddingDefinition(\r\n Enums.Spacing.Padding,\r\n Enums.Spacing.Padding,\r\n Enums.Spacing.Padding,\r\n Enums.Spacing.Padding\r\n );\r\n }\r\n\r\n protected shouldSerialize(_context: SerializationContext): boolean {\r\n return true;\r\n }\r\n\r\n protected get renderIfEmpty(): boolean {\r\n return true;\r\n }\r\n\r\n protected get bypassVersionCheck(): boolean {\r\n return false;\r\n }\r\n\r\n protected get allowCustomStyle() {\r\n return this.hostConfig.adaptiveCard && this.hostConfig.adaptiveCard.allowCustomStyle;\r\n }\r\n\r\n protected get hasBackground(): boolean {\r\n return true;\r\n }\r\n\r\n onAnchorClicked?: (element: CardElement, anchor: HTMLAnchorElement, ev?: MouseEvent) => boolean;\r\n onExecuteAction?: (action: Action) => void;\r\n onElementVisibilityChanged?: (element: CardElement) => void;\r\n onImageLoaded?: (image: Image) => void;\r\n onInlineCardExpanded?: (action: ShowCardAction, isExpanded: boolean) => void;\r\n onInputValueChanged?: (input: Input) => void;\r\n onDisplayOverflowActionMenu?: (actions: readonly Action[], target?: HTMLElement) => boolean;\r\n onRenderOverflowActions?: (actions: readonly Action[], isRootLevelActions: boolean) => boolean;\r\n\r\n designMode: boolean = false;\r\n\r\n getJsonTypeName(): string {\r\n return \"AdaptiveCard\";\r\n }\r\n\r\n internalValidateProperties(context: ValidationResults) {\r\n super.internalValidateProperties(context);\r\n\r\n if (this.getValue(CardElement.typeNameProperty) !== \"AdaptiveCard\") {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.MissingCardType,\r\n Strings.errors.invalidCardType()\r\n );\r\n }\r\n\r\n if (!this.bypassVersionCheck && !this.version) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.PropertyCantBeNull,\r\n Strings.errors.propertyMustBeSet(\"version\")\r\n );\r\n } else if (!this.isVersionSupported()) {\r\n context.addFailure(\r\n this,\r\n Enums.ValidationEvent.UnsupportedCardVersion,\r\n Strings.errors.unsupportedCardVersion(\r\n this.version.toString(),\r\n this.maxVersion.toString()\r\n )\r\n );\r\n }\r\n }\r\n\r\n render(target?: HTMLElement): HTMLElement | undefined {\r\n let renderedCard: HTMLElement | undefined;\r\n\r\n if (this.shouldFallback() && this._fallbackCard) {\r\n this._fallbackCard.hostConfig = this.hostConfig;\r\n\r\n renderedCard = this._fallbackCard.render();\r\n } else {\r\n renderedCard = super.render();\r\n\r\n if (renderedCard) {\r\n renderedCard.classList.add(this.hostConfig.makeCssClassName(\"ac-adaptiveCard\"));\r\n\r\n // Having a tabIndex on the root container for a card can mess up accessibility in some scenarios.\r\n // However, we've shipped this behavior before, and so can't just turn it off in a point release. For\r\n // now, to unblock accessibility scenarios for our customers, we've got an option to turn it off. In a\r\n // future release, we should strongly consider flipping the default such that we *don't* emit a tabIndex\r\n // by default.\r\n if (GlobalSettings.setTabIndexAtCardRoot) {\r\n renderedCard.tabIndex = 0;\r\n }\r\n\r\n if (this.speak) {\r\n renderedCard.setAttribute(\"aria-label\", this.speak);\r\n }\r\n }\r\n }\r\n\r\n if (target) {\r\n Utils.appendChild(target, renderedCard);\r\n\r\n this.updateLayout();\r\n }\r\n\r\n return renderedCard;\r\n }\r\n\r\n updateLayout(processChildren: boolean = true) {\r\n super.updateLayout(processChildren);\r\n\r\n if (GlobalSettings.useAdvancedCardBottomTruncation && this.isDisplayed()) {\r\n const padding = this.hostConfig.getEffectiveSpacing(Enums.Spacing.Default);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\r\n this[\"handleOverflow\"](this.renderedElement!.offsetHeight - padding);\r\n }\r\n }\r\n\r\n shouldFallback(): boolean {\r\n return super.shouldFallback() || !this.isVersionSupported();\r\n }\r\n\r\n get hasVisibleSeparator(): boolean {\r\n return false;\r\n }\r\n}\r\n\r\nclass InlineAdaptiveCard extends AdaptiveCard {\r\n //#region Schema\r\n\r\n protected getSchemaKey(): string {\r\n return \"InlineAdaptiveCard\";\r\n }\r\n\r\n protected populateSchema(schema: SerializableObjectSchema) {\r\n super.populateSchema(schema);\r\n\r\n schema.remove(AdaptiveCard.$schemaProperty, AdaptiveCard.versionProperty);\r\n }\r\n\r\n //#endregion\r\n\r\n protected getDefaultPadding(): PaddingDefinition {\r\n return new PaddingDefinition(\r\n this.suppressStyle ? Enums.Spacing.None : Enums.Spacing.Padding,\r\n Enums.Spacing.Padding,\r\n this.suppressStyle ? Enums.Spacing.None : Enums.Spacing.Padding,\r\n Enums.Spacing.Padding\r\n );\r\n }\r\n\r\n protected get bypassVersionCheck(): boolean {\r\n return true;\r\n }\r\n\r\n protected get defaultStyle(): string {\r\n if (this.suppressStyle) {\r\n return Enums.ContainerStyle.Default;\r\n } else {\r\n return this.hostConfig.actions.showCard.style\r\n ? this.hostConfig.actions.showCard.style\r\n : Enums.ContainerStyle.Emphasis;\r\n }\r\n }\r\n\r\n suppressStyle: boolean = false;\r\n\r\n render(target?: HTMLElement): HTMLElement | undefined {\r\n const renderedCard = super.render(target);\r\n\r\n if (renderedCard) {\r\n renderedCard.setAttribute(\"aria-live\", \"polite\");\r\n renderedCard.removeAttribute(\"tabindex\");\r\n }\r\n\r\n return renderedCard;\r\n }\r\n}\r\n\r\nexport class SerializationContext extends BaseSerializationContext {\r\n private _elementRegistry?: CardObjectRegistry;\r\n private _actionRegistry?: CardObjectRegistry;\r\n\r\n private _forbiddenTypes: Set = new Set();\r\n private internalParseCardObject(\r\n parent: CardElement | undefined,\r\n source: any,\r\n forbiddenTypes: Set,\r\n allowFallback: boolean,\r\n createInstanceCallback: (typeName: string | undefined) => T | undefined,\r\n logParseEvent: (typeName: string | undefined, errorType: Enums.TypeErrorType) => void,\r\n parsingSingletonObject: boolean = false\r\n ): T | undefined {\r\n let result: T | undefined = undefined;\r\n\r\n if (source && typeof source === \"object\") {\r\n const oldForbiddenTypes = new Set();\r\n this._forbiddenTypes.forEach((type) => {\r\n oldForbiddenTypes.add(type);\r\n });\r\n forbiddenTypes.forEach((type) => {\r\n this._forbiddenTypes.add(type);\r\n });\r\n\r\n const typeName = Utils.parseString(source[\"type\"]);\r\n\r\n const ignoreForbiddenType = parsingSingletonObject && typeName === \"Carousel\";\r\n\r\n if (typeName && this._forbiddenTypes.has(typeName) && !ignoreForbiddenType) {\r\n logParseEvent(typeName, Enums.TypeErrorType.ForbiddenType);\r\n } else {\r\n let tryToFallback = false;\r\n\r\n result = createInstanceCallback(typeName);\r\n\r\n if (!result) {\r\n tryToFallback = GlobalSettings.enableFallback && allowFallback;\r\n\r\n logParseEvent(typeName, Enums.TypeErrorType.UnknownType);\r\n } else {\r\n result.setParent(parent);\r\n result.parse(source, this);\r\n\r\n tryToFallback =\r\n GlobalSettings.enableFallback && allowFallback && result.shouldFallback();\r\n }\r\n\r\n if (tryToFallback) {\r\n const fallback = source[\"fallback\"];\r\n\r\n if (!fallback && parent) {\r\n parent.setShouldFallback(true);\r\n }\r\n if (typeof fallback === \"string\" && fallback.toLowerCase() === \"drop\") {\r\n result = undefined;\r\n } else if (typeof fallback === \"object\") {\r\n result = this.internalParseCardObject(\r\n parent,\r\n fallback,\r\n forbiddenTypes,\r\n true,\r\n createInstanceCallback,\r\n logParseEvent\r\n );\r\n }\r\n }\r\n }\r\n\r\n this._forbiddenTypes = oldForbiddenTypes;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n protected cardObjectParsed(o: SerializableObject, source: any) {\r\n if (o instanceof Action && this.onParseAction) {\r\n this.onParseAction(o, source, this);\r\n } else if (o instanceof CardElement && this.onParseElement) {\r\n this.onParseElement(o, source, this);\r\n }\r\n }\r\n\r\n onParseAction?: (action: Action, source: any, context: SerializationContext) => void;\r\n onParseElement?: (element: CardElement, source: any, context: SerializationContext) => void;\r\n\r\n shouldSerialize(o: SerializableObject): boolean {\r\n if (o instanceof Action) {\r\n return this.actionRegistry.findByName(o.getJsonTypeName()) !== undefined;\r\n } else if (o instanceof CardElement) {\r\n return this.elementRegistry.findByName(o.getJsonTypeName()) !== undefined;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n parseCardObject(\r\n parent: CardElement | undefined,\r\n source: any,\r\n forbiddenTypeNames: string[],\r\n allowFallback: boolean,\r\n createInstanceCallback: (typeName: string) => T | undefined,\r\n logParseEvent: (typeName: string, errorType: Enums.TypeErrorType) => void,\r\n parsingSingletonObject: boolean = false\r\n ): T | undefined {\r\n const forbiddenTypes = new Set(forbiddenTypeNames);\r\n const result = this.internalParseCardObject(\r\n parent,\r\n source,\r\n forbiddenTypes,\r\n allowFallback,\r\n createInstanceCallback,\r\n logParseEvent,\r\n parsingSingletonObject\r\n );\r\n\r\n if (result !== undefined) {\r\n this.cardObjectParsed(result, source);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n parseElement(\r\n parent: CardElement | undefined,\r\n source: any,\r\n forbiddenTypes: string[],\r\n allowFallback: boolean,\r\n _parsingSingletonObject: boolean = false\r\n ): CardElement | undefined {\r\n return this.parseCardObject(\r\n parent,\r\n source,\r\n forbiddenTypes,\r\n allowFallback,\r\n (typeName: string) => {\r\n return this.elementRegistry.createInstance(typeName, this.targetVersion);\r\n },\r\n (typeName: string, errorType: Enums.TypeErrorType) => {\r\n if (errorType === Enums.TypeErrorType.UnknownType) {\r\n this.logParseEvent(\r\n undefined,\r\n Enums.ValidationEvent.UnknownElementType,\r\n Strings.errors.unknownElementType(typeName)\r\n );\r\n } else {\r\n this.logParseEvent(\r\n undefined,\r\n Enums.ValidationEvent.ElementTypeNotAllowed,\r\n Strings.errors.elementTypeNotAllowed(typeName)\r\n );\r\n }\r\n },\r\n _parsingSingletonObject\r\n );\r\n }\r\n\r\n parseAction(\r\n parent: CardElement,\r\n source: any,\r\n forbiddenActionTypes: string[],\r\n allowFallback: boolean\r\n ): Action | undefined {\r\n return this.parseCardObject(\r\n parent,\r\n source,\r\n forbiddenActionTypes,\r\n allowFallback,\r\n (typeName: string) => {\r\n return this.actionRegistry.createInstance(typeName, this.targetVersion);\r\n },\r\n (typeName: string, errorType: Enums.TypeErrorType) => {\r\n if (errorType === Enums.TypeErrorType.UnknownType) {\r\n this.logParseEvent(\r\n undefined,\r\n Enums.ValidationEvent.UnknownActionType,\r\n Strings.errors.unknownActionType(typeName)\r\n );\r\n } else {\r\n this.logParseEvent(\r\n undefined,\r\n Enums.ValidationEvent.ActionTypeNotAllowed,\r\n Strings.errors.actionTypeNotAllowed(typeName)\r\n );\r\n }\r\n }\r\n );\r\n }\r\n\r\n get elementRegistry(): CardObjectRegistry {\r\n return this._elementRegistry ?? GlobalRegistry.elements;\r\n }\r\n\r\n // Not using a property setter here because the setter should accept \"undefined\"\r\n // whereas the getter should never return undefined.\r\n setElementRegistry(value: CardObjectRegistry | undefined) {\r\n this._elementRegistry = value;\r\n }\r\n\r\n get actionRegistry(): CardObjectRegistry {\r\n return this._actionRegistry ?? GlobalRegistry.actions;\r\n }\r\n\r\n // Not using a property setter here because the setter should accept \"undefined\"\r\n // whereas the getter should never return undefined.\r\n setActionRegistry(value: CardObjectRegistry | undefined) {\r\n this._actionRegistry = value;\r\n }\r\n}\r\n\r\nGlobalRegistry.defaultElements.register(\"Container\", Container);\r\nGlobalRegistry.defaultElements.register(\"TextBlock\", TextBlock);\r\nGlobalRegistry.defaultElements.register(\"RichTextBlock\", RichTextBlock, Versions.v1_2);\r\nGlobalRegistry.defaultElements.register(\"TextRun\", TextRun, Versions.v1_2);\r\nGlobalRegistry.defaultElements.register(\"Image\", Image);\r\nGlobalRegistry.defaultElements.register(\"ImageSet\", ImageSet);\r\nGlobalRegistry.defaultElements.register(\"Media\", Media, Versions.v1_1);\r\nGlobalRegistry.defaultElements.register(\"FactSet\", FactSet);\r\nGlobalRegistry.defaultElements.register(\"ColumnSet\", ColumnSet);\r\nGlobalRegistry.defaultElements.register(\"ActionSet\", ActionSet, Versions.v1_2);\r\nGlobalRegistry.defaultElements.register(\"Input.Text\", TextInput);\r\nGlobalRegistry.defaultElements.register(\"Input.Date\", DateInput);\r\nGlobalRegistry.defaultElements.register(\"Input.Time\", TimeInput);\r\nGlobalRegistry.defaultElements.register(\"Input.Number\", NumberInput);\r\nGlobalRegistry.defaultElements.register(\"Input.ChoiceSet\", ChoiceSetInput);\r\nGlobalRegistry.defaultElements.register(\"Input.Toggle\", ToggleInput);\r\n\r\nGlobalRegistry.defaultActions.register(OpenUrlAction.JsonTypeName, OpenUrlAction);\r\nGlobalRegistry.defaultActions.register(SubmitAction.JsonTypeName, SubmitAction);\r\nGlobalRegistry.defaultActions.register(ShowCardAction.JsonTypeName, ShowCardAction);\r\nGlobalRegistry.defaultActions.register(\r\n ToggleVisibilityAction.JsonTypeName,\r\n ToggleVisibilityAction,\r\n Versions.v1_2\r\n);\r\nGlobalRegistry.defaultActions.register(ExecuteAction.JsonTypeName, ExecuteAction, Versions.v1_4);\r\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport {\r\n CardElement,\r\n StylableCardElementContainer,\r\n SerializationContext,\r\n Container,\r\n ContainerStyleProperty\r\n} from \"./card-elements\";\r\nimport {\r\n HorizontalAlignment,\r\n VerticalAlignment,\r\n SizeUnit,\r\n ValidationEvent,\r\n TypeErrorType,\r\n Spacing\r\n} from \"./enums\";\r\nimport { TextStyleDefinition } from \"./host-config\";\r\nimport { GlobalRegistry } from \"./registry\";\r\nimport {\r\n BaseSerializationContext,\r\n BoolProperty,\r\n CustomProperty,\r\n EnumProperty,\r\n property,\r\n PropertyBag,\r\n PropertyDefinition,\r\n SerializableObject,\r\n SerializableObjectCollectionProperty,\r\n Versions\r\n} from \"./serialization\";\r\nimport { SizeAndUnit, PaddingDefinition } from \"./shared\";\r\nimport { Strings } from \"./strings\";\r\nimport { stringToCssColor } from \"./utils\";\r\n\r\nexport class TableColumnDefinition extends SerializableObject {\r\n //#region Schema\r\n\r\n static readonly horizontalCellContentAlignmentProperty = new EnumProperty(\r\n Versions.v1_5,\r\n \"horizontalCellContentAlignment\",\r\n HorizontalAlignment\r\n );\r\n static readonly verticalCellContentAlignmentProperty = new EnumProperty(\r\n Versions.v1_5,\r\n \"verticalCellContentAlignment\",\r\n VerticalAlignment\r\n );\r\n\r\n static readonly widthProperty = new CustomProperty(\r\n Versions.v1_5,\r\n \"width\",\r\n (\r\n sender: SerializableObject,\r\n prop: PropertyDefinition,\r\n source: PropertyBag,\r\n context: BaseSerializationContext\r\n ) => {\r\n let result: SizeAndUnit = prop.defaultValue;\r\n const value = source[prop.name];\r\n let invalidWidth = false;\r\n\r\n if (typeof value === \"number\" && !isNaN(value)) {\r\n result = new SizeAndUnit(value, SizeUnit.Weight);\r\n } else if (typeof value === \"string\") {\r\n try {\r\n result = SizeAndUnit.parse(value);\r\n } catch (e) {\r\n invalidWidth = true;\r\n }\r\n } else {\r\n invalidWidth = true;\r\n }\r\n\r\n if (invalidWidth) {\r\n context.logParseEvent(\r\n sender,\r\n ValidationEvent.InvalidPropertyValue,\r\n Strings.errors.invalidColumnWidth(value)\r\n );\r\n }\r\n\r\n return result;\r\n },\r\n (\r\n sender: SerializableObject,\r\n property: PropertyDefinition,\r\n target: PropertyBag,\r\n value: SizeAndUnit,\r\n context: BaseSerializationContext\r\n ) => {\r\n if (value.unit === SizeUnit.Pixel) {\r\n context.serializeValue(target, \"width\", value.physicalSize + \"px\");\r\n } else {\r\n context.serializeNumber(target, \"width\", value.physicalSize);\r\n }\r\n },\r\n new SizeAndUnit(1, SizeUnit.Weight)\r\n );\r\n\r\n @property(TableColumnDefinition.horizontalCellContentAlignmentProperty)\r\n horizontalCellContentAlignment?: HorizontalAlignment;\r\n\r\n @property(TableColumnDefinition.verticalCellContentAlignmentProperty)\r\n verticalCellContentAlignment?: VerticalAlignment;\r\n\r\n @property(TableColumnDefinition.widthProperty)\r\n width: SizeAndUnit = new SizeAndUnit(1, SizeUnit.Weight);\r\n\r\n getSchemaKey(): string {\r\n return \"ColumnDefinition\";\r\n }\r\n\r\n //#endregion\r\n\r\n computedWidth: SizeAndUnit;\r\n}\r\n\r\nexport abstract class StylableContainer<\r\n T extends CardElement\r\n> extends StylableCardElementContainer {\r\n private _items: T[] = [];\r\n\r\n private parseItem(source: any, context: SerializationContext): T | undefined {\r\n return context.parseCardObject(\r\n this,\r\n source,\r\n [], // Forbidden types not supported for elements for now\r\n !this.isDesignMode(),\r\n (typeName: string) => {\r\n return this.createItemInstance(typeName);\r\n },\r\n (typeName: string, _errorType: TypeErrorType) => {\r\n context.logParseEvent(\r\n undefined,\r\n ValidationEvent.ElementTypeNotAllowed,\r\n Strings.errors.elementTypeNotAllowed(typeName)\r\n );\r\n }\r\n );\r\n }\r\n\r\n protected abstract getCollectionPropertyName(): string;\r\n protected abstract createItemInstance(typeName: string): T | undefined;\r\n\r\n protected internalAddItem(item: T) {\r\n if (!item.parent) {\r\n this._items.push(item);\r\n\r\n item.setParent(this);\r\n } else {\r\n throw new Error(Strings.errors.elementAlreadyParented());\r\n }\r\n }\r\n\r\n protected internalRemoveItem(item: T): boolean {\r\n const itemIndex = this._items.indexOf(item);\r\n\r\n if (itemIndex >= 0) {\r\n this._items.splice(itemIndex, 1);\r\n\r\n item.setParent(undefined);\r\n\r\n this.updateLayout();\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n protected internalIndexOf(item: T): number {\r\n return this._items.indexOf(item);\r\n }\r\n\r\n protected internalParse(source: any, context: SerializationContext) {\r\n super.internalParse(source, context);\r\n\r\n this._items = [];\r\n\r\n const items = source[this.getCollectionPropertyName()];\r\n\r\n if (Array.isArray(items)) {\r\n for (const item of items) {\r\n const instance = this.parseItem(item, context);\r\n\r\n if (instance) {\r\n this._items.push(instance);\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected internalToJSON(target: PropertyBag, context: SerializationContext) {\r\n super.internalToJSON(target, context);\r\n\r\n context.serializeArray(target, this.getCollectionPropertyName(), this._items);\r\n }\r\n\r\n removeItem(item: T): boolean {\r\n return this.internalRemoveItem(item);\r\n }\r\n\r\n getItemCount(): number {\r\n return this._items.length;\r\n }\r\n\r\n getItemAt(index: number): T {\r\n return this._items[index];\r\n }\r\n\r\n getFirstVisibleRenderedItem(): T | undefined {\r\n return this.getItemCount() > 0 ? this.getItemAt(0) : undefined;\r\n }\r\n\r\n getLastVisibleRenderedItem(): T | undefined {\r\n return this.getItemCount() > 0 ? this.getItemAt(this.getItemCount() - 1) : undefined;\r\n }\r\n}\r\n\r\nexport type CellType = \"data\" | \"header\";\r\n\r\nexport class TableCell extends Container {\r\n private _columnIndex: number = -1;\r\n private _cellType: CellType = \"data\";\r\n\r\n protected getHasBorder(): boolean {\r\n return this.parentRow.parentTable.showGridLines;\r\n }\r\n\r\n protected applyBorder() {\r\n if (this.renderedElement && this.getHasBorder()) {\r\n const styleDefinition = this.hostConfig.containerStyles.getStyleByName(\r\n this.parentRow.parentTable.gridStyle\r\n );\r\n\r\n if (styleDefinition.borderColor) {\r\n const borderColor = stringToCssColor(styleDefinition.borderColor);\r\n\r\n if (borderColor) {\r\n this.renderedElement.style.borderRight = \"1px solid \" + borderColor;\r\n this.renderedElement.style.borderBottom = \"1px solid \" + borderColor;\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected getDefaultPadding(): PaddingDefinition {\r\n return this.getHasBackground() || this.getHasBorder()\r\n ? new PaddingDefinition(Spacing.Small, Spacing.Small, Spacing.Small, Spacing.Small)\r\n : super.getDefaultPadding();\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n const cellElement = super.internalRender();\r\n\r\n if (cellElement) {\r\n cellElement.setAttribute(\"role\", this.cellType === \"data\" ? \"cell\" : \"columnheader\");\r\n cellElement.style.minWidth = \"0\";\r\n\r\n if (this.cellType === \"header\") {\r\n cellElement.setAttribute(\"scope\", \"col\");\r\n }\r\n }\r\n\r\n return cellElement;\r\n }\r\n\r\n protected shouldSerialize(_context: SerializationContext): boolean {\r\n return true;\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"TableCell\";\r\n }\r\n\r\n getEffectiveTextStyleDefinition(): TextStyleDefinition {\r\n if (this.cellType === \"header\") {\r\n return this.hostConfig.textStyles.columnHeader;\r\n }\r\n\r\n return super.getEffectiveTextStyleDefinition();\r\n }\r\n\r\n getEffectiveHorizontalAlignment(): HorizontalAlignment {\r\n if (this.horizontalAlignment !== undefined) {\r\n return this.horizontalAlignment;\r\n }\r\n\r\n if (this.parentRow.horizontalCellContentAlignment !== undefined) {\r\n return this.parentRow.horizontalCellContentAlignment;\r\n }\r\n\r\n if (this.columnIndex >= 0) {\r\n const horizontalAlignment = this.parentRow.parentTable.getColumnAt(\r\n this.columnIndex\r\n ).horizontalCellContentAlignment;\r\n\r\n if (horizontalAlignment !== undefined) {\r\n return horizontalAlignment;\r\n }\r\n }\r\n\r\n if (this.parentRow.parentTable.horizontalCellContentAlignment !== undefined) {\r\n return this.parentRow.parentTable.horizontalCellContentAlignment;\r\n }\r\n\r\n return super.getEffectiveHorizontalAlignment();\r\n }\r\n\r\n getEffectiveVerticalContentAlignment(): VerticalAlignment {\r\n if (this.verticalContentAlignment !== undefined) {\r\n return this.verticalContentAlignment;\r\n }\r\n\r\n if (this.parentRow.verticalCellContentAlignment !== undefined) {\r\n return this.parentRow.verticalCellContentAlignment;\r\n }\r\n\r\n if (this.columnIndex >= 0) {\r\n const verticalAlignment = this.parentRow.parentTable.getColumnAt(\r\n this.columnIndex\r\n ).verticalCellContentAlignment;\r\n\r\n if (verticalAlignment !== undefined) {\r\n return verticalAlignment;\r\n }\r\n }\r\n\r\n if (this.parentRow.parentTable.verticalCellContentAlignment !== undefined) {\r\n return this.parentRow.parentTable.verticalCellContentAlignment;\r\n }\r\n\r\n return super.getEffectiveVerticalContentAlignment();\r\n }\r\n\r\n get columnIndex(): number {\r\n return this._columnIndex;\r\n }\r\n\r\n get cellType(): CellType {\r\n return this._cellType;\r\n }\r\n\r\n get parentRow(): TableRow {\r\n return this.parent as TableRow;\r\n }\r\n\r\n get isStandalone(): boolean {\r\n return false;\r\n }\r\n}\r\n\r\nexport class TableRow extends StylableContainer {\r\n //#region Schema\r\n\r\n static readonly styleProperty = new ContainerStyleProperty(Versions.v1_5, \"style\");\r\n static readonly horizontalCellContentAlignmentProperty = new EnumProperty(\r\n Versions.v1_5,\r\n \"horizontalCellContentAlignment\",\r\n HorizontalAlignment\r\n );\r\n static readonly verticalCellContentAlignmentProperty = new EnumProperty(\r\n Versions.v1_5,\r\n \"verticalCellContentAlignment\",\r\n VerticalAlignment\r\n );\r\n\r\n @property(TableRow.horizontalCellContentAlignmentProperty)\r\n horizontalCellContentAlignment?: HorizontalAlignment;\r\n\r\n @property(TableRow.verticalCellContentAlignmentProperty)\r\n verticalCellContentAlignment?: VerticalAlignment;\r\n\r\n //#endregion\r\n\r\n protected getDefaultPadding(): PaddingDefinition {\r\n return new PaddingDefinition(Spacing.None, Spacing.None, Spacing.None, Spacing.None);\r\n }\r\n\r\n protected applyBackground() {\r\n if (this.renderedElement) {\r\n const styleDefinition = this.hostConfig.containerStyles.getStyleByName(\r\n this.style,\r\n this.hostConfig.containerStyles.getStyleByName(this.defaultStyle)\r\n );\r\n\r\n if (styleDefinition.backgroundColor) {\r\n const bgColor = stringToCssColor(styleDefinition.backgroundColor);\r\n\r\n if (bgColor) {\r\n this.renderedElement.style.backgroundColor = bgColor;\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected getCollectionPropertyName(): string {\r\n return \"cells\";\r\n }\r\n\r\n protected createItemInstance(typeName: string): TableCell | undefined {\r\n return !typeName || typeName === \"TableCell\" ? new TableCell() : undefined;\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n const isFirstRow = this.getIsFirstRow();\r\n const cellSpacing = this.hostConfig.table.cellSpacing;\r\n\r\n const rowElement = document.createElement(\"div\");\r\n rowElement.setAttribute(\"role\", \"row\");\r\n rowElement.style.display = \"flex\";\r\n rowElement.style.flexDirection = \"row\";\r\n\r\n for (let i = 0; i < Math.min(this.getItemCount(), this.parentTable.getColumnCount()); i++) {\r\n const cell = this.getItemAt(i);\r\n\r\n // Cheating a bit in order to keep cellType read-only\r\n cell[\"_columnIndex\"] = i;\r\n cell[\"_cellType\"] =\r\n this.parentTable.firstRowAsHeaders && isFirstRow ? \"header\" : \"data\";\r\n\r\n const renderedCell = cell.render();\r\n\r\n if (renderedCell) {\r\n const column = this.parentTable.getColumnAt(i);\r\n\r\n if (column.computedWidth.unit === SizeUnit.Pixel) {\r\n renderedCell.style.flex = \"0 0 \" + column.computedWidth.physicalSize + \"px\";\r\n } else {\r\n renderedCell.style.flex = \"1 1 \" + column.computedWidth.physicalSize + \"%\";\r\n }\r\n\r\n if (i > 0 && !this.parentTable.showGridLines && cellSpacing > 0) {\r\n renderedCell.style.marginLeft = cellSpacing + \"px\";\r\n }\r\n\r\n rowElement.appendChild(renderedCell);\r\n }\r\n }\r\n\r\n return rowElement.children.length > 0 ? rowElement : undefined;\r\n }\r\n\r\n protected shouldSerialize(_context: SerializationContext): boolean {\r\n return true;\r\n }\r\n\r\n addCell(cell: TableCell) {\r\n this.internalAddItem(cell);\r\n }\r\n\r\n removeCellAt(columnIndex: number): boolean {\r\n if (columnIndex >= 0 && columnIndex < this.getItemCount()) {\r\n return this.removeItem(this.getItemAt(columnIndex));\r\n }\r\n\r\n return false;\r\n }\r\n\r\n indexOf(cardElement: CardElement): number {\r\n return cardElement instanceof TableCell ? this.internalIndexOf(cardElement) : -1;\r\n }\r\n\r\n ensureHasEnoughCells(cellCount: number) {\r\n while (this.getItemCount() < cellCount) {\r\n this.addCell(new TableCell());\r\n }\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"TableRow\";\r\n }\r\n\r\n getIsFirstRow(): boolean {\r\n return this.parentTable.getItemAt(0) === this;\r\n }\r\n\r\n get parentTable(): Table {\r\n return this.parent as Table;\r\n }\r\n\r\n get isStandalone(): boolean {\r\n return false;\r\n }\r\n}\r\n\r\nexport class Table extends StylableContainer {\r\n //#region Schema\r\n\r\n private static readonly _columnsProperty = new SerializableObjectCollectionProperty(\r\n Versions.v1_5,\r\n \"columns\",\r\n TableColumnDefinition\r\n );\r\n\r\n static readonly firstRowAsHeadersProperty = new BoolProperty(\r\n Versions.v1_5,\r\n \"firstRowAsHeaders\",\r\n true\r\n );\r\n static readonly showGridLinesProperty = new BoolProperty(Versions.v1_5, \"showGridLines\", true);\r\n static readonly gridStyleProperty = new ContainerStyleProperty(Versions.v1_5, \"gridStyle\");\r\n static readonly horizontalCellContentAlignmentProperty = new EnumProperty(\r\n Versions.v1_5,\r\n \"horizontalCellContentAlignment\",\r\n HorizontalAlignment\r\n );\r\n static readonly verticalCellContentAlignmentProperty = new EnumProperty(\r\n Versions.v1_5,\r\n \"verticalCellContentAlignment\",\r\n VerticalAlignment\r\n );\r\n\r\n @property(Table._columnsProperty)\r\n private _columns: TableColumnDefinition[] = [];\r\n\r\n @property(Table.firstRowAsHeadersProperty)\r\n firstRowAsHeaders: boolean = true;\r\n\r\n @property(Table.showGridLinesProperty)\r\n showGridLines: boolean = true;\r\n\r\n @property(Table.gridStyleProperty)\r\n get gridStyle(): string | undefined {\r\n const style = this.getValue(Table.gridStyleProperty);\r\n\r\n if (style && this.hostConfig.containerStyles.getStyleByName(style)) {\r\n return style;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n set gridStyle(value: string | undefined) {\r\n this.setValue(Table.gridStyleProperty, value);\r\n }\r\n\r\n @property(Table.horizontalCellContentAlignmentProperty)\r\n horizontalCellContentAlignment?: HorizontalAlignment;\r\n\r\n @property(Table.verticalCellContentAlignmentProperty)\r\n verticalCellContentAlignment?: VerticalAlignment;\r\n\r\n //#endregion\r\n\r\n private ensureRowsHaveEnoughCells() {\r\n for (let i = 0; i < this.getItemCount(); i++) {\r\n this.getItemAt(i).ensureHasEnoughCells(this.getColumnCount());\r\n }\r\n }\r\n\r\n private removeCellsFromColumn(columnIndex: number) {\r\n for (let i = 0; i < this.getItemCount(); i++) {\r\n this.getItemAt(i).removeCellAt(columnIndex);\r\n }\r\n }\r\n\r\n protected getCollectionPropertyName(): string {\r\n return \"rows\";\r\n }\r\n\r\n protected createItemInstance(typeName: string): TableRow | undefined {\r\n return !typeName || typeName === \"TableRow\" ? new TableRow() : undefined;\r\n }\r\n\r\n protected internalParse(source: PropertyBag, context: SerializationContext) {\r\n super.internalParse(source, context);\r\n\r\n this.ensureRowsHaveEnoughCells();\r\n }\r\n\r\n protected internalRender(): HTMLElement | undefined {\r\n if (this.getItemCount() > 0) {\r\n let totalWeights: number = 0;\r\n\r\n for (const column of this._columns) {\r\n if (column.width.unit === SizeUnit.Weight) {\r\n totalWeights += column.width.physicalSize;\r\n }\r\n }\r\n\r\n for (const column of this._columns) {\r\n if (column.width.unit === SizeUnit.Pixel) {\r\n column.computedWidth = new SizeAndUnit(\r\n column.width.physicalSize,\r\n SizeUnit.Pixel\r\n );\r\n } else {\r\n column.computedWidth = new SizeAndUnit(\r\n (100 / totalWeights) * column.width.physicalSize,\r\n SizeUnit.Weight\r\n );\r\n }\r\n }\r\n\r\n const tableElement = document.createElement(\"div\");\r\n tableElement.setAttribute(\"role\", \"table\");\r\n tableElement.style.display = \"flex\";\r\n tableElement.style.flexDirection = \"column\";\r\n\r\n if (this.showGridLines) {\r\n const styleDefinition = this.hostConfig.containerStyles.getStyleByName(\r\n this.gridStyle\r\n );\r\n\r\n if (styleDefinition.borderColor) {\r\n const borderColor = stringToCssColor(styleDefinition.borderColor);\r\n\r\n if (borderColor) {\r\n tableElement.style.borderTop = \"1px solid \" + borderColor;\r\n tableElement.style.borderLeft = \"1px solid \" + borderColor;\r\n }\r\n }\r\n }\r\n\r\n const cellSpacing = this.hostConfig.table.cellSpacing;\r\n\r\n for (let i = 0; i < this.getItemCount(); i++) {\r\n const renderedRow = this.getItemAt(i).render();\r\n\r\n if (renderedRow) {\r\n if (i > 0 && !this.showGridLines && cellSpacing > 0) {\r\n const separatorRow = document.createElement(\"div\");\r\n separatorRow.setAttribute(\"aria-hidden\", \"true\");\r\n separatorRow.style.height = cellSpacing + \"px\";\r\n\r\n tableElement.appendChild(separatorRow);\r\n }\r\n\r\n tableElement.appendChild(renderedRow);\r\n }\r\n }\r\n\r\n return tableElement;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n addColumn(column: TableColumnDefinition) {\r\n this._columns.push(column);\r\n\r\n this.ensureRowsHaveEnoughCells();\r\n }\r\n\r\n removeColumn(column: TableColumnDefinition) {\r\n const index = this._columns.indexOf(column);\r\n\r\n if (index >= 0) {\r\n this.removeCellsFromColumn(index);\r\n\r\n this._columns.splice(index, 1);\r\n }\r\n }\r\n\r\n getColumnCount(): number {\r\n return this._columns.length;\r\n }\r\n\r\n getColumnAt(index: number): TableColumnDefinition {\r\n return this._columns[index];\r\n }\r\n\r\n addRow(row: TableRow) {\r\n this.internalAddItem(row);\r\n\r\n row.ensureHasEnoughCells(this.getColumnCount());\r\n }\r\n\r\n indexOf(cardElement: CardElement): number {\r\n return cardElement instanceof TableRow ? this.internalIndexOf(cardElement) : -1;\r\n }\r\n\r\n getJsonTypeName(): string {\r\n return \"Table\";\r\n }\r\n}\r\n\r\nGlobalRegistry.defaultElements.register(\"Table\", Table, Versions.v1_5);\r\n", "// Copyright (C) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { ActivityResponse, IActivityRequest } from \"./activity-request\";\r\n\r\nexport abstract class ChannelAdapter {\r\n abstract sendRequestAsync(request: IActivityRequest): Promise;\r\n}\r\n", "// Copyright (C) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport {\r\n Authentication,\r\n AuthCardButton,\r\n ExecuteAction,\r\n TokenExchangeResource\r\n} from \"./card-elements\";\r\n\r\nexport enum ActivityRequestTrigger {\r\n Automatic = \"automatic\",\r\n Manual = \"manual\"\r\n}\r\n\r\nexport interface IActivityRequest {\r\n readonly action: ExecuteAction;\r\n readonly trigger: ActivityRequestTrigger;\r\n readonly attemptNumber: number;\r\n readonly consecutiveRefreshes: number;\r\n\r\n authCode?: string;\r\n authToken?: string;\r\n\r\n retryAsync(): void;\r\n}\r\n\r\nexport class ActivityRequestError {\r\n constructor(readonly code?: string, readonly message?: string) {}\r\n}\r\n\r\nexport abstract class ActivityResponse {\r\n constructor(readonly request: IActivityRequest) {}\r\n}\r\n\r\nexport class SuccessResponse extends ActivityResponse {\r\n constructor(readonly request: IActivityRequest, readonly rawContent?: string) {\r\n super(request);\r\n }\r\n}\r\n\r\nexport class ErrorResponse extends ActivityResponse {\r\n constructor(readonly request: IActivityRequest, readonly error: ActivityRequestError) {\r\n super(request);\r\n }\r\n}\r\n\r\nexport class LoginRequestResponse extends ActivityResponse {\r\n private _auth: Authentication;\r\n readonly signinButton?: AuthCardButton;\r\n\r\n constructor(readonly request: IActivityRequest, auth: Authentication) {\r\n super(request);\r\n this._auth = auth;\r\n\r\n for (const button of this._auth.buttons) {\r\n if (button.type === \"signin\" && button.value !== undefined) {\r\n try {\r\n new URL(button.value);\r\n\r\n this.signinButton = button;\r\n\r\n break;\r\n } catch (e) {\r\n // Ignore parsing error\r\n }\r\n }\r\n }\r\n }\r\n\r\n get tokenExchangeResource(): TokenExchangeResource | undefined {\r\n return this._auth.tokenExchangeResource;\r\n }\r\n}\r\n", "// Copyright (C) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport * as Enums from \"./enums\";\r\nimport * as Utils from \"./utils\";\r\nimport { GlobalSettings } from \"./shared\";\r\nimport { ChannelAdapter } from \"./channel-adapter\";\r\nimport {\r\n ActivityResponse,\r\n IActivityRequest,\r\n ActivityRequestTrigger,\r\n SuccessResponse,\r\n ErrorResponse,\r\n LoginRequestResponse\r\n} from \"./activity-request\";\r\nimport { Strings } from \"./strings\";\r\nimport {\r\n SubmitAction,\r\n ExecuteAction,\r\n SerializationContext,\r\n AdaptiveCard,\r\n Action,\r\n Input,\r\n TokenExchangeResource,\r\n AuthCardButton\r\n} from \"./card-elements\";\r\nimport { Versions } from \"./serialization\";\r\nimport { HostConfig } from \"./host-config\";\r\n\r\nfunction logEvent(level: Enums.LogLevel, message?: any, ...optionalParams: any[]) {\r\n if (GlobalSettings.applets.logEnabled) {\r\n if (GlobalSettings.applets.onLogEvent) {\r\n GlobalSettings.applets.onLogEvent(level, message, optionalParams);\r\n } else {\r\n /* eslint-disable no-console */\r\n switch (level) {\r\n case Enums.LogLevel.Warning:\r\n console.warn(message, optionalParams);\r\n break;\r\n case Enums.LogLevel.Error:\r\n console.error(message, optionalParams);\r\n break;\r\n default:\r\n console.log(message, optionalParams);\r\n break;\r\n }\r\n /* eslint-enable no-console */\r\n }\r\n }\r\n}\r\n\r\nclass ActivityRequest implements IActivityRequest {\r\n constructor(\r\n readonly action: ExecuteAction,\r\n readonly trigger: ActivityRequestTrigger,\r\n readonly consecutiveRefreshes: number\r\n ) {}\r\n\r\n authCode?: string;\r\n authToken?: string;\r\n attemptNumber: number = 0;\r\n\r\n onSend: (sender: ActivityRequest) => void;\r\n\r\n // eslint-disable-next-line @typescript-eslint/require-await\r\n async retryAsync(): Promise {\r\n if (this.onSend) {\r\n this.onSend(this);\r\n }\r\n }\r\n}\r\n\r\nexport class AdaptiveApplet {\r\n private static readonly _submitMagicCodeActionId = \"submitMagicCode\";\r\n private static readonly _cancelMagicCodeAuthActionId = \"cancelMagicCodeAuth\";\r\n\r\n private _card?: AdaptiveCard;\r\n private _cardPayload: any;\r\n private _allowAutomaticCardUpdate: boolean = false;\r\n private _refreshButtonHostElement: HTMLElement;\r\n private _cardHostElement: HTMLElement;\r\n private _progressOverlay?: HTMLElement;\r\n\r\n private displayCard(card: AdaptiveCard) {\r\n if (card.renderedElement) {\r\n Utils.clearElementChildren(this._cardHostElement);\r\n\r\n this._refreshButtonHostElement.style.display = \"none\";\r\n\r\n this._cardHostElement.appendChild(card.renderedElement);\r\n } else {\r\n throw new Error(\"displayCard: undefined card.\");\r\n }\r\n }\r\n\r\n private showManualRefreshButton(refreshAction: ExecuteAction) {\r\n const displayBuiltInManualRefreshButton = this.onShowManualRefreshButton\r\n ? this.onShowManualRefreshButton(this)\r\n : true;\r\n\r\n if (displayBuiltInManualRefreshButton) {\r\n this._refreshButtonHostElement.style.display = \"none\";\r\n\r\n let renderedRefreshButton: HTMLElement | undefined = undefined;\r\n\r\n if (this.onRenderManualRefreshButton) {\r\n renderedRefreshButton = this.onRenderManualRefreshButton(this);\r\n } else {\r\n let message = Strings.runtime.refreshThisCard();\r\n\r\n if (GlobalSettings.applets.refresh.mode === Enums.RefreshMode.Automatic) {\r\n let autoRefreshPausedMessage = Strings.runtime.automaticRefreshPaused();\r\n\r\n if (autoRefreshPausedMessage[autoRefreshPausedMessage.length - 1] !== \" \") {\r\n autoRefreshPausedMessage += \" \";\r\n }\r\n\r\n message = Strings.runtime.clckToRestartAutomaticRefresh();\r\n }\r\n\r\n const cardPayload = {\r\n type: \"AdaptiveCard\",\r\n version: \"1.2\",\r\n body: [\r\n {\r\n type: \"RichTextBlock\",\r\n horizontalAlignment: \"right\",\r\n inlines: [\r\n {\r\n type: \"TextRun\",\r\n text: message,\r\n selectAction: {\r\n type: \"Action.Submit\",\r\n id: \"refreshCard\"\r\n }\r\n }\r\n ]\r\n }\r\n ]\r\n };\r\n\r\n const card = new AdaptiveCard();\r\n card.parse(cardPayload, new SerializationContext(Versions.v1_2));\r\n card.onExecuteAction = (action: Action) => {\r\n if (action.id === \"refreshCard\") {\r\n Utils.clearElementChildren(this._refreshButtonHostElement);\r\n\r\n this.internalExecuteAction(\r\n refreshAction,\r\n ActivityRequestTrigger.Automatic,\r\n 0\r\n );\r\n }\r\n };\r\n\r\n renderedRefreshButton = card.render();\r\n }\r\n\r\n if (renderedRefreshButton) {\r\n Utils.clearElementChildren(this._refreshButtonHostElement);\r\n\r\n this._refreshButtonHostElement.appendChild(renderedRefreshButton);\r\n\r\n this._refreshButtonHostElement.style.removeProperty(\"display\");\r\n }\r\n }\r\n }\r\n\r\n private createActivityRequest(\r\n action: ExecuteAction,\r\n trigger: ActivityRequestTrigger,\r\n consecutiveRefreshes: number\r\n ): ActivityRequest | undefined {\r\n if (this.card) {\r\n const request = new ActivityRequest(action, trigger, consecutiveRefreshes);\r\n request.onSend = (sender: ActivityRequest) => {\r\n sender.attemptNumber++;\r\n\r\n void this.internalSendActivityRequestAsync(request);\r\n };\r\n\r\n const cancel = this.onPrepareActivityRequest\r\n ? !this.onPrepareActivityRequest(this, request, action)\r\n : false;\r\n\r\n return cancel ? undefined : request;\r\n } else {\r\n throw new Error(\"createActivityRequest: no card has been set.\");\r\n }\r\n }\r\n\r\n private createMagicCodeInputCard(attemptNumber: number): AdaptiveCard {\r\n const payload = {\r\n type: \"AdaptiveCard\",\r\n version: \"1.0\",\r\n body: [\r\n {\r\n type: \"TextBlock\",\r\n color: \"attention\",\r\n text: attemptNumber === 1 ? undefined : \"That didn't work... let's try again.\",\r\n wrap: true,\r\n horizontalAlignment: \"center\"\r\n },\r\n {\r\n type: \"TextBlock\",\r\n text: 'Please login in the popup. You will obtain a magic code. Paste that code below and select \"Submit\"',\r\n wrap: true,\r\n horizontalAlignment: \"center\"\r\n },\r\n {\r\n type: \"Input.Text\",\r\n id: \"magicCode\",\r\n placeholder: \"Enter magic code\"\r\n },\r\n {\r\n type: \"ActionSet\",\r\n horizontalAlignment: \"center\",\r\n actions: [\r\n {\r\n type: \"Action.Submit\",\r\n id: AdaptiveApplet._submitMagicCodeActionId,\r\n title: \"Submit\"\r\n },\r\n {\r\n type: \"Action.Submit\",\r\n id: AdaptiveApplet._cancelMagicCodeAuthActionId,\r\n title: \"Cancel\"\r\n }\r\n ]\r\n }\r\n ]\r\n };\r\n\r\n const card = new AdaptiveCard();\r\n card.parse(payload);\r\n\r\n return card;\r\n }\r\n\r\n private cancelAutomaticRefresh() {\r\n if (this._allowAutomaticCardUpdate) {\r\n logEvent(\r\n Enums.LogLevel.Warning,\r\n \"Automatic card refresh has been cancelled as a result of the user interacting with the card.\"\r\n );\r\n }\r\n\r\n this._allowAutomaticCardUpdate = false;\r\n }\r\n\r\n private createSerializationContext(): SerializationContext {\r\n return this.onCreateSerializationContext\r\n ? this.onCreateSerializationContext(this)\r\n : new SerializationContext();\r\n }\r\n\r\n private internalSetCard(payload: any, consecutiveRefreshes: number) {\r\n if (typeof payload === \"object\" && payload[\"type\"] === \"AdaptiveCard\") {\r\n this._cardPayload = payload;\r\n }\r\n\r\n if (this._cardPayload) {\r\n try {\r\n const card = new AdaptiveCard();\r\n\r\n if (this.hostConfig) {\r\n card.hostConfig = this.hostConfig;\r\n }\r\n\r\n const serializationContext = this.createSerializationContext();\r\n\r\n card.parse(this._cardPayload, serializationContext);\r\n\r\n const doChangeCard = this.onCardChanging\r\n ? this.onCardChanging(this, this._cardPayload)\r\n : true;\r\n\r\n if (doChangeCard) {\r\n this._card = card;\r\n\r\n if (\r\n this._card.authentication &&\r\n this._card.authentication.tokenExchangeResource &&\r\n this.onPrefetchSSOToken\r\n ) {\r\n this.onPrefetchSSOToken(\r\n this,\r\n this._card.authentication.tokenExchangeResource\r\n );\r\n }\r\n\r\n this._card.onExecuteAction = (action: Action) => {\r\n // If the user takes an action, cancel any pending automatic refresh\r\n this.cancelAutomaticRefresh();\r\n\r\n this.internalExecuteAction(action, ActivityRequestTrigger.Manual, 0);\r\n };\r\n this._card.onInputValueChanged = (_input: Input) => {\r\n // If the user modifies an input, cancel any pending automatic refresh\r\n this.cancelAutomaticRefresh();\r\n };\r\n\r\n this._card.render();\r\n\r\n if (this._card.renderedElement) {\r\n this.displayCard(this._card);\r\n\r\n if (this.onCardChanged) {\r\n this.onCardChanged(this);\r\n }\r\n\r\n if (this._card.refresh) {\r\n if (\r\n GlobalSettings.applets.refresh.mode ===\r\n Enums.RefreshMode.Automatic &&\r\n consecutiveRefreshes <\r\n GlobalSettings.applets.refresh\r\n .maximumConsecutiveAutomaticRefreshes\r\n ) {\r\n if (\r\n GlobalSettings.applets.refresh.timeBetweenAutomaticRefreshes <=\r\n 0\r\n ) {\r\n logEvent(\r\n Enums.LogLevel.Info,\r\n \"Triggering automatic card refresh number \" +\r\n (consecutiveRefreshes + 1)\r\n );\r\n\r\n this.internalExecuteAction(\r\n this._card.refresh.action,\r\n ActivityRequestTrigger.Automatic,\r\n consecutiveRefreshes + 1\r\n );\r\n } else {\r\n logEvent(\r\n Enums.LogLevel.Info,\r\n \"Scheduling automatic card refresh number \" +\r\n (consecutiveRefreshes + 1) +\r\n \" in \" +\r\n GlobalSettings.applets.refresh\r\n .timeBetweenAutomaticRefreshes +\r\n \"ms\"\r\n );\r\n\r\n const action = this._card.refresh.action;\r\n\r\n this._allowAutomaticCardUpdate = true;\r\n\r\n window.setTimeout(() => {\r\n if (this._allowAutomaticCardUpdate) {\r\n this.internalExecuteAction(\r\n action,\r\n ActivityRequestTrigger.Automatic,\r\n consecutiveRefreshes + 1\r\n );\r\n }\r\n }, GlobalSettings.applets.refresh.timeBetweenAutomaticRefreshes);\r\n }\r\n } else if (\r\n GlobalSettings.applets.refresh.mode !== Enums.RefreshMode.Disabled\r\n ) {\r\n if (consecutiveRefreshes > 0) {\r\n logEvent(\r\n Enums.LogLevel.Warning,\r\n \"Stopping automatic refreshes after \" +\r\n consecutiveRefreshes +\r\n \" consecutive refreshes.\"\r\n );\r\n } else {\r\n logEvent(\r\n Enums.LogLevel.Warning,\r\n \"The card has a refresh section, but automatic refreshes are disabled.\"\r\n );\r\n }\r\n\r\n if (\r\n GlobalSettings.applets.refresh\r\n .allowManualRefreshesAfterAutomaticRefreshes ||\r\n GlobalSettings.applets.refresh.mode === Enums.RefreshMode.Manual\r\n ) {\r\n logEvent(Enums.LogLevel.Info, \"Showing manual refresh button.\");\r\n\r\n this.showManualRefreshButton(this._card.refresh.action);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n // Ignore all errors\r\n logEvent(Enums.LogLevel.Error, \"setCard: \" + error);\r\n }\r\n }\r\n }\r\n\r\n private internalExecuteAction(\r\n action: Action,\r\n trigger: ActivityRequestTrigger,\r\n consecutiveRefreshes: number\r\n ) {\r\n if (action instanceof ExecuteAction) {\r\n if (this.channelAdapter) {\r\n const request = this.createActivityRequest(action, trigger, consecutiveRefreshes);\r\n\r\n if (request) {\r\n void request.retryAsync();\r\n }\r\n } else {\r\n throw new Error(\"internalExecuteAction: No channel adapter set.\");\r\n }\r\n }\r\n\r\n if (this.onAction) {\r\n this.onAction(this, action);\r\n }\r\n }\r\n\r\n private createProgressOverlay(request: ActivityRequest): HTMLElement | undefined {\r\n if (!this._progressOverlay) {\r\n if (this.onCreateProgressOverlay) {\r\n this._progressOverlay = this.onCreateProgressOverlay(this, request);\r\n } else {\r\n this._progressOverlay = document.createElement(\"div\");\r\n this._progressOverlay.className = \"aaf-progress-overlay\";\r\n\r\n const spinner = document.createElement(\"div\");\r\n spinner.className = \"aaf-spinner\";\r\n spinner.style.width = \"28px\";\r\n spinner.style.height = \"28px\";\r\n\r\n this._progressOverlay.appendChild(spinner);\r\n }\r\n }\r\n\r\n return this._progressOverlay;\r\n }\r\n\r\n private removeProgressOverlay(request: IActivityRequest) {\r\n if (this.onRemoveProgressOverlay) {\r\n this.onRemoveProgressOverlay(this, request);\r\n }\r\n\r\n if (this._progressOverlay !== undefined) {\r\n this.renderedElement.removeChild(this._progressOverlay);\r\n\r\n this._progressOverlay = undefined;\r\n }\r\n }\r\n\r\n private activityRequestSucceeded(\r\n response: SuccessResponse,\r\n parsedContent: string | AdaptiveCard | undefined\r\n ) {\r\n if (this.onActivityRequestSucceeded) {\r\n this.onActivityRequestSucceeded(this, response, parsedContent);\r\n }\r\n }\r\n\r\n private activityRequestFailed(response: ErrorResponse): number {\r\n return this.onActivityRequestFailed\r\n ? this.onActivityRequestFailed(this, response)\r\n : GlobalSettings.applets.defaultTimeBetweenRetryAttempts;\r\n }\r\n\r\n private showAuthCodeInputDialog(request: ActivityRequest) {\r\n const showBuiltInAuthCodeInputCard = this.onShowAuthCodeInputDialog\r\n ? this.onShowAuthCodeInputDialog(this, request)\r\n : true;\r\n\r\n if (showBuiltInAuthCodeInputCard) {\r\n const authCodeInputCard = this.createMagicCodeInputCard(request.attemptNumber);\r\n authCodeInputCard.render();\r\n authCodeInputCard.onExecuteAction = (submitMagicCodeAction: Action) => {\r\n if (this.card && submitMagicCodeAction instanceof SubmitAction) {\r\n switch (submitMagicCodeAction.id) {\r\n case AdaptiveApplet._submitMagicCodeActionId:\r\n let authCode: string | undefined = undefined;\r\n\r\n if (\r\n submitMagicCodeAction.data &&\r\n typeof (submitMagicCodeAction.data)[\"magicCode\"] === \"string\"\r\n ) {\r\n authCode = (submitMagicCodeAction.data)[\"magicCode\"];\r\n }\r\n\r\n if (authCode) {\r\n this.displayCard(this.card);\r\n\r\n request.authCode = authCode;\r\n void request.retryAsync();\r\n } else {\r\n alert(\"Please enter the magic code you received.\");\r\n }\r\n\r\n break;\r\n case AdaptiveApplet._cancelMagicCodeAuthActionId:\r\n logEvent(Enums.LogLevel.Warning, \"Authentication cancelled by user.\");\r\n\r\n this.displayCard(this.card);\r\n\r\n break;\r\n default:\r\n logEvent(\r\n Enums.LogLevel.Error,\r\n \"Unexpected action taken from magic code input card (id = \" +\r\n submitMagicCodeAction.id +\r\n \")\"\r\n );\r\n\r\n alert(Strings.magicCodeInputCard.somethingWentWrong());\r\n\r\n break;\r\n }\r\n }\r\n };\r\n\r\n this.displayCard(authCodeInputCard);\r\n }\r\n }\r\n\r\n private async internalSendActivityRequestAsync(request: ActivityRequest) {\r\n if (!this.channelAdapter) {\r\n throw new Error(\"internalSendActivityRequestAsync: channelAdapter is not set.\");\r\n }\r\n\r\n const overlay = this.createProgressOverlay(request);\r\n\r\n if (overlay !== undefined) {\r\n this.renderedElement.appendChild(overlay);\r\n }\r\n\r\n let done = false;\r\n\r\n while (!done) {\r\n let response: ActivityResponse | undefined = undefined;\r\n\r\n if (request.attemptNumber === 1) {\r\n logEvent(\r\n Enums.LogLevel.Info,\r\n \"Sending activity request to channel (attempt \" + request.attemptNumber + \")\"\r\n );\r\n } else {\r\n logEvent(\r\n Enums.LogLevel.Info,\r\n \"Re-sending activity request to channel (attempt \" + request.attemptNumber + \")\"\r\n );\r\n }\r\n\r\n try {\r\n response = await this.channelAdapter.sendRequestAsync(request);\r\n } catch (error) {\r\n logEvent(Enums.LogLevel.Error, \"Activity request failed: \" + error);\r\n\r\n this.removeProgressOverlay(request);\r\n\r\n done = true;\r\n }\r\n\r\n if (response) {\r\n if (response instanceof SuccessResponse) {\r\n this.removeProgressOverlay(request);\r\n\r\n if (response.rawContent === undefined) {\r\n throw new Error(\r\n \"internalSendActivityRequestAsync: Action.Execute result is undefined\"\r\n );\r\n }\r\n\r\n let parsedContent = response.rawContent;\r\n\r\n try {\r\n parsedContent = JSON.parse(response.rawContent);\r\n } catch {\r\n // Leave parseContent as is\r\n }\r\n\r\n if (typeof parsedContent === \"string\") {\r\n logEvent(\r\n Enums.LogLevel.Info,\r\n \"The activity request returned a string after \" +\r\n request.attemptNumber +\r\n \" attempt(s).\"\r\n );\r\n\r\n this.activityRequestSucceeded(response, parsedContent);\r\n } else if (\r\n typeof parsedContent === \"object\" &&\r\n parsedContent[\"type\"] === \"AdaptiveCard\"\r\n ) {\r\n logEvent(\r\n Enums.LogLevel.Info,\r\n \"The activity request returned an Adaptive Card after \" +\r\n request.attemptNumber +\r\n \" attempt(s).\"\r\n );\r\n\r\n this.internalSetCard(parsedContent, request.consecutiveRefreshes);\r\n this.activityRequestSucceeded(response, this.card);\r\n } else {\r\n throw new Error(\r\n \"internalSendActivityRequestAsync: Action.Execute result is of unsupported type (\" +\r\n typeof response.rawContent +\r\n \")\"\r\n );\r\n }\r\n\r\n done = true;\r\n } else if (response instanceof ErrorResponse) {\r\n const retryIn: number = this.activityRequestFailed(response);\r\n\r\n if (\r\n retryIn >= 0 &&\r\n request.attemptNumber < GlobalSettings.applets.maximumRetryAttempts\r\n ) {\r\n logEvent(\r\n Enums.LogLevel.Warning,\r\n `Activity request failed: ${response.error.message}. Retrying in ${retryIn}ms`\r\n );\r\n\r\n request.attemptNumber++;\r\n\r\n await new Promise((resolve, _reject) => {\r\n window.setTimeout(() => {\r\n resolve();\r\n }, retryIn);\r\n });\r\n } else {\r\n logEvent(\r\n Enums.LogLevel.Error,\r\n `Activity request failed: ${response.error.message}. Giving up after ${request.attemptNumber} attempt(s)`\r\n );\r\n\r\n this.removeProgressOverlay(request);\r\n\r\n done = true;\r\n }\r\n } else if (response instanceof LoginRequestResponse) {\r\n logEvent(\r\n Enums.LogLevel.Info,\r\n \"The activity request returned a LoginRequestResponse after \" +\r\n request.attemptNumber +\r\n \" attempt(s).\"\r\n );\r\n\r\n if (request.attemptNumber <= GlobalSettings.applets.maximumRetryAttempts) {\r\n let attemptOAuth = true;\r\n\r\n if (response.tokenExchangeResource && this.onSSOTokenNeeded) {\r\n // Attempt to use SSO. The host will return true if it can handle SSO, in which case\r\n // we bypass OAuth\r\n attemptOAuth = !this.onSSOTokenNeeded(\r\n this,\r\n request,\r\n response.tokenExchangeResource\r\n );\r\n }\r\n\r\n if (attemptOAuth) {\r\n // Attempt to use OAuth\r\n this.removeProgressOverlay(request);\r\n\r\n if (response.signinButton === undefined) {\r\n throw new Error(\r\n \"internalSendActivityRequestAsync: the login request doesn't contain a valid signin URL.\"\r\n );\r\n }\r\n\r\n logEvent(\r\n Enums.LogLevel.Info,\r\n \"Login required at \" + response.signinButton.value\r\n );\r\n\r\n if (this.onShowSigninPrompt) {\r\n // Bypass the built-in auth prompt if the host app handles it\r\n this.onShowSigninPrompt(this, request, response.signinButton);\r\n } else {\r\n this.showAuthCodeInputDialog(request);\r\n\r\n const left =\r\n window.screenX +\r\n (window.outerWidth - GlobalSettings.applets.authPromptWidth) /\r\n 2;\r\n const top =\r\n window.screenY +\r\n (window.outerHeight - GlobalSettings.applets.authPromptHeight) /\r\n 2;\r\n\r\n window.open(\r\n response.signinButton.value,\r\n response.signinButton.title\r\n ? response.signinButton.title\r\n : \"Sign in\",\r\n `width=${GlobalSettings.applets.authPromptWidth},height=${GlobalSettings.applets.authPromptHeight},left=${left},top=${top}`\r\n );\r\n }\r\n }\r\n } else {\r\n logEvent(\r\n Enums.LogLevel.Error,\r\n \"Authentication failed. Giving up after \" +\r\n request.attemptNumber +\r\n \" attempt(s)\"\r\n );\r\n\r\n alert(Strings.magicCodeInputCard.authenticationFailed());\r\n }\r\n\r\n // Exit the loop. After a LoginRequestResponse, the host app is responsible for retrying the request\r\n break;\r\n } else {\r\n throw new Error(\"Unhandled response type: \" + JSON.stringify(response));\r\n }\r\n }\r\n }\r\n }\r\n\r\n readonly renderedElement: HTMLElement;\r\n\r\n hostConfig?: HostConfig;\r\n channelAdapter?: ChannelAdapter;\r\n\r\n onCardChanging?: (sender: AdaptiveApplet, card: any) => boolean;\r\n onCardChanged?: (sender: AdaptiveApplet) => void;\r\n onPrefetchSSOToken?: (\r\n sender: AdaptiveApplet,\r\n tokenExchangeResource: TokenExchangeResource\r\n ) => void;\r\n onSSOTokenNeeded?: (\r\n sender: AdaptiveApplet,\r\n request: IActivityRequest,\r\n tokenExchangeResource: TokenExchangeResource\r\n ) => boolean;\r\n onPrepareActivityRequest?: (\r\n sender: AdaptiveApplet,\r\n request: IActivityRequest,\r\n action: ExecuteAction\r\n ) => boolean;\r\n onActivityRequestSucceeded?: (\r\n sender: AdaptiveApplet,\r\n response: SuccessResponse,\r\n parsedContent: string | AdaptiveCard | undefined\r\n ) => void;\r\n onActivityRequestFailed?: (sender: AdaptiveApplet, response: ErrorResponse) => number;\r\n onCreateSerializationContext?: (sender: AdaptiveApplet) => SerializationContext;\r\n onCreateProgressOverlay?: (\r\n sender: AdaptiveApplet,\r\n request: IActivityRequest\r\n ) => HTMLElement | undefined;\r\n onRemoveProgressOverlay?: (sender: AdaptiveApplet, request: IActivityRequest) => void;\r\n onRenderManualRefreshButton?: (sender: AdaptiveApplet) => HTMLElement | undefined;\r\n onAction?: (sender: AdaptiveApplet, action: Action) => void;\r\n onShowManualRefreshButton?: (sender: AdaptiveApplet) => boolean;\r\n onShowAuthCodeInputDialog?: (sender: AdaptiveApplet, request: IActivityRequest) => boolean;\r\n onShowSigninPrompt?: (\r\n sender: AdaptiveApplet,\r\n request: IActivityRequest,\r\n signinButton: AuthCardButton\r\n ) => void;\r\n\r\n constructor() {\r\n this.renderedElement = document.createElement(\"div\");\r\n this.renderedElement.className = \"aaf-cardHost\";\r\n this.renderedElement.style.position = \"relative\";\r\n this.renderedElement.style.display = \"flex\";\r\n this.renderedElement.style.flexDirection = \"column\";\r\n\r\n this._cardHostElement = document.createElement(\"div\");\r\n\r\n this._refreshButtonHostElement = document.createElement(\"div\");\r\n this._refreshButtonHostElement.className = \"aaf-refreshButtonHost\";\r\n this._refreshButtonHostElement.style.display = \"none\";\r\n\r\n this.renderedElement.appendChild(this._cardHostElement);\r\n this.renderedElement.appendChild(this._refreshButtonHostElement);\r\n }\r\n\r\n refreshCard() {\r\n if (this._card && this._card.refresh) {\r\n this.internalExecuteAction(this._card.refresh.action, ActivityRequestTrigger.Manual, 0);\r\n }\r\n }\r\n\r\n setCard(payload: any) {\r\n this.internalSetCard(payload, 0);\r\n }\r\n\r\n get card(): AdaptiveCard | undefined {\r\n return this._card;\r\n }\r\n}\r\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nexport * from \"./strings\";\r\nexport * from \"./enums\";\r\nexport * from \"./shared\";\r\nexport * from \"./utils\";\r\nexport * from \"./serialization\";\r\nexport * from \"./host-capabilities\";\r\nexport * from \"./host-config\";\r\nexport * from \"./registry\";\r\nexport * from \"./card-object\";\r\nexport * from \"./card-elements\";\r\nexport * from \"./table\";\r\nexport * from \"./channel-adapter\";\r\nexport * from \"./activity-request\";\r\nexport * from \"./adaptive-applet\";\r\n\r\nexport { IAdaptiveCard, ICardElement } from \"./schema\";\r\n"], + "mappings": ";;;;;;;;;;AAIA,QAAA;;MAAA,WAAA;AAAA,iBAAAA,WAAA;QA+FA;AA9FoB,QAAAA,SAAA,SAAS;UACrB,oBAAoB,SAAC,UAAgB;AACjC,mBAAA,yBAAA,OAAyB,UAAQ,sCAAA;UAAjC;UACJ,mBAAmB,SAAC,UAAgB;AAChC,mBAAA,wBAAA,OAAwB,UAAQ,sCAAA;UAAhC;UACJ,uBAAuB,SAAC,UAAgB;AACpC,mBAAA,iBAAA,OAAiB,UAAQ,mCAAA;UAAzB;UACJ,sBAAsB,SAAC,UAAgB;AACnC,mBAAA,gBAAA,OAAgB,UAAQ,mCAAA;UAAxB;UACJ,sBAAsB,SAAC,OAAY,cAAoB;AACnD,mBAAA,kBAAA,OAAkB,OAAK,kBAAA,EAAA,OAAmB,cAAY,IAAA;UAAtD;UACJ,sBAAsB,WAAA;AAClB,mBAAA;UAAA;UACJ,oBAAoB,SAAC,cAAoB;AACrC,mBAAA,yBAAA,OAAyB,cAAY,2BAAA;UAArC;UACJ,oBAAoB,SAAC,qBAA2B;AAC5C,mBAAA,wCAAA,OAAwC,qBAAmB,IAAA;UAA3D;UACJ,sBAAsB,SAAC,eAAqB;AACxC,mBAAA,2BAAA,OAA2B,eAAa,IAAA;UAAxC;UACJ,2BAA2B,SACvB,OACA,cACA,oBACA,aAAmB;AAEnB,mBAAA,UAAA,OAAU,OAAK,kBAAA,EAAA,OAAmB,cAAY,4BAAA,EAAA,OAA6B,oBAAkB,8BAAA,EAAA,OAA+B,aAAW,GAAA;UAAvI;UACJ,sBAAsB,SAClB,cACA,oBACA,aAAmB;AAEnB,mBAAA,aAAA,OAAa,cAAY,4BAAA,EAAA,OAA6B,oBAAkB,8BAAA,EAAA,OAA+B,aAAW,GAAA;UAAlH;UACJ,iBAAiB,SAAC,OAAa;AAAK,mBAAA,uBAAA,OAAuB,OAAK,IAAA;UAA5B;UACpC,6BAA6B,WAAA;AACzB,mBAAA;UAAA;UACJ,uBAAuB,WAAA;AACnB,mBAAA;UAAA;UACJ,yBAAyB,WAAA;AAAM,mBAAA;UAAA;UAC/B,wBAAwB,WAAA;AAAM,mBAAA;UAAA;UAC9B,mCAAmC,WAAA;AAC/B,mBAAA;UAAA;UACJ,uCAAuC,WAAA;AACnC,mBAAA;UAAA;UACJ,mBAAmB,SAAC,cAAoB;AAAK,mBAAA,aAAA,OAAa,cAAY,gBAAA;UAAzB;UAC7C,uCAAuC,WAAA;AACnC,mBAAA;UAAA;UACJ,gBAAgB,SAAC,gBAAsB;AACnC,mBAAA,uCAAA,OAAuC,gBAAc,IAAA;UAArD;UACJ,oBAAoB,SAAC,kBAAwB;AACzC,mBAAA,gCAAA,OAAgC,kBAAgB,IAAA;UAAhD;UACJ,kCAAkC,WAAA;AAAM,mBAAA;UAAA;UACxC,iBAAiB,WAAA;AACb,mBAAA;UAAA;UACJ,wBAAwB,SAAC,SAAiB,qBAA2B;AACjE,mBAAA,+BAAA,OAA+B,SAAO,8EAAA,EAAA,OAA+E,qBAAmB,GAAA;UAAxI;UACJ,aAAa,SAAC,IAAU;AAAK,mBAAA,iBAAA,OAAiB,IAAE,IAAA;UAAnB;UAC7B,8BAA8B,WAAA;AAC1B,mBAAA;UAAA;UACJ,6BAA6B,WAAA;AACzB,mBAAA;UAAA;UACJ,wBAAwB,WAAA;AAAM,mBAAA;UAAA;UAC9B,uBAAuB,WAAA;AAAM,mBAAA;UAAA;UAC7B,0BAA0B,SAAC,UAAgB;AACvC,mBAAA,oBAAA,OAAoB,UAAQ,yCAAA;UAA5B;;AAEQ,QAAAA,SAAA,qBAAqB;UACjC,UAAU,WAAA;AAAM,mBAAA;UAAA;UAChB,aAAa,WAAA;AACT,mBAAA;UAAA;UACJ,gBAAgB,WAAA;AAAM,mBAAA;UAAA;UACtB,iCAAiC,WAAA;AAAM,mBAAA;UAAA;UACvC,QAAQ,WAAA;AAAM,mBAAA;UAAA;UACd,QAAQ,WAAA;AAAM,mBAAA;UAAA;UACd,oBAAoB,WAAA;AAAM,mBAAA;UAAA;UAC1B,sBAAsB,WAAA;AAAM,mBAAA;UAAA;;AAEhB,QAAAA,SAAA,UAAU;UACtB,wBAAwB,WAAA;AAAM,mBAAA;UAAA;UAC9B,+BAA+B,WAAA;AAAM,mBAAA;UAAA;UACrC,iBAAiB,WAAA;AAAM,mBAAA;UAAA;;AAEX,QAAAA,SAAA,QAAQ;UACpB,6CAA6C,WAAA;AACzC,mBAAA;UAAA;;AAEQ,QAAAA,SAAA,WAAW;UACvB,mBAAmB,WAAA;AAAM,mBAAA;UAAA;UACzB,oBAAoB,WAAA;AAAM,mBAAA;UAAA;UAC1B,sBAAsB,WAAA;AAAM,mBAAA;UAAA;UAC5B,sBAAsB,WAAA;AAAM,mBAAA;UAAA;UAC5B,oBAAoB,WAAA;AAAM,mBAAA;UAAA;UAC1B,kBAAkB,WAAA;AAAM,mBAAA;UAAA;UACxB,wBAAwB,WAAA;AAAM,mBAAA;UAAA;;AAEtC,eAAAA;QA/FA;;AAAa,YAAA,UAAA;;;;;;;;;;ACiBb,QAAA;;MAAA,WAAA;AAAA,iBAAAC,kBAAA;QAOA;AANoB,QAAAA,gBAAA,UAAqB;AACrB,QAAAA,gBAAA,WAAuB;AACvB,QAAAA,gBAAA,SAAmB;AACnB,QAAAA,gBAAA,OAAe;AACf,QAAAA,gBAAA,YAAyB;AACzB,QAAAA,gBAAA,UAAqB;AACzC,eAAAA;QAPA;;AAAa,YAAA,iBAAA;AASb,QAAA;;MAAA,WAAA;AAAA,iBAAAC,eAAA;QAIA;AAHoB,QAAAA,aAAA,UAAqB;AACrB,QAAAA,aAAA,WAAuB;AACvB,QAAAA,aAAA,cAA6B;AACjD,eAAAA;QAJA;;AAAa,YAAA,cAAA;AAMb,QAAA;;MAAA,WAAA;AAAA,iBAAAC,cAAA;QAGA;AAFoB,QAAAA,YAAA,UAAqB;AACrB,QAAAA,YAAA,YAAyB;AAC7C,eAAAA;QAHA;;AAAa,YAAA,aAAA;AAMb,QAAY;AAAZ,KAAA,SAAYC,OAAI;AACZ,MAAAA,MAAAA,MAAA,MAAA,IAAA,CAAA,IAAA;AACA,MAAAA,MAAAA,MAAA,SAAA,IAAA,CAAA,IAAA;AACA,MAAAA,MAAAA,MAAA,OAAA,IAAA,CAAA,IAAA;AACA,MAAAA,MAAAA,MAAA,QAAA,IAAA,CAAA,IAAA;AACA,MAAAA,MAAAA,MAAA,OAAA,IAAA,CAAA,IAAA;IACJ,GANY,OAAA,QAAA,SAAA,QAAA,OAAI,CAAA,EAAA;AAQhB,QAAY;AAAZ,KAAA,SAAYC,YAAS;AACjB,MAAAA,WAAAA,WAAA,OAAA,IAAA,CAAA,IAAA;AACA,MAAAA,WAAAA,WAAA,QAAA,IAAA,CAAA,IAAA;AACA,MAAAA,WAAAA,WAAA,OAAA,IAAA,CAAA,IAAA;IACJ,GAJY,YAAA,QAAA,cAAA,QAAA,YAAS,CAAA,EAAA;AAMrB,QAAY;AAAZ,KAAA,SAAYC,WAAQ;AAChB,MAAAA,UAAAA,UAAA,QAAA,IAAA,CAAA,IAAA;AACA,MAAAA,UAAAA,UAAA,OAAA,IAAA,CAAA,IAAA;IACJ,GAHY,WAAA,QAAA,aAAA,QAAA,WAAQ,CAAA,EAAA;AAKpB,QAAY;AAAZ,KAAA,SAAYC,WAAQ;AAChB,MAAAA,UAAAA,UAAA,OAAA,IAAA,CAAA,IAAA;AACA,MAAAA,UAAAA,UAAA,SAAA,IAAA,CAAA,IAAA;AACA,MAAAA,UAAAA,UAAA,QAAA,IAAA,CAAA,IAAA;AACA,MAAAA,UAAAA,UAAA,OAAA,IAAA,CAAA,IAAA;AACA,MAAAA,UAAAA,UAAA,YAAA,IAAA,CAAA,IAAA;IACJ,GANY,WAAA,QAAA,aAAA,QAAA,WAAQ,CAAA,EAAA;AAQpB,QAAY;AAAZ,KAAA,SAAYC,aAAU;AAClB,MAAAA,YAAAA,YAAA,SAAA,IAAA,CAAA,IAAA;AACA,MAAAA,YAAAA,YAAA,SAAA,IAAA,CAAA,IAAA;AACA,MAAAA,YAAAA,YAAA,QAAA,IAAA,CAAA,IAAA;IACJ,GAJY,aAAA,QAAA,eAAA,QAAA,aAAU,CAAA,EAAA;AAMtB,QAAY;AAAZ,KAAA,SAAYC,WAAQ;AAChB,MAAAA,UAAAA,UAAA,SAAA,IAAA,CAAA,IAAA;AACA,MAAAA,UAAAA,UAAA,WAAA,IAAA,CAAA,IAAA;IACJ,GAHY,WAAA,QAAA,aAAA,QAAA,WAAQ,CAAA,EAAA;AAKpB,QAAY;AAAZ,KAAA,SAAYC,UAAO;AACf,MAAAA,SAAAA,SAAA,MAAA,IAAA,CAAA,IAAA;AACA,MAAAA,SAAAA,SAAA,OAAA,IAAA,CAAA,IAAA;AACA,MAAAA,SAAAA,SAAA,SAAA,IAAA,CAAA,IAAA;AACA,MAAAA,SAAAA,SAAA,QAAA,IAAA,CAAA,IAAA;AACA,MAAAA,SAAAA,SAAA,OAAA,IAAA,CAAA,IAAA;AACA,MAAAA,SAAAA,SAAA,YAAA,IAAA,CAAA,IAAA;AACA,MAAAA,SAAAA,SAAA,SAAA,IAAA,CAAA,IAAA;IACJ,GARY,UAAA,QAAA,YAAA,QAAA,UAAO,CAAA,EAAA;AAUnB,QAAY;AAAZ,KAAA,SAAYC,YAAS;AACjB,MAAAA,WAAAA,WAAA,SAAA,IAAA,CAAA,IAAA;AACA,MAAAA,WAAAA,WAAA,MAAA,IAAA,CAAA,IAAA;AACA,MAAAA,WAAAA,WAAA,OAAA,IAAA,CAAA,IAAA;AACA,MAAAA,WAAAA,WAAA,QAAA,IAAA,CAAA,IAAA;AACA,MAAAA,WAAAA,WAAA,MAAA,IAAA,CAAA,IAAA;AACA,MAAAA,WAAAA,WAAA,SAAA,IAAA,CAAA,IAAA;AACA,MAAAA,WAAAA,WAAA,WAAA,IAAA,CAAA,IAAA;IACJ,GARY,YAAA,QAAA,cAAA,QAAA,YAAS,CAAA,EAAA;AAUrB,QAAY;AAAZ,KAAA,SAAYC,sBAAmB;AAC3B,MAAAA,qBAAAA,qBAAA,MAAA,IAAA,CAAA,IAAA;AACA,MAAAA,qBAAAA,qBAAA,QAAA,IAAA,CAAA,IAAA;AACA,MAAAA,qBAAAA,qBAAA,OAAA,IAAA,CAAA,IAAA;IACJ,GAJY,sBAAA,QAAA,wBAAA,QAAA,sBAAmB,CAAA,EAAA;AAM/B,QAAY;AAAZ,KAAA,SAAYC,oBAAiB;AACzB,MAAAA,mBAAAA,mBAAA,KAAA,IAAA,CAAA,IAAA;AACA,MAAAA,mBAAAA,mBAAA,QAAA,IAAA,CAAA,IAAA;AACA,MAAAA,mBAAAA,mBAAA,QAAA,IAAA,CAAA,IAAA;IACJ,GAJY,oBAAA,QAAA,sBAAA,QAAA,oBAAiB,CAAA,EAAA;AAM7B,QAAY;AAAZ,KAAA,SAAYC,kBAAe;AACvB,MAAAA,iBAAAA,iBAAA,MAAA,IAAA,CAAA,IAAA;AACA,MAAAA,iBAAAA,iBAAA,QAAA,IAAA,CAAA,IAAA;AACA,MAAAA,iBAAAA,iBAAA,OAAA,IAAA,CAAA,IAAA;AACA,MAAAA,iBAAAA,iBAAA,SAAA,IAAA,CAAA,IAAA;IACJ,GALY,kBAAA,QAAA,oBAAA,QAAA,kBAAe,CAAA,EAAA;AAO3B,QAAY;AAAZ,KAAA,SAAYC,aAAU;AAClB,MAAAA,YAAAA,YAAA,SAAA,IAAA,CAAA,IAAA;AACA,MAAAA,YAAAA,YAAA,QAAA,IAAA,CAAA,IAAA;IACJ,GAHY,aAAA,QAAA,eAAA,QAAA,aAAU,CAAA,EAAA;AAKtB,QAAY;AAAZ,KAAA,SAAYC,qBAAkB;AAC1B,MAAAA,oBAAAA,oBAAA,QAAA,IAAA,CAAA,IAAA;AACA,MAAAA,oBAAAA,oBAAA,OAAA,IAAA,CAAA,IAAA;IACJ,GAHY,qBAAA,QAAA,uBAAA,QAAA,qBAAkB,CAAA,EAAA;AAK9B,QAAY;AAAZ,KAAA,SAAYC,cAAW;AACnB,MAAAA,aAAAA,aAAA,YAAA,IAAA,CAAA,IAAA;AACA,MAAAA,aAAAA,aAAA,UAAA,IAAA,CAAA,IAAA;IACJ,GAHY,cAAA,QAAA,gBAAA,QAAA,cAAW,CAAA,EAAA;AAKvB,QAAY;AAAZ,KAAA,SAAYC,WAAQ;AAChB,MAAAA,UAAAA,UAAA,OAAA,IAAA,CAAA,IAAA;AACA,MAAAA,UAAAA,UAAA,oBAAA,IAAA,CAAA,IAAA;AACA,MAAAA,UAAAA,UAAA,kBAAA,IAAA,CAAA,IAAA;AACA,MAAAA,UAAAA,UAAA,QAAA,IAAA,CAAA,IAAA;IACJ,GALY,WAAA,QAAA,aAAA,QAAA,WAAQ,CAAA,EAAA;AAOpB,QAAY;AAAZ,KAAA,SAAYC,sBAAmB;AAC3B,MAAAA,qBAAAA,qBAAA,aAAA,IAAA,CAAA,IAAA;AACA,MAAAA,qBAAAA,qBAAA,YAAA,IAAA,CAAA,IAAA;IACJ,GAHY,sBAAA,QAAA,wBAAA,QAAA,sBAAmB,CAAA,EAAA;AAK/B,QAAY;AAAZ,KAAA,SAAYC,iBAAc;AACtB,MAAAA,gBAAAA,gBAAA,MAAA,IAAA,CAAA,IAAA;AACA,MAAAA,gBAAAA,gBAAA,KAAA,IAAA,CAAA,IAAA;AACA,MAAAA,gBAAAA,gBAAA,KAAA,IAAA,CAAA,IAAA;AACA,MAAAA,gBAAAA,gBAAA,OAAA,IAAA,CAAA,IAAA;AACA,MAAAA,gBAAAA,gBAAA,UAAA,IAAA,CAAA,IAAA;IACJ,GANY,iBAAA,QAAA,mBAAA,QAAA,iBAAc,CAAA,EAAA;AAQ1B,QAAY;AAAZ,KAAA,SAAYC,kBAAe;AACvB,MAAAA,iBAAAA,iBAAA,OAAA,IAAA,CAAA,IAAA;AACA,MAAAA,iBAAAA,iBAAA,QAAA,IAAA,CAAA,IAAA;AACA,MAAAA,iBAAAA,iBAAA,YAAA,IAAA,CAAA,IAAA;IACJ,GAJY,kBAAA,QAAA,oBAAA,QAAA,kBAAe,CAAA,EAAA;AAM3B,QAAY;AAAZ,KAAA,SAAYC,kBAAe;AACvB,MAAAA,iBAAAA,iBAAA,MAAA,IAAA,CAAA,IAAA;AACA,MAAAA,iBAAAA,iBAAA,sBAAA,IAAA,CAAA,IAAA;AACA,MAAAA,iBAAAA,iBAAA,uBAAA,IAAA,CAAA,IAAA;AACA,MAAAA,iBAAAA,iBAAA,YAAA,IAAA,CAAA,IAAA;AACA,MAAAA,iBAAAA,iBAAA,uBAAA,IAAA,CAAA,IAAA;AACA,MAAAA,iBAAAA,iBAAA,yBAAA,IAAA,CAAA,IAAA;AACA,MAAAA,iBAAAA,iBAAA,sBAAA,IAAA,CAAA,IAAA;AACA,MAAAA,iBAAAA,iBAAA,iBAAA,IAAA,CAAA,IAAA;AACA,MAAAA,iBAAAA,iBAAA,oBAAA,IAAA,CAAA,IAAA;AACA,MAAAA,iBAAAA,iBAAA,gBAAA,IAAA,CAAA,IAAA;AACA,MAAAA,iBAAAA,iBAAA,mBAAA,IAAA,EAAA,IAAA;AACA,MAAAA,iBAAAA,iBAAA,oBAAA,IAAA,EAAA,IAAA;AACA,MAAAA,iBAAAA,iBAAA,wBAAA,IAAA,EAAA,IAAA;AACA,MAAAA,iBAAAA,iBAAA,aAAA,IAAA,EAAA,IAAA;AACA,MAAAA,iBAAAA,iBAAA,qBAAA,IAAA,EAAA,IAAA;AACA,MAAAA,iBAAAA,iBAAA,+BAAA,IAAA,EAAA,IAAA;AACA,MAAAA,iBAAAA,iBAAA,sCAAA,IAAA,EAAA,IAAA;AACA,MAAAA,iBAAAA,iBAAA,OAAA,IAAA,EAAA,IAAA;IACJ,GAnBY,kBAAA,QAAA,oBAAA,QAAA,kBAAe,CAAA,EAAA;AAqB3B,QAAY;AAAZ,KAAA,SAAYC,qBAAkB;AAC1B,MAAAA,oBAAAA,oBAAA,kBAAA,IAAA,CAAA,IAAA;AACA,MAAAA,oBAAAA,oBAAA,aAAA,IAAA,CAAA,IAAA;AACA,MAAAA,oBAAAA,oBAAA,qBAAA,IAAA,CAAA,IAAA;IACJ,GAJY,qBAAA,QAAA,uBAAA,QAAA,qBAAkB,CAAA,EAAA;AAM9B,QAAY;AAAZ,KAAA,SAAYC,gBAAa;AACrB,MAAAA,eAAAA,eAAA,aAAA,IAAA,CAAA,IAAA;AACA,MAAAA,eAAAA,eAAA,eAAA,IAAA,CAAA,IAAA;IACJ,GAHY,gBAAA,QAAA,kBAAA,QAAA,gBAAa,CAAA,EAAA;AAKzB,QAAY;AAAZ,KAAA,SAAYC,cAAW;AACnB,MAAAA,aAAAA,aAAA,UAAA,IAAA,CAAA,IAAA;AACA,MAAAA,aAAAA,aAAA,QAAA,IAAA,CAAA,IAAA;AACA,MAAAA,aAAAA,aAAA,WAAA,IAAA,CAAA,IAAA;IACJ,GAJY,cAAA,QAAA,gBAAA,QAAA,cAAW,CAAA,EAAA;AAMvB,QAAY;AAAZ,KAAA,SAAYC,WAAQ;AAChB,MAAAA,UAAAA,UAAA,MAAA,IAAA,CAAA,IAAA;AACA,MAAAA,UAAAA,UAAA,SAAA,IAAA,CAAA,IAAA;AACA,MAAAA,UAAAA,UAAA,OAAA,IAAA,CAAA,IAAA;IACJ,GAJY,WAAA,QAAA,aAAA,QAAA,WAAQ,CAAA,EAAA;;;;;;;;;;ACpMpB,QAAA,QAAA;AAqBA,QAAA;;MAAA,WAAA;AAAA,iBAAAC,kBAAA;QA8BA;AA7BW,QAAAA,gBAAA,iCAA0C;AAC1C,QAAAA,gBAAA,kCAA2C;AAC3C,QAAAA,gBAAA,sCAA+C;AAC/C,QAAAA,gBAAA,+BAAwC;AACxC,QAAAA,gBAAA,wBAAiC;AACjC,QAAAA,gBAAA,0BAAmC;AACnC,QAAAA,gBAAA,+BAAwC;AACxC,QAAAA,gBAAA,mCAA4C;AAC5C,QAAAA,gBAAA,wBAAiC;AACjC,QAAAA,gBAAA,iBAA0B;AAC1B,QAAAA,gBAAA,qBAA8B;AAC9B,QAAAA,gBAAA,wCAAiD;AACjD,QAAAA,gBAAA,iDAA0D;AAC1D,QAAAA,gBAAA,4CAAqD;AAE5C,QAAAA,gBAAA,UAA2B;UACvC,YAAY;UACZ,UAAU,MAAM,SAAS;UACzB,sBAAsB;UACtB,iCAAiC;UACjC,iBAAiB;UACjB,kBAAkB;UAClB,SAAS;YACL,MAAM,MAAM,YAAY;YACxB,+BAA+B;YAC/B,sCAAsC;YACtC,6CAA6C;;;AAGzD,eAAAA;QA9BA;;AAAa,YAAA,iBAAA;AAgCA,YAAA,eAAe;MACxB,iBAAiB;MACjB,+BAA+B;;AAiBnC,QAAA;;MAAA,WAAA;AAAA,iBAAAC,2BAAA;AACY,eAAA,eAAwB;QA0EpC;AAtEI,QAAAA,yBAAA,UAAA,sBAAA,SAAoB,QAAkB,kBAAoC;AACtE,cAAI,CAAC,kBAAkB;AACnB,kBAAM,IAAI,MAAM,gDAAgD;;AAGpE,cAAI,KAAK,WAAW;AAChB,qBAAoB,KAAA,GAAA,WAAA,QAAA,KAAA,SAAA,QAAA,MAAQ;AAAvB,kBAAM,QAAK,SAAA,EAAA;AACZ,kBAAM,UAAU,IAAI,OAAO,YAAY,MAAM,KAAK,iBAAiB,IAAI,EAAE,KACrE,KAAK,SAAS;AAGlB,kBAAI,WAAW,QAAQ,MAAM,IAAI;AAC7B,iCAAiB,MAAM,EAAE,IAAI;;;;QAI7C;AAEA,QAAAA,yBAAA,UAAA,wBAAA,SAAsB,QAA4B,aAAmB;AACjE,eAAK,aAAa,KAAK;AAEvB,cAAI,KAAK,WAAW;AAChB,gBAAM,QAAQ;AACd,gBAAI,UAAO;AAEX,oBAAQ,UAAU,MAAM,KAAK,KAAK,SAAS,OAAO,QAAQ,KAAK,YAAY;AACvE,uBAAkB,KAAA,GAAA,KAAA,OAAO,KAAK,MAAM,GAAlB,KAAA,GAAA,QAAA,MAAqB;AAAlC,oBAAM,MAAG,GAAA,EAAA;AACV,oBAAI,IAAI,YAAW,MAAO,QAAQ,CAAC,EAAE,YAAW,GAAI;AAChD,sBAAM,eAAe,OAAO,GAAG;AAE/B,sBAAI,kBAAkB;AAEtB,sBAAI,aAAa,OAAO;AACpB,sCAAkB,aAAa;;AAGnC,sBAAI,gBAAgB,QAAA,aAAa,iBAAiB;AAC9C,sCAAkB,KAAK,UAAU,eAAe;AAChD,sCAAkB,gBAAgB,MAAM,GAAG,EAAE;6BACtC,gBAAgB,QAAA,aAAa,+BAA+B;AACnE,sCAAkB,mBAAmB,eAAe;;AAGxD,uBAAK,aAAa,KAAK,WAAW,QAAQ,QAAQ,CAAC,GAAG,eAAe;AAErE;;;;;AAMhB,eAAK,eAAe;QACxB;AAEA,QAAAA,yBAAA,UAAA,cAAA,WAAA;AACI,iBAAO,KAAK;QAChB;AAEA,QAAAA,yBAAA,UAAA,MAAA,WAAA;AACI,cAAI,CAAC,KAAK,cAAc;AACpB,mBAAO,KAAK;iBACT;AACH,mBAAO,KAAK;;QAEpB;AAEA,QAAAA,yBAAA,UAAA,MAAA,SAAI,OAAyB;AACzB,eAAK,YAAY;AACjB,eAAK,eAAe;QACxB;AACJ,eAAAA;MAAA,EA3EA;;AAAa,YAAA,0BAAA;AA6Eb,QAAA;;MAAA,2BAAA;AAMI,iBAAAC,mBAAY,KAAiB,OAAmB,QAAoB,MAAgB;AAAxE,cAAA,QAAA,QAAA;AAAA,kBAAA;UAAe;AAAE,cAAA,UAAA,QAAA;AAAA,oBAAA;UAAiB;AAAE,cAAA,WAAA,QAAA;AAAA,qBAAA;UAAkB;AAAE,cAAA,SAAA,QAAA;AAAA,mBAAA;UAAgB;AALpF,eAAA,OAAe;AACf,eAAA,MAAc;AACd,eAAA,QAAgB;AAChB,eAAA,SAAiB;AAGb,eAAK,MAAM;AACX,eAAK,QAAQ;AACb,eAAK,SAAS;AACd,eAAK,OAAO;QAChB;AACJ,eAAAA;MAAA,EAZA;;AAAa,YAAA,oBAAA;AAcb,QAAA;;MAAA,2BAAA;AAMI,iBAAAC,mBACI,KACA,OACA,QACA,MAAwC;AAHxC,cAAA,QAAA,QAAA;AAAA,kBAAqB,MAAM,QAAQ;UAAI;AACvC,cAAA,UAAA,QAAA;AAAA,oBAAuB,MAAM,QAAQ;UAAI;AACzC,cAAA,WAAA,QAAA;AAAA,qBAAwB,MAAM,QAAQ;UAAI;AAC1C,cAAA,SAAA,QAAA;AAAA,mBAAsB,MAAM,QAAQ;UAAI;AAT5C,eAAA,MAAqB,MAAM,QAAQ;AACnC,eAAA,QAAuB,MAAM,QAAQ;AACrC,eAAA,SAAwB,MAAM,QAAQ;AACtC,eAAA,OAAsB,MAAM,QAAQ;AAQhC,eAAK,MAAM;AACX,eAAK,QAAQ;AACb,eAAK,SAAS;AACd,eAAK,OAAO;QAChB;AACJ,eAAAA;MAAA,EAjBA;;AAAa,YAAA,oBAAA;AAmBb,QAAA;;MAAA,WAAA;AAgCI,iBAAAC,aAAY,cAAsB,MAAoB;AAClD,eAAK,eAAe;AACpB,eAAK,OAAO;QAChB;AA/BO,QAAAA,aAAA,QAAP,SAAa,OAAe,sBAAqC;AAArC,cAAA,yBAAA,QAAA;AAAA,mCAAA;UAAqC;AAC7D,cAAM,SAAS,IAAIA,aAAY,GAAG,MAAM,SAAS,MAAM;AAEvD,cAAI,OAAO,UAAU,UAAU;AAC3B,mBAAO,eAAe;AAEtB,mBAAO;qBACA,OAAO,UAAU,UAAU;AAClC,gBAAM,SAAS;AACf,gBAAM,UAAU,OAAO,KAAK,KAAK;AACjC,gBAAM,qBAAqB,uBAAuB,IAAI;AAEtD,gBAAI,WAAW,QAAQ,UAAU,oBAAoB;AACjD,qBAAO,eAAe,SAAS,QAAQ,CAAC,CAAC;AAEzC,kBAAI,QAAQ,WAAW,GAAG;AACtB,oBAAI,QAAQ,CAAC,MAAM,MAAM;AACrB,yBAAO,OAAO,MAAM,SAAS;;;AAIrC,qBAAO;;;AAIf,gBAAM,IAAI,MAAM,mBAAmB,KAAK;QAC5C;AAMJ,eAAAA;MAAA,EApCA;;AAAa,YAAA,cAAA;AAkDb,QAAA;;MAAA,WAAA;AAAA,iBAAAC,QAAA;QAsCA;AAnCW,QAAAA,MAAA,WAAP,WAAA;AACI,cAAM,KAAM,KAAK,OAAM,IAAK,aAAc;AAC1C,cAAM,KAAM,KAAK,OAAM,IAAK,aAAc;AAC1C,cAAM,KAAM,KAAK,OAAM,IAAK,aAAc;AAC1C,cAAM,KAAM,KAAK,OAAM,IAAK,aAAc;AAE1C,iBACIA,MAAK,IAAI,KAAK,GAAI,IAClBA,MAAK,IAAK,MAAM,IAAK,GAAI,IACzBA,MAAK,IAAK,MAAM,KAAM,GAAI,IAC1BA,MAAK,IAAK,MAAM,KAAM,GAAI,IAC1B,MACAA,MAAK,IAAI,KAAK,GAAI,IAClBA,MAAK,IAAK,MAAM,IAAK,GAAI,IACzB,MACAA,MAAK,IAAM,MAAM,KAAM,KAAQ,EAAI,IACnCA,MAAK,IAAK,MAAM,KAAM,GAAI,IAC1B,MACAA,MAAK,IAAK,KAAK,KAAQ,GAAI,IAC3BA,MAAK,IAAK,MAAM,IAAK,GAAI,IACzB,MACAA,MAAK,IAAK,MAAM,KAAM,GAAI,IAC1BA,MAAK,IAAK,MAAM,KAAM,GAAI,IAC1BA,MAAK,IAAI,KAAK,GAAI,IAClBA,MAAK,IAAK,MAAM,IAAK,GAAI,IACzBA,MAAK,IAAK,MAAM,KAAM,GAAI,IAC1BA,MAAK,IAAK,MAAM,KAAM,GAAI;QAElC;AAEO,QAAAA,MAAA,aAAP,WAAA;AACI,mBAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC1B,YAAAA,MAAK,IAAI,CAAC,KAAK,IAAI,KAAK,MAAM,MAAM,EAAE,SAAS,EAAE;;QAEzD;AApCe,QAAAA,MAAA,MAAgB,CAAA;AAqCnC,eAAAA;QAtCA;;AAAa,YAAA,OAAA;AAwCb,SAAK,WAAU;;;;;;;;;;;AChRf,QAAA,QAAA;AACA,QAAA,SAAA;AAWA,aAAgB,qBAAkB;AAE9B,aAAO,OAAO,SAAS,iBAAiB;IAC5C;AAHA,YAAA,qBAAA;AAKA,aAAgB,aAAU;AACtB,UAAM,YAAY,OAAO,UAAU;AAEnC,aACI,CAAC,CAAC,UAAU,MAAM,UAAU,KAAK,CAAC,CAAC,UAAU,MAAM,OAAO,KAAK,CAAC,CAAC,UAAU,MAAM,SAAS;IAElG;AANA,YAAA,aAAA;AAWA,aAAgB,mBAAgB;AAC5B,aAAO,UAAU,OAAO,KAAK,SAAQ;IACzC;AAFA,YAAA,mBAAA;AAIA,aAAgB,YAAY,MAAY,OAAuB;AAC3D,UAAI,OAAO;AACP,aAAK,YAAY,KAAK;;IAE9B;AAJA,YAAA,cAAA;AAMA,aAAgB,YAAY,KAAU,cAAqB;AACvD,aAAO,OAAO,QAAQ,WAAW,MAAM;IAC3C;AAFA,YAAA,cAAA;AAIA,aAAgB,YAAY,KAAU,cAAqB;AACvD,aAAO,OAAO,QAAQ,WAAW,MAAM;IAC3C;AAFA,YAAA,cAAA;AAIA,aAAgB,UAAU,OAAY,cAAsB;AACxD,UAAI,OAAO,UAAU,WAAW;AAC5B,eAAO;iBACA,OAAO,UAAU,UAAU;AAClC,gBAAQ,MAAM,YAAW,GAAI;UACzB,KAAK;AACD,mBAAO;UACX,KAAK;AACD,mBAAO;UACX;AACI,mBAAO;;;AAInB,aAAO;IACX;AAfA,YAAA,YAAA;AAiBA,aAAgB,mBACZ,UACA,MAAY;AAGZ,eAAW,OAAO,UAAU;AACxB,YAAM,cAAc,SAAS,KAAK,EAAE;AAEpC,YAAI,eAAe,GAAG;AAClB,cAAM,QAAQ,SAAS,GAAG;AAE1B,cAAI,SAAS,OAAO,UAAU,YAAY,MAAM,YAAW,MAAO,KAAK,YAAW,GAAI;AAClF,mBAAO;;;;AAKnB,aAAO;IACX;AAlBA,YAAA,qBAAA;AAoBA,aAAgB,UACZ,UACA,MACA,cAAqB;AAErB,UAAI,CAAC,MAAM;AACP,eAAO;;AAGX,UAAM,YAAY,mBAAmB,UAAU,IAAI;AAEnD,aAAO,cAAc,SAAY,YAAY;IACjD;AAZA,YAAA,YAAA;AAcA,aAAgB,iBAAiB,OAAyB;AACtD,UAAI,OAAO;AACP,YAAM,QAAQ;AACd,YAAM,UAAU,MAAM,KAAK,KAAK;AAEhC,YAAI,WAAW,QAAQ,CAAC,GAAG;AACvB,cAAM,IAAI,SAAS,QAAQ,CAAC,GAAG,EAAE,IAAI;AACrC,cAAM,IAAI,SAAS,QAAQ,CAAC,GAAG,EAAE;AACjC,cAAM,IAAI,SAAS,QAAQ,CAAC,GAAG,EAAE;AACjC,cAAM,IAAI,SAAS,QAAQ,CAAC,GAAG,EAAE;AAEjC,iBAAO,UAAU,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI;;;AAI3D,aAAO;IACX;AAhBA,YAAA,mBAAA;AAkBA,aAAS,eACL,SACA,WACA,UACA,YACA,YAAmB;AAEnB,UAAM,OAAO,WAAA;AAGT,eAAO,YAAY,QAAQ,gBAAgB;MAC/C;AAEA,UAAI,KAAI,GAAI;AACR;;AAGJ,UAAM,mBAAmB,qBAAqB,QAAQ;AACtD,UAAI,KAAK;AACT,UAAI,KAAK,iBAAiB;AAC1B,UAAI,eAAe;AAGnB,aAAO,KAAK,IAAI;AACZ,YAAM,MAAM,KAAK,OAAO,KAAK,MAAM,CAAC;AACpC,mBAAW,UAAU,iBAAiB,GAAG,CAAC;AAE1C,YAAI,KAAI,GAAI;AACR,yBAAe,iBAAiB,GAAG;AACnC,eAAK,MAAM;eACR;AACH,eAAK;;;AAIb,iBAAW,UAAU,YAAY;AAIjC,UAAI,cAAc,YAAY,QAAQ,gBAAgB,aAAa,GAAK;AACpE,YAAI,MAAM,kBAAkB,UAAU,YAAY;AAElD,eAAO,MAAM,SAAS,QAAQ;AAC1B,qBAAW,UAAU,GAAG;AAExB,cAAI,KAAI,GAAI;AACR,2BAAe;AACf,kBAAM,kBAAkB,UAAU,GAAG;iBAClC;AACH;;;AAIR,mBAAW,UAAU,YAAY;;IAEzC;AAEA,aAAgB,aAAa,SAAsB,WAAmB,YAAmB;AACrF,qBACI,SACA,WACA,QAAQ,WACR,SAAC,MAAc,KAAW;AACtB,gBAAQ,YAAY,KAAK,UAAU,GAAG,GAAG,IAAI;MACjD,GACA,UAAU;IAElB;AAVA,YAAA,eAAA;AAkBA,QAAM,qBAAsB,OAAO,WAAW,cAAe,UAAY,KAAA,OAAO,kBAAY,QAAA,OAAA,SAAA,SAAA,GAAE,aAAa,kDAAkD;MACzJ,YAAY,SAAC,OAAK;AAAK,eAAA;MAAA;KAC1B;AAGD,aAAgB,SAAS,SAAsB,WAAmB,YAAmB;AACjF,qBACI,SACA,WACA,QAAQ,WACR,SAAC,MAAc,KAAW;;AACtB,YAAM,kBAAkB,KAAK,UAAU,GAAG,GAAG,IAAI;AACjD,YAAM,iBACFC,MAAA,uBAAkB,QAAlB,uBAAkB,SAAA,SAAlB,mBAAoB,WAAW,eAAe,OAAC,QAAAA,QAAA,SAAAA,MAAI;AACvD,gBAAQ,YAAY;MACxB,GACA,UAAU;IAElB;AAbA,YAAA,WAAA;AAeA,aAAS,qBAAqB,MAAY;AACtC,UAAM,UAAoB,CAAA;AAC1B,UAAI,MAAM,kBAAkB,MAAM,EAAE;AAEpC,aAAO,MAAM,KAAK,QAAQ;AACtB,YAAI,KAAK,GAAG,MAAM,KAAK;AACnB,kBAAQ,KAAK,GAAG;;AAGpB,cAAM,kBAAkB,MAAM,GAAG;;AAGrC,aAAO;IACX;AAEA,aAAS,kBAAkB,MAAc,SAAe;AACpD,iBAAW;AAIX,aAAO,UAAU,KAAK,UAAU,KAAK,OAAO,MAAM,KAAK;AACnD,eAAO,UAAU,KAAK,UAAU,KAAK,SAAS,MAAM,KAAK;AACrD;;;AAIR,aAAO;IACX;AAEA,aAAgB,aAAa,SAAsB,cAAoB;AACnE,UAAM,QAAQ,QAAQ;AACtB,UAAM,MAAM,QAAQ,QAAQ;AAE5B,UAAI,OAAO,cAAc;AACrB,eAAO,MAAM,mBAAmB;iBACzB,QAAQ,cAAc;AAC7B,eAAO,MAAM,mBAAmB;aAC7B;AACH,eAAO,MAAM,mBAAmB;;IAExC;AAXA,YAAA,eAAA;AAaA,aAAgB,aAAU;AACtB,aAAO,OAAO;IAClB;AAFA,YAAA,aAAA;AAIA,aAAgB,aAAU;AACtB,aAAO,OAAO;IAClB;AAFA,YAAA,aAAA;AAIA,aAAgB,qBAAqB,SAAoB;AACrD,aAAO,QAAQ,YAAY;AACvB,gBAAQ,YAAY,QAAQ,UAAU;;IAE9C;AAJA,YAAA,uBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpQA,QAAA,WAAA;AACA,QAAA,QAAA;AACA,QAAA,QAAA;AACA,QAAA,YAAA;AASA,QAAA;;MAAA,WAAA;AAOI,iBAAAC,SAAY,OAAmB,OAAmB,OAAc;AAApD,cAAA,UAAA,QAAA;AAAA,oBAAA;UAAiB;AAAE,cAAA,UAAA,QAAA;AAAA,oBAAA;UAAiB;AAHxC,eAAA,WAAoB;AAIxB,eAAK,SAAS;AACd,eAAK,SAAS;AACd,eAAK,SAAS;QAClB;AAEO,QAAAA,SAAA,QAAP,SAAa,eAAuB,SAAiC;AACjE,cAAI,CAAC,eAAe;AAChB,mBAAO;;AAGX,cAAM,SAAS,IAAIA,SAAO;AAC1B,iBAAO,iBAAiB;AAExB,cAAM,QAAQ;AACd,cAAM,UAAU,MAAM,KAAK,aAAa;AAExC,cAAI,WAAW,QAAQ,QAAQ,WAAW,GAAG;AACzC,mBAAO,SAAS,SAAS,QAAQ,CAAC,CAAC;AACnC,mBAAO,SAAS,SAAS,QAAQ,CAAC,CAAC;iBAChC;AACH,mBAAO,WAAW;;AAGtB,cAAI,CAAC,OAAO,UAAU;AAClB,oBAAQ,cACJ,QACA,MAAM,gBAAgB,sBACtB,UAAA,QAAQ,OAAO,qBAAqB,OAAO,cAAc,CAAC;;AAIlE,iBAAO;QACX;AAEA,QAAAA,SAAA,UAAA,WAAA,WAAA;AACI,iBAAO,CAAC,KAAK,WAAW,KAAK,iBAAiB,KAAK,SAAS,MAAM,KAAK;QAC3E;AAEA,QAAAA,SAAA,UAAA,SAAA,WAAA;AACI,iBAAO,KAAK,SAAQ;QACxB;AAEA,QAAAA,SAAA,UAAA,YAAA,SAAU,cAAqB;AAC3B,cAAI,CAAC,KAAK,WAAW,CAAC,aAAa,SAAS;AACxC,kBAAM,IAAI,MAAM,iCAAiC;;AAGrD,cAAI,KAAK,QAAQ,aAAa,OAAO;AACjC,mBAAO;qBACA,KAAK,QAAQ,aAAa,OAAO;AACxC,mBAAO;qBACA,KAAK,QAAQ,aAAa,OAAO;AACxC,mBAAO;qBACA,KAAK,QAAQ,aAAa,OAAO;AACxC,mBAAO;;AAGX,iBAAO;QACX;AAEA,eAAA,eAAIA,SAAA,WAAA,SAAK;eAAT,WAAA;AACI,mBAAO,KAAK,SAAS,KAAK,SAAS,KAAK,SAAQ;UACpD;;;;AAEA,eAAA,eAAIA,SAAA,WAAA,SAAK;eAAT,WAAA;AACI,mBAAO,KAAK;UAChB;;;;AAEA,eAAA,eAAIA,SAAA,WAAA,SAAK;eAAT,WAAA;AACI,mBAAO,KAAK;UAChB;;;;AAEA,eAAA,eAAIA,SAAA,WAAA,WAAO;eAAX,WAAA;AACI,mBAAO,KAAK;UAChB;;;;AACJ,eAAAA;MAAA,EAnFA;;AAAa,YAAA,UAAA;AAwFb,QAAA;;MAAA,WAAA;AAAA,iBAAAC,YAAA;QAmCA;AArBW,QAAAA,UAAA,yBAAP,WAAA;AACI,cAAM,OAAYA;AAClB,cAAM,aAAwB,CAAA;AAE9B,mBAAW,gBAAgB,MAAM;AAC7B,gBAAI,aAAa,MAAM,YAAY,GAAG;AAElC,kBAAI;AACA,oBAAM,gBAAgB,KAAK,YAAY;AAEvC,oBAAI,yBAAyB,SAAS;AAClC,6BAAW,KAAK,aAAa;;uBAEnC,IAAM;;;;AAMhB,iBAAO,WAAW,KAAK,SAAC,IAAa,IAAW;AAAK,mBAAA,GAAG,UAAU,EAAE;UAAf,CAAgB;QACzE;AAhCgB,QAAAA,UAAA,OAAO,IAAI,QAAQ,GAAG,CAAC;AACvB,QAAAA,UAAA,OAAO,IAAI,QAAQ,GAAG,CAAC;AACvB,QAAAA,UAAA,OAAO,IAAI,QAAQ,GAAG,CAAC;AACvB,QAAAA,UAAA,OAAO,IAAI,QAAQ,GAAG,CAAC;AACvB,QAAAA,UAAA,OAAO,IAAI,QAAQ,GAAG,CAAC;AACvB,QAAAA,UAAA,OAAO,IAAI,QAAQ,GAAG,CAAC;AAGvB,QAAAA,UAAA,OAAO,IAAI,QAAQ,GAAG,GAAG,aAAa;AACtC,QAAAA,UAAA,SAASA,UAAS;AAwBtC,eAAAA;QAnCA;;AAAa,YAAA,WAAA;AAqCb,aAAgB,qBACZ,SACA,eAA4B;AAE5B,UAAI,mBAAmB,SAAS;AAC5B,YAAI,yBAAyB,SAAS;AAClC,iBAAO,cAAc,UAAU,OAAO,KAAK;eACxC;AAEH,iBAAO;;aAER;AAEH,eAAO;;IAEf;AAfA,YAAA,uBAAA;AAiBA,QAAA;;MAAA,WAAA;AAMI,iBAAAC,0BAAY,eAAwC;AAAxC,cAAA,kBAAA,QAAA;AAAA,4BAAyB,SAAS;UAAM;AAL5C,eAAA,oBAAwC,CAAA;AAM5C,eAAK,gBAAgB;QACzB;AAEA,QAAAA,0BAAA,UAAA,iBAAA,SACI,QACA,cACA,eACA,cACA,4BAA2C;AAD3C,cAAA,iBAAA,QAAA;AAAA,2BAAA;UAA6B;AAC7B,cAAA,+BAAA,QAAA;AAAA,yCAAA;UAA2C;AAE3C,cACI,kBAAkB,QAClB,kBAAkB,UAClB,kBAAkB,cACpB;AACE,gBAAI,CAAC,SAAA,eAAe,2BAA2B,4BAA4B;AACvE,qBAAO,OAAO,YAAY;;qBAEvB,kBAAkB,cAAc;AACvC,mBAAO,OAAO,YAAY;iBACvB;AACH,mBAAO,YAAY,IAAI;;QAE/B;AAEA,QAAAA,0BAAA,UAAA,kBAAA,SACI,QACA,cACA,eACA,cAAqB;AAErB,cACI,kBAAkB,QAClB,kBAAkB,UAClB,kBAAkB,cACpB;AACE,gBAAI,CAAC,SAAA,eAAe,yBAAyB;AACzC,qBAAO,OAAO,YAAY;;iBAE3B;AACH,mBAAO,YAAY,IAAI;;QAE/B;AAEA,QAAAA,0BAAA,UAAA,gBAAA,SACI,QACA,cACA,eACA,cAAsB;AAEtB,cACI,kBAAkB,QAClB,kBAAkB,UAClB,kBAAkB,cACpB;AACE,gBAAI,CAAC,SAAA,eAAe,yBAAyB;AACzC,qBAAO,OAAO,YAAY;;iBAE3B;AACH,mBAAO,YAAY,IAAI;;QAE/B;AAEA,QAAAA,0BAAA,UAAA,kBAAA,SACI,QACA,cACA,eACA,cAAqB;AAErB,cACI,kBAAkB,QAClB,kBAAkB,UAClB,kBAAkB,gBAClB,MAAM,aAAa,GACrB;AACE,gBAAI,CAAC,SAAA,eAAe,yBAAyB;AACzC,qBAAO,OAAO,YAAY;;iBAE3B;AACH,mBAAO,YAAY,IAAI;;QAE/B;AAEA,QAAAA,0BAAA,UAAA,gBAAA,SACI,UACA,QACA,cACA,eACA,cAA4C;AAA5C,cAAA,iBAAA,QAAA;AAAA,2BAAA;UAA4C;AAE5C,cACI,kBAAkB,QAClB,kBAAkB,UAClB,kBAAkB,cACpB;AACE,gBAAI,CAAC,SAAA,eAAe,yBAAyB;AACzC,qBAAO,OAAO,YAAY;;iBAE3B;AACH,mBAAO,YAAY,IAAI,SAAS,aAAa;;QAErD;AAEA,QAAAA,0BAAA,UAAA,iBAAA,SACI,QACA,cACA,eAAgC;AAEhC,cAAM,QAAQ,CAAA;AAEd,cAAI,eAAe;AACf,qBAAmB,KAAA,GAAA,kBAAA,eAAA,KAAA,gBAAA,QAAA,MAAe;AAA7B,kBAAM,OAAI,gBAAA,EAAA;AACX,kBAAI,iBAAsB;AAE1B,kBAAI,gBAAgB,oBAAoB;AACpC,iCAAiB,KAAK,OAAO,IAAI;yBAC1B,KAAK,QAAQ;AACpB,iCAAiB,KAAK,OAAM;qBACzB;AACH,iCAAiB;;AAGrB,kBAAI,mBAAmB,QAAW;AAC9B,sBAAM,KAAK,cAAc;;;;AAKrC,cAAI,MAAM,WAAW,GAAG;AACpB,gBAAI,OAAO,eAAe,YAAY,KAAK,MAAM,QAAQ,OAAO,YAAY,CAAC,GAAG;AAC5E,qBAAO,OAAO,YAAY;;iBAE3B;AACH,iBAAK,eAAe,QAAQ,cAAc,KAAK;;QAEvD;AAEA,QAAAA,0BAAA,UAAA,cAAA,WAAA;AACI,eAAK,oBAAoB,CAAA;QAC7B;AAEA,QAAAA,0BAAA,UAAA,WAAA,SACI,QACA,OACA,OACA,SAAe;AAEf,eAAK,kBAAkB,KAAK;YACxB;YACA;YACA;YACA;WACH;QACL;AAEA,QAAAA,0BAAA,UAAA,gBAAA,SACI,QACA,OACA,SAAe;AAEf,eAAK,SAAS,QAAQ,MAAM,gBAAgB,OAAO,OAAO,OAAO;QACrE;AAEA,QAAAA,0BAAA,UAAA,aAAA,SAAW,OAAa;AACpB,iBAAO,KAAK,kBAAkB,KAAK;QACvC;AAEA,eAAA,eAAIA,0BAAA,WAAA,cAAU;eAAd,WAAA;AACI,mBAAO,KAAK,kBAAkB;UAClC;;;;AACJ,eAAAA;MAAA,EAjLA;;AAAsB,YAAA,2BAAA;AAmLtB,QAAA;;MAAA,SAAA,QAAA;AAAyC,kBAAAC,6BAAA,MAAA;AAAzC,iBAAAA,8BAAA;;QAAmE;AAAA,eAAAA;MAAA,EAA1B,wBAAwB;;AAEjE,QAAA;;MAAA,WAAA;AA4BI,iBAAAC,oBACa,eACA,MACA,cACA,mBAAuD;AAHvD,eAAA,gBAAA;AACA,eAAA,OAAA;AACA,eAAA,eAAA;AACA,eAAA,oBAAA;AANb,eAAA,yBAAkC;AAQ9B,eAAK,mBAAmBA,oBAAmB;AAE3C,UAAAA,oBAAmB;QACvB;AAlCA,QAAAA,oBAAA,UAAA,kBAAA,WAAA;AACI,iBAAO,KAAK;QAChB;AAEA,QAAAA,oBAAA,UAAA,QAAA,SACI,QACA,QACA,SAAiC;AAEjC,iBAAO,OAAO,KAAK,IAAI;QAC3B;AAEA,QAAAA,oBAAA,UAAA,SAAA,SACI,QACA,QACA,OACA,SAAiC;AAEjC,kBAAQ,eAAe,QAAQ,KAAK,MAAM,OAAO,KAAK,YAAY;QACtE;AArBe,QAAAA,oBAAA,oBAA4B;AAqC/C,eAAAA;QAtCA;;AAAa,YAAA,qBAAA;AAwCb,QAAA;;MAAA,SAAA,QAAA;AAAoC,kBAAAC,iBAAA,MAAA;AAyChC,iBAAAA,gBACa,eACA,MACA,uBACA,OACA,cACA,mBAA0D;AAH1D,cAAA,0BAAA,QAAA;AAAA,oCAAA;UAAqC;AAHlD,cAAA,QAQI,OAAA,KAAA,MAAM,eAAe,MAAM,cAAc,iBAAiB,KAAC;AAPlD,gBAAA,gBAAA;AACA,gBAAA,OAAA;AACA,gBAAA,wBAAA;AACA,gBAAA,QAAA;AACA,gBAAA,eAAA;AACA,gBAAA,oBAAA;;QAGb;AAjDA,QAAAA,gBAAA,UAAA,QAAA,SACI,QACA,QACA,SAAiC;AAEjC,cAAM,cAAc,MAAM,YAAY,OAAO,KAAK,IAAI,GAAG,KAAK,YAAY;AAC1E,cAAM,cACF,gBAAgB,UAAc,gBAAgB,MAAM,KAAK;AAE7D,cAAI,CAAC,eAAe,KAAK,UAAU,QAAW;AAC1C,gBAAM,UAAU,KAAK,MAAM,KAAK,WAAW;AAE3C,gBAAI,CAAC,SAAS;AACV,sBAAQ,cACJ,QACA,MAAM,gBAAgB,sBACtB,UAAA,QAAQ,OAAO,qBAAqB,aAAa,KAAK,IAAI,CAAC;AAG/D,qBAAO;;;AAIf,iBAAO;QACX;AAEA,QAAAA,gBAAA,UAAA,SAAA,SACI,QACA,QACA,OACA,SAAiC;AAEjC,kBAAQ,gBACJ,QACA,KAAK,MACL,UAAU,MAAM,KAAK,wBAAwB,SAAY,OACzD,KAAK,YAAY;QAEzB;AAYJ,eAAAA;MAAA,EAnDoC,kBAAkB;;AAAzC,YAAA,iBAAA;AAqDb,QAAA;;MAAA,SAAA,QAAA;AAAkC,kBAAAC,eAAA,MAAA;AAkB9B,iBAAAA,cACa,eACA,MACA,cACA,mBAAuD;AAJpE,cAAA,QAMI,OAAA,KAAA,MAAM,eAAe,MAAM,cAAc,iBAAiB,KAAC;AALlD,gBAAA,gBAAA;AACA,gBAAA,OAAA;AACA,gBAAA,eAAA;AACA,gBAAA,oBAAA;;QAGb;AAxBA,QAAAA,cAAA,UAAA,QAAA,SACI,QACA,QACA,SAAiC;AAEjC,iBAAO,MAAM,UAAU,OAAO,KAAK,IAAI,GAAG,KAAK,YAAY;QAC/D;AAEA,QAAAA,cAAA,UAAA,SAAA,SACI,QACA,QACA,OACA,SAAiC;AAEjC,kBAAQ,cAAc,QAAQ,KAAK,MAAM,OAAO,KAAK,YAAY;QACrE;AAUJ,eAAAA;MAAA,EA1BkC,kBAAkB;;AAAvC,YAAA,eAAA;AA4Bb,QAAA;;MAAA,SAAA,QAAA;AAAiC,kBAAAC,cAAA,MAAA;AAkB7B,iBAAAA,aACa,eACA,MACA,cACA,mBAAuD;AAJpE,cAAA,QAMI,OAAA,KAAA,MAAM,eAAe,MAAM,cAAc,iBAAiB,KAAC;AALlD,gBAAA,gBAAA;AACA,gBAAA,OAAA;AACA,gBAAA,eAAA;AACA,gBAAA,oBAAA;;QAGb;AAxBA,QAAAA,aAAA,UAAA,QAAA,SACI,QACA,QACA,SAAiC;AAEjC,iBAAO,MAAM,YAAY,OAAO,KAAK,IAAI,GAAG,KAAK,YAAY;QACjE;AAEA,QAAAA,aAAA,UAAA,SAAA,SACI,QACA,QACA,OACA,SAAiC;AAEjC,kBAAQ,gBAAgB,QAAQ,KAAK,MAAM,OAAO,KAAK,YAAY;QACvE;AAUJ,eAAAA;MAAA,EA1BiC,kBAAkB;;AAAtC,YAAA,cAAA;AA4Bb,QAAA;;MAAA,SAAA,QAAA;AAAuC,kBAAAC,oBAAA,MAAA;AAAvC,iBAAAA,qBAAA;;QAgDA;AA/CI,QAAAA,mBAAA,UAAA,QAAA,SACI,QACA,QACA,SAAiC;AAEjC,cAAI,SAA6B;AACjC,cAAM,QAAQ,OAAO,KAAK,IAAI;AAE9B,cAAI,OAAO,UAAU,UAAU;AAC3B,gBAAI,UAAU;AAEd,gBAAI;AACA,kBAAM,OAAO,SAAA,YAAY,MAAM,OAAO,IAAI;AAE1C,kBAAI,KAAK,SAAS,MAAM,SAAS,OAAO;AACpC,yBAAS,KAAK;AAEd,0BAAU;;qBAEhB,IAAM;;AAIR,gBAAI,CAAC,SAAS;AACV,sBAAQ,cACJ,QACA,MAAM,gBAAgB,sBACtB,UAAA,QAAQ,OAAO,qBAAqB,OAAO,KAAK,IAAI,GAAG,WAAW,CAAC;;;AAK/E,iBAAO;QACX;AAEA,QAAAA,mBAAA,UAAA,SAAA,SACI,QACA,QACA,OACA,SAAiC;AAEjC,kBAAQ,eACJ,QACA,KAAK,MACL,OAAO,UAAU,YAAY,CAAC,MAAM,KAAK,IAAI,QAAQ,OAAO,MAAS;QAE7E;AACJ,eAAAA;MAAA,EAhDuC,kBAAkB;;AAA5C,YAAA,oBAAA;AAuDb,QAAA;;MAAA,SAAA,QAAA;AAAyC,kBAAAC,sBAAA,MAAA;AAwCrC,iBAAAA,qBACa,eACA,MACA,cACA,mBAAwE;AAJrF,cAAA,QAMI,OAAA,KAAA,MAAM,eAAe,MAAM,cAAc,iBAAiB,KAAC;AALlD,gBAAA,gBAAA;AACA,gBAAA,OAAA;AACA,gBAAA,eAAA;AACA,gBAAA,oBAAA;;QAGb;AA9CA,QAAAA,qBAAA,UAAA,QAAA,SACI,QACA,QACA,SAAiC;AAEjC,cAAM,cAAc,OAAO,KAAK,IAAI;AAEpC,cAAI,gBAAgB,UAAa,CAAC,MAAM,QAAQ,WAAW,GAAG;AAC1D,mBAAO,KAAK;;AAGhB,cAAM,SAAmB,CAAA;AAEzB,mBAAoB,KAAA,GAAA,gBAAA,aAAA,KAAA,cAAA,QAAA,MAAa;AAA5B,gBAAM,QAAK,cAAA,EAAA;AACZ,gBAAI,OAAO,UAAU,UAAU;AAC3B,qBAAO,KAAK,KAAK;mBACd;AACH,sBAAQ,cACJ,QACA,MAAM,gBAAgB,sBACtB,wBAAA,OAAwB,KAAK,UACzB,KAAK,GACR,aAAA,EAAA,OAAc,OAAO,OAAK,iBAAA,EAAA,OAAkB,KAAK,MAAI,IAAA,CAAI;;;AAKtE,iBAAO;QACX;AAEA,QAAAA,qBAAA,UAAA,SAAA,SACI,QACA,QACA,OACA,SAAiC;AAEjC,kBAAQ,eAAe,QAAQ,KAAK,MAAM,KAAK;QACnD;AAUJ,eAAAA;MAAA,EAhDyC,kBAAkB;;AAA9C,YAAA,sBAAA;AAkDb,QAAA;;MAAA,SAAA,QAAA;AAAsC,kBAAAC,mBAAA,MAAA;AAyGlC,iBAAAA,kBACa,eACA,MACA,QACA,cACA,mBAA0D;AALvE,cAAA,QAOI,OAAA,KAAA,MAAM,eAAe,MAAM,cAAc,iBAAiB,KAAC;AANlD,gBAAA,gBAAA;AACA,gBAAA,OAAA;AACA,gBAAA,SAAA;AACA,gBAAA,eAAA;AACA,gBAAA,oBAAA;;QAGb;AAhHA,QAAAA,kBAAA,UAAA,eAAA,SAAa,OAAe,SAAiC;AACzD,mBAA6B,KAAA,GAAA,KAAA,KAAK,QAAL,KAAA,GAAA,QAAA,MAAa;AAArC,gBAAM,iBAAc,GAAA,EAAA;AACrB,gBAAI,MAAM,YAAW,MAAO,eAAe,MAAM,YAAW,GAAI;AAC5D,kBAAM,gBAAgB,eAAe,gBAC/B,eAAe,gBACf,KAAK;AAEX,qBAAO,cAAc,UAAU,QAAQ,aAAa,KAAK;;;AAIjE,iBAAO;QACX;AAEA,QAAAA,kBAAA,UAAA,QAAA,SACI,QACA,QACA,SAAiC;AAEjC,cAAM,cAAc,OAAO,KAAK,IAAI;AAEpC,cAAI,gBAAgB,QAAW;AAC3B,mBAAO,KAAK;;AAGhB,cAAI,OAAO,gBAAgB,UAAU;AACjC,qBAA6B,KAAA,GAAA,KAAA,KAAK,QAAL,KAAA,GAAA,QAAA,MAAa;AAArC,kBAAM,iBAAc,GAAA,EAAA;AACrB,kBAAI,YAAY,YAAW,MAAO,eAAe,MAAM,YAAW,GAAI;AAClE,oBAAM,gBAAgB,eAAe,gBAC/B,eAAe,gBACf,KAAK;AAEX,oBAAI,cAAc,UAAU,QAAQ,aAAa,KAAK,GAAG;AACrD,yBAAO,eAAe;uBACnB;AACH,0BAAQ,cACJ,QACA,MAAM,gBAAgB,sBACtB,UAAA,QAAQ,OAAO,0BACX,aACA,KAAK,MACL,cAAc,SAAQ,GACtB,QAAQ,cAAc,SAAQ,CAAE,CACnC;AAGL,yBAAO,KAAK;;;;;AAM5B,kBAAQ,cACJ,QACA,MAAM,gBAAgB,sBACtB,UAAA,QAAQ,OAAO,qBAAqB,aAAa,KAAK,IAAI,CAAC;AAG/D,iBAAO,KAAK;QAChB;AAEA,QAAAA,kBAAA,UAAA,SAAA,SACI,QACA,QACA,OACA,SAAiC;AAEjC,cAAI,eAAe;AAEnB,cAAI,UAAU,QAAW;AACrB,2BAAe;AAEf,qBAA6B,KAAA,GAAA,KAAA,KAAK,QAAL,KAAA,GAAA,QAAA,MAAa;AAArC,kBAAM,iBAAc,GAAA,EAAA;AACrB,kBAAI,eAAe,UAAU,OAAO;AAChC,oBAAM,gBAAgB,eAAe,gBAC/B,eAAe,gBACf,KAAK;AAEX,oBAAI,cAAc,UAAU,QAAQ,aAAa,KAAK,GAAG;AACrD,iCAAe;AAEf;uBACG;AACH,0BAAQ,SACJ,QACA,MAAM,gBAAgB,QACtB,MAAM,gBAAgB,sBACtB,UAAA,QAAQ,OAAO,0BACX,OACA,KAAK,MACL,cAAc,SAAQ,GACtB,QAAQ,cAAc,SAAQ,CAAE,CACnC;;;;;AAOrB,cAAI,CAAC,cAAc;AACf,oBAAQ,eAAe,QAAQ,KAAK,MAAM,OAAO,KAAK,cAAc,IAAI;;QAEhF;AAWJ,eAAAA;MAAA,EAlHsC,kBAAkB;;AAA3C,YAAA,mBAAA;AAoHb,QAAA;;MAAA,SAAA,QAAA;AAAyE,kBAAAC,eAAA,MAAA;AA0FrE,iBAAAA,cACa,eACA,MACA,UACA,cACT,QACS,mBAA0D;AANvE,cAAA,QAQI,OAAA,KAAA,MAAM,eAAe,MAAM,cAAc,iBAAiB,KAAC;AAPlD,gBAAA,gBAAA;AACA,gBAAA,OAAA;AACA,gBAAA,WAAA;AACA,gBAAA,eAAA;AAEA,gBAAA,oBAAA;AA/FL,gBAAA,UAAqC,CAAA;AAmGzC,cAAI,CAAC,QAAQ;AAET,qBAAW,OAAO,UAAU;AACxB,kBAAM,cAAc,SAAS,KAAK,EAAE;AAEpC,kBAAI,eAAe,GAAG;AAClB,sBAAK,QAAQ,KAAK,EAAE,OAAO,YAAW,CAAE;;;iBAG7C;AACH,kBAAK,UAAU;;;QAEvB;AA7GA,QAAAA,cAAA,UAAA,QAAA,SACI,QACA,QACA,SAAiC;AAEjC,cAAM,cAAc,OAAO,KAAK,IAAI;AAEpC,cAAI,OAAO,gBAAgB,UAAU;AACjC,mBAAO,KAAK;;AAGhB,cAAM,YAAY,MAAM,mBAAmB,KAAK,UAAU,WAAW;AAErE,cAAI,cAAc,QAAW;AACzB,qBAA6B,KAAA,GAAA,KAAA,KAAK,QAAL,KAAA,GAAA,QAAA,MAAa;AAArC,kBAAM,iBAAc,GAAA,EAAA;AACrB,kBAAI,eAAe,UAAU,WAAW;AACpC,oBAAM,gBAAgB,eAAe,gBAC/B,eAAe,gBACf,KAAK;AAEX,oBAAI,cAAc,UAAU,QAAQ,aAAa,KAAK,GAAG;AACrD,yBAAO;uBACJ;AACH,0BAAQ,cACJ,QACA,MAAM,gBAAgB,sBACtB,UAAA,QAAQ,OAAO,0BACX,aACA,KAAK,MACL,cAAc,SAAQ,GACtB,QAAQ,cAAc,SAAQ,CAAE,CACnC;AAGL,yBAAO,KAAK;;;;;AAM5B,kBAAQ,cACJ,QACA,MAAM,gBAAgB,sBACtB,UAAA,QAAQ,OAAO,qBAAqB,aAAa,KAAK,IAAI,CAAC;AAG/D,iBAAO,KAAK;QAChB;AAEA,QAAAA,cAAA,UAAA,SAAA,SACI,QACA,QACA,OACA,SAAiC;AAEjC,cAAI,eAAe;AAEnB,cAAI,UAAU,QAAW;AACrB,2BAAe;AAEf,qBAA6B,KAAA,GAAA,KAAA,KAAK,QAAL,KAAA,GAAA,QAAA,MAAa;AAArC,kBAAM,iBAAc,GAAA,EAAA;AACrB,kBAAI,eAAe,UAAU,OAAO;AAChC,oBAAM,gBAAgB,eAAe,gBAC/B,eAAe,gBACf,KAAK;AAEX,oBAAI,cAAc,UAAU,QAAQ,aAAa,KAAK,GAAG;AACrD,iCAAe;AAEf;uBACG;AACH,0BAAQ,SACJ,QACA,MAAM,gBAAgB,QACtB,MAAM,gBAAgB,sBACtB,UAAA,QAAQ,OAAO,qBAAqB,OAAO,KAAK,IAAI,CAAC;;;;;AAOzE,cAAI,CAAC,cAAc;AACf,oBAAQ,cAAc,KAAK,UAAU,QAAQ,KAAK,MAAM,OAAO,KAAK,YAAY;;QAExF;AA0BA,eAAA,eAAIA,cAAA,WAAA,UAAM;eAAV,WAAA;AACI,mBAAO,KAAK;UAChB;;;;AACJ,eAAAA;MAAA,EArHyE,kBAAkB;;AAA9E,YAAA,eAAA;AAyHb,QAAA;;MAAA,SAAA,QAAA;AAAgD,kBAAAC,6BAAA,MAAA;AAqC5C,iBAAAA,4BACa,eACA,MACA,YACA,UACT,cAAiC;AADxB,cAAA,aAAA,QAAA;AAAA,uBAAA;UAAyB;AAJtC,cAAA,QAOI,OAAA,KAAA,MAAM,eAAe,MAAM,cAAc,SAAC,QAA0B;AAChE,mBAAO,MAAK,WAAW,SAAY,IAAI,MAAK,WAAU;UAC1D,CAAC,KAAC;AARO,gBAAA,gBAAA;AACA,gBAAA,OAAA;AACA,gBAAA,aAAA;AACA,gBAAA,WAAA;;QAMb;AA9CA,QAAAA,4BAAA,UAAA,QAAA,SACI,QACA,QACA,SAAiC;AAEjC,cAAM,cAAc,OAAO,KAAK,IAAI;AAEpC,cAAI,gBAAgB,QAAW;AAC3B,mBAAO,KAAK,oBAAoB,KAAK,kBAAkB,MAAM,IAAI,KAAK;;AAG1E,cAAM,SAAS,IAAI,KAAK,WAAU;AAClC,iBAAO,MAAM,aAAa,OAAO;AAEjC,iBAAO;QACX;AAEA,QAAAA,4BAAA,UAAA,SAAA,SACI,QACA,QACA,OACA,SAAiC;AAEjC,cAAI,kBAAsC;AAE1C,cAAI,UAAU,UAAa,CAAC,MAAM,oBAAmB,GAAI;AACrD,8BAAkB,MAAM,OAAO,OAAO;;AAG1C,cAAI,OAAO,oBAAoB,YAAY,OAAO,KAAK,eAAe,EAAE,WAAW,GAAG;AAClF,8BAAkB;;AAGtB,kBAAQ,eAAe,QAAQ,KAAK,MAAM,iBAAiB,KAAK,cAAc,IAAI;QACtF;AAaJ,eAAAA;MAAA,EAhDgD,kBAAkB;;AAArD,YAAA,6BAAA;AAkDb,QAAA;;MAAA,SAAA,QAAA;AAA0D,kBAAAC,uCAAA,MAAA;AAuCtD,iBAAAA,sCACa,eACA,MACA,YACA,aAA4E;AAJzF,cAAA,QAMI,OAAA,KAAA,MAAM,eAAe,MAAM,QAAW,SAAC,QAA0B;AAC7D,mBAAO,CAAA;UACX,CAAC,KAAC;AAPO,gBAAA,gBAAA;AACA,gBAAA,OAAA;AACA,gBAAA,aAAA;AACA,gBAAA,cAAA;;QAKb;AA/CA,QAAAA,sCAAA,UAAA,QAAA,SACI,QACA,QACA,SAAiC;AAEjC,cAAM,SAA2C,CAAA;AAEjD,cAAM,mBAAmB,OAAO,KAAK,IAAI;AAEzC,cAAI,MAAM,QAAQ,gBAAgB,GAAG;AACjC,qBAAyB,KAAA,GAAA,qBAAA,kBAAA,KAAA,mBAAA,QAAA,MAAkB;AAAtC,kBAAM,aAAU,mBAAA,EAAA;AACjB,kBAAM,OAAO,IAAI,KAAK,WAAU;AAChC,mBAAK,MAAM,YAAY,OAAO;AAE9B,qBAAO,KAAK,IAAI;AAEhB,kBAAI,KAAK,aAAa;AAClB,qBAAK,YAAY,QAAQ,IAAI;;;;AAKzC,iBAAO,OAAO,SAAS,IACjB,SACA,KAAK,oBACL,KAAK,kBAAkB,MAAM,IAC7B;QACV;AAEA,QAAAA,sCAAA,UAAA,SAAA,SACI,QACA,QACA,OACA,SAAiC;AAEjC,kBAAQ,eAAe,QAAQ,KAAK,MAAM,KAAK;QACnD;AAYJ,eAAAA;MAAA,EAjD0D,kBAAkB;;AAA/D,YAAA,uCAAA;AAmDb,QAAA;;MAAA,SAAA,QAAA;AAAuC,kBAAAC,iBAAA,MAAA;AAcnC,iBAAAA,gBACa,eACA,MACA,SAMA,UAOA,cACA,mBAAqD;AAjBlE,cAAA,QAmBI,OAAA,KAAA,MAAM,eAAe,MAAM,cAAc,iBAAiB,KAAC;AAlBlD,gBAAA,gBAAA;AACA,gBAAA,OAAA;AACA,gBAAA,UAAA;AAMA,gBAAA,WAAA;AAOA,gBAAA,eAAA;AACA,gBAAA,oBAAA;AAIT,cAAI,CAAC,MAAK,SAAS;AACf,kBAAM,IAAI,MAAM,kEAAkE;;AAGtF,cAAI,CAAC,MAAK,UAAU;AAChB,kBAAM,IAAI,MAAM,mEAAmE;;;QAE3F;AAzCA,QAAAA,gBAAA,UAAA,QAAA,SAAM,QAA4B,QAAqB,SAAiC;AACpF,iBAAO,KAAK,QAAQ,QAAQ,MAAM,QAAQ,OAAO;QACrD;AAEA,QAAAA,gBAAA,UAAA,SAAA,SACI,QACA,QACA,OACA,SAAiC;AAEjC,eAAK,SAAS,QAAQ,MAAM,QAAQ,OAAO,OAAO;QACtD;AA+BJ,eAAAA;MAAA,EA3CuC,kBAAkB;;AAA5C,YAAA,iBAAA;AA6Cb,QAAA;;MAAA,WAAA;AAAA,iBAAAC,4BAAA;AACY,eAAA,cAAoC,CAAA;QAyChD;AAvCI,QAAAA,0BAAA,UAAA,UAAA,SAAQ,MAAwB;AAC5B,mBAAS,IAAI,GAAG,IAAI,KAAK,YAAY,QAAQ,KAAK;AAC9C,gBAAI,KAAK,YAAY,CAAC,MAAM,MAAM;AAC9B,qBAAO;;;AAIf,iBAAO;QACX;AAEA,QAAAA,0BAAA,UAAA,MAAA,WAAA;AAAI,cAAA,aAAA,CAAA;mBAAA,KAAA,GAAA,KAAA,UAAA,QAAA,MAAmC;AAAnC,uBAAA,EAAA,IAAA,UAAA,EAAA;;AACA,mBAAmB,KAAA,GAAA,eAAA,YAAA,KAAA,aAAA,QAAA,MAAY;AAA1B,gBAAM,OAAI,aAAA,EAAA;AACX,gBAAI,KAAK,QAAQ,IAAI,MAAM,IAAI;AAC3B,mBAAK,YAAY,KAAK,IAAI;;;QAGtC;AAEA,QAAAA,0BAAA,UAAA,SAAA,WAAA;AAAO,cAAA,aAAA,CAAA;mBAAA,KAAA,GAAA,KAAA,UAAA,QAAA,MAAmC;AAAnC,uBAAA,EAAA,IAAA,UAAA,EAAA;;AACH,mBAAmB,KAAA,GAAA,eAAA,YAAA,KAAA,aAAA,QAAA,MAAY;AAA1B,gBAAM,OAAI,aAAA,EAAA;AACX,mBAAO,MAAM;AACT,kBAAM,QAAQ,KAAK,QAAQ,IAAI;AAE/B,kBAAI,SAAS,GAAG;AACZ,qBAAK,YAAY,OAAO,OAAO,CAAC;qBAC7B;AACH;;;;QAIhB;AAEA,QAAAA,0BAAA,UAAA,YAAA,SAAU,OAAa;AACnB,iBAAO,KAAK,YAAY,KAAK;QACjC;AAEA,QAAAA,0BAAA,UAAA,WAAA,WAAA;AACI,iBAAO,KAAK,YAAY;QAC5B;AACJ,eAAAA;MAAA,EA1CA;;AAAa,YAAA,2BAAA;AA8Cb,aAAgB,SAAS,MAAwB;AAC7C,aAAO,SAAU,QAAa,aAAmB;AAC7C,YAAM,aAAa,OAAO,yBAAyB,QAAQ,WAAW,KAAK,CAAA;AAE3E,YAAI,CAAC,WAAW,OAAO,CAAC,WAAW,KAAK;AACpC,qBAAW,MAAM,WAAA;AACb,mBAAO,KAAK,SAAS,IAAI;UAC7B;AACA,qBAAW,MAAM,SAAoC,OAAU;AAC3D,iBAAK,SAAS,MAAM,KAAK;UAC7B;AAEA,iBAAO,eAAe,QAAQ,aAAa,UAAU;;MAE7D;IACJ;AAfA,YAAA,WAAA;AAmBA,QAAA;;MAAA,WAAA;AA0II,iBAAAC,sBAAA;AAjIQ,eAAA,eAA4B,CAAA;AAC5B,eAAA,iBAA8B,CAAA;AA8HtC,eAAA,aAAsBA,oBAAmB;AAGrC,cAAM,IAAI,KAAK,UAAS;AAExB,mBAAS,IAAI,GAAG,IAAI,EAAE,SAAQ,GAAI,KAAK;AACnC,gBAAM,OAAO,EAAE,UAAU,CAAC;AAE1B,gBAAI,KAAK,mBAAmB;AACxB,mBAAK,SAAS,MAAM,KAAK,kBAAkB,IAAI,CAAC;;;QAG5D;AAtIU,QAAAA,oBAAA,UAAA,iCAAV,WAAA;AACI,iBAAO,IAAI,2BAA0B;QACzC;AAEU,QAAAA,oBAAA,UAAA,iBAAV,SAAyB,QAAgC;AACrD,cAAM,OAAY,KAAK;AACvB,cAAM,aAAmC,CAAA;AAGzC,mBAAW,gBAAgB,MAAM;AAC7B,gBAAI;AACA,kBAAM,gBAAgB,KAAK,YAAY;AAEvC,kBAAI,yBAAyB,oBAAoB;AAC7C,2BAAW,KAAK,aAAa;;qBAEnC,IAAM;;;AAMZ,cAAI,WAAW,SAAS,GAAG;AACvB,gBAAM,mBAAmB,WAAW,KAChC,SAAC,IAAwB,IAAsB;AAC3C,kBAAI,GAAG,mBAAmB,GAAG,kBAAkB;AAC3C,uBAAO;yBACA,GAAG,mBAAmB,GAAG,kBAAkB;AAClD,uBAAO;;AAGX,qBAAO;YACX,CAAC;AAGL,mBAAO,IAAG,MAAV,QAAc,gBAAgB;;AAGlC,cAAIA,oBAAmB,4BAA4B;AAC/C,YAAAA,oBAAmB,2BAA2B,MAAM,MAAM;;QAElE;AAEU,QAAAA,oBAAA,UAAA,WAAV,SAAmB,MAAwB;AACvC,iBAAO,KAAK,aAAa,eAAe,KAAK,gBAAe,CAAE,IACxD,KAAK,aAAa,KAAK,gBAAe,CAAE,IACxC,KAAK;QACf;AAEU,QAAAA,oBAAA,UAAA,WAAV,SAAmB,MAA0B,OAAU;AACnD,cAAI,UAAU,UAAa,UAAU,MAAM;AACvC,mBAAO,KAAK,aAAa,KAAK,gBAAe,CAAE;iBAC5C;AACH,iBAAK,aAAa,KAAK,gBAAe,CAAE,IAAI;;QAEpD;AAEU,QAAAA,oBAAA,UAAA,gBAAV,SAAwB,QAAqB,SAAiC;AAC1E,eAAK,eAAe,CAAA;AACpB,eAAK,iBAAiB,SAAA,eAAe,0BAA2B,SAAS,SAAS,CAAA,IAAM,CAAA;AAExF,cAAI,QAAQ;AACR,gBAAM,IAAI,KAAK,UAAS;AAExB,qBAAS,IAAI,GAAG,IAAI,EAAE,SAAQ,GAAI,KAAK;AACnC,kBAAM,OAAO,EAAE,UAAU,CAAC;AAE1B,kBAAI,KAAK,wBAAwB;AAC7B,oBAAI,gBAAgB,KAAK,oBACnB,KAAK,kBAAkB,IAAI,IAC3B;AAEN,oBAAI,OAAO,eAAe,KAAK,IAAI,GAAG;AAClC,sBAAI,KAAK,cAAc,UAAU,QAAQ,aAAa,KAAK,GAAG;AAC1D,oCAAgB,KAAK,MAAM,MAAM,QAAQ,OAAO;yBAC7C;AACH,4BAAQ,cACJ,MACA,MAAM,gBAAgB,qBACtB,UAAA,QAAQ,OAAO,qBACX,KAAK,MACL,KAAK,cAAc,SAAQ,GAC3B,QAAQ,cAAc,SAAQ,CAAE,CACnC;;;AAKb,qBAAK,SAAS,MAAM,aAAa;;;iBAGtC;AACH,iBAAK,mBAAkB;;QAE/B;AAEU,QAAAA,oBAAA,UAAA,iBAAV,SAAyB,QAAqB,SAAiC;AAC3E,cAAM,IAAI,KAAK,UAAS;AACxB,cAAM,uBAAiC,CAAA;AAEvC,mBAAS,IAAI,GAAG,IAAI,EAAE,SAAQ,GAAI,KAAK;AACnC,gBAAM,OAAO,EAAE,UAAU,CAAC;AAK1B,gBACI,KAAK,0BACL,KAAK,cAAc,UAAU,QAAQ,aAAa,KAAK,KACvD,qBAAqB,QAAQ,KAAK,IAAI,MAAM,IAC9C;AACE,mBAAK,OAAO,MAAM,QAAQ,KAAK,SAAS,IAAI,GAAG,OAAO;AAEtD,mCAAqB,KAAK,KAAK,IAAI;;;QAG/C;AAEU,QAAAA,oBAAA,UAAA,kBAAV,SAA0B,UAAkC;AACxD,iBAAO;QACX;AAgBA,QAAAA,oBAAA,UAAA,QAAA,SAAM,QAAqB,SAAkC;AACzD,eAAK,cAAc,QAAQ,UAAU,UAAU,IAAI,2BAA0B,CAAE;QACnF;AAEA,QAAAA,oBAAA,UAAA,SAAA,SAAO,SAAkC;AACrC,cAAI;AAEJ,cAAI,WAAW,mBAAmB,0BAA0B;AACxD,+BAAmB;iBAChB;AACH,+BAAmB,KAAK,+BAA8B;AACtD,6BAAiB,sBAAsB;;AAG3C,cAAI,KAAK,gBAAgB,gBAAgB,GAAG;AACxC,gBAAI,SAAM;AAEV,gBACI,SAAA,eAAe,2BACf,KAAK,kBACL,OAAO,KAAK,mBAAmB,UACjC;AACE,uBAAS,KAAK;mBACX;AACH,uBAAS,CAAA;;AAGb,iBAAK,eAAe,QAAQ,gBAAgB;AAE5C,mBAAO;iBACJ;AACH,mBAAO;;QAEf;AAEA,QAAAA,oBAAA,UAAA,kBAAA,SAAgB,MAAwB;AACpC,iBAAO,KAAK,SAAS,IAAI,MAAM,KAAK;QACxC;AAEA,QAAAA,oBAAA,UAAA,sBAAA,WAAA;AACI,cAAM,IAAI,KAAK,UAAS;AAExB,mBAAS,IAAI,GAAG,IAAI,EAAE,SAAQ,GAAI,KAAK;AACnC,gBAAM,OAAO,EAAE,UAAU,CAAC;AAE1B,gBAAI,CAAC,KAAK,gBAAgB,IAAI,GAAG;AAC7B,qBAAO;;;AAIf,iBAAO;QACX;AAEA,QAAAA,oBAAA,UAAA,qBAAA,WAAA;AACI,cAAM,IAAI,KAAK,UAAS;AAExB,mBAAS,IAAI,GAAG,IAAI,EAAE,SAAQ,GAAI,KAAK;AACnC,gBAAM,OAAO,EAAE,UAAU,CAAC;AAE1B,iBAAK,SAAS,MAAM,KAAK,YAAY;;QAE7C;AAEA,QAAAA,oBAAA,UAAA,oBAAA,SAAkB,MAAc,OAAU;AACtC,cAAM,uBACD,OAAO,UAAU,YAAY,CAAC,SAAU,UAAU,UAAa,UAAU;AAE9E,cAAI,sBAAsB;AACtB,mBAAO,KAAK,eAAe,IAAI;iBAC5B;AACH,iBAAK,eAAe,IAAI,IAAI;;QAEpC;AAEA,QAAAA,oBAAA,UAAA,oBAAA,SAAkB,MAAY;AAC1B,iBAAO,KAAK,eAAe,IAAI;QACnC;AAEA,QAAAA,oBAAA,UAAA,YAAA,WAAA;AACI,cAAI,SAAmCA,oBAAmB,aAAa,KAAK,aAAY,CAAE;AAE1F,cAAI,CAAC,QAAQ;AACT,qBAAS,IAAI,yBAAwB;AAErC,iBAAK,eAAe,MAAM;AAE1B,YAAAA,oBAAmB,aAAa,KAAK,aAAY,CAAE,IAAI;;AAG3D,iBAAO;QACX;AA3OO,QAAAA,oBAAA,oBAA6B,SAAS;AAErB,QAAAA,oBAAA,eAAiE,CAAA;AA0O7F,eAAAA;QAjPA;;AAAsB,YAAA,qBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7gCtB,QAAA,kBAAA;AAQA,QAAA;;MAAA,SAAA,QAAA;AAAsC,kBAAAC,mBAAA,MAAA;AAAtC,iBAAAA,oBAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AACY,gBAAA,gBAAkD,CAAA;;QAyE9D;AAvEc,QAAAA,kBAAA,UAAA,eAAV,WAAA;AACI,iBAAO;QACX;AAEU,QAAAA,kBAAA,UAAA,gBAAV,SAAwB,QAAa,SAAiC;AAClE,iBAAA,UAAM,cAAa,KAAA,MAAC,QAAQ,OAAO;AAEnC,cAAI,QAAQ;AAER,qBAAW,UAAQ,QAAQ;AACvB,kBAAM,cAAc,OAAO,MAAI;AAE/B,kBAAI,OAAO,gBAAgB,UAAU;AACjC,oBAAI,gBAAgB,KAAK;AACrB,uBAAK,cAAc,QAAM,GAAG;uBACzB;AACH,sBAAM,UAAU,gBAAA,QAAQ,MAAM,aAAa,OAAO;AAElD,sBAAI,YAAO,QAAP,YAAO,SAAA,SAAP,QAAS,SAAS;AAClB,yBAAK,cAAc,QAAM,OAAO;;;;;;QAMxD;AAEU,QAAAA,kBAAA,UAAA,iBAAV,SAAyB,QAAqB,SAAiC;AAC3E,iBAAA,UAAM,eAAc,KAAA,MAAC,QAAQ,OAAO;AAGpC,mBAAW,OAAO,KAAK,eAAe;AAClC,mBAAO,GAAG,IAAI,KAAK,cAAc,GAAG;;QAE5C;AAEA,QAAAA,kBAAA,UAAA,gBAAA,SAAc,MAAc,SAAsB;AAC9C,eAAK,cAAc,IAAI,IAAI;QAC/B;AAEA,QAAAA,kBAAA,UAAA,mBAAA,SAAiB,MAAY;AACzB,iBAAO,KAAK,cAAc,IAAI;QAClC;AAEA,QAAAA,kBAAA,UAAA,QAAA,WAAA;AACI,eAAK,gBAAgB,CAAA;QACzB;AAEA,QAAAA,kBAAA,UAAA,gBAAA,SAAc,MAAc,SAAsB;AAC9C,cAAI,KAAK,cAAc,eAAe,IAAI,GAAG;AACzC,gBAAI,YAAY,OAAO,KAAK,cAAc,IAAI,MAAM,KAAK;AACrD,qBAAO;;AAGX,mBAAO,QAAQ,UAAmB,KAAK,cAAc,IAAI,CAAC,KAAK;;AAGnE,iBAAO;QACX;AAEA,QAAAA,kBAAA,UAAA,YAAA,SAAU,kBAAkC;AACxC,mBAAW,kBAAkB,KAAK,eAAe;AAC7C,gBACI,CAAC,iBAAiB,cAAc,gBAAgB,KAAK,cAAc,cAAc,CAAC,GACpF;AACE,qBAAO;;;AAIf,iBAAO;QACX;AACJ,eAAAA;MAAA,EA1EsC,gBAAA,kBAAkB;;AAA3C,YAAA,mBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACRb,QAAA,QAAA;AACA,QAAA,QAAA;AACA,QAAA,SAAA;AACA,QAAA,sBAAA;AAEA,aAAS,oBACL,YACA,OACA,cAAoB;AAEpB,UAAI,OAAO,UAAU,UAAU;AAC3B,YAAM,cAAc,MAAM,UAAU,YAAY,OAAO,YAAY;AAEnE,eAAO,gBAAgB,SAAY,cAAc;iBAC1C,OAAO,UAAU,UAAU;AAClC,eAAO;aACJ;AACH,eAAO;;IAEf;AAEA,QAAA;;MAAA,WAAA;AAII,iBAAAC,iBAAY,cAAuB,aAAoB;AAHvD,eAAA,UAAkB;AAClB,eAAA,SAAiB;AAGb,cAAI,cAAc;AACd,iBAAK,UAAU;;AAGnB,cAAI,aAAa;AACb,iBAAK,SAAS;;QAEtB;AAEA,QAAAA,iBAAA,UAAA,QAAA,SAAM,KAAS;AACX,cAAI,KAAK;AACL,iBAAK,UAAU,IAAI,SAAS,KAAK,KAAK;AACtC,iBAAK,SAAS,IAAI,QAAQ,KAAK,KAAK;;QAE5C;AACJ,eAAAA;MAAA,EApBA;;AAAa,YAAA,kBAAA;AAsBb,QAAA;;MAAA,SAAA,QAAA;AAAyC,kBAAAC,sBAAA,MAAA;AAAzC,iBAAAA,uBAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AACa,gBAAA,kBAAkB,IAAI,gBAAgB,aAAa,WAAW;;QAS3E;AAPI,QAAAA,qBAAA,UAAA,QAAA,SAAM,KAAS;AACX,iBAAA,UAAM,MAAK,KAAA,MAAC,GAAG;AAEf,cAAI,KAAK;AACL,iBAAK,gBAAgB,MAAM,IAAI,iBAAiB,CAAC;;QAEzD;AACJ,eAAAA;MAAA,EAVyC,eAAe;;AAA3C,YAAA,sBAAA;AAYb,QAAA;;MAAA,2BAAA;AAGI,iBAAAC,oBAAY,KAAS;AAFrB,eAAA,mBAA4B;AAGxB,cAAI,KAAK;AACL,iBAAK,mBAAmB,IAAI,kBAAkB,KAAK,KAAK;;QAEhE;AACJ,eAAAA;MAAA,EARA;;AAAa,YAAA,qBAAA;AAUb,QAAA;;MAAA,WAAA;AAII,iBAAAC,gBAAY,KAAS;AAHrB,eAAA,YAAwB,MAAM,KAAK;AACnC,eAAA,iBAAyB;AAGrB,cAAI,KAAK;AACL,iBAAK,YAAY,IAAI,WAAW,KAAK,OAAO,IAAI,WAAW,IAAI,KAAK;AACpE,iBAAK,iBAAiB,MAAM,YAAY,IAAI,gBAAgB,GAAG,GAAG;;QAE1E;AAEA,QAAAA,gBAAA,UAAA,SAAA,WAAA;AACI,iBAAO;YACH,WAAW,MAAM,KAAK,KAAK,SAAS;YACpC,gBAAgB,KAAK;;QAE7B;AACJ,eAAAA;MAAA,EAjBA;;AAAa,YAAA,iBAAA;AAmBb,QAAA;;MAAA,WAAA;AAII,iBAAAC,aAAY,KAAS;AAFrB,eAAA,sBAA+B;AAG3B,cAAI,KAAK;AACL,iBAAK,gBAAgB,IAAI,eAAe;AACxC,iBAAK,sBAAsB,IAAI,qBAAqB,KAAK,KAAK;;QAEtE;AAEA,QAAAA,aAAA,UAAA,SAAA,WAAA;AACI,iBAAO;YACH,eAAe,KAAK;YACpB,qBAAqB,KAAK;;QAElC;AACJ,eAAAA;MAAA,EAjBA;;AAAa,YAAA,cAAA;AAmBb,QAAA;;MAAA,WAAA;AAGI,iBAAAC,aAAY,KAAS;AAFrB,eAAA,cAAsB;AAGlB,cAAI,KAAK;AACL,iBAAK,cACD,IAAI,eAAe,OAAO,IAAI,gBAAgB,WACxC,IAAI,cACJ,KAAK;;QAEvB;AAEA,QAAAA,aAAA,UAAA,SAAA,WAAA;AACI,iBAAO;YACH,aAAa,KAAK;;QAE1B;AACJ,eAAAA;MAAA,EAjBA;;AAAa,YAAA,cAAA;AAmBb,QAAA;;MAAA,WAAA;AAMI,iBAAAC,oBAAY,KAAS;AALrB,eAAA,OAAuB,MAAM,SAAS;AACtC,eAAA,QAAyB,MAAM,UAAU;AACzC,eAAA,WAAoB;AACpB,eAAA,SAA2B,MAAM,WAAW;AAGxC,eAAK,MAAM,GAAG;QAClB;AAEA,QAAAA,oBAAA,UAAA,QAAA,SAAM,KAAQ;AACV,cAAI,KAAK;AACL,iBAAK,OAAO,oBAAoB,MAAM,UAAU,IAAI,MAAM,GAAG,KAAK,IAAI;AACtE,iBAAK,QAAQ,oBAAoB,MAAM,WAAW,IAAI,OAAO,GAAG,KAAK,KAAK;AAC1E,iBAAK,WACD,IAAI,aAAa,UAAa,OAAO,IAAI,aAAa,YAChD,IAAI,WACJ,KAAK;AACf,iBAAK,SAAS,oBACV,MAAM,YACN,IAAI,QAAQ,GACZ,KAAK,iBAAgB,CAAE;;QAGnC;AAEA,QAAAA,oBAAA,UAAA,mBAAA,WAAA;AACI,iBAAO,MAAM,WAAW;QAC5B;AAEA,QAAAA,oBAAA,UAAA,SAAA,WAAA;AACI,iBAAO;YACH,MAAM,MAAM,SAAS,KAAK,IAAI;YAC9B,OAAO,MAAM,UAAU,KAAK,KAAK;YACjC,UAAU,KAAK;YACf,QAAQ,MAAM,WAAW,KAAK,MAAM;;QAE5C;AACJ,eAAAA;MAAA,EAtCA;;AAAa,YAAA,qBAAA;AAwCb,QAAA;;MAAA,SAAA,QAAA;AAAyC,kBAAAC,sBAAA,MAAA;AAAzC,iBAAAA,uBAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AACI,gBAAA,WAA2B,MAAM,SAAS;;QAS9C;AAPI,QAAAA,qBAAA,UAAA,QAAA,SAAM,KAAQ;AACV,iBAAA,UAAM,MAAK,KAAA,MAAC,GAAG;AAEf,cAAI,KAAK;AACL,iBAAK,WAAW,oBAAoB,MAAM,UAAU,IAAI,UAAU,KAAK,QAAQ;;QAEvF;AACJ,eAAAA;MAAA,EAVyC,kBAAkB;;AAA9C,YAAA,sBAAA;AAYb,QAAA;;MAAA,WAAA;AAUI,iBAAAC,cAAY,KAAS;AATZ,eAAA,UAA+B,IAAI,oBAAmB;AACtD,eAAA,UAA+B,IAAI,oBAAoB;YAC5D,MAAM;YACN,QAAQ;WACX;AACQ,eAAA,eAAoC,IAAI,oBAAoB;YACjE,QAAQ;WACX;AAGG,cAAI,KAAK;AACL,iBAAK,QAAQ,MAAM,IAAI,OAAO;AAC9B,iBAAK,aAAa,MAAM,IAAI,YAAY;;QAEhD;AAEA,QAAAA,cAAA,UAAA,iBAAA,SAAe,MAAY;AACvB,kBAAQ,KAAK,YAAW,GAAI;YACxB,KAAK;AACD,qBAAO,KAAK;YAChB,KAAK;AACD,qBAAO,KAAK;YAChB;AACI,qBAAO,KAAK;;QAExB;AACJ,eAAAA;MAAA,EA3BA;;AAAa,YAAA,eAAA;AA6Bb,QAAA;;MAAA,2BAAA;AAGI,iBAAAC,iBAAY,KAAS;AACjB,cAAI,KAAK;AACL,iBAAK,eAAe,MAAM,YAAY,IAAI,YAAY;;QAE9D;AACJ,eAAAA;MAAA,EARA;;AAAa,YAAA,kBAAA;AAUb,QAAA;;MAAA,SAAA,QAAA;AAAsD,kBAAAC,mCAAA,MAAA;AAAtD,iBAAAA,oCAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AACI,gBAAA,SAAkB;AAClB,gBAAA,cAA+B,MAAM,UAAU;;QAsBnD;AApBI,QAAAA,kCAAA,UAAA,QAAA,SAAM,KAAS;AACX,iBAAA,UAAM,MAAK,KAAA,MAAC,GAAG;AAEf,cAAI,KAAK;AACL,iBAAK,SAAS,IAAI,QAAQ,KAAK,KAAK;AACpC,iBAAK,cAAc,oBACf,MAAM,WACN,IAAI,aAAa,GACjB,KAAK,WAAW;;QAG5B;AAEA,QAAAA,kCAAA,UAAA,SAAA,WAAA;AACI,cAAM,SAAS,OAAA,UAAM,OAAM,KAAA,IAAA;AAC3B,iBAAO,QAAQ,IAAI,KAAK;AACxB,iBAAO,aAAa,IAAI,MAAM,UAAU,KAAK,WAAW;AAExD,iBAAO;QACX;AACJ,eAAAA;MAAA,EAxBsD,kBAAkB;;AAA3D,YAAA,mCAAA;AA0Bb,QAAA;;MAAA,2BAAA;AAMI,iBAAAC,kBAAY,KAAS;AALrB,eAAA,eAA8B,MAAM,QAAQ;AACnC,eAAA,iBACL,IAAI,iCAAgC;AAC/B,eAAA,iBAAqC,IAAI,mBAAkB;AAGhE,cAAI,KAAK;AACL,iBAAK,eAAe,oBAChB,MAAM,SACN,IAAI,cAAc,GAClB,KAAK,YAAY;AAErB,iBAAK,iBAAiB,IAAI,iCAAiC,IAAI,gBAAgB,CAAC;AAChF,iBAAK,iBAAiB,IAAI,mBAAmB,IAAI,gBAAgB,CAAC;;QAE1E;AACJ,eAAAA;MAAA,EAjBA;;AAAa,YAAA,mBAAA;AAmBb,QAAA;;MAAA,2BAAA;AAMI,iBAAAC,aAAY,KAAS;AALZ,eAAA,QAA0B,IAAI,iBAAgB;AAC9C,eAAA,eAAmC,IAAI,mBAAmB;YAC/D,OAAO,MAAM,UAAU;WAC1B;AAGG,cAAI,KAAK;AACL,iBAAK,QAAQ,IAAI,iBAAiB,IAAI,OAAO,CAAC;AAC9C,iBAAK,eAAe,IAAI,mBAAmB,IAAI,cAAc,CAAC;;QAEtE;AACJ,eAAAA;MAAA,EAZA;;AAAa,YAAA,cAAA;AAcb,QAAA;;MAAA,SAAA,QAAA;AAAwC,kBAAAC,qBAAA,MAAA;AAAxC,iBAAAA,sBAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AACI,gBAAA,OAAgB;;QAgBpB;AAdI,QAAAA,oBAAA,UAAA,QAAA,SAAM,KAAS;AACX,iBAAA,UAAM,MAAK,KAAA,MAAC,GAAG;AAEf,cAAI,KAAK;AACL,iBAAK,OAAO,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,IAAI,KAAK;;QAE7D;AAEA,QAAAA,oBAAA,UAAA,SAAA,WAAA;AACI,cAAM,SAAS,OAAA,UAAM,OAAM,KAAA,IAAA;AAC3B,iBAAO,MAAM,IAAI,KAAK;AAEtB,iBAAO;QACX;AACJ,eAAAA;MAAA,EAjBwC,kBAAkB;;AAA7C,YAAA,qBAAA;AAmBb,QAAA;;MAAA,SAAA,QAAA;AAAyC,kBAAAC,sBAAA,MAAA;AAIrC,iBAAAA,qBAAY,KAAS;AAArB,cAAA,QACI,OAAA,KAAA,MAAM,GAAG,KAAC;AAJd,gBAAA,WAAoB;AACpB,gBAAA,SAA2B,MAAM,WAAW;AAKxC,cAAI,KAAK;AACL,kBAAK,WAAW,IAAI,UAAU,KAAK,OAAO,IAAI,UAAU,IAAI,MAAK;AACjE,kBAAK,SAAS,oBACV,MAAM,YACN,IAAI,QAAQ,GACZ,MAAM,WAAW,MAAM;;;QAGnC;AAEA,QAAAA,qBAAA,UAAA,mBAAA,WAAA;AACI,iBAAO,MAAM,WAAW;QAC5B;AACJ,eAAAA;MAAA,EApByC,kBAAkB;;AAA9C,YAAA,sBAAA;AAsBb,QAAA;;MAAA,2BAAA;AAKI,iBAAAC,eAAY,KAAS;AAJZ,eAAA,QAA6B,IAAI,oBAAmB;AACpD,eAAA,QAA4B,IAAI,mBAAkB;AAC3D,eAAA,UAAkB;AAGd,cAAI,KAAK;AACL,iBAAK,QAAQ,IAAI,oBAAoB,IAAI,OAAO,CAAC;AACjD,iBAAK,QAAQ,IAAI,mBAAmB,IAAI,OAAO,CAAC;AAChD,iBAAK,UACD,IAAI,WAAW,IAAI,WAAW,OAAO,IAAI,WAAW,IAAI,UAAU,KAAK;;QAEnF;AACJ,eAAAA;MAAA,EAbA;;AAAa,YAAA,gBAAA;AAeb,QAAA;;MAAA,WAAA;AAKI,iBAAAC,sBAAY,KAAS;AAJrB,eAAA,aAAuC,MAAM,mBAAmB;AAChE,eAAA,kBAA0B;AAC1B,eAAA,QAAiB,MAAM,eAAe;AAGlC,cAAI,KAAK;AACL,iBAAK,aAAa,oBACd,MAAM,oBACN,IAAI,YAAY,GAChB,MAAM,mBAAmB,MAAM;AAEnC,iBAAK,kBACD,IAAI,iBAAiB,KAAK,OAAO,IAAI,iBAAiB,IAAI,KAAK;AACnE,iBAAK,QACD,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,MAAM,WAClC,IAAI,OAAO,IACX,MAAM,eAAe;;QAEvC;AAEA,QAAAA,sBAAA,UAAA,SAAA,WAAA;AACI,iBAAO;YACH,YAAY,MAAM,mBAAmB,KAAK,UAAU;YACpD,iBAAiB,KAAK;YACtB,OAAO,KAAK;;QAEpB;AACJ,eAAAA;MAAA,EA5BA;;AAAa,YAAA,uBAAA;AA8Bb,QAAA;;MAAA,WAAA;AAYI,iBAAAC,eAAY,KAAS;AAXrB,eAAA,aAAqB;AACrB,eAAA,UAAyB,MAAM,QAAQ;AACvC,eAAA,gBAAwB;AACf,eAAA,WAAiC,IAAI,qBAAoB;AAClE,eAAA,gCAA0C;AAC1C,eAAA,qBAAwC,MAAM,YAAY;AAC1D,eAAA,kBAAyC,MAAM,gBAAgB;AAC/D,eAAA,gBAA2C,MAAM,oBAAoB;AACrE,eAAA,mBAA4B;AAC5B,eAAA,WAAmB;AAGf,cAAI,KAAK;AACL,iBAAK,aAAa,IAAI,YAAY,KAAK,OAAO,IAAI,YAAY,IAAI,KAAK;AACvE,iBAAK,UAAU,oBACX,MAAM,SACN,IAAI,WAAW,IAAI,SACnB,MAAM,QAAQ,OAAO;AAEzB,iBAAK,gBACD,IAAI,eAAe,KAAK,OAAO,IAAI,eAAe,IAAI,KAAK;AAC/D,iBAAK,WAAW,IAAI,qBAAqB,IAAI,UAAU,CAAC;AACxD,iBAAK,gCAAgC,MAAM,UACvC,IAAI,+BAA+B,GACnC,KAAK;AAET,iBAAK,qBAAqB,oBACtB,MAAM,aACN,IAAI,oBAAoB,GACxB,MAAM,YAAY,UAAU;AAEhC,iBAAK,kBAAkB,oBACnB,MAAM,iBACN,IAAI,iBAAiB,GACrB,MAAM,gBAAgB,IAAI;AAE9B,iBAAK,gBAAgB,oBACjB,MAAM,qBACN,IAAI,eAAe,GACnB,MAAM,oBAAoB,WAAW;AAEzC,iBAAK,mBACD,IAAI,kBAAkB,KAAK,OAAO,IAAI,kBAAkB,IAAI,KAAK;AAErE,gBAAI;AACA,kBAAM,cAAc,OAAO,YAAY,MAAM,IAAI,UAAU,CAAC;AAE5D,kBAAI,YAAY,SAAS,MAAM,SAAS,OAAO;AAC3C,qBAAK,WAAW,YAAY;;qBAE3B,GAAG;;;QAIpB;AAEA,QAAAA,eAAA,UAAA,SAAA,WAAA;AACI,iBAAO;YACH,YAAY,KAAK;YACjB,SAAS,MAAM,QAAQ,KAAK,OAAO;YACnC,eAAe,KAAK;YACpB,UAAU,KAAK;YACf,+BAA+B,KAAK;YACpC,oBAAoB,MAAM,YAAY,KAAK,kBAAkB;YAC7D,iBAAiB,MAAM,gBAAgB,KAAK,eAAe;;QAEnE;AACJ,eAAAA;MAAA,EApEA;;AAAa,YAAA,gBAAA;AAsEb,QAAA;;MAAA,WAAA;AAeI,iBAAAC,oBAAY,KAAS;AARrB,eAAA,UAA+B,IAAI,oBAAmB;AACtD,eAAA,OAA4B,IAAI,oBAAmB;AACnD,eAAA,QAA6B,IAAI,oBAAmB;AACpD,eAAA,SAA8B,IAAI,oBAAmB;AACrD,eAAA,OAA4B,IAAI,oBAAmB;AACnD,eAAA,UAA+B,IAAI,oBAAmB;AACtD,eAAA,YAAiC,IAAI,oBAAmB;AAGpD,eAAK,MAAM,GAAG;QAClB;AAhBQ,QAAAA,oBAAA,UAAA,mBAAR,SAAyB,KAAU,cAAoB;AACnD,cAAI,KAAK;AACE,iBAAM,YAAY,EAA0B,MAAM,IAAI,YAAY,CAAC;;QAElF;AAcA,QAAAA,oBAAA,UAAA,QAAA,SAAM,KAAQ;AACV,cAAI,KAAK;AACL,iBAAK,iBAAiB,KAAK,SAAS;AACpC,iBAAK,iBAAiB,KAAK,MAAM;AACjC,iBAAK,iBAAiB,KAAK,OAAO;AAClC,iBAAK,iBAAiB,KAAK,QAAQ;AACnC,iBAAK,iBAAiB,KAAK,MAAM;AACjC,iBAAK,iBAAiB,KAAK,SAAS;AACpC,iBAAK,iBAAiB,KAAK,WAAW;;QAE9C;AACJ,eAAAA;MAAA,EA9BA;;AAAa,YAAA,qBAAA;AAgCb,QAAA;;MAAA,WAAA;AA8BI,iBAAAC,0BAAY,KAAS;AA3BZ,eAAA,mBAAuC,IAAI,mBAAmB;YACnE,WAAW,EAAE,SAAS,WAAW,QAAQ,YAAW;YACpD,QAAQ,EAAE,SAAS,WAAW,QAAQ,YAAW;YACjD,SAAS,EAAE,SAAS,WAAW,QAAQ,YAAW;YAClD,UAAU,EAAE,SAAS,WAAW,QAAQ,YAAW;YACnD,QAAQ,EAAE,SAAS,WAAW,QAAQ,YAAW;YACjD,WAAW,EAAE,SAAS,WAAW,QAAQ,YAAW;YACpD,aAAa,EAAE,SAAS,WAAW,QAAQ,YAAW;WACzD;AAoBG,eAAK,MAAM,GAAG;QAClB;AAfA,QAAAA,0BAAA,UAAA,QAAA,SAAM,KAAQ;AACV,cAAI,KAAK;AACL,iBAAK,kBAAkB,IAAI,iBAAiB;AAE5C,iBAAK,iBAAiB,MAAM,IAAI,kBAAkB,CAAC;AAEnD,iBAAK,2BAA2B,IAAI,0BAA0B;AAC9D,iBAAK,2BAA2B,IAAI,0BAA0B;AAE9D,iBAAK,cAAc,IAAI,aAAa;;QAE5C;AAMA,eAAA,eAAIA,0BAAA,WAAA,aAAS;eAAb,WAAA;AACI,mBAAO;UACX;;;;AACJ,eAAAA;MAAA,EArCA;;AAAa,YAAA,2BAAA;AAuCb,QAAA;;MAAA,SAAA,QAAA;AAA8C,kBAAAC,kCAAA,MAAA;AAA9C,iBAAAA,mCAAA;;QAIA;AAHI,eAAA,eAAIA,iCAAA,WAAA,aAAS;eAAb,WAAA;AACI,mBAAO;UACX;;;;AACJ,eAAAA;MAAA,EAJ8C,wBAAwB;;AActE,QAAA;;MAAA,WAAA;AAGI,iBAAAC,mBAAY,KAAS;AAFb,eAAA,aAA0D,CAAA;AAG9D,eAAK,WAAW,MAAM,eAAe,OAAO,IAAI,IAAI,gCAA+B;AACnF,eAAK,WAAW,MAAM,eAAe,QAAQ,IAAI,IAAI,gCAA+B;AACpF,eAAK,WAAW,MAAM,eAAe,MAAM,IAAI,IAAI,gCAA+B;AAClF,eAAK,WAAW,MAAM,eAAe,IAAI,IAAI,IAAI,gCAA+B;AAChF,eAAK,WAAW,MAAM,eAAe,SAAS,IAAI,IAAI,gCAA+B;AACrF,eAAK,WAAW,MAAM,eAAe,OAAO,IAAI,IAAI,gCAA+B;AAEnF,cAAI,KAAK;AACL,iBAAK,WAAW,MAAM,eAAe,OAAO,EAAE,MAAM,IAAI,MAAM,eAAe,OAAO,CAAC;AACrF,iBAAK,WAAW,MAAM,eAAe,QAAQ,EAAE,MAC3C,IAAI,MAAM,eAAe,QAAQ,CAAC;AAEtC,iBAAK,WAAW,MAAM,eAAe,MAAM,EAAE,MAAM,IAAI,MAAM,eAAe,MAAM,CAAC;AACnF,iBAAK,WAAW,MAAM,eAAe,IAAI,EAAE,MAAM,IAAI,MAAM,eAAe,IAAI,CAAC;AAC/E,iBAAK,WAAW,MAAM,eAAe,SAAS,EAAE,MAC5C,IAAI,MAAM,eAAe,SAAS,CAAC;AAEvC,iBAAK,WAAW,MAAM,eAAe,OAAO,EAAE,MAAM,IAAI,MAAM,eAAe,OAAO,CAAC;AAErF,gBAAM,mBAAmB,IAAI,cAAc;AAE3C,gBAAI,oBAAoB,MAAM,QAAQ,gBAAgB,GAAG;AACrD,uBAA0B,KAAA,GAAA,qBAAA,kBAAA,KAAA,mBAAA,QAAA,MAAkB;AAAvC,oBAAM,cAAW,mBAAA,EAAA;AAClB,oBAAI,aAAa;AACb,sBAAM,YAAY,YAAY,MAAM;AAEpC,sBAAI,aAAa,OAAO,cAAc,UAAU;AAC5C,wBAAI,KAAK,WAAW,eAAe,SAAS,GAAG;AAC3C,2BAAK,WAAW,SAAS,EAAE,MAAM,YAAY,OAAO,CAAC;2BAClD;AACH,2BAAK,WAAW,SAAS,IAAI,IAAI,yBAC7B,YAAY,OAAO,CAAC;;;;;;;QAQpD;AAEA,QAAAA,mBAAA,UAAA,SAAA,WAAA;AAAA,cAAA,QAAA;AACI,cAAM,mBAA0B,CAAA;AAEhC,iBAAO,KAAK,KAAK,UAAU,EAAE,QAAQ,SAAC,KAAG;AACrC,gBAAI,CAAC,MAAK,WAAW,GAAG,EAAE,WAAW;AACjC,+BAAiB,KAAK;gBAClB,MAAM;gBACN,OAAO,MAAK,WAAW,GAAG;eAC7B;;UAET,CAAC;AAED,cAAM,SAAc;YAChB,SAAS,KAAK;YACd,UAAU,KAAK;;AAGnB,cAAI,iBAAiB,SAAS,GAAG;AAC7B,mBAAO,eAAe;;AAG1B,iBAAO;QACX;AAEA,QAAAA,mBAAA,UAAA,iBAAA,SACI,MACA,cAAuC;AAEvC,cAAI,QAAQ,KAAK,WAAW,eAAe,IAAI,GAAG;AAC9C,mBAAO,KAAK,WAAW,IAAI;iBACxB;AACH,mBAAO,eAAe,eAAe,KAAK,WAAW,MAAM,eAAe,OAAO;;QAEzF;AAEA,eAAA,eAAIA,mBAAA,WAAA,WAAO;eAAX,WAAA;AACI,mBAAO,KAAK,WAAW,MAAM,eAAe,OAAO;UACvD;;;;AAEA,eAAA,eAAIA,mBAAA,WAAA,YAAQ;eAAZ,WAAA;AACI,mBAAO,KAAK,WAAW,MAAM,eAAe,QAAQ;UACxD;;;;AACJ,eAAAA;MAAA,EAvFA;;AAAa,YAAA,oBAAA;AAuGb,QAAA;;MAAA,WAAA;AAmBI,iBAAAC,oBAAY,YAAmB;AAhB/B,eAAA,aAAsB;AAEtB,eAAA,YAAkC;YAC9B,OAAO;YACP,SAAS;YACT,QAAQ;YACR,OAAO;YACP,YAAY;;AAGhB,eAAA,cAAsC;YAClC,SAAS;YACT,SAAS;YACT,QAAQ;;AAIR,cAAI,YAAY;AACZ,iBAAK,aAAa;;QAE1B;AAEA,QAAAA,oBAAA,UAAA,QAAA,SAAM,KAAS;AACX,eAAK,aAAa,IAAI,YAAY,KAAK,KAAK;AAC5C,eAAK,YAAY;YACb,OAAQ,IAAI,aAAa,IAAI,UAAU,OAAO,KAAM,KAAK,UAAU;YACnE,SAAU,IAAI,aAAa,IAAI,UAAU,SAAS,KAAM,KAAK,UAAU;YACvE,QAAS,IAAI,aAAa,IAAI,UAAU,QAAQ,KAAM,KAAK,UAAU;YACrE,OAAQ,IAAI,aAAa,IAAI,UAAU,OAAO,KAAM,KAAK,UAAU;YACnE,YAAa,IAAI,aAAa,IAAI,UAAU,YAAY,KAAM,KAAK,UAAU;;AAEjF,eAAK,cAAc;YACf,SAAU,IAAI,eAAe,IAAI,YAAY,SAAS,KAAM,KAAK,YAAY;YAC7E,SAAU,IAAI,eAAe,IAAI,YAAY,SAAS,KAAM,KAAK,YAAY;YAC7E,QAAS,IAAI,eAAe,IAAI,YAAY,QAAQ,KAAM,KAAK,YAAY;;QAEnF;AAtCgB,QAAAA,oBAAA,YAAY,IAAIA,oBAAmB,mCAAmC;AAuC1F,eAAAA;QAxCA;;AAAa,YAAA,qBAAA;AA0Cb,QAAA;;MAAA,WAAA;AAII,iBAAAC,aAAY,KAAS;AACjB,eAAK,UAAU,IAAI,mBAAkB;AACrC,eAAK,YAAY,IAAI,mBAAmB,mCAAmC;AAE3E,cAAI,KAAK;AACL,iBAAK,QAAQ,MAAM,IAAI,SAAS,CAAC;AACjC,iBAAK,UAAU,MAAM,IAAI,WAAW,CAAC;;QAE7C;AAEA,QAAAA,aAAA,UAAA,qBAAA,SAAmB,OAAiC;AAChD,kBAAQ,OAAO;YACX,KAAK,MAAM,SAAS;AAChB,qBAAO,KAAK;YAChB,KAAK,MAAM,SAAS;YACpB;AACI,qBAAO,KAAK;;QAExB;AACJ,eAAAA;MAAA,EAvBA;;AAAa,YAAA,cAAA;AAyBb,QAAA;;MAAA,WAAA;AA4CI,iBAAAC,YAAY,KAAS;AA3CZ,eAAA,mBAAmB,IAAI,oBAAA,iBAAgB;AAIhD,eAAA,+BAAuC;AACvC,eAAA,wBAAiC;AAIxB,eAAA,UAAU;YACf,OAAO;YACP,SAAS;YACT,QAAQ;YACR,OAAO;YACP,YAAY;YACZ,SAAS;;AAGJ,eAAA,YAAY;YACjB,eAAe;YACf,WAAW;;AAGN,eAAA,aAAa;YAClB,OAAO;YACP,QAAQ;YACR,OAAO;;AAGF,eAAA,kBAAqC,IAAI,kBAAiB;AAC1D,eAAA,SAAsB,IAAI,YAAW;AACrC,eAAA,UAAyB,IAAI,cAAa;AAC1C,eAAA,eAAmC,IAAI,mBAAkB;AACzD,eAAA,WAA2B,IAAI,eAAc;AAC7C,eAAA,QAAqB,IAAI,YAAW;AACpC,eAAA,UAAyB,IAAI,cAAa;AAC1C,eAAA,QAAqB,IAAI,YAAW;AACpC,eAAA,aAA2B,IAAI,aAAY;AAC3C,eAAA,YAA6B,IAAI,gBAAe;AAGzD,eAAA,mBAA4B;AAGxB,cAAI,KAAK;AACL,gBAAI,OAAO,QAAQ,YAAY,eAAe,QAAQ;AAClD,oBAAM,KAAK,MAAM,GAAa;;AAGlC,iBAAK,+BACD,OAAO,OAAO,IAAI,8BAA8B,MAAM,WAChD,IAAI,8BAA8B,IAClC,KAAK;AACf,iBAAK,wBACD,OAAO,OAAO,IAAI,uBAAuB,MAAM,YACzC,IAAI,uBAAuB,IAC3B,KAAK;AAEf,iBAAK,kBAAkB,IAAI,mBAAkB;AAC7C,iBAAK,gBAAgB,MAAM,GAAG;AAE9B,gBAAI,IAAI,WAAW;AACf,mBAAK,YAAY,IAAI,YAAY,IAAI,SAAS;;AAGlD,gBAAI,IAAI,aAAa;AACjB,mBAAK,cAAc;gBACf,OAAO,IAAI,YAAY,OAAO;gBAC9B,SAAS,IAAI,YAAY,SAAS;gBAClC,QAAQ,IAAI,YAAY,QAAQ;gBAChC,OAAO,IAAI,YAAY,OAAO;gBAC9B,YAAY,IAAI,YAAY,YAAY;;;AAIhD,iBAAK,aAAa;cACd,OAAQ,IAAI,cAAc,IAAI,WAAW,OAAO,KAAM,KAAK,WAAW;cACtE,QAAS,IAAI,cAAc,IAAI,WAAW,QAAQ,KAAM,KAAK,WAAW;cACxE,OAAQ,IAAI,cAAc,IAAI,WAAW,OAAO,KAAM,KAAK,WAAW;;AAG1E,iBAAK,kBAAkB,IAAI,kBAAkB,IAAI,iBAAiB,CAAC;AACnE,iBAAK,UAAU;cACX,OAAQ,IAAI,WAAW,IAAI,QAAQ,OAAO,KAAM,KAAK,QAAQ;cAC7D,SAAU,IAAI,WAAW,IAAI,QAAQ,SAAS,KAAM,KAAK,QAAQ;cACjE,QAAS,IAAI,WAAW,IAAI,QAAQ,QAAQ,KAAM,KAAK,QAAQ;cAC/D,OAAQ,IAAI,WAAW,IAAI,QAAQ,OAAO,KAAM,KAAK,QAAQ;cAC7D,YAAa,IAAI,WAAW,IAAI,QAAQ,YAAY,KAAM,KAAK,QAAQ;cACvE,SAAU,IAAI,WAAW,IAAI,QAAQ,SAAS,KAAM,KAAK,QAAQ;;AAGrE,iBAAK,YAAY;cACb,eACK,IAAI,aAAa,IAAI,UAAU,eAAe,KAC/C,KAAK,UAAU;cACnB,WAAY,IAAI,aAAa,IAAI,UAAU,WAAW,KAAM,KAAK,UAAU;;AAG/E,iBAAK,SAAS,IAAI,YAAY,IAAI,UAAU,KAAK,MAAM;AACvD,iBAAK,UAAU,IAAI,cAAc,IAAI,WAAW,KAAK,OAAO;AAC5D,iBAAK,eAAe,IAAI,mBAAmB,IAAI,gBAAgB,KAAK,YAAY;AAChF,iBAAK,WAAW,IAAI,eAAe,IAAI,UAAU,CAAC;AAClD,iBAAK,UAAU,IAAI,cAAc,IAAI,SAAS,CAAC;AAC/C,iBAAK,aAAa,IAAI,aAAa,IAAI,YAAY,CAAC;AACpD,iBAAK,YAAY,IAAI,gBAAgB,IAAI,WAAW,CAAC;;QAE7D;AAEA,QAAAA,YAAA,UAAA,wBAAA,SAAsB,OAAsB;AACxC,cAAI,KAAK,WAAW;AAChB,mBAAO,KAAK,UAAU,mBAAmB,KAAK;iBAC3C;AACH,mBAAO,UAAU,MAAM,SAAS,YAC1B,mBAAmB,YACnB,KAAK;;QAEnB;AAEA,QAAAA,YAAA,UAAA,sBAAA,SAAoB,SAAsB;AACtC,kBAAQ,SAAS;YACb,KAAK,MAAM,QAAQ;AACf,qBAAO,KAAK,QAAQ;YACxB,KAAK,MAAM,QAAQ;AACf,qBAAO,KAAK,QAAQ;YACxB,KAAK,MAAM,QAAQ;AACf,qBAAO,KAAK,QAAQ;YACxB,KAAK,MAAM,QAAQ;AACf,qBAAO,KAAK,QAAQ;YACxB,KAAK,MAAM,QAAQ;AACf,qBAAO,KAAK,QAAQ;YACxB,KAAK,MAAM,QAAQ;AACf,qBAAO,KAAK,QAAQ;YACxB;AACI,qBAAO;;QAEnB;AAEA,QAAAA,YAAA,UAAA,uCAAA,SACI,mBAA2C;AAE3C,iBAAO,IAAI,OAAO,kBACd,KAAK,oBAAoB,kBAAkB,GAAG,GAC9C,KAAK,oBAAoB,kBAAkB,KAAK,GAChD,KAAK,oBAAoB,kBAAkB,MAAM,GACjD,KAAK,oBAAoB,kBAAkB,IAAI,CAAC;QAExD;AAEA,QAAAA,YAAA,UAAA,oBAAA,WAAA;AAAkB,cAAA,aAAA,CAAA;mBAAA,KAAA,GAAA,KAAA,UAAA,QAAA,MAAuB;AAAvB,uBAAA,EAAA,IAAA,UAAA,EAAA;;AACd,cAAM,SAAmB,CAAA;AAEzB,mBAAwB,KAAA,GAAA,eAAA,YAAA,KAAA,aAAA,QAAA,MAAY;AAA/B,gBAAM,YAAS,aAAA,EAAA;AAChB,mBAAO,MAAM,KAAK,qBAAqB,KAAK,qBAAqB,MAAM,MAAM,SAAS;;AAG1F,iBAAO;QACX;AAEA,QAAAA,YAAA,UAAA,mBAAA,WAAA;AAAiB,cAAA,aAAA,CAAA;mBAAA,KAAA,GAAA,KAAA,UAAA,QAAA,MAAuB;AAAvB,uBAAA,EAAA,IAAA,UAAA,EAAA;;AACb,cAAM,SAAS,KAAK,kBAAiB,MAAtB,MAA0B,UAAU,EAAE,KAAK,GAAG;AAE7D,iBAAO,SAAS,SAAS;QAC7B;AAEA,eAAA,eAAIA,YAAA,WAAA,cAAU;eAAd,WAAA;AACI,mBAAO,KAAK,gBAAgB;UAChC;eAEA,SAAe,OAAyB;AACpC,iBAAK,gBAAgB,aAAa;UACtC;;;;AAEA,eAAA,eAAIA,YAAA,WAAA,aAAS;eAAb,WAAA;AACI,mBAAO,KAAK,gBAAgB;UAChC;;;;AAEA,eAAA,eAAIA,YAAA,WAAA,eAAW;eAAf,WAAA;AACI,mBAAO,KAAK,gBAAgB;UAChC;;;;AACJ,eAAAA;MAAA,EApLA;;AAAa,YAAA,aAAA;AAuLA,YAAA,oBAAgC,IAAI,WAAW;MACxD,uBAAuB;MACvB,SAAS;QACL,OAAO;QACP,SAAS;QACT,QAAQ;QACR,OAAO;QACP,YAAY;QACZ,SAAS;;MAEb,WAAW;QACP,eAAe;QACf,WAAW;;MAEf,WAAW;QACP,SAAS;UACL,YAAY;UACZ,WAAW;YACP,OAAO;YACP,SAAS;YACT,QAAQ;YACR,OAAO;YACP,YAAY;;UAEhB,aAAa;YACT,SAAS;YACT,SAAS;YACT,QAAQ;;;QAGhB,WAAW;UACP,YAAY;UACZ,WAAW;YACP,OAAO;YACP,SAAS;YACT,QAAQ;YACR,OAAO;YACP,YAAY;;UAEhB,aAAa;YACT,SAAS;YACT,SAAS;YACT,QAAQ;;;;MAIpB,YAAY;QACR,OAAO;QACP,QAAQ;QACR,OAAO;;MAEX,iBAAiB;QACb,SAAS;UACL,iBAAiB;UACjB,kBAAkB;YACd,SAAS;cACL,SAAS;cACT,QAAQ;;YAEZ,MAAM;cACF,SAAS;cACT,QAAQ;;YAEZ,OAAO;cACH,SAAS;cACT,QAAQ;;YAEZ,QAAQ;cACJ,SAAS;cACT,QAAQ;;YAEZ,WAAW;cACP,SAAS;cACT,QAAQ;;YAEZ,MAAM;cACF,SAAS;cACT,QAAQ;;YAEZ,SAAS;cACL,SAAS;cACT,QAAQ;;;;QAIpB,UAAU;UACN,iBAAiB;UACjB,kBAAkB;YACd,SAAS;cACL,SAAS;cACT,QAAQ;;YAEZ,MAAM;cACF,SAAS;cACT,QAAQ;;YAEZ,OAAO;cACH,SAAS;cACT,QAAQ;;YAEZ,QAAQ;cACJ,SAAS;cACT,QAAQ;;YAEZ,WAAW;cACP,SAAS;cACT,QAAQ;;YAEZ,MAAM;cACF,SAAS;cACT,QAAQ;;YAEZ,SAAS;cACL,SAAS;cACT,QAAQ;;;;QAIpB,QAAQ;UACJ,iBAAiB;UACjB,kBAAkB;YACd,SAAS;cACL,SAAS;cACT,QAAQ;;YAEZ,MAAM;cACF,SAAS;cACT,QAAQ;;YAEZ,OAAO;cACH,SAAS;cACT,QAAQ;;YAEZ,QAAQ;cACJ,SAAS;cACT,QAAQ;;YAEZ,WAAW;cACP,SAAS;cACT,QAAQ;;YAEZ,MAAM;cACF,SAAS;cACT,QAAQ;;YAEZ,SAAS;cACL,SAAS;cACT,QAAQ;;;;QAIpB,MAAM;UACF,iBAAiB;UACjB,kBAAkB;YACd,SAAS;cACL,SAAS;cACT,QAAQ;;YAEZ,MAAM;cACF,SAAS;cACT,QAAQ;;YAEZ,OAAO;cACH,SAAS;cACT,QAAQ;;YAEZ,QAAQ;cACJ,SAAS;cACT,QAAQ;;YAEZ,WAAW;cACP,SAAS;cACT,QAAQ;;YAEZ,MAAM;cACF,SAAS;cACT,QAAQ;;YAEZ,SAAS;cACL,SAAS;cACT,QAAQ;;;;QAIpB,WAAW;UACP,iBAAiB;UACjB,kBAAkB;YACd,SAAS;cACL,SAAS;cACT,QAAQ;;YAEZ,MAAM;cACF,SAAS;cACT,QAAQ;;YAEZ,OAAO;cACH,SAAS;cACT,QAAQ;;YAEZ,QAAQ;cACJ,SAAS;cACT,QAAQ;;YAEZ,WAAW;cACP,SAAS;cACT,QAAQ;;YAEZ,MAAM;cACF,SAAS;cACT,QAAQ;;YAEZ,SAAS;cACL,SAAS;cACT,QAAQ;;;;QAIpB,SAAS;UACL,iBAAiB;UACjB,kBAAkB;YACd,SAAS;cACL,SAAS;cACT,QAAQ;;YAEZ,MAAM;cACF,SAAS;cACT,QAAQ;;YAEZ,OAAO;cACH,SAAS;cACT,QAAQ;;YAEZ,QAAQ;cACJ,SAAS;cACT,QAAQ;;YAEZ,WAAW;cACP,SAAS;cACT,QAAQ;;YAEZ,MAAM;cACF,SAAS;cACT,QAAQ;;YAEZ,SAAS;cACL,SAAS;cACT,QAAQ;;;;;MAKxB,QAAQ;QACJ,OAAO;UACH,gBAAgB;YACZ,QAAQ,MAAM,WAAW;YACzB,QAAQ;YACR,aAAa,MAAM,UAAU;;UAEjC,gBAAgB;YACZ,QAAQ,MAAM,WAAW;;;QAGjC,cAAc;UACV,OAAO,MAAM,UAAU;UACvB,QAAQ,MAAM,WAAW;;;MAGjC,SAAS;QACL,YAAY;QACZ,SAAS,MAAM,QAAQ;QACvB,eAAe;QACf,UAAU;UACN,YAAY,MAAM,mBAAmB;UACrC,iBAAiB;;QAErB,oBAAoB,MAAM,YAAY;QACtC,iBAAiB,MAAM,gBAAgB;;MAE3C,cAAc;QACV,kBAAkB;;MAEtB,UAAU;QACN,WAAW,MAAM,KAAK;QACtB,gBAAgB;;MAEpB,SAAS;QACL,OAAO;UACH,OAAO,MAAM,UAAU;UACvB,MAAM,MAAM,SAAS;UACrB,UAAU;UACV,QAAQ,MAAM,WAAW;UACzB,MAAM;UACN,UAAU;;QAEd,OAAO;UACH,OAAO,MAAM,UAAU;UACvB,MAAM,MAAM,SAAS;UACrB,UAAU;UACV,QAAQ,MAAM,WAAW;UACzB,MAAM;;QAEV,SAAS;;KAEhB;;;;;;;;;;AChpCD,QAAA,kBAAA;AAiBA,QAAY;AAAZ,KAAA,SAAYC,2BAAwB;AAEhC,MAAAA,0BAAAA,0BAAA,MAAA,IAAA,CAAA,IAAA;AAEA,MAAAA,0BAAAA,0BAAA,SAAA,IAAA,CAAA,IAAA;AAEA,MAAAA,0BAAAA,0BAAA,YAAA,IAAA,CAAA,IAAA;IACJ,GAPY,2BAAA,QAAA,6BAAA,QAAA,2BAAwB,CAAA,EAAA;AAgBpC,QAAA;;MAAA,WAAA;AAAA,iBAAAC,sBAAA;AACY,eAAA,SAAuD,CAAA;QAkEnE;AAhEI,QAAAA,oBAAA,UAAA,aAAA,SAAW,UAAgB;AACvB,iBAAO,KAAK,OAAO,eAAe,QAAQ,IAAI,KAAK,OAAO,QAAQ,IAAI;QAC1E;AAEA,QAAAA,oBAAA,UAAA,QAAA,WAAA;AACI,eAAK,SAAS,CAAA;QAClB;AAEA,QAAAA,oBAAA,UAAA,SAAA,SAAO,QAA6B;AAChC,cAAM,OAAO,OAAO,KAAK,KAAK,MAAM;AAEpC,mBAAkB,KAAA,GAAA,SAAA,MAAA,KAAA,OAAA,QAAA,MAAM;AAAnB,gBAAM,MAAG,OAAA,EAAA;AACV,gBAAM,mBAAmB,KAAK,OAAO,GAAG;AAExC,mBAAO,SACH,iBAAiB,UACjB,iBAAiB,YACjB,iBAAiB,eACjB,iBAAiB,iBAAiB;;QAG9C;AAEA,QAAAA,oBAAA,UAAA,WAAA,SACI,UACA,YACA,eACA,mBAAiF;AADjF,cAAA,kBAAA,QAAA;AAAA,4BAAyB,gBAAA,SAAS;UAAI;AACtC,cAAA,sBAAA,QAAA;AAAA,gCAA8C,yBAAyB;UAAU;AAEjF,cAAI,mBAAmB,KAAK,WAAW,QAAQ;AAE/C,cAAI,qBAAqB,QAAW;AAChC,6BAAiB,aAAa;iBAC3B;AACH,+BAAmB;cACf;cACA;cACA;cACA;;;AAIR,eAAK,OAAO,QAAQ,IAAI;QAC5B;AAEA,QAAAA,oBAAA,UAAA,aAAA,SAAW,UAAgB;AACvB,iBAAO,KAAK,OAAO,QAAQ;QAC/B;AAEA,QAAAA,oBAAA,UAAA,iBAAA,SAAe,UAAkB,eAAsB;AACnD,cAAM,mBAAmB,KAAK,WAAW,QAAQ;AAEjD,iBAAO,oBAAoB,iBAAiB,cAAc,UAAU,aAAa,KAAK,IAChF,IAAI,iBAAiB,WAAU,IAC/B;QACV;AAEA,QAAAA,oBAAA,UAAA,eAAA,WAAA;AACI,iBAAO,OAAO,KAAK,KAAK,MAAM,EAAE;QACpC;AAEA,QAAAA,oBAAA,UAAA,YAAA,SAAU,OAAa;AAAvB,cAAA,QAAA;AACI,iBAAO,OAAO,KAAK,KAAK,MAAM,EAAE,IAAI,SAAC,GAAC;AAAK,mBAAA,MAAK,OAAO,CAAC;UAAb,CAAc,EAAE,KAAK;QACpE;AACJ,eAAAA;MAAA,EAnEA;;AAAa,YAAA,qBAAA;AAsEb,QAAA;;MAAA,WAAA;AAAA,iBAAAC,kBAAA;QAwCA;AApCW,QAAAA,gBAAA,8BAAP,SAAmC,UAAyC;AACxE,mBAAS,MAAK;AAEd,UAAAA,gBAAe,gBAAgB,OAAO,QAAQ;QAClD;AAEO,QAAAA,gBAAA,6BAAP,SAAkC,UAAoC;AAClE,mBAAS,MAAK;AAEd,UAAAA,gBAAe,eAAe,OAAO,QAAQ;QACjD;AAIA,eAAA,eAAWA,iBAAA,YAAQ;eAAnB,WAAA;AACI,gBAAI,CAACA,gBAAe,WAAW;AAC3B,cAAAA,gBAAe,YAAY,IAAI,mBAAkB;AACjD,cAAAA,gBAAe,4BAA4BA,gBAAe,SAAS;;AAGvE,mBAAOA,gBAAe;UAC1B;;;;AAEA,eAAA,eAAWA,iBAAA,WAAO;eAAlB,WAAA;AACI,gBAAI,CAACA,gBAAe,UAAU;AAC1B,cAAAA,gBAAe,WAAW,IAAI,mBAAkB;AAChD,cAAAA,gBAAe,2BAA2BA,gBAAe,QAAQ;;AAGrE,mBAAOA,gBAAe;UAC1B;;;;AAEO,QAAAA,gBAAA,QAAP,WAAA;AACI,UAAAA,gBAAe,YAAY;AAC3B,UAAAA,gBAAe,WAAW;QAC9B;AAvBgB,QAAAA,gBAAA,kBAAkB,IAAI,mBAAkB;AACxC,QAAAA,gBAAA,iBAAiB,IAAI,mBAAkB;AAuB3D,eAAAA;QAxCA;;AAAa,YAAA,iBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxGb,QAAA,QAAA;AACA,QAAA,YAAA;AACA,QAAA,WAAA;AAEA,QAAA,sBAAA;AACA,QAAA,kBAAA;AAUA,QAAA;;MAAA,WAAA;AAAA,iBAAAC,qBAAA;AACa,eAAA,SAA6B,CAAA;AAC7B,eAAA,mBAAuC,CAAA;QAUpD;AARI,QAAAA,mBAAA,UAAA,aAAA,SAAW,YAAwB,OAA8B,SAAe;AAC5E,eAAK,iBAAiB,KAAK;YACvB,OAAO,MAAM,gBAAgB;YAC7B,QAAQ;YACR;YACA;WACH;QACL;AACJ,eAAAA;MAAA,EAZA;;AAAa,YAAA,oBAAA;AAgBb,QAAA;;MAAA,SAAA,QAAA;AAAyC,kBAAAC,aAAA,MAAA;AAAzC,iBAAAA,cAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AAoCY,gBAAA,kBAA2B;;QAwHvC;AAtIc,QAAAA,YAAA,UAAA,eAAV,WAAA;AACI,iBAAO,KAAK,gBAAe;QAC/B;AAMA,eAAA,eAAIA,YAAA,WAAA,YAAQ;eAAZ,WAAA;AACI,mBAAO,KAAK,SAASA,YAAW,gBAAgB;UACpD;;;;AAcU,QAAAA,YAAA,UAAA,WAAV,SAAmB,MAAU;AACzB,cAAI,KAAK,kBAAkB;AACvB,mBAAO,KAAK,iBAAiB,SAAS,IAAI;;AAG9C,iBAAO;QACX;AAYA,QAAAA,YAAA,UAAA,0BAAA,SAAwB,MAA0B,eAAmB;AACjE,cAAM,QAAQ,kBAAkB,SAAY,KAAK,SAAS,IAAI,IAAI;AAElE,cAAI,SAAA,eAAe,kCAAkC;AAEjD,gBAAI,gBAAwC;AAE5C,mBAAO,iBAAiB,CAAC,cAAc,2BAA2B;AAC9D,8BAAgB,cAAc;;AAGlC,gBAAI,iBAAiB,cAAc,2BAA2B;AAC1D,qBAAO,cAAc,0BAA0B,MAAM,MAAM,KAAK;;;AAIxE,iBAAO;QACX;AAEA,QAAAA,YAAA,UAAA,YAAA,SAAU,OAA6B;AACnC,eAAK,UAAU;QACnB;AAEA,QAAAA,YAAA,UAAA,oBAAA,SAAkB,OAAc;AAC5B,eAAK,kBAAkB;QAC3B;AAEA,QAAAA,YAAA,UAAA,iBAAA,WAAA;AACI,iBAAO,KAAK,mBAAmB,CAAC,KAAK,SAAS,UAAU,KAAK,WAAW,gBAAgB;QAC5F;AAEA,QAAAA,YAAA,UAAA,gBAAA,WAAA;AAEI,cAAI,gBAA4B;AAEhC,iBAAO,cAAc,QAAQ;AACzB,4BAAgB,cAAc;;AAGlC,iBAAO;QACX;AAEA,QAAAA,YAAA,UAAA,6BAAA,SAA2B,SAA0B;AACjD,cAAI,KAAK,IAAI;AACT,gBAAI,QAAQ,OAAO,eAAe,KAAK,EAAE,GAAG;AACxC,kBAAI,QAAQ,OAAO,KAAK,EAAE,MAAM,GAAG;AAC/B,wBAAQ,WACJ,MACA,MAAM,gBAAgB,aACtB,UAAA,QAAQ,OAAO,YAAY,KAAK,EAAE,CAAC;;AAI3C,sBAAQ,OAAO,KAAK,EAAE,KAAK;mBACxB;AACH,sBAAQ,OAAO,KAAK,EAAE,IAAI;;;QAGtC;AAEA,QAAAA,YAAA,UAAA,qBAAA,WAAA;AACI,cAAM,SAAS,IAAI,kBAAiB;AAEpC,eAAK,2BAA2B,MAAM;AAEtC,iBAAO;QACX;AAUA,QAAAA,YAAA,UAAA,mBAAA,SAAiB,MAAU;AAEvB,iBAAO,KAAK,SAAS,IAAI,IAAI,OAAO;QACxC;AAEA,QAAAA,YAAA,UAAA,sBAAA,WAAA;QAEA;AAEA,eAAA,eAAIA,YAAA,WAAA,UAAM;eAAV,WAAA;AACI,mBAAO,KAAK;UAChB;;;;AAEA,eAAA,eAAIA,YAAA,WAAA,mBAAe;eAAnB,WAAA;AACI,mBAAO,KAAK;UAChB;;;;AAxJgB,QAAAA,YAAA,mBAAmB,IAAI,gBAAA,eACnC,gBAAA,SAAS,MACT,QACA,QACA,QACA,QACA,SAAC,QAAc;AACX,iBAAoB,OAAQ,gBAAe;QAC/C,CAAC;AAEW,QAAAA,YAAA,aAAa,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,IAAI;AACnD,QAAAA,YAAA,mBAAmB,IAAI,gBAAA,2BACnC,gBAAA,SAAS,MACT,YACA,oBAAA,kBACA,OACA,IAAI,oBAAA,iBAAgB,CAAE;AAQ1B,mBAAA;WADC,GAAA,gBAAA,UAASA,YAAW,UAAU;;AAI/B,mBAAA;WADC,GAAA,gBAAA,UAASA,YAAW,gBAAgB;;AA+HzC,eAAAA;QA5JyC,gBAAA,kBAAkB;;AAArC,YAAA,aAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/BtB,QAAA;;MAAA,WAAA;AAKI,iBAAAC,uBAAY,mBAAyB;AACjC,eAAK,qBAAqB;QAC9B;AAEA,QAAAA,uBAAA,UAAA,SAAA,SAAO,MAA0B,OAAyB;AACtD,cAAI;AAEJ,cAAI,OAAO;AACP,gBAAI,SAAS;AAEb,oBAAQ,UAAU,KAAK,mBAAmB,KAAK,KAAK,MAAM,MAAM;AAC5D,uBAAS,OAAO,QAAQ,QAAQ,CAAC,GAAG,KAAK,eAAe,MAAM,OAAO,CAAC;;AAG1E,mBAAO;iBACJ;AACH,mBAAO;;QAEf;AACJ,eAAAA;MAAA,EAxBA;;AA0BA,QAAA;;MAAA,SAAA,QAAA;AAA4B,kBAAAC,gBAAA,MAAA;AAA5B,iBAAAA,iBAAA;;QAgBA;AAfc,QAAAA,eAAA,UAAA,iBAAV,SAAyB,MAA0B,SAAwB;AACvE,cAAM,OAAO,IAAI,KAAK,KAAK,MAAM,QAAQ,CAAC,CAAC,CAAC;AAC5C,cAAM,SAAS,QAAQ,CAAC,MAAM,SAAY,QAAQ,CAAC,EAAE,YAAW,IAAK;AAErE,cAAI,WAAW,WAAW;AACtB,mBAAO,KAAK,mBAAmB,MAAM;cACjC,KAAK;cACL,SAAS;cACT,OAAO;cACP,MAAM;aACqB;iBAC5B;AACH,mBAAO,KAAK,mBAAkB;;QAEtC;AACJ,eAAAA;MAAA,EAhB4B,qBAAqB;;AAkBjD,QAAA;;MAAA,SAAA,QAAA;AAA4B,kBAAAC,gBAAA,MAAA;AAA5B,iBAAAA,iBAAA;;QAMA;AALc,QAAAA,eAAA,UAAA,iBAAV,SAAyB,MAA0B,SAAwB;AACvE,cAAM,OAAO,IAAI,KAAK,KAAK,MAAM,QAAQ,CAAC,CAAC,CAAC;AAE5C,iBAAO,KAAK,mBAAmB,MAAM,EAAE,MAAM,WAAW,QAAQ,UAAS,CAAE;QAC/E;AACJ,eAAAA;MAAA,EAN4B,qBAAqB;;AAQjD,aAAgB,WAAW,MAA0B,MAAwB;AACzE,UAAM,aAAsC;QACxC,IAAI,cACA,mHAAmH;QAEvH,IAAI,cACA,uFAAuF;;AAI/F,UAAI,SAAS;AAEb,eAAwB,KAAA,GAAA,eAAA,YAAA,KAAA,aAAA,QAAA,MAAY;AAA/B,YAAM,YAAS,aAAA,EAAA;AAChB,iBAAS,UAAU,OAAO,MAAM,MAAM;;AAG1C,aAAO;IACX;AAjBA,YAAA,aAAA;;;;;;;;;;AClDA,QAAA;;MAAA,WAAA;AAAA,iBAAAC,aAAA;QAUA;AAToB,QAAAA,WAAA,OAAO;UACnB,KAAK;UACL,OAAO;UACP,QAAQ;UACR,OAAO;UACP,IAAI;UACJ,MAAM;UACN,QAAQ;;AAEhB,eAAAA;QAVA;;AAAa,YAAA,YAAA;;;;;;;;;;ACFb,QAAA,gBAAA;AACA,QAAA,cAAA;AAEA,QAAA;;MAAA,WAAA;AAiCI,iBAAAC,UAAY,KAAa,OAAa;AA7B9B,eAAA,aAAsB;AA8B1B,eAAK,MAAM;AACX,eAAK,SAAS;QAClB;AA9BQ,QAAAA,UAAA,UAAA,QAAR,WAAA;AACI,cAAI,KAAK,aAAa,KAAK,SAAS;AAChC,iBAAK,QAAQ,IAAI;;QAEzB;AAEQ,QAAAA,UAAA,UAAA,mBAAR,WAAA;AACI,cAAI,KAAK,UAAU;AACf,gBAAM,sBAAsB,KAAK,cAAc,KAAK,cAAc,cAAA;AAElE,iBAAK,SAAS,YAAY,oBAAoB,iBAAiB,SAAS;AACxE,iBAAK,SAAS,UAAU,IACpB,oBAAoB,iBAChB,KAAK,YAAY,0BAA0B,gCAAgC,CAC9E;AAGL,gBAAI,CAAC,KAAK,WAAW;AACjB,mBAAK,SAAS,UAAU,IAAI,oBAAoB,iBAAiB,aAAa,CAAC;;;QAG3F;AAWA,QAAAA,UAAA,UAAA,WAAA,WAAA;AACI,iBAAO,KAAK;QAChB;AAEA,QAAAA,UAAA,UAAA,SAAA,SAAO,YAAuB;AAA9B,cAAA,QAAA;AACI,eAAK,cAAc;AAEnB,cAAI,CAAC,KAAK,UAAU;AAChB,iBAAK,WAAW,SAAS,cAAc,MAAM;AAC7C,iBAAK,SAAS,YAAY,KAAK;AAC/B,iBAAK,SAAS,aAAa,QAAQ,UAAU;AAE7C,gBAAI,CAAC,KAAK,WAAW;AACjB,mBAAK,SAAS,aAAa,iBAAiB,MAAM;;AAGtD,iBAAK,SAAS,aAAa,gBAAgB,OAAO;AAClD,iBAAK,SAAS,YAAY,SAAC,IAAE;AACzB,oBAAK,MAAK;YACd;AACA,iBAAK,SAAS,YAAY,SAAC,GAAC;AACxB,kBAAI,EAAE,QAAQ,YAAA,UAAU,KAAK,OAAO;AAChC,kBAAE,eAAe;AAEjB,sBAAK,MAAK;;YAElB;AAEA,iBAAK,iBAAgB;;AAGzB,iBAAO,KAAK;QAChB;AAEA,eAAA,eAAIA,UAAA,WAAA,SAAK;eAAT,WAAA;AACI,mBAAO,KAAK;UAChB;eAEA,SAAU,UAAgB;AACtB,iBAAK,SAAS;AAEd,gBAAI,KAAK,UAAU;AACf,mBAAK,SAAS,YAAY;;UAElC;;;;AAEA,eAAA,eAAIA,UAAA,WAAA,aAAS;eAAb,WAAA;AACI,mBAAO,KAAK;UAChB;eAEA,SAAc,OAAc;AACxB,gBAAI,KAAK,eAAe,OAAO;AAC3B,mBAAK,aAAa;AAElB,mBAAK,iBAAgB;;UAE7B;;;;AACJ,eAAAA;MAAA,EA/FA;;AAAa,YAAA,WAAA;;;;;;;;;;ACHb,QAAA;;MAAA,WAAA;AAAA,iBAAAC,cAAA;AACY,eAAA,SAAuB,CAAA;QAoCnC;AA/BI,QAAAA,YAAA,UAAA,MAAA,SAAI,OAAa;AACb,iBAAO,KAAK,OAAO,KAAK;QAC5B;AAEA,QAAAA,YAAA,UAAA,MAAA,SAAI,MAAW;AACX,eAAK,OAAO,KAAK,IAAI;AAErB,cAAI,KAAK,aAAa;AAClB,iBAAK,YAAY,IAAI;;QAE7B;AAEA,QAAAA,YAAA,UAAA,SAAA,SAAO,MAAW;AACd,cAAM,IAAI,KAAK,OAAO,QAAQ,IAAI;AAElC,cAAI,KAAK,GAAG;AACR,iBAAK,SAAS,KAAK,OAAO,OAAO,GAAG,CAAC;AAErC,gBAAI,KAAK,eAAe;AACpB,mBAAK,cAAc,IAAI;;;QAGnC;AAEA,QAAAA,YAAA,UAAA,UAAA,SAAQ,MAAW;AACf,iBAAO,KAAK,OAAO,QAAQ,IAAI;QACnC;AAEA,eAAA,eAAIA,YAAA,WAAA,UAAM;eAAV,WAAA;AACI,mBAAO,KAAK,OAAO;UACvB;;;;AACJ,eAAAA;MAAA,EArCA;;AAAa,YAAA,aAAA;;;;;;;;;;ACAb,QAAA,cAAA;AACA,QAAA,QAAA;AACA,QAAA,gBAAA;AAEA,QAAA;;MAAA,WAAA;AAAA,iBAAAC,gBAAA;AACY,eAAA,UAAmB;QA6M/B;AApMI,QAAAA,cAAA,UAAA,UAAA,SAAQ,GAAgB;AACpB,kBAAQ,EAAE,KAAK;YACX,KAAK,YAAA,UAAU,KAAK;AAChB,mBAAK,WAAW,IAAI;AAEpB;;QAEZ;AAEA,QAAAA,cAAA,UAAA,SAAA,SAAO,oBAA8B;AAArC,cAAA,QAAA;AACI,cAAM,UAAU,SAAS,cAAc,KAAK;AAC5C,kBAAQ,WAAW;AACnB,kBAAQ,YAAY,KAAK,WAAW,iBAAiB,WAAW,yBAAyB;AACzF,kBAAQ,aAAa,QAAQ,QAAQ;AACrC,kBAAQ,aAAa,cAAc,MAAM;AACzC,kBAAQ,YAAY,SAAC,GAAC;AAClB,kBAAK,QAAQ,CAAC;AAEd,mBAAO,CAAC,EAAE;UACd;AAEA,kBAAQ,YAAY,KAAK,cAAa,CAAE;AAExC,iBAAO;QACX;AAEA,QAAAA,cAAA,UAAA,QAAA,WAAA;AACI,cAAI,KAAK,eAAe;AACN,iBAAK,cAAc,kBAAmB,MAAK;;QAEjE;AAEA,QAAAA,cAAA,UAAA,QAAA,SAAM,aAAwB;;AAA9B,cAAA,QAAA;AACI,cAAI,CAAC,KAAK,SAAS;AACf,iBAAK,kBAAkB,SAAS,cAAc,KAAK;AACnD,iBAAK,gBAAgB,YAAY,KAAK,WAAW,iBAAiB,iBAAiB;AACnF,iBAAK,gBAAgB,WAAW;AAChC,iBAAK,gBAAgB,MAAM,QAAQ,SAAS,gBAAgB,cAAc;AAC1E,iBAAK,gBAAgB,MAAM,SAAS,SAAS,gBAAgB,eAAe;AAC5E,iBAAK,gBAAgB,UAAU,SAAC,IAAE;AAC9B,oBAAK,WAAW,IAAI;YACxB;AAEA,qBAAS,KAAK,YAAY,KAAK,eAAe;AAE9C,gBAAM,oBAAoB,YAAY,sBAAqB;AAE3D,iBAAK,gBAAgB,KAAK,OAAO,iBAAiB;AAClD,aAAA,KAAA,KAAK,cAAc,WAAU,OAAM,MAAA,IAC5B,KAAK,WAAW,kBACf,iBACA,4BACA,4BACA,4BACA,0BAA0B,CAC7B;AAGL,mBAAO,iBAAiB,UAAU,SAAC,IAAE;AACjC,oBAAK,WAAW,IAAI;YACxB,CAAC;AAED,gBAAM,mBAAmB,YAAY,aAAa,YAAY;AAC9D,gBAAI,kBAAkB;AAClB,mBAAK,cAAc,aAAa,cAAc,gBAAgB;;AAGlE,iBAAK,gBAAgB,YAAY,KAAK,aAAa;AAEnD,gBAAM,qBAAqB,KAAK,cAAc,sBAAqB;AAEnE,gBAAM,sBAAsB,OAAO,cAAc,kBAAkB;AACnE,gBAAM,sBAAsB,kBAAkB;AAC9C,gBAAM,sBAAsB,OAAO,aAAa,kBAAkB;AAClE,gBAAM,qBAAqB,kBAAkB;AAE7C,gBAAI,OAAO,kBAAkB,OAAO,MAAM,WAAU;AACpD,gBAAI;AAEJ,gBACI,sBAAsB,mBAAmB,UACzC,sBAAsB,mBAAmB,QAC3C;AAEE,kBAAM,oBAAoB,KAAK,IAAI,mBAAmB,QAAQ,OAAO,WAAW;AAEhF,mBAAK,cAAc,MAAM,YAAY,oBAAoB;AAEzD,kBAAI,oBAAoB,mBAAmB,QAAQ;AAC/C,wBAAM,MAAM,WAAU;qBACnB;AACH,wBACI,MAAM,WAAU,IAChB,kBAAkB,OACjB,kBAAkB,SAAS,qBAAqB;;AAGzD,kBACI,qBAAqB,mBAAmB,SACxC,sBAAsB,mBAAmB,OAC3C;AAEE,oBAAM,mBAAmB,KAAK,IAAI,mBAAmB,OAAO,OAAO,UAAU;AAE7E,qBAAK,cAAc,MAAM,WAAW,mBAAmB;AAEvD,oBAAI,mBAAmB,mBAAmB,OAAO;AAC7C,yBAAO,MAAM,WAAU;uBACpB;AACH,yBACI,MAAM,WAAU,IAChB,kBAAkB,QACjB,kBAAkB,QAAQ,oBAAoB;;qBAEpD;AAEH,oBAAI,uBAAuB,mBAAmB,OAAO;AACjD,yBAAO,MAAM,WAAU,IAAK,kBAAkB;AAE9C,mBAAA,KAAA,KAAK,cAAc,WAAU,IAAG,MAAA,IACzB,KAAK,WAAW,kBACf,iBACA,0BAA0B,CAC7B;uBAEF;AACH,yBACI,MAAM,WAAU,IAAK,kBAAkB,OAAO,mBAAmB;AAErE,mBAAA,KAAA,KAAK,cAAc,WAAU,IAAG,MAAA,IACzB,KAAK,WAAW,kBACf,iBACA,0BAA0B,CAC7B;;;mBAIV;AAEH,kBAAI,uBAAuB,mBAAmB,QAAQ;AAClD,wBAAM,MAAM,WAAU,IAAK,kBAAkB;AAE7C,iBAAA,KAAA,KAAK,cAAc,WAAU,IAAG,MAAA,IACzB,KAAK,WAAW,kBACf,iBACA,0BAA0B,CAC7B;qBAEF;AACH,wBAAM,MAAM,WAAU,IAAK,kBAAkB,MAAM,mBAAmB;AAEtE,iBAAA,KAAA,KAAK,cAAc,WAAU,IAAG,MAAA,IACzB,KAAK,WAAW,kBACf,iBACA,0BAA0B,CAC7B;;AAIT,kBAAI,sBAAsB,mBAAmB,OAAO;AAChD,uBAAO,MAAM,WAAU,IAAK,kBAAkB,QAAQ,mBAAmB;;;AAIjF,iBAAK,cAAc,MAAM,OAAO,OAAO;AACvC,iBAAK,cAAc,MAAM,MAAM,QAAM;AAErC,iBAAK,cAAc,MAAK;AAExB,iBAAK,UAAU;;QAEvB;AAEA,QAAAA,cAAA,UAAA,aAAA,SAAW,cAAqB;AAC5B,cAAI,KAAK,SAAS;AACd,qBAAS,KAAK,YAAY,KAAK,eAAe;AAE9C,iBAAK,UAAU;AAEf,gBAAI,KAAK,SAAS;AACd,mBAAK,QAAQ,MAAM,YAAY;;;QAG3C;AAEA,eAAA,eAAIA,cAAA,WAAA,cAAU;eAAd,WAAA;AACI,mBAAO,KAAK,cAAc,KAAK,cAAc,cAAA;UACjD;eAEA,SAAe,OAAiB;AAC5B,iBAAK,cAAc;UACvB;;;;AAEA,eAAA,eAAIA,cAAA,WAAA,UAAM;eAAV,WAAA;AACI,mBAAO,KAAK;UAChB;;;;AACJ,eAAAA;MAAA,EA9MA;;AAAsB,YAAA,eAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACJtB,QAAA,cAAA;AACA,QAAA,eAAA;AACA,QAAA,kBAAA;AAGA,QAAA;;MAAA,SAAA,QAAA;AAA+B,kBAAAC,YAAA,MAAA;AAA/B,iBAAAA,aAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AACY,gBAAA,SAA+B,IAAI,aAAA,WAAU;AAC7C,gBAAA,iBAAqC,CAAA;AACrC,gBAAA,iBAAyB;;QA6FrC;AA3Fc,QAAAA,WAAA,UAAA,gBAAV,WAAA;AACI,cAAM,UAAU,SAAS,cAAc,KAAK;AAC5C,kBAAQ,YAAY,KAAK,WAAW,iBAAiB,kBAAkB;AACvE,kBAAQ,aAAa,QAAQ,SAAS;AAEtC,mBAAS,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ,KAAK;AACzC,gBAAM,eAAe,KAAK,OAAO,IAAI,CAAC,EAAE,OAAO,KAAK,UAAU;AAC9D,yBAAa,WAAW;AAExB,oBAAQ,YAAY,YAAY;AAEhC,gBAAI,MAAM,KAAK,eAAe;AAC1B,2BAAa,MAAK;;AAGtB,iBAAK,eAAe,KAAK,YAAY;;AAGzC,iBAAO;QACX;AAEA,QAAAA,WAAA,UAAA,UAAA,SAAQ,GAAgB;AACpB,iBAAA,UAAM,QAAO,KAAA,MAAC,CAAC;AAEf,cAAI,oBAAoB,KAAK;AAE7B,kBAAQ,EAAE,KAAK;YACX,KAAK,YAAA,UAAU,KAAK;AAChB,mBAAK,WAAW,IAAI;AAEpB;YAWJ,KAAK,YAAA,UAAU,KAAK;AAChB,kBAAI,qBAAqB,GAAG;AACxB,oCAAoB,KAAK,eAAe,SAAS;qBAC9C;AACH;AAEA,oBAAI,oBAAoB,GAAG;AACvB,sCAAoB,KAAK,eAAe,SAAS;;;AAIzD,mBAAK,gBAAgB;AAErB,gBAAE,eAAe;AAEjB;YACJ,KAAK,YAAA,UAAU,KAAK;AAChB,kBAAI,oBAAoB,GAAG;AACvB,oCAAoB;qBACjB;AACH;AAEA,oBAAI,qBAAqB,KAAK,eAAe,QAAQ;AACjD,sCAAoB;;;AAI5B,mBAAK,gBAAgB;AAErB,gBAAE,eAAe;AAEjB;;QAEZ;AAEA,eAAA,eAAIA,WAAA,WAAA,SAAK;eAAT,WAAA;AACI,mBAAO,KAAK;UAChB;;;;AAEA,eAAA,eAAIA,WAAA,WAAA,iBAAa;eAAjB,WAAA;AACI,mBAAO,KAAK;UAChB;eAEA,SAAkB,OAAa;AAC3B,gBAAI,SAAS,KAAK,QAAQ,KAAK,eAAe,QAAQ;AAClD,mBAAK,eAAe,KAAK,EAAE,MAAK;AAEhC,mBAAK,iBAAiB;;UAE9B;;;;AACJ,eAAAA;MAAA,EAhG+B,gBAAA,YAAY;;AAA9B,YAAA,YAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACLb,iBAAA,qBAAA,OAAA;AACA,iBAAA,sBAAA,OAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACDA,QAAA,QAAA;AACA,QAAA,WAAA;AAYA,QAAA,QAAA;AACA,QAAA,gBAAA;AAUA,QAAA,iBAAA;AACA,QAAA,gBAAA;AACA,QAAA,kBAAA;AAoBA,QAAA,aAAA;AACA,QAAA,YAAA;AACA,QAAA,aAAA;AAGA,aAAS,aAAa,SAAoB;;AACtC,UAAM,cAAe,OAAO,WAAW,cAAe,MAAM,MAAA,KAAA,OAAO,kBAAY,QAAA,OAAA,SAAA,SAAA,GAAE,eAAS,QAAA,OAAA,SAAA,KAAI;AAC9F,cAAQ,YAAY;IACxB;AAEA,aAAgB,iBACZ,YACA,sBACA,aAA8B;AAE9B,UACI,qBAAqB,UAAU,KAC9B,qBAAqB,iBAAiB,qBAAqB,gBAAgB,GAC9E;AACE,YAAM,YAAY,SAAS,cAAc,KAAK;AAC9C,kBAAU,YAAY,WAAW,iBAC7B,SACK,gBAAgB,MAAM,YAAY,aAAa,eAAe,cAC/D,YAAY;AAEpB,kBAAU,aAAa,eAAe,MAAM;AAE5C,YAAM,QAAQ,qBAAqB,YAC7B,MAAM,iBAAiB,qBAAqB,SAAS,IACrD;AAEN,YAAI,gBAAgB,MAAM,YAAY,YAAY;AAC9C,cAAI,qBAAqB,eAAe;AACpC,sBAAU,MAAM,aAAa,qBAAqB,UAAU,IAAI;AAChE,sBAAU,MAAM,eAAe,qBAAqB,UAAU,IAAI;AAClE,sBAAU,MAAM,eACZ,qBAAqB,gBAAgB,cAAc;iBACpD;AACH,sBAAU,MAAM,SAAS,qBAAqB,UAAU;;eAEzD;AACH,cAAI,qBAAqB,eAAe;AACpC,sBAAU,MAAM,cAAc,qBAAqB,UAAU,IAAI;AACjE,sBAAU,MAAM,cAAc,qBAAqB,UAAU,IAAI;AACjE,sBAAU,MAAM,cACZ,qBAAqB,gBAAgB,cAAc;iBACpD;AACH,sBAAU,MAAM,QAAQ,qBAAqB,UAAU;;;AAI/D,kBAAU,MAAM,WAAW;AAC3B,kBAAU,MAAM,OAAO;AAEvB,eAAO;aACJ;AACH,eAAO;;IAEf;AAhDA,YAAA,mBAAA;AAoDA,QAAA;;MAAA,SAAA,QAAA;AAA0C,kBAAAC,cAAA,MAAA;AAA1C,iBAAAA,eAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AA4FY,gBAAA,0BAAmC;;QA6kB/C;AA/nBI,eAAA,eAAIA,aAAA,WAAA,QAAI;eAAR,WAAA;AACI,gBAAM,OAAO,KAAK,SAASA,aAAY,YAAY;AAEnD,gBAAI,MAAM;AACN,qBAAO;mBACJ;AACH,kBAAI,KAAK,QAAQ;AACb,uBAAO,KAAK,OAAO;qBAChB;AACH,uBAAO;;;UAGnB;eAEA,SAAS,OAAyB;AAC9B,iBAAK,SAASA,aAAY,cAAc,KAAK;UACjD;;;;AAGA,eAAA,eAAIA,aAAA,WAAA,aAAS;eAAb,WAAA;AACI,mBAAO,KAAK,SAASA,aAAY,iBAAiB;UACtD;eAEA,SAAc,OAAc;AAIxB,gBAAI,SAAA,eAAe,mCAAmC,CAAC,OAAO;AAC1D,mBAAK,uBAAsB;;AAG/B,gBAAI,KAAK,cAAc,OAAO;AAC1B,mBAAK,SAASA,aAAY,mBAAmB,KAAK;AAElD,mBAAK,gCAA+B;AAEpC,kBAAI,KAAK,kBAAkB;AACvB,mDAAmC,IAAI;;;AAI/C,gBAAI,KAAK,kBAAkB;AACvB,mBAAK,iBAAiB,aAAa,iBAAiB,MAAM,SAAQ,CAAE;;UAE5E;;;;AAUQ,QAAAA,aAAA,UAAA,0BAAR,WAAA;AACI,cAAM,oBAAoB,iBACtB,KAAK,YACL;YACI,SAAS,KAAK,WAAW,oBAAoB,KAAK,OAAO;YACzD,eAAe,KAAK,YAAY,KAAK,WAAW,UAAU,gBAAgB;YAC1E,WAAW,KAAK,YAAY,KAAK,WAAW,UAAU,YAAY;aAEtE,KAAK,oBAAoB;AAG7B,cACI,SAAA,eAAe,yBACf,qBACA,KAAK,yBAAyB,MAAM,YAAY,YAClD;AAEE,gBAAM,kBAAkB,KAAK,mBAAkB;AAE/C,gBAAI,mBAAmB,gBAAgB,oBAAmB,GAAI;AAC1D,kBAAM,wBAAwB,KAAK,WAAW,qCAC1C,gBAAgB,oBAAmB,CAAE;AAGzC,gCAAkB,MAAM,aAAa,MAAM,sBAAsB,OAAO;AACxE,gCAAkB,MAAM,cAAc,MAAM,sBAAsB,QAAQ;;;AAIlF,iBAAO;QACX;AAEQ,QAAAA,aAAA,UAAA,kCAAR,WAAA;AACI,cAAM,cACF,KAAK,aAAY,KAAM,KAAK,YACtB,KAAK,qCACL;AAEV,cAAI,KAAK,kBAAkB;AACvB,gBAAI,aAAa;AACb,mBAAK,iBAAiB,MAAM,UAAU;mBACnC;AACH,mBAAK,iBAAiB,MAAM,eAAe,SAAS;;;AAI5D,cAAI,KAAK,mBAAmB;AACxB,gBAAI,KAAK,UAAU,KAAK,OAAO,eAAe,IAAI,GAAG;AACjD,mBAAK,kBAAkB,MAAM,UAAU;mBACpC;AACH,kBAAI,aAAa;AACb,qBAAK,kBAAkB,MAAM,UAAU;qBACpC;AACH,qBAAK,kBAAkB,MAAM,eAAe,SAAS;;;;QAIrE;AAEQ,QAAAA,aAAA,UAAA,2BAAR,WAAA;AACI,cAAI,KAAK,oBAAoB,KAAK,WAAW;AACzC,iBAAK,iBAAiB,MAAM,aAAa;AAEzC,iBAAK,YAAY;AACjB,+CAAmC,MAAM,KAAK;;QAEtD;AAEQ,QAAAA,aAAA,UAAA,iCAAR,WAAA;AACI,cAAI,KAAK,oBAAoB,CAAC,KAAK,WAAW;AAC1C,iBAAK,iBAAiB,MAAM,eAAe,YAAY;AAEvD,iBAAK,YAAY;AACjB,+CAAmC,MAAM,KAAK;;QAEtD;AAGQ,QAAAA,aAAA,UAAA,iBAAR,SAAuB,WAAiB;AACpC,cAAI,KAAK,aAAa,KAAK,sBAAqB,GAAI;AAChD,gBAAM,UAAU,KAAK,iBAAiB,SAAS;AAI/C,iBAAK,0BAA0B,WAAW,KAAK;AAE/C,gBAAI,CAAC,SAAS;AACV,mBAAK,yBAAwB;uBACtB,WAAW,CAAC,KAAK,WAAW;AACnC,mBAAK,+BAA8B;;;QAG/C;AAGQ,QAAAA,aAAA,UAAA,gBAAR,WAAA;AACI,cAAI,cAAc;AAElB,cAAI,KAAK,yBAAyB;AAC9B,iBAAK,uBAAsB;AAC3B,iBAAK,0BAA0B;AAC/B,0BAAc;;AAGlB,cAAI,KAAK,sBAAqB,GAAI;AAC9B,iBAAK,+BAA8B;;AAGvC,iBAAO;QACX;AAEU,QAAAA,aAAA,UAAA,iCAAV,WAAA;AACI,iBAAO,IAAI,qBAAoB;QACnC;AAEU,QAAAA,aAAA,UAAA,2BAAV,WAAA;AACI,cAAM,kBAAkB,KAAK,4BAA2B;AACxD,cAAM,qBAAqB,MAAM,iBAC7B,gBAAgB,iBAAiB,QAAQ,MAAM;AAGnD,cAAM,UAAU,SAAS,cAAc,KAAK;AAC5C,kBAAQ,MAAM,SAAS,gBAAgB;AACvC,kBAAQ,MAAM,UAAU;AACxB,kBAAQ,MAAM,YAAY;AAC1B,kBAAQ,MAAM,WAAW;AAEzB,cAAI,oBAAoB;AACpB,oBAAQ,MAAM,QAAQ;;AAG1B,kBAAQ,YAAY,WAAW,KAAK,gBAAe;AAEnD,iBAAO;QACX;AAEU,QAAAA,aAAA,UAAA,4BAAV,SAAoC,iBAA4B;AAC5D,cAAI,KAAK,WAAW,QAAQ;AACxB,4BAAgB,MAAM,OAAO;iBAC1B;AACH,4BAAgB,MAAM,OAAO;;QAErC;AAEU,QAAAA,aAAA,UAAA,cAAV,WAAA;AACI,iBACI,KAAK,qBAAqB,UAC1B,KAAK,aACL,KAAK,iBAAiB,eAAe;QAE7C;AAIU,QAAAA,aAAA,UAAA,yBAAV,WAAA;AACI,iBAAO,KAAK,eAAc;QAC9B;AAEU,QAAAA,aAAA,UAAA,eAAV,WAAA;AACI,cAAI,KAAK,oBAAoB,KAAK,yBAAyB,MAAM,YAAY,YAAY;AACrF,gBAAI,SAAA,eAAe,yBAAyB,CAAC,KAAK,WAAU,GAAI;AAC5D,kBAAM,UAAU,IAAI,SAAA,kBAAiB;AAErC,mBAAK,+BAA+B,OAAO;AAE3C,kBAAM,kBACF,KAAK,WAAW,qCAAqC,OAAO;AAEhE,mBAAK,iBAAiB,MAAM,aAAa,MAAM,gBAAgB,OAAO;AACtE,mBAAK,iBAAiB,MAAM,cAAc,MAAM,gBAAgB,QAAQ;mBACrE;AACH,mBAAK,iBAAiB,MAAM,cAAc;AAC1C,mBAAK,iBAAiB,MAAM,aAAa;;;QAGrD;AAOU,QAAAA,aAAA,UAAA,mBAAV,SAA2B,YAAkB;AAIzC,iBAAO;QACX;AAKU,QAAAA,aAAA,UAAA,yBAAV,WAAA;AACI;QACJ;AAEU,QAAAA,aAAA,UAAA,oBAAV,WAAA;AACI,iBAAO,IAAI,SAAA,kBAAiB;QAChC;AAEU,QAAAA,aAAA,UAAA,mBAAV,SAA2B,wBAAuC;AAAvC,cAAA,2BAAA,QAAA;AAAA,qCAAA;UAAuC;AAC9D,iBAAO;QACX;AAEU,QAAAA,aAAA,UAAA,eAAV,WAAA;AACI,iBAAO;QACX;AAEU,QAAAA,aAAA,UAAA,aAAV,WAAA;AACI,iBAAO,KAAK;QAChB;AAEU,QAAAA,aAAA,UAAA,aAAV,SAAqB,OAAoC;AACrD,eAAK,WAAW;QACpB;AAEU,QAAAA,aAAA,UAAA,kBAAV,SAA0B,SAA6B;AACnD,iBAAO,QAAQ,gBAAgB,WAAW,KAAK,gBAAe,CAAE,MAAM;QAC1E;AAEA,eAAA,eAAcA,aAAA,WAAA,oBAAgB;eAA9B,WAAA;AACI,mBAAO;UACX;;;;AAEA,eAAA,eAAcA,aAAA,WAAA,wBAAoB;eAAlC,WAAA;AACI,mBAAO,MAAM,YAAY;UAC7B;;;;AAEA,eAAA,eAAcA,aAAA,WAAA,gBAAY;eAA1B,WAAA;AACI,mBAAO,MAAM,eAAe;UAChC;;;;AAIA,QAAAA,aAAA,UAAA,QAAA,SAAM,QAAa,SAA8B;AAC7C,iBAAA,UAAM,MAAK,KAAA,MAAC,QAAQ,UAAU,UAAU,IAAI,qBAAoB,CAAE;QACtE;AAEA,QAAAA,aAAA,UAAA,WAAA,WAAA;AACI,iBAAO;QACX;AAEA,QAAAA,aAAA,UAAA,aAAA,WAAA;AACI,iBAAO;QACX;AAEA,QAAAA,aAAA,UAAA,oBAAA,WAAA;AACI,cAAI,KAAK,QAAQ;AACb,mBAAO,KAAK,OAAO,kBAAiB;;AAGxC,iBAAO,KAAK;QAChB;AAEA,QAAAA,aAAA,UAAA,8BAAA,WAAA;AACI,iBAAO,KAAK,WAAW,gBAAgB,eAAe,KAAK,kBAAiB,CAAE;QAClF;AAEA,QAAAA,aAAA,UAAA,kCAAA,WAAA;AACI,cAAI,KAAK,QAAQ;AACb,mBAAO,KAAK,OAAO,gCAA+B;;AAGtD,iBAAO,KAAK,WAAW,WAAW;QACtC;AAEA,QAAAA,aAAA,UAAA,0BAAA,WAAA;AACI,iBAAO,CAAA;QACX;AAEA,QAAAA,aAAA,UAAA,iCAAA,SACI,QACA,YACA,cACA,eACA,aAA2B;AAH3B,cAAA,eAAA,QAAA;AAAA,yBAAA;UAA0B;AAC1B,cAAA,iBAAA,QAAA;AAAA,2BAAA;UAA4B;AAC5B,cAAA,kBAAA,QAAA;AAAA,4BAAA;UAA6B;AAC7B,cAAA,gBAAA,QAAA;AAAA,0BAAA;UAA2B;AAE3B,cAAI,KAAK,QAAQ;AACb,gBAAI,eAAe,cAAc,KAAK,OAAO,aAAa,IAAI;AAC9D,gBAAI,iBAAiB,gBAAgB,KAAK,OAAO,mBAAmB,IAAI;AACxE,gBAAI,kBAAkB,iBAAiB,KAAK,OAAO,gBAAgB,IAAI;AACvE,gBAAI,gBAAgB,eAAe,KAAK,OAAO,kBAAkB,IAAI;AAErE,gBAAM,mBAAmB,KAAK,OAAO,oBAAmB;AAExD,gBAAI,kBAAkB;AAClB,kBAAI,gBAAgB,iBAAiB,QAAQ,MAAM,QAAQ,MAAM;AAC7D,uBAAO,MAAM,iBAAiB;AAE9B,+BAAe;;AAGnB,kBAAI,kBAAkB,iBAAiB,UAAU,MAAM,QAAQ,MAAM;AACjE,uBAAO,QAAQ,iBAAiB;AAEhC,iCAAiB;;AAGrB,kBAAI,mBAAmB,iBAAiB,WAAW,MAAM,QAAQ,MAAM;AACnE,uBAAO,SAAS,iBAAiB;AAEjC,kCAAkB;;AAGtB,kBAAI,iBAAiB,iBAAiB,SAAS,MAAM,QAAQ,MAAM;AAC/D,uBAAO,OAAO,iBAAiB;AAE/B,gCAAgB;;;AAIxB,gBAAI,gBAAgB,kBAAkB,mBAAmB,eAAe;AACpE,mBAAK,OAAO,+BACR,QACA,cACA,gBACA,iBACA,aAAa;;;QAI7B;AAEA,QAAAA,aAAA,UAAA,iBAAA,WAAA;AACI,iBAAO;QACX;AAEA,QAAAA,aAAA,UAAA,cAAA,SAAY,OAAa;AACrB,gBAAM,IAAI,MAAM,UAAA,QAAQ,OAAO,gBAAgB,KAAK,CAAC;QACzD;AAEA,QAAAA,aAAA,UAAA,gBAAA,SAAc,QAAc;AACxB,mBAAS,IAAI,GAAG,IAAI,KAAK,eAAc,GAAI,KAAK;AAC5C,gBAAI,KAAK,YAAY,CAAC,MAAM,QAAQ;AAChC,qBAAO;;;AAIf,iBAAO;QACX;AAEA,QAAAA,aAAA,UAAA,SAAA,WAAA;AACI,cAAI,KAAK,UAAU,KAAK,kBAAkB,sBAAsB;AAC5D,mBAAO,KAAK,OAAO,WAAW,IAAI;;AAGtC,iBAAO;QACX;AAEA,QAAAA,aAAA,UAAA,SAAA,WAAA;AACI,eAAK,mBAAmB,KAAK,uBAAsB;AACnD,eAAK,oBAAoB,KAAK,wBAAuB;AAErD,cAAI,KAAK,kBAAkB;AACvB,gBAAI,KAAK,IAAI;AACT,mBAAK,iBAAiB,KAAK,KAAK;;AAGpC,gBAAI,KAAK,mBAAmB;AACxB,mBAAK,iBAAiB,UAAU,IAAI,KAAK,iBAAiB;;AAG9D,iBAAK,iBAAiB,MAAM,YAAY;AACxC,iBAAK,qCAAqC,KAAK,iBAAiB,MAAM,UAChE,KAAK,iBAAiB,MAAM,UAC5B;AAEN,iBAAK,0BAA0B,KAAK,gBAAgB;AACpD,iBAAK,aAAa,KAAK;qBAChB,KAAK,aAAY,GAAI;AAC5B,iBAAK,mBAAmB,KAAK,yBAAwB;;AAGzD,eAAK,eAAc,EAAG,0BAAyB;AAE/C,iBAAO,KAAK;QAChB;AAEA,QAAAA,aAAA,UAAA,eAAA,SAAa,kBAAgC;AAAhC,cAAA,qBAAA,QAAA;AAAA,+BAAA;UAAgC;AACzC,eAAK,gCAA+B;AACpC,eAAK,aAAY;QACrB;AAEA,QAAAA,aAAA,UAAA,4BAAA,WAAA;AACI,cAAM,aAAa,KAAK,eAAc,EAAG,cAAa;AAEtD,mBAAmB,KAAA,GAAA,eAAA,YAAA,KAAA,aAAA,QAAA,MAAY;AAA1B,gBAAI,SAAM,aAAA,EAAA;AACX,mBAAO,mBAAkB;;QAEjC;AAEA,QAAAA,aAAA,UAAA,UAAA,SAAQ,cAAyB;AAC7B,iBAAO;QACX;AAEA,QAAAA,aAAA,UAAA,eAAA,WAAA;AACI,cAAM,cAAc,KAAK,eAAc;AAEvC,iBAAO,uBAAuB,gBAAgB,YAAY;QAC9D;AAEA,QAAAA,aAAA,UAAA,iBAAA,SAAe,UAAqB;AAChC,iBAAO;QACX;AAEA,QAAAA,aAAA,UAAA,gBAAA,SAAc,UAAqB;AAC/B,iBAAO;QACX;AAEA,QAAAA,aAAA,UAAA,kBAAA,WAAA;AACI,iBAAO,KAAK,SACN,KAAK,OAAO,kBAAkB,IAAI,KAAK,KAAK,OAAO,gBAAe,IAClE;QACV;AAEA,QAAAA,aAAA,UAAA,mBAAA,WAAA;AACI,iBAAO,KAAK,SACN,KAAK,OAAO,mBAAmB,IAAI,KAAK,KAAK,OAAO,iBAAgB,IACpE;QACV;AAEA,QAAAA,aAAA,UAAA,iBAAA,WAAA;AACI,iBAAO,KAAK,SACN,KAAK,OAAO,eAAe,IAAI,KAAK,KAAK,OAAO,eAAc,IAC9D;QACV;AAEA,QAAAA,aAAA,UAAA,oBAAA,WAAA;AACI,iBAAO,KAAK,SACN,KAAK,OAAO,cAAc,IAAI,KAAK,KAAK,OAAO,kBAAiB,IAChE;QACV;AAEA,QAAAA,aAAA,UAAA,kBAAA,WAAA;AACI,iBAAO;QACX;AAEA,QAAAA,aAAA,UAAA,qBAAA,WAAA;AACI,iBAAO;QACX;AAEA,QAAAA,aAAA,UAAA,oBAAA,SAAkB,UAAqB;AACnC,iBAAO;QACX;AAEA,QAAAA,aAAA,UAAA,qBAAA,SAAmB,UAAqB;AACpC,iBAAO;QACX;AAEA,QAAAA,aAAA,UAAA,eAAA,SAAa,SAAoB;AAC7B,iBAAO,KAAK,eAAe,OAAO;QACtC;AAEA,QAAAA,aAAA,UAAA,kBAAA,SAAgB,SAAoB;AAChC,iBAAO,KAAK,cAAc,OAAO;QACrC;AAEA,QAAAA,aAAA,UAAA,wBAAA,WAAA;AACI,iBACI,KAAK,qBAAqB,UAC1B,KAAK,iBAAiB,MAAM,eAAe;QAEnD;AAEA,QAAAA,aAAA,UAAA,iBAAA,WAAA;AACI,iBAAO,KAAK,cAAa;QAC7B;AAEA,QAAAA,aAAA,UAAA,qBAAA,WAAA;AACI,cAAI,iBAAiB,KAAK;AAE1B,iBAAO,gBAAgB;AACnB,gBAAI,0BAA0B,WAAW;AACrC,qBAAO;;AAGX,6BAAiB,eAAe;;AAGpC,iBAAO;QACX;AAEA,QAAAA,aAAA,UAAA,eAAA,SAAa,gBAA8B;AAA9B,cAAA,mBAAA,QAAA;AAAA,6BAAA;UAA8B;AACvC,iBAAO,CAAA;QACX;AAEA,QAAAA,aAAA,UAAA,gBAAA,WAAA;AACI,cAAM,SAAmB,CAAA;AAEzB,mBAAS,IAAI,GAAG,IAAI,KAAK,eAAc,GAAI,KAAK;AAC5C,gBAAI,SAAS,KAAK,YAAY,CAAC;AAE/B,gBAAI,QAAQ;AACR,qBAAO,KAAK,MAAM;;;AAI1B,iBAAO;QACX;AAEA,QAAAA,aAAA,UAAA,yBAAA,WAAA;AACI,iBAAO,CAAA;QACX;AAEA,QAAAA,aAAA,UAAA,iBAAA,SAAe,IAAU;AACrB,iBAAO,KAAK,OAAO,KAAK,OAAO;QACnC;AAEA,QAAAA,aAAA,UAAA,gBAAA,SAAc,KAAW;AACrB,iBAAO;QACX;AAEA,QAAAA,aAAA,UAAA,sBAAA,WAAA;AACI,cAAM,UAAU,KAAK,WAAU;AAE/B,iBAAO,UAAU,UAAU,KAAK,kBAAiB;QACrD;AAEA,QAAAA,aAAA,UAAA,kCAAA,WAAA;AACI,cAAI,KAAK,wBAAwB,QAAW;AACxC,mBAAO,KAAK;;AAGhB,cAAI,KAAK,QAAQ;AACb,mBAAO,KAAK,OAAO,gCAA+B;;AAGtD,iBAAO,MAAM,oBAAoB;QACrC;AAEA,eAAA,eAAIA,aAAA,WAAA,cAAU;eAAd,WAAA;AACI,gBAAI,KAAK,aAAa;AAClB,qBAAO,KAAK;mBACT;AACH,kBAAI,KAAK,QAAQ;AACb,uBAAO,KAAK,OAAO;qBAChB;AACH,uBAAO,cAAA;;;UAGnB;eAEA,SAAe,OAAiB;AAC5B,iBAAK,cAAc;UACvB;;;;AAEA,eAAA,eAAIA,aAAA,WAAA,SAAK;eAAT,WAAA;AACI,gBAAI,KAAK,QAAQ;AACb,qBAAO,KAAK,OAAO,QAAQ,IAAI;mBAC5B;AACH,qBAAO;;UAEf;;;;AAEA,eAAA,eAAIA,aAAA,WAAA,iBAAa;eAAjB,WAAA;AACI,mBAAO;UACX;;;;AAEA,eAAA,eAAIA,aAAA,WAAA,gBAAY;eAAhB,WAAA;AACI,mBAAO;UACX;;;;AAEA,eAAA,eAAIA,aAAA,WAAA,YAAQ;eAAZ,WAAA;AACI,mBAAO;UACX;;;;AAEA,eAAA,eAAIA,aAAA,WAAA,uBAAmB;eAAvB,WAAA;AACI,gBAAI,KAAK,UAAU,KAAK,kBAAkB;AACtC,qBAAO,CAAC,KAAK,OAAO,eAAe,IAAI,MAAM,KAAK,aAAa,KAAK,aAAY;mBAC7E;AACH,qBAAO;;UAEf;;;;AAEA,eAAA,eAAIA,aAAA,WAAA,oBAAgB;eAApB,WAAA;AACI,mBAAO,KAAK;UAChB;;;;AAEA,eAAA,eAAIA,aAAA,WAAA,UAAM;eAAV,WAAA;AACI,mBAAoB,KAAK;UAC7B;;;;AAEA,QAAAA,aAAA,UAAA,8BAAA,WAAA;AACI,iBAAO,WAAA,yBAAyB;QACpC;AArqBgB,QAAAA,aAAA,eAAe,IAAI,gBAAA,eAC/B,gBAAA,SAAS,MACT,QACA,MACA,gBAAgB;AAEJ,QAAAA,aAAA,oBAAoB,IAAI,gBAAA,aAAa,gBAAA,SAAS,MAAM,aAAa,IAAI;AACrE,QAAAA,aAAA,oBAAoB,IAAI,gBAAA,aAAa,gBAAA,SAAS,MAAM,aAAa,KAAK;AACtE,QAAAA,aAAA,iBAAiB,IAAI,gBAAA,iBACjC,gBAAA,SAAS,MACT,UACA,CAAC,EAAE,OAAO,OAAM,GAAI,EAAE,OAAO,UAAS,CAAE,GACxC,MAAM;AAEM,QAAAA,aAAA,8BAA8B,IAAI,gBAAA,aAC9C,gBAAA,SAAS,MACT,uBACA,MAAM,mBAAmB;AAEb,QAAAA,aAAA,kBAAkB,IAAI,gBAAA,aAClC,gBAAA,SAAS,MACT,WACA,MAAM,SACN,MAAM,QAAQ,OAAO;AAIzB,mBAAA;WADC,GAAA,gBAAA,UAASA,aAAY,2BAA2B;;AAIjD,mBAAA;WADC,GAAA,gBAAA,UAASA,aAAY,eAAe;;AAIrC,mBAAA;WADC,GAAA,gBAAA,UAASA,aAAY,iBAAiB;;AAIvC,mBAAA;WADC,GAAA,gBAAA,UAASA,aAAY,cAAc;;AAIpC,mBAAA;WADC,GAAA,gBAAA,UAASA,aAAY,YAAY;;AAoBlC,mBAAA;WADC,GAAA,gBAAA,UAASA,aAAY,iBAAiB;;AA6mB3C,eAAAA;QAzqB0C,cAAA,UAAU;;AAA9B,YAAA,cAAA;AA2qBtB,QAAA;;MAAA,SAAA,QAAA;AAAoC,kBAAAC,iBAAA,MAAA;AA+BhC,iBAAAA,gBACa,eACA,MACA,sBAAmC;AAAnC,cAAA,yBAAA,QAAA;AAAA,mCAAA,CAAA;UAAmC;AAHhD,cAAA,QAKI,OAAA,KAAA,MAAM,eAAe,MAAM,MAAS,KAAC;AAJ5B,gBAAA,gBAAA;AACA,gBAAA,OAAA;AACA,gBAAA,uBAAA;;QAGb;AApCA,QAAAA,gBAAA,UAAA,QAAA,SACI,QACA,QACA,SAA6B;AAE7B,cAAM,SAAsB;AAE5B,iBAAO,QAAQ,YACX,QACA,OAAO,KAAK,IAAI,GAChB,KAAK,sBACL,OAAO,aAAY,CAAE;QAE7B;AAEA,QAAAA,gBAAA,UAAA,SAAA,SACI,QACA,QACA,OACA,SAA6B;AAE7B,kBAAQ,eACJ,QACA,KAAK,MACL,QAAQ,MAAM,OAAO,OAAO,IAAI,QAChC,QACA,IAAI;QAEZ;AASJ,eAAAA;MAAA,EAtCoC,gBAAA,kBAAkB;;AAAzC,YAAA,iBAAA;AAwCb,QAAA;;MAAA,SAAA,QAAA;AAA4C,kBAAAC,gBAAA,MAAA;AA6FxC,iBAAAA,eAAY,MAAa;AAAzB,cAAA,QACI,OAAA,KAAA,IAAA,KAAO;AAHX,gBAAA,aAAsB;AAKlB,cAAI,MAAM;AACN,kBAAK,OAAO;;;QAEpB;AAtFU,QAAAA,eAAA,UAAA,iBAAV,SAAyB,QAAgC;AACrD,iBAAA,UAAM,eAAc,KAAA,MAAC,MAAM;AAI3B,iBAAO,OAAOA,eAAc,oBAAoB;QACpD;AAkBA,eAAA,eAAIA,eAAA,WAAA,QAAI;eAAR,WAAA;AACI,mBAAO,KAAK,SAASA,eAAc,YAAY;UACnD;eAEA,SAAS,OAAyB;AAC9B,iBAAK,QAAQ,KAAK;UACtB;;;;AAOU,QAAAA,eAAA,UAAA,cAAV,SAAsB,UAA4B;AAC9C,kBAAQ,KAAK,eAAe;YACxB,KAAK,MAAM,SAAS;AAChB,qBAAO,SAAS,UAAU;YAC9B,KAAK,MAAM,SAAS;AAChB,qBAAO,SAAS,UAAU;YAC9B,KAAK,MAAM,SAAS;AAChB,qBAAO,SAAS,UAAU;YAC9B,KAAK,MAAM,SAAS;AAChB,qBAAO,SAAS,UAAU;YAC9B;AACI,qBAAO,SAAS,UAAU;;QAEtC;AAEU,QAAAA,eAAA,UAAA,qBAAV,SACI,UACA,OAAsB;AAEtB,kBAAQ,OAAO;YACX,KAAK,MAAM,UAAU;AACjB,qBAAO,SAAS;YACpB,KAAK,MAAM,UAAU;AACjB,qBAAO,SAAS;YACpB,KAAK,MAAM,UAAU;AACjB,qBAAO,SAAS;YACpB,KAAK,MAAM,UAAU;AACjB,qBAAO,SAAS;YACpB,KAAK,MAAM,UAAU;AACjB,qBAAO,SAAS;YACpB,KAAK,MAAM,UAAU;AACjB,qBAAO,SAAS;YACpB;AACI,qBAAO,SAAS;;QAE5B;AAEU,QAAAA,eAAA,UAAA,UAAV,SAAkB,OAAyB;AACvC,eAAK,SAASA,eAAc,cAAc,KAAK;QACnD;AAYA,QAAAA,eAAA,UAAA,OAAA,SAAK,gBAAkC;AACnC,eAAK,OAAO,eAAe;AAC3B,eAAK,SAAS,eAAe;AAC7B,eAAK,QAAQ,eAAe;AAC5B,eAAK,WAAW,eAAe;QACnC;AAEA,QAAAA,eAAA,UAAA,WAAA,WAAA;AACI,iBAAO,KAAK;QAChB;AAEA,QAAAA,eAAA,UAAA,gBAAA,SAAc,eAA0B;AACpC,cAAM,WAAW,KAAK,WAAW,sBAAsB,KAAK,iBAAiB;AAE7E,cAAI,SAAS,YAAY;AACrB,0BAAc,MAAM,aAAa,SAAS;;AAG9C,cAAI;AAEJ,kBAAQ,KAAK,eAAe;YACxB,KAAK,MAAM,SAAS;AAChB,yBAAW,SAAS,UAAU;AAC9B;YACJ,KAAK,MAAM,SAAS;AAChB,yBAAW,SAAS,UAAU;AAC9B;YACJ,KAAK,MAAM,SAAS;AAChB,yBAAW,SAAS,UAAU;AAC9B;YACJ,KAAK,MAAM,SAAS;AAChB,yBAAW,SAAS,UAAU;AAC9B;YACJ;AACI,yBAAW,SAAS,UAAU;AAC9B;;AAGR,wBAAc,MAAM,WAAW,WAAW;AAE1C,cAAM,kBAAkB,KAAK,mBACzB,KAAK,4BAA2B,EAAG,kBACnC,KAAK,cAAc;AAGvB,cAAM,cAAc,MAAM,iBACtB,KAAK,oBAAoB,gBAAgB,SAAS,gBAAgB,OAAO;AAE7E,cAAI,aAAa;AACb,0BAAc,MAAM,QAAQ;;AAGhC,cAAI;AAEJ,kBAAQ,KAAK,iBAAiB;YAC1B,KAAK,MAAM,WAAW;AAClB,2BAAa,SAAS,YAAY;AAClC;YACJ,KAAK,MAAM,WAAW;AAClB,2BAAa,SAAS,YAAY;AAClC;YACJ;AACI,2BAAa,SAAS,YAAY;AAClC;;AAGR,wBAAc,MAAM,aAAa,WAAW,SAAQ;AAEpD,cAAI,KAAK,YAAY;AACjB,0BAAc,aAAa,eAAe,MAAM;;QAExD;AAEA,QAAAA,eAAA,UAAA,gBAAA,WAAA;AACI,cAAM,SAAS,OAAA,UAAM,cAAa,KAAA,IAAA;AAElC,cAAI,KAAK,cAAc;AACnB,mBAAO,KAAK,KAAK,YAAY;;AAGjC,iBAAO;QACX;AAEA,eAAA,eAAIA,eAAA,WAAA,kBAAc;eAAlB,WAAA;AACI,mBAAO,KAAK,UAAU,SAAY,KAAK,QAAQ,KAAK,gCAA+B,EAAG;UAC1F;;;;AAEA,eAAA,eAAIA,eAAA,WAAA,qBAAiB;eAArB,WAAA;AACI,mBAAO,KAAK,aAAa,SACnB,KAAK,WACL,KAAK,gCAA+B,EAAG;UACjD;;;;AAEA,eAAA,eAAIA,eAAA,WAAA,qBAAiB;eAArB,WAAA;AACI,mBAAO,KAAK,aAAa,SACnB,KAAK,WACL,KAAK,gCAA+B,EAAG;UACjD;;;;AAEA,eAAA,eAAIA,eAAA,WAAA,iBAAa;eAAjB,WAAA;AACI,mBAAO,KAAK,SAAS,SAAY,KAAK,OAAO,KAAK,gCAA+B,EAAG;UACxF;;;;AAEA,eAAA,eAAIA,eAAA,WAAA,mBAAe;eAAnB,WAAA;AACI,mBAAO,KAAK,WAAW,SACjB,KAAK,SACL,KAAK,gCAA+B,EAAG;UACjD;;;;AA7MgB,QAAAA,eAAA,eAAe,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,QAAQ,IAAI;AAC7D,QAAAA,eAAA,eAAe,IAAI,gBAAA,aAAa,gBAAA,SAAS,MAAM,QAAQ,MAAM,QAAQ;AACrE,QAAAA,eAAA,iBAAiB,IAAI,gBAAA,aAAa,gBAAA,SAAS,MAAM,UAAU,MAAM,UAAU;AAC3E,QAAAA,eAAA,gBAAgB,IAAI,gBAAA,aAAa,gBAAA,SAAS,MAAM,SAAS,MAAM,SAAS;AACxE,QAAAA,eAAA,mBAAmB,IAAI,gBAAA,aAAa,gBAAA,SAAS,MAAM,UAAU;AAC7D,QAAAA,eAAA,mBAAmB,IAAI,gBAAA,aAAa,gBAAA,SAAS,MAAM,YAAY,MAAM,QAAQ;AAC7E,QAAAA,eAAA,uBAAuB,IAAI,eAAe,gBAAA,SAAS,MAAM,gBAAgB;UACrF;SACH;AAWD,mBAAA;WADC,GAAA,gBAAA,UAASA,eAAc,YAAY;;AAIpC,mBAAA;WADC,GAAA,gBAAA,UAASA,eAAc,cAAc;;AAItC,mBAAA;WADC,GAAA,gBAAA,UAASA,eAAc,aAAa;;AAIrC,mBAAA;WADC,GAAA,gBAAA,UAASA,eAAc,gBAAgB;;AAIxC,mBAAA;WADC,GAAA,gBAAA,UAASA,eAAc,gBAAgB;;AAIxC,mBAAA;WADC,GAAA,gBAAA,UAASA,eAAc,YAAY;;AAUpC,mBAAA;WADC,GAAA,gBAAA,UAASA,eAAc,oBAAoB;;AAoKhD,eAAAA;QAjN4C,WAAW;;AAAjC,YAAA,gBAAA;AAqNtB,QAAA;;MAAA,SAAA,QAAA;AAA+B,kBAAAC,YAAA,MAAA;AAA/B,iBAAAA,aAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AAYI,gBAAA,OAAgB;AAaR,gBAAA,oBAA6B;AA+QrC,gBAAA,cAAuB;;QAuE3B;AApVY,QAAAA,WAAA,UAAA,yBAAR,WAAA;;AACI,cAAI,KAAK,oBAAoB,QAAW;AACpC,gBAAI,KAAK,YAAY,KAAK,WAAW,GAAG;AACpC,mBAAK,gBAAgB,MAAM,YACvB,KAAK,sBAAsB,KAAK,WAAW;;AAGnD,gBAAM,gBAAeC,OAAAC,MAAAF,WAAU,wBAAkB,QAAAE,QAAA,SAAA,SAAAA,IAAE,WAAW,KAAK,kBAAkB,OAAC,QAAAD,QAAA,SAAAA,MAAI,KAAK;AAC/F,iBAAK,gBAAgB,YAAY;;QAEzC;AAEQ,QAAAD,WAAA,UAAA,sBAAR,SAA4B,WAAiB;AACzC,cAAI,KAAK,oBAAoB,QAAW;AAIpC,gBAAM,WAAW,KAAK,gBAAgB;AACtC,gBAAM,aAAa,CAAC,SAAS;AAC7B,gBAAM,sBACF,cACC,SAAS,WAAW,KAAmB,SAAS,CAAC,EAAG,QAAQ,YAAW,MAAO,OAAO,CAAe,SAAS,CAAC,EAAG,SAAS;AAE/H,gBAAI,qBAAqB;AACrB,kBAAM,UAAU,aAAa,KAAK,kBAA+B,SAAS,CAAC;AAE3E,oBAAM,aAAa,SAAS,WAAW,KAAK,mBAAmB;AAE/D,qBAAO;;;AAIf,iBAAO;QACX;AAkBU,QAAAA,WAAA,UAAA,UAAV,SAAkB,OAAa;AAC3B,iBAAA,UAAM,QAAO,KAAA,MAAC,KAAK;AAEnB,eAAK,iBAAiB;QAC1B;AAEU,QAAAA,WAAA,UAAA,iBAAV,WAAA;AAAA,cAAA,QAAA;;AACI,eAAK,iBAAiB;AAEtB,cAAI,KAAK,MAAM;AACX,gBAAM,mBAAmB,KAAK,wBAAwB,cAAc,YAAY;AAChF,gBAAM,aAAa,KAAK;AAExB,gBAAI,UAAO;AAEX,gBAAI,KAAK,cAAc;AACnB,kBAAM,eAAe,SAAS,cAAc,OAAO;AACnD,2BAAa,UAAU,KAAK;AAE5B,wBAAU;mBACP;AACH,wBAAU,SAAS,cAAc,KAAK;;AAG1C,oBAAQ,UAAU,IAAI,WAAW,iBAAiB,cAAc,CAAC;AACjE,oBAAQ,MAAM,WAAW;AAEzB,iBAAK,cAAc,OAAO;AAE1B,gBAAI,KAAK,UAAU,WAAW;AAC1B,sBAAQ,aAAa,QAAQ,SAAS;AAEtC,kBAAM,eAAe,KAAK,WAAW,UAAU;AAE/C,kBAAI,iBAAiB,UAAa,eAAe,GAAG;AAChD,wBAAQ,aAAa,cAAc,aAAa,SAAQ,CAAE;;;AAIlE,gBAAI,KAAK,gBAAgB,WAAW,uBAAuB;AACvD,sBAAQ,UAAU,SAAC,GAAC;AAChB,oBAAI,MAAK,gBAAgB,MAAK,aAAa,qBAAoB,GAAI;AAC/D,oBAAE,eAAc;AAChB,oBAAE,eAAe;AAEjB,wBAAK,aAAa,QAAO;;cAEjC;AAEA,mBAAK,aAAa,6BAA6B,OAAO;AAEtD,kBAAI,KAAK,aAAa,qBAAoB,GAAI;AAC1C,wBAAQ,UAAU,IAAI,WAAW,iBAAiB,eAAe,CAAC;;;AAI1E,gBAAI,CAAC,KAAK,gBAAgB;AACtB,mBAAK,oBAAoB;AAEzB,kBAAI,gBAAgB,eAAe,WAAW,KAAK,MAAM,gBAAgB;AAEzE,kBAAI,KAAK,eAAe,eAAe;AACnC,oBAAI,SAAA,eAAe,8BAA8B;AAC7C,kCAAgB,cACX,QAAQ,WAAW,KAAK,EACxB,QAAQ,aAAa,MAAM;;AAGpC,oBAAM,2BAA2B,aAAa,cAAc,aAAa;AAEzE,oBACI,yBAAyB,cACzB,yBAAyB,YAC3B;AACE,uBAAK,iBAAiB,yBAAyB;AAC/C,uBAAK,oBAAoB;AAIzB,sBAAI,SAAA,eAAe,gCAAgC,KAAK,gBAAgB;AACpE,wBAAI,YAAoB;AACxB,wBAAM,iBAAiB,KAAK,4BAA2B;AAEvD,wBAAI,eAAe,0BAA0B;AACzC,mCACI,uBACA,eAAe,2BACf;;AAGR,wBAAI,eAAe,0BAA0B;AACzC,mCACI,YAAY,eAAe,2BAA2B;;AAG9D,wBAAI,WAAW;AACX,kCAAY,YAAY,YAAY;;AAGxC,yBAAK,iBAAiB,KAAK,eACtB,QAAQ,QAAQ,WAAW,YAAY,GAAG,EAC1C,QAAQ,WAAW,SAAS;;uBAElC;AACH,uBAAK,iBAAiB;AACtB,uBAAK,oBAAoB;;qBAE1B;AACH,qBAAK,iBAAiB;AACtB,qBAAK,oBAAoB;;;AAIjC,gBAAI,CAAC,KAAK,gBAAgB;AACtB,mBAAK,iBAAiB;;AAG1B,gBAAI,KAAK,mBAAmB;AACxB,sBAAQ,YAAY,KAAK;mBACtB;AACH,kBAAM,iBACFC,OAAAC,MAAAF,WAAU,uBAAiB,QAAAE,QAAA,SAAA,SAAAA,IAAE,WAAW,KAAK,cAAc,OAAC,QAAAD,QAAA,SAAAA,MAC5D,KAAK;AACT,sBAAQ,YAAY;;AAGxB,gBAAI,QAAQ,6BAA6B,aAAa;AAClD,kBAAM,oBAAoB,QAAQ;AAClC,gCAAkB,MAAM,YAAY;AACpC,gCAAkB,MAAM,QAAQ;AAEhC,kBAAI,CAAC,KAAK,MAAM;AACZ,kCAAkB,MAAM,WAAW;AACnC,kCAAkB,MAAM,eAAe;;;AAI/C,gBAAI,QAAQ,4BAA4B,aAAa;AACjD,sBAAQ,iBAAiB,MAAM,eAAe;;AAGlD,gBAAM,UAAU,QAAQ,qBAAqB,GAAG;mCAErCE,SAAM;AACb,cAAAA,QAAO,UAAU,IAAI,WAAW,iBAAiB,WAAW,CAAC;AAC7D,cAAAA,QAAO,SAAS;AAChB,cAAAA,QAAO,UAAU,SAAC,GAAa;AAC3B,oBAAI,wBAAwB,OAAMA,SAAQ,CAAC,GAAG;AAC1C,oBAAE,eAAc;AAChB,oBAAE,eAAe;;cAEzB;AACA,cAAAA,QAAO,gBAAgB,SAAC,GAAa;AACjC,oBAAI,wBAAwB,OAAMA,SAAQ,CAAC,GAAG;AAC1C,oBAAE,eAAc;AAChB,oBAAE,eAAe;AAEjB,yBAAO;;AAGX,uBAAO;cACX;;AAlBJ,qBAAqB,KAAA,GAAA,KAAA,MAAM,KAAK,OAAO,GAAlB,KAAA,GAAA,QAAA,MAAmB;AAAnC,kBAAM,SAAM,GAAA,EAAA;sBAAN,MAAM;;AAqBjB,gBAAI,KAAK,MAAM;AACX,sBAAQ,MAAM,WAAW;AAEzB,kBAAI,KAAK,YAAY,KAAK,WAAW,GAAG;AACpC,wBAAQ,MAAM,WAAW;AAEzB,oBAAI,MAAM,mBAAkB,KAAM,CAAC,SAAA,eAAe,oBAAoB;AAClE,0BAAQ,MAAM,YAAY,KAAK,sBAAsB,KAAK,WAAW;uBAClE;AAIH,0BAAQ,MAAM,eAAe,aAAa;AAC1C,0BAAQ,MAAM,UAAU;AACxB,0BAAQ,MAAM,kBAAkB;AAChC,0BAAQ,MAAM,kBAAkB,KAAK,SAAS,SAAQ;;;mBAG3D;AACH,sBAAQ,MAAM,aAAa;AAC3B,sBAAQ,MAAM,eAAe;;AAGjC,gBACI,SAAA,eAAe,kCACf,SAAA,eAAe,iCACjB;AACE,mBAAK,qBAAqB,QAAQ;;AAGtC,mBAAO;iBACJ;AACH,mBAAO;;QAEf;AAEU,QAAAH,WAAA,UAAA,mBAAV,SAA2B,WAAiB;AACxC,cAAI,aAAa,KAAK,qBAAqB;AACvC,mBAAO,KAAK,oBAAoB,SAAS;;AAG7C,iBAAO;QACX;AAEU,QAAAA,WAAA,UAAA,yBAAV,WAAA;AACI,eAAK,uBAAsB;AAE3B,cAAI,SAAA,eAAe,kCAAkC,KAAK,UAAU;AAChE,gBAAM,YAAY,KAAK,sBAAsB,KAAK;AAElD,iBAAK,oBAAoB,SAAS;;QAE1C;AAKA,QAAAA,WAAA,UAAA,gBAAA,SAAc,eAA0B;AACpC,iBAAA,UAAM,cAAa,KAAA,MAAC,aAAa;AAEjC,kBAAQ,KAAK,gCAA+B,GAAI;YAC5C,KAAK,MAAM,oBAAoB;AAC3B,4BAAc,MAAM,YAAY;AAChC;YACJ,KAAK,MAAM,oBAAoB;AAC3B,4BAAc,MAAM,YAAY;AAChC;YACJ;AACI,4BAAc,MAAM,YAAY;AAChC;;AAGR,cAAM,cAAc,KAAK,WAAW;AAEpC,cAAI,aAAa;AACb,oBAAQ,KAAK,eAAe;cACxB,KAAK,MAAM,SAAS;AAChB,qBAAK,sBAAsB,YAAY;AACvC;cACJ,KAAK,MAAM,SAAS;AAChB,qBAAK,sBAAsB,YAAY;AACvC;cACJ,KAAK,MAAM,SAAS;AAChB,qBAAK,sBAAsB,YAAY;AACvC;cACJ,KAAK,MAAM,SAAS;AAChB,qBAAK,sBAAsB,YAAY;AACvC;cACJ;AACI,qBAAK,sBAAsB,YAAY;AACvC;;iBAEL;AAGH,iBAAK,sBACD,KAAK,YAAY,KAAK,WAAW,sBAAsB,KAAK,iBAAiB,CAAC,IAC9E;;AAGR,wBAAc,MAAM,aAAa,KAAK,sBAAsB;QAChE;AAEA,QAAAA,WAAA,UAAA,kBAAA,WAAA;AACI,iBAAO;QACX;AAEA,QAAAA,WAAA,UAAA,kCAAA,WAAA;AACI,cAAI,KAAK,OAAO;AACZ,mBAAO,KAAK,WAAW,WAAW,eAAe,KAAK,KAAK;;AAG/D,iBAAO,OAAA,UAAM,gCAA+B,KAAA,IAAA;QAChD;AAEA,QAAAA,WAAA,UAAA,eAAA,SAAa,iBAAgC;AAAhC,cAAA,oBAAA,QAAA;AAAA,8BAAA;UAAgC;AACzC,iBAAA,UAAM,aAAY,KAAA,MAAC,eAAe;AAElC,cAAI,SAAA,eAAe,kCAAkC,KAAK,YAAY,KAAK,YAAW,GAAI;AAGtF,iBAAK,uBAAsB;AAC3B,iBAAK,oBAAoB,KAAK,sBAAsB,KAAK,QAAQ;;QAEzE;;AA3WgB,QAAAA,WAAA,eAAe,IAAI,gBAAA,aAAa,gBAAA,SAAS,MAAM,QAAQ,KAAK;AAC5D,QAAAA,WAAA,mBAAmB,IAAI,gBAAA,YAAY,gBAAA,SAAS,MAAM,UAAU;AAC5D,QAAAA,WAAA,gBAAgB,IAAI,gBAAA,iBAAiB,gBAAA,SAAS,MAAM,SAAS;UACzE,EAAE,OAAO,UAAS;UAClB,EAAE,OAAO,eAAc;UACvB,EAAE,OAAO,UAAS;SACrB;AAuDuB,QAAAA,WAAA,oBAAqB,OAAO,WAAW,cAAe,UAAY,KAAA,OAAO,kBAAY,QAAA,OAAA,SAAA,SAAA,GAAE,aAC3G,2CACA,EAAE,YAAY,SAAC,OAAK;AAAK,iBAAA;QAAA,EAAK,CAAE;AAOZ,QAAAA,WAAA,qBAAsB,OAAO,WAAW,cAAe,UAAY,KAAA,OAAO,kBAAY,QAAA,OAAA,SAAA,SAAA,GAAE,aAC5G,uCACA,EAAE,YAAY,SAAC,OAAK;AAAK,iBAAA;QAAA,EAAK,CAAE;AA/DpC,mBAAA;WADC,GAAA,gBAAA,UAASA,WAAU,YAAY;;AAIhC,mBAAA;WADC,GAAA,gBAAA,UAASA,WAAU,gBAAgB;;AAIpC,mBAAA;WADC,GAAA,gBAAA,UAASA,WAAU,aAAa;;AA8VrC,eAAAA;QA/W+B,aAAa;;AAA/B,YAAA,YAAA;AAiXb,QAAA;;MAAA,SAAA,QAAA;AAA6B,kBAAAI,UAAA,MAAA;AAA7B,iBAAAA,WAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AAeI,gBAAA,SAAkB;AAGlB,gBAAA,gBAAyB;AAGzB,gBAAA,YAAqB;AAGrB,gBAAA,YAAqB;;QA+FzB;AA/Gc,QAAAA,SAAA,UAAA,iBAAV,SAAyB,QAAgC;AACrD,iBAAA,UAAM,eAAc,KAAA,MAAC,MAAM;AAE3B,iBAAO,IAAI,cAAc,oBAAoB;QACjD;AAgBU,QAAAA,SAAA,UAAA,iBAAV,WAAA;AAAA,cAAA,QAAA;AACI,cAAI,KAAK,MAAM;AACX,gBAAM,mBAAmB,KAAK,wBAAwB,cAAc,YAAY;AAChF,gBAAM,aAAa,KAAK;AAExB,gBAAI,gBAAgB,eAAe,WAAW,KAAK,MAAM,gBAAgB;AAEzE,gBAAI,CAAC,eAAe;AAChB,8BAAgB;;AAGpB,gBAAM,UAAU,SAAS,cAAc,MAAM;AAC7C,oBAAQ,UAAU,IAAI,WAAW,iBAAiB,YAAY,CAAC;AAE/D,iBAAK,cAAc,OAAO;AAE1B,gBAAI,KAAK,gBAAgB,WAAW,uBAAuB;AACvD,kBAAM,SAAS,SAAS,cAAc,GAAG;AACzC,qBAAO,UAAU,IAAI,WAAW,iBAAiB,WAAW,CAAC;AAE7D,kBAAM,OAAO,KAAK,aAAa,QAAO;AAEtC,qBAAO,OAAO,OAAO,OAAO;AAC5B,qBAAO,SAAS;AAChB,qBAAO,UAAU,SAAC,GAAC;AACf,oBAAI,MAAK,gBAAgB,MAAK,aAAa,qBAAoB,GAAI;AAC/D,oBAAE,eAAc;AAChB,oBAAE,eAAe;AAEjB,wBAAK,aAAa,QAAO;;cAEjC;AAEA,mBAAK,aAAa,6BAA6B,MAAM;AAErD,qBAAO,YAAY;AAEnB,sBAAQ,YAAY,MAAM;mBACvB;AACH,sBAAQ,YAAY;;AAGxB,mBAAO;iBACJ;AACH,mBAAO;;QAEf;AAEA,QAAAA,SAAA,UAAA,gBAAA,SAAc,eAA0B;AACpC,iBAAA,UAAM,cAAa,KAAA,MAAC,aAAa;AAEjC,cAAI,KAAK,QAAQ;AACb,0BAAc,MAAM,YAAY;;AAGpC,cAAI,KAAK,eAAe;AACpB,0BAAc,MAAM,iBAAiB;;AAGzC,cAAI,KAAK,WAAW;AAChB,gBAAM,kBAAkB,KAAK,mBACzB,KAAK,4BAA2B,EAAG,kBACnC,KAAK,cAAc;AAGvB,gBAAM,kBAAkB,MAAM,iBAC1B,KAAK,oBACC,gBAAgB,gBAAgB,SAChC,gBAAgB,gBAAgB,OAAO;AAEjD,gBAAI,iBAAiB;AACjB,4BAAc,MAAM,kBAAkB;;;AAI9C,cAAI,KAAK,WAAW;AAChB,0BAAc,MAAM,iBAAiB;;QAE7C;AAEA,QAAAA,SAAA,UAAA,kBAAA,WAAA;AACI,iBAAO;QACX;AAEA,eAAA,eAAIA,SAAA,WAAA,gBAAY;eAAhB,WAAA;AACI,mBAAO;UACX;;;;AAEA,eAAA,eAAIA,SAAA,WAAA,YAAQ;eAAZ,WAAA;AACI,mBAAO;UACX;;;;AAnHgB,QAAAA,SAAA,iBAAiB,IAAI,gBAAA,aAAa,gBAAA,SAAS,MAAM,UAAU,KAAK;AAChE,QAAAA,SAAA,wBAAwB,IAAI,gBAAA,aAAa,gBAAA,SAAS,MAAM,iBAAiB,KAAK;AAC9E,QAAAA,SAAA,oBAAoB,IAAI,gBAAA,aAAa,gBAAA,SAAS,MAAM,aAAa,KAAK;AACtE,QAAAA,SAAA,oBAAoB,IAAI,gBAAA,aAAa,gBAAA,SAAS,MAAM,aAAa,KAAK;AAStF,mBAAA;WADC,GAAA,gBAAA,UAASA,SAAQ,cAAc;;AAIhC,mBAAA;WADC,GAAA,gBAAA,UAASA,SAAQ,qBAAqB;;AAIvC,mBAAA;WADC,GAAA,gBAAA,UAASA,SAAQ,iBAAiB;;AAInC,mBAAA;WADC,GAAA,gBAAA,UAASA,SAAQ,iBAAiB;;AAgGvC,eAAAA;QAvH6B,aAAa;;AAA7B,YAAA,UAAA;AAyHb,QAAA;;MAAA,SAAA,QAAA;AAAmC,kBAAAC,gBAAA,MAAA;AAAnC,iBAAAA,iBAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AACY,gBAAA,WAA0B,CAAA;;QAyJtC;AAvJY,QAAAA,eAAA,UAAA,oBAAR,SAA0B,QAAqB,UAAyB;AAAzB,cAAA,aAAA,QAAA;AAAA,uBAAA;UAAyB;AACpE,cAAI,CAAC,OAAO,UAAU;AAClB,kBAAM,IAAI,MAAM,UAAA,QAAQ,OAAO,4BAA2B,CAAE;;AAGhE,cAAM,QAAiB,OAAO,WAAW,UAAa;AAEtD,cAAI,CAAC,SAAS,OAAO,WAAW,MAAM;AAClC,kBAAM,IAAI,MAAM,UAAA,QAAQ,OAAO,sBAAqB,CAAE;iBACnD;AACH,mBAAO,UAAU,IAAI;AAErB,iBAAK,SAAS,KAAK,MAAM;;QAEjC;AAEU,QAAAA,eAAA,UAAA,gBAAV,SAAwB,QAAa,SAA6B;AAC9D,iBAAA,UAAM,cAAa,KAAA,MAAC,QAAQ,OAAO;AAEnC,eAAK,WAAW,CAAA;AAEhB,cAAI,MAAM,QAAQ,OAAO,SAAS,CAAC,GAAG;AAClC,qBAAyB,KAAA,GAAA,KAAA,OAAO,SAAS,GAAhB,KAAA,GAAA,QAAA,MAAmB;AAAvC,kBAAM,aAAU,GAAA,EAAA;AACjB,kBAAI,SAAM;AAEV,kBAAI,OAAO,eAAe,UAAU;AAChC,oBAAM,UAAU,IAAI,QAAO;AAC3B,wBAAQ,OAAO;AAEf,yBAAS;qBACN;AAEH,yBAAS,QAAQ,aAAa,MAAM,YAAY,CAAA,GAAI,KAAK;;AAG7D,kBAAI,QAAQ;AACR,qBAAK,kBAAkB,QAAQ,IAAI;;;;QAInD;AAEU,QAAAA,eAAA,UAAA,iBAAV,SAAyB,QAAqB,SAA6B;AACvE,iBAAA,UAAM,eAAc,KAAA,MAAC,QAAQ,OAAO;AAEpC,cAAI,KAAK,SAAS,SAAS,GAAG;AAC1B,gBAAM,cAAqB,CAAA;AAE3B,qBAAqB,KAAA,GAAA,KAAA,KAAK,UAAL,KAAA,GAAA,QAAA,MAAe;AAA/B,kBAAM,SAAM,GAAA,EAAA;AACb,0BAAY,KAAK,OAAO,OAAO,OAAO,CAAC;;AAG3C,oBAAQ,eAAe,QAAQ,WAAW,WAAW;;QAE7D;AAEU,QAAAA,eAAA,UAAA,iBAAV,WAAA;AACI,cAAI,KAAK,SAAS,SAAS,GAAG;AAC1B,gBAAI,UAAO;AAEX,gBAAI,KAAK,cAAc;AACnB,kBAAM,eAAe,SAAS,cAAc,OAAO;AACnD,2BAAa,UAAU,KAAK;AAE5B,wBAAU;mBACP;AACH,wBAAU,SAAS,cAAc,KAAK;;AAG1C,oBAAQ,YAAY,KAAK,WAAW,iBAAiB,kBAAkB;AAEvE,oBAAQ,KAAK,gCAA+B,GAAI;cAC5C,KAAK,MAAM,oBAAoB;AAC3B,wBAAQ,MAAM,YAAY;AAC1B;cACJ,KAAK,MAAM,oBAAoB;AAC3B,wBAAQ,MAAM,YAAY;AAC1B;cACJ;AACI,wBAAQ,MAAM,YAAY;AAC1B;;AAGR,gBAAI,kBAA0B;AAE9B,qBAAqB,KAAA,GAAA,KAAA,KAAK,UAAL,KAAA,GAAA,QAAA,MAAe;AAA/B,kBAAM,SAAM,GAAA,EAAA;AACb,kBAAM,iBAAiB,OAAO,OAAM;AAEpC,kBAAI,gBAAgB;AAChB,wBAAQ,YAAY,cAAc;AAElC;;;AAIR,gBAAI,kBAAkB,GAAG;AACrB,qBAAO;;;AAIf,iBAAO;QACX;AAIA,QAAAA,eAAA,UAAA,WAAA,WAAA;AACI,cAAI,SAAS;AAEb,mBAAqB,KAAA,GAAA,KAAA,KAAK,UAAL,KAAA,GAAA,QAAA,MAAe;AAA/B,gBAAM,SAAM,GAAA,EAAA;AACb,sBAAU,OAAO,SAAQ;;AAG7B,iBAAO;QACX;AAEA,QAAAA,eAAA,UAAA,kBAAA,WAAA;AACI,iBAAO;QACX;AAEA,QAAAA,eAAA,UAAA,iBAAA,WAAA;AACI,iBAAO,KAAK,SAAS;QACzB;AAEA,QAAAA,eAAA,UAAA,cAAA,SAAY,OAAa;AACrB,cAAI,SAAS,KAAK,QAAQ,KAAK,SAAS,QAAQ;AAC5C,mBAAO,KAAK,SAAS,KAAK;iBACvB;AACH,kBAAM,IAAI,MAAM,UAAA,QAAQ,OAAO,gBAAgB,KAAK,CAAC;;QAE7D;AAEA,QAAAA,eAAA,UAAA,YAAA,SAAU,QAA4B;AAClC,cAAI,OAAO,WAAW,UAAU;AAC5B,iBAAK,kBAAkB,IAAI,QAAQ,MAAM,CAAC;iBACvC;AACH,iBAAK,kBAAkB,MAAM;;QAErC;AAEA,QAAAA,eAAA,UAAA,eAAA,SAAa,QAAmB;AAC5B,cAAM,QAAQ,KAAK,SAAS,QAAQ,MAAM;AAE1C,cAAI,SAAS,GAAG;AACZ,iBAAK,SAAS,KAAK,EAAE,UAAU,MAAS;AACxC,iBAAK,SAAS,OAAO,OAAO,CAAC;AAE7B,mBAAO;;AAGX,iBAAO;QACX;AACJ,eAAAA;MAAA,EA1JmC,WAAW;;AAAjC,YAAA,gBAAA;AA4Jb,QAAA;;MAAA,SAAA,QAAA;AAA0B,kBAAAC,OAAA,MAAA;AAmBtB,iBAAAA,MAAY,MAAe,OAAc;AAAzC,cAAA,QACI,OAAA,KAAA,IAAA,KAAO;AAEP,gBAAK,OAAO;AACZ,gBAAK,QAAQ;;QACjB;AATU,QAAAA,MAAA,UAAA,eAAV,WAAA;AACI,iBAAO;QACX;AAdgB,QAAAA,MAAA,gBAAgB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,OAAO;AACzD,QAAAA,MAAA,gBAAgB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,OAAO;AAIzE,mBAAA;WADC,GAAA,gBAAA,UAASA,MAAK,aAAa;;AAI5B,mBAAA;WADC,GAAA,gBAAA,UAASA,MAAK,aAAa;;AAehC,eAAAA;QAzB0B,gBAAA,kBAAkB;;AAA/B,YAAA,OAAA;AA2Bb,QAAA;;MAAA,SAAA,QAAA;AAA6B,kBAAAC,UAAA,MAAA;AAA7B,iBAAAA,WAAA;;QAmGA;AArFI,eAAA,eAAcA,SAAA,WAAA,oBAAgB;;eAA9B,WAAA;AACI,mBAAO;UACX;;;;AAEU,QAAAA,SAAA,UAAA,iBAAV,WAAA;AACI,cAAI,UAAmC;AACvC,cAAM,aAAa,KAAK;AAExB,cAAI,KAAK,MAAM,SAAS,GAAG;AACvB,sBAAU,SAAS,cAAc,OAAO;AACxC,oBAAQ,MAAM,cAAc;AAC5B,oBAAQ,MAAM,gBAAgB;AAC9B,oBAAQ,MAAM,cAAc;AAC5B,oBAAQ,MAAM,iBAAiB;AAC/B,oBAAQ,MAAM,UAAU;AACxB,oBAAQ,MAAM,WAAW;AACzB,oBAAQ,UAAU,IAAI,WAAW,iBAAiB,YAAY,CAAC;AAC/D,oBAAQ,aAAa,QAAQ,cAAc;AAE3C,qBAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AACxC,kBAAM,YAAY,SAAS,cAAc,IAAI;AAE7C,kBAAI,IAAI,GAAG;AACP,0BAAU,MAAM,YAAY,WAAW,QAAQ,UAAU;;AAI7D,kBAAI,YAAY,SAAS,cAAc,IAAI;AAC3C,wBAAU,MAAM,UAAU;AAC1B,wBAAU,UAAU,IAAI,WAAW,iBAAiB,eAAe,CAAC;AAEpE,kBAAI,WAAW,QAAQ,MAAM,UAAU;AACnC,0BAAU,MAAM,WAAW,WAAW,QAAQ,MAAM,WAAW;;AAGnE,wBAAU,MAAM,gBAAgB;AAEhC,kBAAI,YAAY,IAAI,UAAS;AAC7B,wBAAU,UAAU,IAAI;AACxB,wBAAU,OACN,CAAC,KAAK,MAAM,CAAC,EAAE,QAAQ,KAAK,aAAY,IAAK,UAAU,KAAK,MAAM,CAAC,EAAE;AACzE,wBAAU,OAAO,WAAW,QAAQ,MAAM;AAC1C,wBAAU,QAAQ,WAAW,QAAQ,MAAM;AAC3C,wBAAU,WAAW,WAAW,QAAQ,MAAM;AAC9C,wBAAU,SAAS,WAAW,QAAQ,MAAM;AAC5C,wBAAU,OAAO,WAAW,QAAQ,MAAM;AAC1C,wBAAU,UAAU,MAAM,QAAQ;AAElC,oBAAM,YAAY,WAAW,UAAU,OAAM,CAAE;AAC/C,oBAAM,YAAY,WAAW,SAAS;AAGtC,0BAAY,SAAS,cAAc,IAAI;AACvC,wBAAU,MAAM,QAAQ;AAExB,oBAAM,YAAY,WAAW,SAAS;AAGtC,0BAAY,SAAS,cAAc,IAAI;AACvC,wBAAU,MAAM,UAAU;AAC1B,wBAAU,MAAM,gBAAgB;AAChC,wBAAU,UAAU,IAAI,WAAW,iBAAiB,eAAe,CAAC;AAEpE,0BAAY,IAAI,UAAS;AACzB,wBAAU,UAAU,IAAI;AACxB,wBAAU,OAAO,KAAK,MAAM,CAAC,EAAE;AAC/B,wBAAU,OAAO,WAAW,QAAQ,MAAM;AAC1C,wBAAU,QAAQ,WAAW,QAAQ,MAAM;AAC3C,wBAAU,WAAW,WAAW,QAAQ,MAAM;AAC9C,wBAAU,SAAS,WAAW,QAAQ,MAAM;AAC5C,wBAAU,OAAO,WAAW,QAAQ,MAAM;AAC1C,wBAAU,UAAU,MAAM,QAAQ;AAElC,oBAAM,YAAY,WAAW,UAAU,OAAM,CAAE;AAC/C,oBAAM,YAAY,WAAW,SAAS;AACtC,oBAAM,YAAY,SAAS,SAAS;;;AAI5C,iBAAO;QACX;AAEA,QAAAA,SAAA,UAAA,kBAAA,WAAA;AACI,iBAAO;QACX;AA/FgB,QAAAA,SAAA,gBAAgB,IAAI,gBAAA,qCAChC,gBAAA,SAAS,MACT,SACA,IAAI;AAIR,mBAAA;WADC,GAAA,gBAAA,UAASA,SAAQ,aAAa;;AA0FnC,eAAAA;QAnG6B,WAAW;;AAA3B,YAAA,UAAA;AAqGb,QAAA;;MAAA,SAAA,QAAA;AAAqC,kBAAAC,yBAAA,MAAA;AA+DjC,iBAAAA,wBACa,eACA,MACA,cACA,kBAAmC;AAJhD,cAAA,QAMI,OAAA,KAAA,MAAM,eAAe,IAAI,KAAC;AALjB,gBAAA,gBAAA;AACA,gBAAA,OAAA;AACA,gBAAA,eAAA;AACA,gBAAA,mBAAA;;QAGb;AArEA,QAAAA,wBAAA,UAAA,kBAAA,WAAA;AACI,iBAAO,KAAK;QAChB;AAEA,QAAAA,wBAAA,UAAA,QAAA,SACI,QACA,QACA,SAAiC;AAEjC,cAAI,SAA6B;AACjC,cAAM,cAAc,OAAO,KAAK,IAAI;AAEpC,cAAI,gBAAgB,QAAW;AAC3B,mBAAO,KAAK;;AAGhB,cAAI,UAAU;AAEd,cAAI,OAAO,gBAAgB,UAAU;AACjC,gBAAI;AACA,kBAAM,OAAO,SAAA,YAAY,MAAM,aAAa,IAAI;AAEhD,kBAAI,KAAK,SAAS,MAAM,SAAS,OAAO;AACpC,yBAAS,KAAK;AAEd,0BAAU;;qBAEhB,IAAM;;AAMR,gBAAI,CAAC,WAAW,KAAK,kBAAkB;AACnC,wBAAU,KAAK,iBAAiB,aAAa,aAAa,OAAO;;;AAIzE,cAAI,CAAC,SAAS;AACV,oBAAQ,cACJ,QACA,MAAM,gBAAgB,sBACtB,UAAA,QAAQ,OAAO,qBAAqB,aAAa,KAAK,IAAI,CAAC;;AAInE,iBAAO;QACX;AAEA,QAAAA,wBAAA,UAAA,SAAA,SACI,QACA,QACA,OACA,SAAiC;AAEjC,kBAAQ,eACJ,QACA,KAAK,MACL,OAAO,UAAU,YAAY,CAAC,MAAM,KAAK,IAAI,QAAQ,OAAO,MAAS;QAE7E;AAUJ,eAAAA;MAAA,EAvEqC,gBAAA,kBAAkB;;AAyEvD,QAAA;;MAAA,SAAA,QAAA;AAA2B,kBAAAC,QAAA,MAAA;AAA3B,iBAAAA,SAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AAiDI,gBAAA,OAAmB,MAAM,KAAK;AAG9B,gBAAA,QAA0B,MAAM,WAAW;;QAiN/C;AApOc,QAAAA,OAAA,UAAA,iBAAV,SAAyB,QAAgC;AACrD,iBAAA,UAAM,eAAc,KAAA,MAAC,MAAM;AAE3B,iBAAO,OAAO,YAAY,cAAc;QAC5C;AA4BQ,QAAAA,OAAA,UAAA,YAAR,SAAkB,SAAoB;AAClC,cAAI,KAAK,cAAc,KAAK,aAAa;AACrC,gBAAI,KAAK,YAAY;AACjB,sBAAQ,MAAM,QAAQ,KAAK,aAAa;;AAG5C,gBAAI,KAAK,aAAa;AAClB,sBAAQ,MAAM,SAAS,KAAK,cAAc;;iBAE3C;AACH,gBAAI,KAAK,WAAW;AAKhB,sBAAQ,KAAK,MAAM;gBACf,KAAK,MAAM,KAAK;AACZ,0BAAQ,MAAM,SAAS,KAAK,WAAW,WAAW,QAAQ;AAC1D;gBACJ,KAAK,MAAM,KAAK;AACZ,0BAAQ,MAAM,SAAS,KAAK,WAAW,WAAW,QAAQ;AAC1D;gBACJ;AACI,0BAAQ,MAAM,SAAS,KAAK,WAAW,WAAW,SAAS;AAC3D;;AAGR,sBAAQ,MAAM,YAAY,KAAK,YAAY;mBACxC;AACH,sBAAQ,KAAK,MAAM;gBACf,KAAK,MAAM,KAAK;AACZ,0BAAQ,MAAM,QAAQ;AACtB;gBACJ,KAAK,MAAM,KAAK;AACZ,0BAAQ,MAAM,WAAW;AACzB;gBACJ,KAAK,MAAM,KAAK;AACZ,0BAAQ,MAAM,QAAQ,KAAK,WAAW,WAAW,QAAQ;AACzD;gBACJ,KAAK,MAAM,KAAK;AACZ,0BAAQ,MAAM,QAAQ,KAAK,WAAW,WAAW,QAAQ;AACzD;gBACJ,KAAK,MAAM,KAAK;AACZ,0BAAQ,MAAM,QAAQ,KAAK,WAAW,WAAW,SAAS;AAC1D;;AAGR,sBAAQ,MAAM,YAAY;;;QAGtC;AAEA,eAAA,eAAcA,OAAA,WAAA,oBAAgB;eAA9B,WAAA;AACI,mBAAO;UACX;;;;AAEU,QAAAA,OAAA,UAAA,iBAAV,WAAA;AAAA,cAAA,QAAA;AACI,cAAI,UAAmC;AAEvC,cAAI,KAAK,KAAK;AACV,sBAAU,SAAS,cAAc,KAAK;AACtC,oBAAQ,MAAM,UAAU;AACxB,oBAAQ,MAAM,aAAa;AAG3B,gBAAM,aAAa,KAAK;AAExB,oBAAQ,KAAK,gCAA+B,GAAI;cAC5C,KAAK,MAAM,oBAAoB;AAC3B,wBAAQ,MAAM,iBAAiB;AAC/B;cACJ,KAAK,MAAM,oBAAoB;AAC3B,wBAAQ,MAAM,iBAAiB;AAC/B;cACJ;AACI,wBAAQ,MAAM,iBAAiB;AAC/B;;AAGR,gBAAM,eAAe,SAAS,cAAc,KAAK;AACjD,yBAAa,SAAS,SAAC,IAAS;AAC5B,oCAAsB,KAAI;YAC9B;AACA,yBAAa,UAAU,SAAC,IAAS;AAC7B,kBAAI,MAAK,iBAAiB;AACtB,oBAAM,OAAO,MAAK,eAAc;AAEhC,sBAAK;AAEL,oBAAI,QAAQ,KAAK,YAAY;AACzB,sBAAM,eAAe,SAAS,cAAc,KAAK;AACjD,+BAAa,MAAM,UAAU;AAC7B,+BAAa,MAAM,aAAa;AAChC,+BAAa,MAAM,iBAAiB;AACpC,+BAAa,MAAM,kBAAkB;AACrC,+BAAa,MAAM,QAAQ;AAC3B,+BAAa,YAAY;AACzB,+BAAa,MAAM,UAAU;AAE7B,wBAAK,UAAU,YAAY;AAE3B,wBAAK,gBAAgB,YAAY,YAAY;;;AAIrD,oCAAsB,KAAI;YAC9B;AACA,yBAAa,MAAM,WAAW;AAC9B,yBAAa,UAAU,IAAI,WAAW,iBAAiB,UAAU,CAAC;AAElE,gBAAI,KAAK,gBAAgB,WAAW,uBAAuB;AACvD,2BAAa,aAAa,SAAC,GAAC;AACxB,oBACI,MAAK,gBACL,MAAK,aAAa,qBAAoB,MACrC,EAAE,SAAS,WAAW,EAAE,SAAS,UACpC;AAEE,oBAAE,eAAc;AAChB,oBAAE,eAAe;AAEjB,wBAAK,aAAa,QAAO;;cAEjC;AAEA,2BAAa,UAAU,SAAC,GAAC;AACrB,oBAAI,MAAK,gBAAgB,MAAK,aAAa,qBAAoB,GAAI;AAC/D,oBAAE,eAAc;AAChB,oBAAE,eAAe;AAEjB,wBAAK,aAAa,QAAO;;cAEjC;AAEA,mBAAK,aAAa,6BAA6B,YAAY;AAE3D,kBAAI,KAAK,aAAa,qBAAoB,GAAI;AAC1C,6BAAa,UAAU,IAAI,WAAW,iBAAiB,eAAe,CAAC;;;AAI/E,iBAAK,UAAU,YAAY;AAE3B,gBAAI,KAAK,UAAU,MAAM,WAAW,QAAQ;AACxC,2BAAa,MAAM,eAAe;AAClC,2BAAa,MAAM,qBAAqB;AACxC,2BAAa,MAAM,mBAAmB;;AAG1C,gBAAM,kBAAkB,MAAM,iBAAiB,KAAK,eAAe;AACnE,gBAAI,iBAAiB;AACjB,2BAAa,MAAM,kBAAkB;;AAGzC,yBAAa,MAAc,KAAK,wBAAwBA,OAAM,WAAW;AAEzE,gBAAM,kBAAkB,KAAK,wBAAwBA,OAAM,eAAe;AAC1E,gBAAI,iBAAiB;AACjB,2BAAa,MAAc;;AAG/B,oBAAQ,YAAY,YAAY;;AAGpC,iBAAO;QACX;AAIA,QAAAA,OAAA,UAAA,kBAAA,WAAA;AACI,iBAAO;QACX;AAEA,QAAAA,OAAA,UAAA,gBAAA,WAAA;AACI,cAAM,SAAS,OAAA,UAAM,cAAa,KAAA,IAAA;AAElC,cAAI,KAAK,cAAc;AACnB,mBAAO,KAAK,KAAK,YAAY;;AAGjC,iBAAO;QACX;AAEA,QAAAA,OAAA,UAAA,gBAAA,SAAc,IAAU;AACpB,cAAI,SAAS,OAAA,UAAM,cAAa,KAAA,MAAC,EAAE;AAEnC,cAAI,CAAC,UAAU,KAAK,cAAc;AAC9B,qBAAS,KAAK,aAAa,cAAc,EAAE;;AAG/C,iBAAO;QACX;AAEA,QAAAA,OAAA,UAAA,yBAAA,WAAA;AACI,iBAAO,KAAK,MAAM,CAAC,EAAE,KAAK,KAAK,KAAK,UAAU,QAAO,CAAE,IAAI,CAAA;QAC/D;AAjQgB,QAAAA,OAAA,cAAc,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,KAAK;AACrD,QAAAA,OAAA,kBAAkB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,SAAS;AAC7D,QAAAA,OAAA,0BAA0B,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,iBAAiB;AAC7E,QAAAA,OAAA,gBAAgB,IAAI,gBAAA,aAChC,gBAAA,SAAS,MACT,SACA,MAAM,YACN,MAAM,WAAW,OAAO;AAEZ,QAAAA,OAAA,eAAe,IAAI,gBAAA,aAC/B,gBAAA,SAAS,MACT,QACA,MAAM,MACN,MAAM,KAAK,IAAI;AAEH,QAAAA,OAAA,qBAAqB,IAAI,uBACrC,gBAAA,SAAS,MACT,SACA,YAAY;AAEA,QAAAA,OAAA,sBAAsB,IAAI,uBACtC,gBAAA,SAAS,MACT,UACA,eACA,YAAY,cAAc;AAEd,QAAAA,OAAA,uBAAuB,IAAI,eAAe,gBAAA,SAAS,MAAM,gBAAgB;UACrF;SACH;AASD,mBAAA;WADC,GAAA,gBAAA,UAASA,OAAM,WAAW;;AAI3B,mBAAA;WADC,GAAA,gBAAA,UAASA,OAAM,eAAe;;AAI/B,mBAAA;WADC,GAAA,gBAAA,UAASA,OAAM,uBAAuB;;AAIvC,mBAAA;WADC,GAAA,gBAAA,UAASA,OAAM,YAAY;;AAI5B,mBAAA;WADC,GAAA,gBAAA,UAASA,OAAM,aAAa;;AAI7B,mBAAA;WADC,GAAA,gBAAA,UAASA,OAAM,kBAAkB;;AAIlC,mBAAA;WADC,GAAA,gBAAA,UAASA,OAAM,mBAAmB;;AAInC,mBAAA;WADC,GAAA,gBAAA,UAASA,OAAM,oBAAoB;;AAyMxC,eAAAA;QArQ2B,WAAW;;AAAzB,YAAA,QAAA;AAuQb,QAAA;;MAAA,SAAA,QAAA;AAAmD,kBAAAC,uBAAA,MAAA;AAAnD,iBAAAA,wBAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AA+DI,gBAAA,wBAAiC;;QAkLrC;AA1Oc,QAAAA,sBAAA,UAAA,iBAAV,SAAyB,QAAgC;AACrD,iBAAA,UAAM,eAAc,KAAA,MAAC,MAAM;AAE3B,cAAI,CAAC,KAAK,cAAc;AACpB,mBAAO,OAAOA,sBAAqB,oBAAoB;;QAE/D;AAOU,QAAAA,sBAAA,UAAA,mBAAV,SAA2B,SAAoB;AAC3C,iBAAO,KAAK,WAAW,yBAAyB,CAAC,QAAQ;QAC7D;AAEU,QAAAA,sBAAA,UAAA,eAAV,WAAA;AACI,iBAAA,UAAM,aAAY,KAAA,IAAA;AAElB,cAAI,CAAC,KAAK,iBAAiB;AACvB;;AAGJ,cAAI,kBAAkB,IAAI,SAAA,kBAAiB;AAE3C,cAAI,KAAK,oBAAmB,GAAI;AAC5B,8BAAkB,KAAK,WAAW,qCAC9B,KAAK,oBAAmB,CAAE;;AAIlC,eAAK,gBAAgB,MAAM,aAAa,gBAAgB,MAAM;AAC9D,eAAK,gBAAgB,MAAM,eAAe,gBAAgB,QAAQ;AAClE,eAAK,gBAAgB,MAAM,gBAAgB,gBAAgB,SAAS;AACpE,eAAK,gBAAgB,MAAM,cAAc,gBAAgB,OAAO;AAEhE,eAAK,gBAAgB,MAAM,cAAc;AACzC,eAAK,gBAAgB,MAAM,aAAa;QAC5C;AAEA,eAAA,eAAcA,sBAAA,WAAA,gBAAY;eAA1B,WAAA;AACI,mBAAO;UACX;;;;AAGU,QAAAA,sBAAA,UAAA,yBAAV,WAAA;AACI,iBAAO,CAAA;QACX;AAUA,QAAAA,sBAAA,UAAA,sBAAA,WAAA;AACI,iBAAA,UAAM,oBAAmB,KAAA,IAAA;AAEzB,mBAAS,IAAI,GAAG,IAAI,KAAK,aAAY,GAAI,KAAK;AAC1C,iBAAK,UAAU,CAAC,EAAE,oBAAmB;;QAE7C;AAEA,QAAAA,sBAAA,UAAA,6BAAA,SAA2B,SAA0B;AACjD,iBAAA,UAAM,2BAA0B,KAAA,MAAC,OAAO;AAExC,mBAAS,IAAI,GAAG,IAAI,KAAK,aAAY,GAAI,KAAK;AAC1C,gBAAM,OAAO,KAAK,UAAU,CAAC;AAE7B,gBAAI,CAAC,KAAK,WAAW,yBAAyB,KAAK,eAAe;AAC9D,sBAAQ,WACJ,MACA,MAAM,gBAAgB,yBACtB,UAAA,QAAQ,OAAO,wBAAuB,CAAE;;AAIhD,gBAAI,CAAC,KAAK,iBAAiB,IAAI,GAAG;AAC9B,sBAAQ,WACJ,MACA,MAAM,gBAAgB,yBACtB,UAAA,QAAQ,OAAO,sBAAsB,KAAK,gBAAe,CAAE,CAAC;;AAIpE,iBAAK,2BAA2B,OAAO;;AAG3C,cAAI,KAAK,eAAe;AACpB,iBAAK,cAAc,2BAA2B,OAAO;;QAE7D;AAEA,QAAAA,sBAAA,UAAA,SAAA,WAAA;AAAA,cAAA,QAAA;AACI,cAAM,UAAU,OAAA,UAAM,OAAM,KAAA,IAAA;AAE5B,cAAI,SAAS;AACT,gBAAM,aAAa,KAAK;AAExB,gBAAI,KAAK,uBAAuB;AAC5B,sBAAQ,MAAM,YAAY;AAC1B,sBAAQ,MAAM,YAAY;;AAG9B,gBACI,WACA,KAAK,gBACL,KAAK,iBACL,WAAW,uBACb;AACE,sBAAQ,UAAU,SAAC,GAAC;AAChB,oBAAI,MAAK,iBAAiB,MAAK,cAAc,qBAAoB,GAAI;AACjE,oBAAE,eAAc;AAChB,oBAAE,eAAe;AAEjB,wBAAK,cAAc,QAAO;;cAElC;AAEA,sBAAQ,aAAa,SAAC,GAAC;AACnB,oBACI,MAAK,iBACL,MAAK,cAAc,qBAAoB,MACtC,EAAE,SAAS,WAAW,EAAE,SAAS,UACpC;AAEE,oBAAE,eAAc;AAChB,oBAAE,eAAe;AAEjB,wBAAK,cAAc,QAAO;;cAElC;AAEA,mBAAK,cAAc,6BAA6B,OAAO;AAEvD,kBAAI,KAAK,cAAc,qBAAoB,GAAI;AAC3C,wBAAQ,UAAU,IAAI,WAAW,iBAAiB,eAAe,CAAC;;;;AAK9E,iBAAO;QACX;AAEA,QAAAA,sBAAA,UAAA,eAAA,SAAa,iBAA+B;AAA/B,cAAA,oBAAA,QAAA;AAAA,8BAAA;UAA+B;AACxC,iBAAA,UAAM,aAAY,KAAA,MAAC,eAAe;AAElC,cAAI,iBAAiB;AACjB,qBAAS,IAAI,GAAG,IAAI,KAAK,aAAY,GAAI,KAAK;AAC1C,mBAAK,UAAU,CAAC,EAAE,aAAY;;;QAG1C;AAEA,QAAAA,sBAAA,UAAA,eAAA,SAAa,gBAA8B;AAA9B,cAAA,mBAAA,QAAA;AAAA,6BAAA;UAA8B;AACvC,cAAI,SAAkB,CAAA;AAEtB,mBAAS,IAAI,GAAG,IAAI,KAAK,aAAY,GAAI,KAAK;AAC1C,mBAAO,KAAI,MAAX,QAAe,KAAK,UAAU,CAAC,EAAE,aAAa,cAAc,CAAC;;AAGjE,iBAAO;QACX;AAEA,QAAAA,sBAAA,UAAA,gBAAA,WAAA;AACI,cAAM,SAAS,OAAA,UAAM,cAAa,KAAA,IAAA;AAElC,mBAAS,IAAI,GAAG,IAAI,KAAK,aAAY,GAAI,KAAK;AAC1C,mBAAO,KAAI,MAAX,QAAe,KAAK,UAAU,CAAC,EAAE,cAAa,CAAE;;AAGpD,cAAI,KAAK,eAAe;AACpB,mBAAO,KAAK,KAAK,aAAa;;AAGlC,iBAAO;QACX;AAEA,QAAAA,sBAAA,UAAA,yBAAA,WAAA;AACI,cAAI,SAAiC,CAAA;AAErC,mBAAS,IAAI,GAAG,IAAI,KAAK,aAAY,GAAI,KAAK;AAC1C,mBAAO,KAAI,MAAX,QAAe,KAAK,UAAU,CAAC,EAAE,uBAAsB,CAAE;;AAG7D,iBAAO;QACX;AAEA,QAAAA,sBAAA,UAAA,iBAAA,SAAe,IAAU;AACrB,cAAI,SAAS,OAAA,UAAM,eAAc,KAAA,MAAC,EAAE;AAEpC,cAAI,CAAC,QAAQ;AACT,qBAAS,IAAI,GAAG,IAAI,KAAK,aAAY,GAAI,KAAK;AAC1C,uBAAS,KAAK,UAAU,CAAC,EAAE,eAAe,EAAE;AAE5C,kBAAI,QAAQ;AACR;;;;AAKZ,iBAAO;QACX;AAKA,QAAAA,sBAAA,UAAA,mBAAA,SAAiB,MAAU;;AACvB,cAAI,SAAiC;AAErC,mBAAS,IAAI,GAAG,IAAI,KAAK,aAAY,GAAI,KAAK;AAE1C,qBAAS,KAAK,UAAU,CAAC,EAAE,iBAAiB,IAAI;AAEhD,gBAAI,QAAQ;AACR,qBAAO;;;AAKf,mBAAS,IAAI,GAAG,IAAI,KAAK,eAAc,GAAI,KAAK;AAC5C,sBAAS,KAAA,KAAK,YAAY,CAAC,OAAC,QAAA,OAAA,SAAA,SAAA,GAAE,iBAAiB,IAAI;AAEnD,gBAAI,QAAQ;AACR,qBAAO;;;AAKf,iBAAO,OAAA,UAAM,iBAAgB,KAAA,MAAC,IAAI;QACtC;AA7OgB,QAAAA,sBAAA,uBAAuB,IAAI,eAAe,gBAAA,SAAS,MAAM,gBAAgB;UACrF;SACH;AAWD,mBAAA;WADC,GAAA,gBAAA,UAASA,sBAAqB,oBAAoB;;AAkOvD,eAAAA;QAjPmD,WAAW;;AAAxC,YAAA,uBAAA;AAmPtB,QAAA;;MAAA,SAAA,QAAA;AAA8B,kBAAAC,WAAA,MAAA;AAA9B,iBAAAA,YAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AAmBY,gBAAA,UAAmB,CAAA;AAG3B,gBAAA,YAA6B,MAAM,UAAU;;QA+FjD;AA3Fc,QAAAA,UAAA,UAAA,iBAAV,WAAA;AACI,cAAI,UAAmC;AAEvC,cAAI,KAAK,QAAQ,SAAS,GAAG;AACzB,sBAAU,SAAS,cAAc,KAAK;AACtC,oBAAQ,MAAM,UAAU;AACxB,oBAAQ,MAAM,WAAW;AAEzB,qBAAoB,KAAA,GAAA,KAAA,KAAK,SAAL,KAAA,GAAA,QAAA,MAAc;AAA7B,kBAAM,QAAK,GAAA,EAAA;AACZ,sBAAQ,KAAK,WAAW;gBACpB,KAAK,MAAM,UAAU;AACjB,wBAAM,OAAO,MAAM,KAAK;AACxB;gBACJ,KAAK,MAAM,UAAU;AACjB,wBAAM,OAAO,MAAM,KAAK;AACxB;gBACJ;AACI,wBAAM,OAAO,MAAM,KAAK;AACxB;;AAGR,oBAAM,YAAY,KAAK,WAAW,SAAS;AAE3C,kBAAM,gBAAgB,MAAM,OAAM;AAElC,kBAAI,eAAe;AACf,8BAAc,MAAM,UAAU;AAC9B,8BAAc,MAAM,SAAS;AAC7B,8BAAc,MAAM,cAAc;AAElC,sBAAM,YAAY,SAAS,aAAa;;;;AAKpD,iBAAO;QACX;AAEA,QAAAA,UAAA,UAAA,eAAA,WAAA;AACI,iBAAO,KAAK,QAAQ;QACxB;AAEA,QAAAA,UAAA,UAAA,YAAA,SAAU,OAAa;AACnB,iBAAO,KAAK,QAAQ,KAAK;QAC7B;AAEA,QAAAA,UAAA,UAAA,8BAAA,WAAA;AACI,iBAAO,KAAK,WAAW,KAAK,QAAQ,SAAS,IAAI,KAAK,QAAQ,CAAC,IAAI;QACvE;AAEA,QAAAA,UAAA,UAAA,6BAAA,WAAA;AACI,iBAAO,KAAK,WAAW,KAAK,QAAQ,SAAS,IACvC,KAAK,QAAQ,KAAK,QAAQ,SAAS,CAAC,IACpC;QACV;AAEA,QAAAA,UAAA,UAAA,aAAA,SAAW,MAAiB;AACxB,cAAI,gBAAgB,OAAO;AACvB,gBAAM,YAAY,KAAK,QAAQ,QAAQ,IAAI;AAE3C,gBAAI,aAAa,GAAG;AAChB,mBAAK,QAAQ,OAAO,WAAW,CAAC;AAEhC,mBAAK,UAAU,MAAS;AAExB,mBAAK,aAAY;AAEjB,qBAAO;;;AAIf,iBAAO;QACX;AAEA,QAAAA,UAAA,UAAA,kBAAA,WAAA;AACI,iBAAO;QACX;AAEA,QAAAA,UAAA,UAAA,WAAA,SAAS,OAAY;AACjB,cAAI,CAAC,MAAM,QAAQ;AACf,iBAAK,QAAQ,KAAK,KAAK;AAEvB,kBAAM,UAAU,IAAI;iBACjB;AACH,kBAAM,IAAI,MAAM,gDAAgD;;QAExE;AAEA,QAAAA,UAAA,UAAA,UAAA,SAAQ,aAAwB;AAC5B,iBAAO,uBAAuB,QAAQ,KAAK,QAAQ,QAAQ,WAAW,IAAI;QAC9E;AAjHgB,QAAAA,UAAA,iBAAiB,IAAI,gBAAA,qCACjC,gBAAA,SAAS,MACT,UACA,OACA,SAAC,QAA4B,MAAW;AACpC,eAAK,UAAuB,MAAM;QACtC,CAAC;AAEW,QAAAA,UAAA,oBAAoB,IAAI,gBAAA,aACpC,gBAAA,SAAS,MACT,aACA,MAAM,WACN,MAAM,UAAU,MAAM;AAI1B,mBAAA;WADC,GAAA,gBAAA,UAASA,UAAS,cAAc;;AAIjC,mBAAA;WADC,GAAA,gBAAA,UAASA,UAAS,iBAAiB;;AAgGxC,eAAAA;QArH8B,oBAAoB;;AAArC,YAAA,WAAA;AAuHb,QAAA;;MAAA,SAAA,QAAA;AAA4C,kBAAAC,gBAAA,MAAA;AAcxC,iBAAAA,eAAY,KAAc,UAAiB;AAA3C,cAAA,QACI,OAAA,KAAA,IAAA,KAAO;AAEP,gBAAK,MAAM;AACX,gBAAK,WAAW;;QACpB;AAEA,QAAAA,eAAA,UAAA,UAAA,WAAA;AACI,iBAAO,KAAK,YAAY,KAAK,MAAM,OAAO;QAC9C;AApBgB,QAAAA,eAAA,mBAAmB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,UAAU;AAC/D,QAAAA,eAAA,cAAc,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,KAAK;AAGrE,mBAAA;WADC,GAAA,gBAAA,UAASA,eAAc,gBAAgB;;AAIxC,mBAAA;WADC,GAAA,gBAAA,UAASA,eAAc,WAAW;;AAevC,eAAAA;QAxB4C,gBAAA,kBAAkB;;AAAxC,YAAA,gBAAA;AA0BtB,QAAA;;MAAA,SAAA,QAAA;AAAmC,kBAAAC,gBAAA,MAAA;AAU/B,iBAAAA,eAAY,KAAc,UAAmB,OAAc;AAA3D,cAAA,QACI,OAAA,KAAA,MAAM,KAAK,QAAQ,KAAC;AAEpB,gBAAK,QAAQ;;QACjB;AAEU,QAAAA,eAAA,UAAA,eAAV,WAAA;AACI,iBAAO;QACX;AAEA,QAAAA,eAAA,UAAA,SAAA,WAAA;AACI,cAAI,SAAuC;AAE3C,cAAI,KAAK,QAAO,GAAI;AAChB,qBAAS,SAAS,cAAc,OAAO;AACvC,mBAAO,MAAM,KAAK;AAClB,mBAAO,OAAO;AACd,mBAAO,QAAQ,KAAK;;AAGxB,iBAAO;QACX;AA5BgB,QAAAA,eAAA,gBAAgB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,OAAO;AAGzE,mBAAA;WADC,GAAA,gBAAA,UAASA,eAAc,aAAa;;AA2BzC,eAAAA;QAhCmC,aAAa;;AAAnC,YAAA,gBAAA;AAkCb,QAAA;;MAAA,SAAA,QAAA;AAAiC,kBAAAC,cAAA,MAAA;AAAjC,iBAAAA,eAAA;;QAgBA;AAfc,QAAAA,aAAA,UAAA,eAAV,WAAA;AACI,iBAAO;QACX;AAEA,QAAAA,aAAA,UAAA,SAAA,WAAA;AACI,cAAI,SAAwC;AAE5C,cAAI,KAAK,QAAO,GAAI;AAChB,qBAAS,SAAS,cAAc,QAAQ;AACxC,mBAAO,MAAM,KAAK;AAClB,mBAAO,OAAO,KAAK;;AAGvB,iBAAO;QACX;AACJ,eAAAA;MAAA,EAhBiC,aAAa;;AAAjC,YAAA,cAAA;AAkBb,QAAA;;MAAA,WAAA;AAAA,iBAAAC,eAAA;QAsBA;AAfI,QAAAA,aAAA,UAAA,OAAA,WAAA;QAEA;AAEA,eAAA,eAAIA,aAAA,WAAA,aAAS;eAAb,WAAA;AACI,mBAAO,KAAK;UAChB;eAEA,SAAwB,OAAyB;AAC7C,iBAAK,aAAa;UACtB;;;;AAEA,eAAA,eAAIA,aAAA,WAAA,qBAAiB;eAArB,WAAA;AACI,mBAAO;UACX;;;;AACJ,eAAAA;MAAA,EAtBA;;AAAsB,YAAA,cAAA;AAwBtB,QAAA;;MAAA,SAAA,QAAA;AAAsC,kBAAAC,mBAAA,MAAA;AAiClC,iBAAAA,kBAAqB,OAAY;AAAjC,cAAA,QACI,OAAA,KAAA,IAAA,KAAO;AADU,gBAAA,QAAA;AA/Bb,gBAAA,mBAAkC,CAAA;AAClC,gBAAA,kBAAmC,CAAA;AAiCvC,gBAAK,eAAc;;QACvB;AA/BQ,QAAAA,kBAAA,UAAA,iBAAR,WAAA;;AACI,eAAK,mBAAmB,CAAA;AACxB,eAAK,kBAAkB,CAAA;AACvB,eAAK,qBAAqB;AAE1B,mBAAqB,KAAA,GAAA,KAAA,KAAK,MAAM,SAAX,KAAA,GAAA,QAAA,MAAoB;AAApC,gBAAM,SAAM,GAAA,EAAA;AACb,gBAAM,iBAAiB,OAAO,WAAW,OAAO,SAAS,MAAM,GAAG,IAAI,CAAA;AAEtE,gBAAI,eAAe,WAAW,GAAG;AAC7B,kBAAI,CAAC,KAAK,oBAAoB;AAC1B,oBAAM,QAAQA,kBAAiB,oBAAoB,QAAQ,eAAe,CAAC,CAAC;AAE5E,oBAAI,SAAS,GAAG;AACZ,uBAAK,qBAAqBA,kBAAiB,oBAAoB,KAAK;;;AAG5E,kBAAI,eAAe,CAAC,MAAM,KAAK,oBAAoB;AAC/C,qBAAK,iBAAiB,KAAK,MAAM;;;;AAK7C,WAAA,KAAA,KAAK,iBAAgB,KAAI,MAAA,IAAI,KAAK,MAAM,cAAc;QAC1D;AAUA,QAAAA,kBAAA,UAAA,UAAA,WAAA;AACI,iBAAO,KAAK,iBAAiB,SAAS;QAC1C;AAEM,QAAAA,kBAAA,UAAA,oBAAN,WAAA;;;;;;;;;;AAIA,QAAAA,kBAAA,UAAA,SAAA,WAAA;AACI,cAAI,KAAK,uBAAuB,SAAS;AACrC,iBAAK,gBAAgB,SAAS,cAAc,OAAO;iBAChD;AACH,iBAAK,gBAAgB,SAAS,cAAc,OAAO;;AAGvD,eAAK,cAAc,aACf,cACA,KAAK,MAAM,UAAU,KAAK,MAAM,UAAU,UAAA,QAAQ,SAAS,qBAAoB,CAAE;AAErF,eAAK,cAAc,aAAa,sBAAsB,EAAE;AACxD,eAAK,cAAc,aAAa,eAAe,EAAE;AAIjD,eAAK,cAAc,aAAa,eAAe,EAAE;AACjD,eAAK,cAAc,WAAW;AAC9B,eAAK,cAAc,WAAW;AAE9B,cAAI,MAAM,WAAU,GAAI;AACpB,iBAAK,cAAc,QAAQ;;AAG/B,eAAK,cAAc,UAAU;AAC7B,eAAK,cAAc,MAAM,QAAQ;AAEjC,mBAAqB,KAAA,GAAA,KAAA,KAAK,MAAM,SAAX,KAAA,GAAA,QAAA,MAAoB;AAApC,gBAAM,SAAM,GAAA,EAAA;AACb,gBAAM,iBAAiB,OAAO,OAAM;AAEpC,kBAAM,YAAY,KAAK,eAAe,cAAc;;AAGxD,mBAA4B,KAAA,GAAA,KAAA,KAAK,MAAM,gBAAX,KAAA,GAAA,QAAA,MAA2B;AAAlD,gBAAM,gBAAa,GAAA,EAAA;AACpB,gBAAI,cAAc,YAAY,OAAO;AACjC,kBAAM,wBAAwB,cAAc,OAAM;AAElD,oBAAM,YAAY,KAAK,eAAe,qBAAqB;;;AAInE,iBAAO,KAAK;QAChB;AAEA,QAAAA,kBAAA,UAAA,OAAA,WAAA;AACI,cAAI,KAAK,eAAe;AACpB,iBAAK,cAAc,KAAI;;QAE/B;AAEA,eAAA,eAAIA,kBAAA,WAAA,qBAAiB;eAArB,WAAA;AACI,mBAAO,KAAK;UAChB;;;;AApEgB,QAAAA,kBAAA,sBAAsB,CAAC,SAAS,OAAO;AAqE3D,eAAAA;QApGsC,WAAW;;AAApC,YAAA,mBAAA;AAsGb,QAAA;;MAAA,SAAA,QAAA;AAAgD,kBAAAC,oBAAA,MAAA;AAC5C,iBAAAA,mBAAY,SAAwB;iBAChC,OAAA,KAAA,IAAA,KAAO;QACX;AACJ,eAAAA;MAAA,EAJgD,WAAW;;AAArC,YAAA,oBAAA;AAMtB,QAAA;;MAAA,SAAA,QAAA;AAAqD,kBAAAC,yBAAA,MAAA;AAGjD,iBAAAA,wBAAY,SAAmC,aAAoB;AAAnE,cAAA,QACI,OAAA,KAAA,MAAM,OAAO,KAAC;AAD6B,gBAAA,cAAA;AAG3C,cAAI,QAAQ,UAAU,GAAG;AACrB,kBAAK,WAAW,QAAQ,CAAC;;;QAEjC;AAIA,QAAAA,wBAAA,UAAA,UAAA,WAAA;AACI,iBAAO,KAAK,aAAa;QAC7B;AAEA,QAAAA,wBAAA,UAAA,SAAA,WAAA;AACI,cAAI,YAAY,SAAS,cAAc,KAAK;AAC5C,oBAAU,MAAM,WAAW;AAC3B,oBAAU,MAAM,QAAQ;AACxB,oBAAU,MAAM,SAAS;AACzB,oBAAU,MAAM,gBAAgB;AAEhC,cAAI,SAAS,SAAS,cAAc,QAAQ;AAC5C,iBAAO,MAAM,WAAW;AACxB,iBAAO,MAAM,MAAM;AACnB,iBAAO,MAAM,OAAO;AACpB,iBAAO,MAAM,QAAQ;AACrB,iBAAO,MAAM,SAAS;AACtB,iBAAO,MAAM,KAAK,iBAAgB;AAClC,iBAAO,cAAc;AAErB,cAAI,KAAK,aAAa;AAClB,mBAAO,QAAQ,KAAK;;AAGxB,iBAAO,QACH;AACJ,iBAAO,kBAAkB;AAEzB,oBAAU,YAAY,MAAM;AAE5B,iBAAO;QACX;AAEA,eAAA,eAAIA,wBAAA,WAAA,WAAO;eAAX,WAAA;AACI,mBAAO,KAAK;UAChB;;;;AACJ,eAAAA;MAAA,EAjDqD,iBAAiB;;AAAhD,YAAA,yBAAA;AAmDtB,QAAA;;MAAA,SAAA,QAAA;AAAiC,kBAAAC,cAAA,MAAA;AAAjC,iBAAAA,eAAA;;QAgBA;AAfU,QAAAA,aAAA,UAAA,oBAAN,WAAA;;;;;;AACU,8BAAY,yCAAA,OAAyC,KAAK,iBAAgB,CAAE;AAEnE,yBAAA,CAAA,GAAM,MAAM,SAAS,CAAC;;AAAjC,6BAAW,GAAA,KAAA;uBAEX,SAAS;AAAT,2BAAA,CAAA,GAAA,CAAA;AACW,yBAAA,CAAA,GAAM,SAAS,KAAI,CAAE;;AAA5B,yBAAO,GAAA,KAAA;AAEX,uBAAK,YAAY,KAAK,eAAe;;;;;;;;;;;AAI7C,QAAAA,aAAA,UAAA,mBAAA,WAAA;AACI,iBAAO,kCAAA,OAAkC,KAAK,SAAO,aAAA;QACzD;AACJ,eAAAA;MAAA,EAhBiC,sBAAsB;;AAA1C,YAAA,cAAA;AAkBb,QAAA;;MAAA,SAAA,QAAA;AAAuC,kBAAAC,oBAAA,MAAA;AAAvC,iBAAAA,qBAAA;;QAgBA;AAfU,QAAAA,mBAAA,UAAA,oBAAN,WAAA;;;;;;AACU,2BAAS,qCAAA,OAAqC,KAAK,SAAO,2BAAA;AAEjD,yBAAA,CAAA,GAAM,MAAM,MAAM,CAAC;;AAA9B,6BAAW,GAAA,KAAA;uBAEX,SAAS;AAAT,2BAAA,CAAA,GAAA,CAAA;AACW,yBAAA,CAAA,GAAM,SAAS,KAAI,CAAE;;AAA5B,yBAAO,GAAA,KAAA;AAEX,uBAAK,YAAY,KAAK,mBAAmB;;;;;;;;;;;AAIjD,QAAAA,mBAAA,UAAA,mBAAA,WAAA;AACI,iBAAO,2CAAA,OAA2C,KAAK,SAAO,aAAA;QAClE;AACJ,eAAAA;MAAA,EAhBuC,sBAAsB;;AAAhD,YAAA,oBAAA;AAkBb,QAAA;;MAAA,SAAA,QAAA;AAAmC,kBAAAC,gBAAA,MAAA;AAG/B,iBAAAA,eAAY,SAAmC,aAAoB;AAAnE,cAAA,QACI,OAAA,KAAA,MAAM,SAAS,WAAW,KAAC;AADgB,gBAAA,cAAA;AAG3C,cAAI,QAAQ,UAAU,KAAK,QAAQ,CAAC,MAAM,QAAW;AACjD,kBAAK,kBAAkB,SAAS,QAAQ,CAAC,CAAC;;;QAElD;AAEM,QAAAA,eAAA,UAAA,oBAAN,WAAA;;;AACI,mBAAK,YAAY,KAAK,UAChB,8BAAA,OAA8B,KAAK,SAAO,oBAAA,IAC1C;;;;;;;;AAGV,QAAAA,eAAA,UAAA,mBAAA,WAAA;AACI,cAAI,MAAM,iCAAA,OAAiC,KAAK,SAAO,aAAA;AAEvD,cAAI,KAAK,oBAAoB,QAAW;AACpC,mBAAO,UAAA,OAAU,KAAK,eAAe;;AAGzC,iBAAO;QACX;AACJ,eAAAA;MAAA,EA1BmC,sBAAsB;;AAA5C,YAAA,gBAAA;AAiCb,QAAA;;MAAA,SAAA,QAAA;AAA2B,kBAAAC,QAAA,MAAA;AAA3B,iBAAAA,SAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AAsCI,gBAAA,UAAyB,CAAA;AAGzB,gBAAA,iBAAkC,CAAA;;QAsOtC;AA1NY,QAAAA,OAAA,UAAA,oBAAR,WAAA;AACI,mBAAqB,KAAA,GAAA,KAAAA,OAAM,oBAAN,KAAA,GAAA,QAAA,MAA0B;AAA1C,gBAAI,WAAQ,GAAA,EAAA;AACb,qBAAmB,KAAA,GAAA,KAAA,KAAK,SAAL,KAAA,GAAA,QAAA,MAAc;AAA5B,kBAAI,SAAM,GAAA,EAAA;AACX,kBAAI,OAAO,KAAK;AACZ,yBAAoB,KAAA,GAAA,KAAA,SAAS,aAAT,KAAA,GAAA,QAAA,MAAsB;AAArC,sBAAI,UAAO,GAAA,EAAA;AACZ,sBAAI,UAAU,QAAQ,KAAK,OAAO,GAAG;AAErC,sBAAI,YAAY,MAAM;AAClB,2BAAO,SAAS,kBAAkB,OAAO;;;;;;AAO7D,iBAAO,IAAI,iBAAiB,IAAI;QACpC;AAEQ,QAAAA,OAAA,UAAA,yBAAR,SAA+B,OAAc;AACzC,cAAI,KAAK,WAAW,MAAM,qBAAqB;AAC3C,kBAAM,eAAc;AACpB,kBAAM,eAAe;AAErB,gBAAI,KAAK,iBAAiB;AACtB,kBAAM,qBAAqB,KAAK,aAAa,OAAM;AACnD,2BAAa,KAAK,eAAe;AACjC,mBAAK,gBAAgB,YAAY,kBAAkB;AAEnD,mBAAK,aAAa,KAAI;AAEtB,iCAAmB,MAAK;;iBAEzB;AACH,gBAAIA,OAAM,QAAQ;AACd,oBAAM,eAAc;AACpB,oBAAM,eAAe;AAErB,cAAAA,OAAM,OAAO,IAAI;;;QAG7B;AAEc,QAAAA,OAAA,UAAA,gBAAd,WAAA;;;;;AACI,kBAAI,KAAK,iBAAiB;AAChB,uCAAuB;AACvB,wCAAwB;AAExB,sCAAoB,SAAS,cAAc,KAAK;AACtD,oCAAkB,YAAY,KAAK,WAAW,iBAAiB,iBAAiB;AAChF,oCAAkB,aAAa,QAAQ,aAAa;AACpD,oCAAkB,aACd,cACA,KAAK,UAAU,KAAK,UAAU,UAAA,QAAQ,SAAS,qBAAoB,CAAE;AAEzE,oCAAkB,MAAM,WAAW;AACnC,oCAAkB,MAAM,UAAU;AAE9B,4BAAY,KAAK,SAAS,KAAK,SAAS,KAAK,aAAa;AAE9D,oBAAI,CAAC,WAAW;AACZ,8BAAY,KAAK,WAAW,MAAM;;AAGtC,oBAAI,WAAW;AACL,yCAAqB,SAAS,cAAc,KAAK;AACvD,uCAAmB,MAAM,QAAQ;AACjC,uCAAmB,MAAM,SAAS;AAClC,uCAAmB,aAAa,QAAQ,cAAc;AAEtD,uCAAmB,UAAU,SAAC,IAAS;AACnC,wBAAI,qBAAmB,YAAY;AAC/B,2CAAmB,WAAW,YAAY,oBAAkB;;AAGhE,wCAAkB,UAAU,IAAI,OAAO;AACvC,wCAAkB,MAAM,YAAY;kBACxC;AAEA,uCAAmB,MAAM;AAEzB,sCAAkB,YAAY,oBAAkB;uBAC7C;AACH,sCAAkB,UAAU,IAAI,OAAO;AACvC,sCAAkB,MAAM,YAAY;;AAGxC,oBAAI,KAAK,WAAW,yBAAyB,KAAK,aAAa,QAAO,GAAI;AAChE,2CAAyB,SAAS,cAAc,KAAK;AAC3D,yCAAuB,WAAW;AAClC,yCAAuB,aAAa,QAAQ,QAAQ;AACpD,yCAAuB,aACnB,cACA,UAAA,QAAQ,SAAS,qBAAoB,CAAE;AAE3C,yCAAuB,YACnB,KAAK,WAAW,iBAAiB,qBAAqB;AAC1D,yCAAuB,MAAM,UAAU;AACvC,yCAAuB,MAAM,aAAa;AAC1C,yCAAuB,MAAM,iBAAiB;AAC9C,yCAAuB,UAAU,SAAC,GAAC;AAC/B,0BAAK,uBAAuB,CAAC;kBACjC;AAEA,yCAAuB,aAAa,SAAC,GAAgB;AACjD,wBAAI,EAAE,SAAS,WAAW,EAAE,SAAS,SAAS;AAE1C,4BAAK,uBAAuB,CAAC;;kBAErC;AAEM,2CAAyB,SAAS,cAAc,KAAK;AAC3D,yCAAuB,YAAY,KAAK,WAAW,iBAC/C,2BAA2B;AAE/B,yCAAuB,MAAM,QAAQ,uBAAuB;AAC5D,yCAAuB,MAAM,SAAS,wBAAwB;AAC9D,yCAAuB,MAAM,iBAAiB,wBAAwB,IAAI;AAC1E,yCAAuB,MAAM,oBAAoB,wBAAwB,IAAI;AAC7E,yCAAuB,MAAM,kBAAkB,uBAAuB;AACtE,yCAAuB,MAAM,mBAAmB;AAChD,yCAAuB,MAAM,cAAc;AAC3C,yCAAuB,MAAM,iBAAiB;AAC9C,yCAAuB,MAAM,mBAAmB;AAChD,yCAAuB,MAAM,oBAAoB;AACjD,yCAAuB,MAAM,YACzB,eAAe,uBAAuB,KAAK;AAE/C,yCAAuB,YAAY,sBAAsB;AAEnD,wCAAsB,SAAS,cAAc,KAAK;AACxD,sCAAoB,MAAM,WAAW;AACrC,sCAAoB,MAAM,OAAO;AACjC,sCAAoB,MAAM,MAAM;AAChC,sCAAoB,MAAM,QAAQ;AAClC,sCAAoB,MAAM,SAAS;AACnC,sCAAoB,MAAM,UAAU;AACpC,sCAAoB,MAAM,iBAAiB;AAC3C,sCAAoB,MAAM,aAAa;AAEvC,sCAAoB,YAAY,sBAAsB;AACtD,sCAAkB,YAAY,mBAAmB;;AAGrD,6BAAa,KAAK,eAAe;AACjC,qBAAK,gBAAgB,YAAY,mBAAiB;;;;;;;;;AAIhD,QAAAA,OAAA,UAAA,iBAAV,WAAA;AACI,cAAM,UAAuB,SAAS,cAAc,KAAK;AACzD,kBAAQ,YAAY,KAAK,WAAW,iBAAiB,UAAU;AAE/D,iBAAO;QACX;AAIA,QAAAA,OAAA,UAAA,SAAA,WAAA;AAAA,cAAA,QAAA;AACI,cAAI,SAAS,OAAA,UAAM,OAAM,KAAA,IAAA;AAEzB,cAAI,QAAQ;AACR,iBAAK,eAAe,KAAK,kBAAiB;AAE1C,iBAAK,aAAa,kBAAiB,EAAG,KAAK,WAAA;AAAM,qBAAA,MAAK,cAAa;YAAlB,CAAoB;;AAGzE,iBAAO;QACX;AAEA,QAAAA,OAAA,UAAA,sBAAA,WAAA;AACI,iBAAA,UAAM,oBAAmB,KAAA,IAAA;AAEzB,eAAK,cAAa;QACtB;AAEA,QAAAA,OAAA,UAAA,kBAAA,WAAA;AACI,iBAAO;QACX;AAEA,QAAAA,OAAA,UAAA,yBAAA,WAAA;AACI,cAAM,SAAiC,CAAA;AAEvC,cAAI,KAAK,cAAc;AACnB,gBAAM,YAAY,KAAK,SAAS,KAAK,SAAS,KAAK,WAAW,MAAM;AAEpE,gBAAI,WAAW;AACX,qBAAO,KAAK,EAAE,KAAK,WAAW,UAAU,QAAO,CAAE;;;AAIzD,mBAA0B,KAAA,GAAA,KAAA,KAAK,SAAL,KAAA,GAAA,QAAA,MAAc;AAAnC,gBAAM,cAAW,GAAA,EAAA;AAClB,gBAAI,YAAY,QAAO,GAAI;AACvB,qBAAO,KAAK;;gBAER,KAAK,YAAY;gBACjB,UAAU,YAAY;;eAEzB;;;AAIT,mBAA4B,KAAA,GAAA,KAAA,KAAK,gBAAL,KAAA,GAAA,QAAA,MAAqB;AAA5C,gBAAM,gBAAa,GAAA,EAAA;AACpB,gBAAI,cAAc,QAAO,GAAI;AACzB,qBAAO,KAAK;;gBAER,KAAK,cAAc;gBACnB,UAAU,cAAc;;eAE3B;;;AAIT,iBAAO;QACX;AAEA,eAAA,eAAIA,OAAA,WAAA,qBAAiB;eAArB,WAAA;AACI,mBAAO,KAAK,aAAa;UAC7B;;;;AA7QO,QAAAA,OAAA,qBAA2C;UAC9C;YACI,aAAa;cACT;cACA;;YAEJ,mBAAmB,SAAC,SAAO;AACvB,qBAAA,IAAI,cAAc,SAAS,UAAA,QAAQ,SAAS,mBAAkB,CAAE;YAAhE;;UAER;YACI,aAAa,CAAC,6CAA6C;YAC3D,mBAAmB,SAAC,SAAO;AACvB,qBAAA,IAAI,YAAY,SAAS,UAAA,QAAQ,SAAS,iBAAgB,CAAE;YAA5D;;UAER;YACI,aAAa,CAAC,mEAAmE;YACjF,mBAAmB,SAAC,SAAO;AACvB,qBAAA,IAAI,kBAAkB,SAAS,UAAA,QAAQ,SAAS,uBAAsB,CAAE;YAAxE;;;AAMI,QAAAA,OAAA,kBAAkB,IAAI,gBAAA,qCAClC,gBAAA,SAAS,MACT,WACA,WAAW;AAEC,QAAAA,OAAA,yBAAyB,IAAI,gBAAA,qCACzC,gBAAA,SAAS,MACT,kBACA,aAAa;AAED,QAAAA,OAAA,iBAAiB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,QAAQ;AAC3D,QAAAA,OAAA,kBAAkB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,SAAS;AAG7E,mBAAA;WADC,GAAA,gBAAA,UAASA,OAAM,eAAe;;AAI/B,mBAAA;WADC,GAAA,gBAAA,UAASA,OAAM,sBAAsB;;AAItC,mBAAA;WADC,GAAA,gBAAA,UAASA,OAAM,cAAc;;AAI9B,mBAAA;WADC,GAAA,gBAAA,UAASA,OAAM,eAAe;;AAiOnC,eAAAA;QA/Q2B,WAAW;;AAAzB,YAAA,QAAA;AAiRb,QAAA;;MAAA,SAAA,QAAA;AAAoC,kBAAAC,QAAA,MAAA;AAApC,iBAAAA,SAAA;;QAgSA;AAvQc,QAAAA,OAAA,UAAA,iBAAV,WAAA;AACI,cAAM,WAAqB,CAAA;AAE3B,cAAI,KAAK,YAAY;AACjB,qBAAS,KAAK,KAAK,UAAU;;AAGjC,cAAI,KAAK,uBAAuB;AAC5B,qBAAS,KAAK,KAAK,sBAAsB,EAAE;;AAG/C,cAAI,KAAK,8BAA8B;AACnC,qBAAS,KAAK,KAAK,6BAA6B,EAAE;;AAGtD,iBAAO;QACX;AAEU,QAAAA,OAAA,UAAA,mCAAV,WAAA;AACI,cAAI,KAAK,8BAA8B;AACnC,gBAAM,WAAqB,KAAK,eAAc;AAE9C,gBAAI,SAAS,SAAS,GAAG;AACrB,mBAAK,6BAA6B,aAC9B,mBACA,SAAS,KAAK,GAAG,CAAC;mBAEnB;AACH,mBAAK,6BAA6B,gBAAgB,iBAAiB;;;QAG/E;AAEA,eAAA,eAAcA,OAAA,WAAA,cAAU;eAAxB,WAAA;AACI,mBAAO;UACX;;;;AAEA,eAAA,eAAcA,OAAA,WAAA,+BAA2B;eAAzC,WAAA;AACI,mBAAO,KAAK;UAChB;;;;AAEA,eAAA,eAAcA,OAAA,WAAA,gCAA4B;eAA1C,WAAA;AACI,mBAAO,KAAK;UAChB;;;;AAEU,QAAAA,OAAA,UAAA,yBAAV,WAAA;AACI,cAAM,aAAa,KAAK;AAExB,eAAK,yBAAyB,SAAS,cAAc,KAAK;AAC1D,eAAK,uBAAuB,MAAM,UAAU;AAC5C,eAAK,uBAAuB,MAAM,gBAAgB;AAElD,cAAM,yBAAyB,MAAM,iBAAgB;AAErD,cAAI,KAAK,OAAO;AACZ,gBAAM,qBAAqB,IAAI,cAAa;AAC5C,+BAAmB,UAAU,IAAI;AACjC,+BAAmB,eAAe;AAElC,gBAAM,cAAc,IAAI,QAAQ,KAAK,KAAK;AAC1C,+BAAmB,UAAU,WAAW;AAExC,gBAAI,KAAK,YAAY;AACjB,0BAAY,KAAK,WAAW,OAAO,MAAM,cAAc;AAEvD,kBAAM,sBAAsB,IAAI,QAC5B,WAAW,OAAO,MAAM,eAAe,MAAM;AAEjD,kCAAoB,QAAQ,WAAW,OAAO,MAAM,eAAe;AACnE,kCAAoB,aAAa;AAEjC,iCAAmB,UAAU,mBAAmB;mBAC7C;AACH,0BAAY,KAAK,WAAW,OAAO,MAAM,cAAc;;AAG3D,iBAAK,wBAAwB,mBAAmB,OAAM;AAEtD,gBAAI,KAAK,uBAAuB;AAC5B,mBAAK,sBAAsB,KAAK,MAAM,iBAAgB;AACtD,mBAAK,sBAAsB,MAAM,eAC7B,WAAW,oBAAoB,WAAW,OAAO,MAAM,YAAY,IAAI;AAE3E,mBAAK,uBAAuB,YAAY,KAAK,qBAAqB;;;AAI1E,eAAK,gCAAgC,SAAS,cAAc,KAAK;AACjE,eAAK,8BAA8B,YAC/B,WAAW,iBAAiB,oBAAoB;AACpD,eAAK,8BAA8B,MAAM,UAAU;AAEnD,cAAI,KAAK,WAAW,WAAW;AAC3B,iBAAK,8BAA8B,MAAM,aAAa;AACtD,iBAAK,8BAA8B,MAAM,OAAO;;AAGpD,eAAK,+BAA+B,KAAK,eAAc;AAEvD,cAAI,KAAK,8BAA8B;AACnC,iBAAK,6BAA6B,KAAK;AACvC,iBAAK,6BAA6B,MAAM,WAAW;AAEnD,gBAAI,KAAK,cAAc,KAAK,YAAY;AACpC,mBAAK,6BAA6B,aAAa,iBAAiB,MAAM;AACtE,mBAAK,6BAA6B,UAAU,IACxC,WAAW,iBAAiB,mBAAmB,CAAC;;AAIxD,iBAAK,8BAA8B,YAAY,KAAK,4BAA4B;AAChF,iBAAK,uBAAuB,YAAY,KAAK,6BAA6B;AAE1E,iBAAK,iCAAgC;AAErC,mBAAO,KAAK;;AAGhB,eAAK,gBAAe;AAEpB,iBAAO;QACX;AAEU,QAAAA,OAAA,UAAA,eAAV,WAAA;AACI,eAAK,eAAc,EAAG,0BAAyB;AAE/C,cAAI,KAAK,QAAO,GAAI;AAChB,iBAAK,0BAAyB;;AAGlC,cAAI,KAAK,gBAAgB;AACrB,iBAAK,eAAe,IAAI;;AAG5B,sCAA4B,IAAI;QACpC;AAEU,QAAAA,OAAA,UAAA,4BAAV,WAAA;AACI,cAAI,KAAK,6BAA6B;AAClC,iBAAK,4BAA4B,UAAU,OACvC,KAAK,WAAW,iBAAiB,4BAA4B,CAAC;AAGlE,iBAAK,iCAAgC;AAErC,gBAAI,KAAK,8BAA8B;AACnC,mBAAK,uBAAuB,YAAY,KAAK,4BAA4B;AAEzE,mBAAK,+BAA+B;;;QAGhD;AAEU,QAAAA,OAAA,UAAA,6BAAV,WAAA;AACI,cACI,KAAK,mBACL,KAAK,gBACL,SAAA,eAAe,8BACjB;AACE,gBAAM,wBAAwB,IAAI,UAAS;AAC3C,kCAAsB,UAAU,IAAI;AACpC,kCAAsB,OAAO,KAAK;AAClC,kCAAsB,OAAO;AAC7B,kCAAsB,KAAK,KAAK,WAAW,OAAO,YAAY;AAE9D,iBAAK,+BAA+B,sBAAsB,OAAM;AAEhE,gBAAI,KAAK,8BAA8B;AACnC,mBAAK,6BAA6B,KAAK,MAAM,iBAAgB;AAC7D,mBAAK,uBAAuB,YAAY,KAAK,4BAA4B;AAEzE,mBAAK,iCAAgC;;;QAGjD;AAQA,QAAAA,OAAA,UAAA,QAAA,WAAA;AACI,cAAI,KAAK,8BAA8B;AACnC,iBAAK,6BAA6B,MAAK;;QAE/C;AAEA,QAAAA,OAAA,UAAA,UAAA,WAAA;AACI,iBAAO;QACX;AAEA,QAAAA,OAAA,UAAA,UAAA,WAAA;AACI,iBAAO,KAAK,UAAU,KAAK;QAC/B;AAEA,QAAAA,OAAA,UAAA,kBAAA,WAAA;AACI,eAAK,YAAY,KAAK;QAC1B;AAEA,QAAAA,OAAA,UAAA,6BAAA,SAA2B,SAA0B;AACjD,iBAAA,UAAM,2BAA0B,KAAA,MAAC,OAAO;AAExC,cAAI,CAAC,KAAK,IAAI;AACV,oBAAQ,WACJ,MACA,MAAM,gBAAgB,oBACtB,UAAA,QAAQ,OAAO,uBAAsB,CAAE;;AAI/C,cAAI,KAAK,YAAY;AACjB,gBAAI,CAAC,KAAK,OAAO;AACb,sBAAQ,WACJ,MACA,MAAM,gBAAgB,+BACtB,qCAAqC;;AAI7C,gBAAI,CAAC,KAAK,cAAc;AACpB,sBAAQ,WACJ,MACA,MAAM,gBAAgB,sCACtB,8CAA8C;;;QAI9D;AAEA,QAAAA,OAAA,UAAA,gBAAA,WAAA;AACI,eAAK,0BAAyB;AAE9B,cAAM,SAAS,KAAK,aAAa,KAAK,MAAK,KAAM,KAAK,QAAO,IAAK,KAAK,QAAO;AAE9E,cAAI,CAAC,UAAU,KAAK,6BAA6B;AAC7C,iBAAK,4BAA4B,UAAU,IACvC,KAAK,WAAW,iBAAiB,4BAA4B,CAAC;AAGlE,iBAAK,2BAA0B;;AAGnC,iBAAO;QACX;AAEA,QAAAA,OAAA,UAAA,eAAA,SAAa,gBAA8B;AAA9B,cAAA,mBAAA,QAAA;AAAA,6BAAA;UAA8B;AACvC,iBAAO,CAAC,IAAI;QAChB;AAEA,QAAAA,OAAA,UAAA,SAAA,WAAA;AACI,cAAI,SAAS,OAAA,UAAM,OAAM,KAAA,IAAA;AAEzB,eAAK,gBAAe;AAEpB,iBAAO;QACX;AAIA,eAAA,eAAIA,OAAA,WAAA,iBAAa;eAAjB,WAAA;AACI,mBAAO;UACX;;;;AA5RgB,QAAAA,OAAA,gBAAgB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,SAAS,IAAI;AAC/D,QAAAA,OAAA,qBAAqB,IAAI,gBAAA,aAAa,gBAAA,SAAS,MAAM,cAAc,KAAK;AACxE,QAAAA,OAAA,uBAAuB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,gBAAgB,IAAI;AAG7F,mBAAA;WADC,GAAA,gBAAA,UAASA,OAAM,aAAa;;AAI7B,mBAAA;WADC,GAAA,gBAAA,UAASA,OAAM,kBAAkB;;AAIlC,mBAAA;WADC,GAAA,gBAAA,UAASA,OAAM,oBAAoB;;AAmRxC,eAAAA;QAhSoC,WAAW;;AAAzB,YAAA,QAAA;AAkStB,QAAA;;MAAA,SAAA,QAAA;AAA+B,kBAAAC,YAAA,MAAA;AAA/B,iBAAAA,aAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AAgCI,gBAAA,cAAuB;AAMvB,gBAAA,QAA8B,MAAM,eAAe;;QA4LvD;AAlLY,QAAAA,WAAA,UAAA,aAAR,SAAmB,OAA6C;AAAhE,cAAA,QAAA;AACI,gBAAM,MAAM,OAAO;AAEnB,gBAAM,WAAW,KAAK,aAAY,IAAK,KAAK;AAE5C,cAAI,KAAK,aAAa;AAClB,kBAAM,cAAc,KAAK;AACzB,kBAAM,aAAa,cAAc,KAAK,WAAW;;AAGrD,cAAI,KAAK,cAAc;AACnB,kBAAM,QAAQ,KAAK;;AAGvB,cAAI,KAAK,aAAa,KAAK,YAAY,GAAG;AACtC,kBAAM,YAAY,KAAK;;AAG3B,gBAAM,UAAU,WAAA;AACZ,kBAAK,aAAY;UACrB;AACA,gBAAM,aAAa,SAAC,GAAgB;AAEhC,gBACI,EAAE,WACF,EAAE,SAAS,WACX,MAAK,gBACL,MAAK,aAAa,qBAAoB,GACxC;AACE,oBAAK,aAAa,QAAO;;UAEjC;QACJ;AAEU,QAAAA,WAAA,UAAA,iBAAV,WAAA;AACI,cAAI;AAEJ,cAAI,KAAK,eAAe,KAAK,UAAU,MAAM,eAAe,UAAU;AAClE,qBAAS,SAAS,cAAc,UAAU;AAC1C,mBAAO,YAAY,KAAK,WAAW,iBAC/B,YACA,gBACA,cAAc;AAGlB,gBAAI,KAAK,WAAW,WAAW;AAC3B,qBAAO,MAAM,SAAS;;iBAEvB;AACH,qBAAS,SAAS,cAAc,OAAO;AACvC,mBAAO,YAAY,KAAK,WAAW,iBAAiB,YAAY,cAAc;AAC9E,mBAAO,OAAO,MAAM,eAAe,KAAK,KAAK,EAAE,YAAW;;AAG9D,eAAK,WAAW,MAAM;AAEtB,iBAAO;QACX;AAEU,QAAAA,WAAA,UAAA,yBAAV,WAAA;AAAA,cAAA,QAAA;AACI,cAAM,uBAAuB,OAAA,UAAM,uBAAsB,KAAA,IAAA;AAEzD,cAAI,KAAK,cAAc;AACnB,gBAAM,WAAS,SAAS,cAAc,QAAQ;AAC9C,qBAAO,YAAY,KAAK,WAAW,iBAC/B,KAAK,aAAa,qBAAoB,IAChC,0BACA,gCAAgC;AAG1C,qBAAO,UAAU,SAAC,GAAC;AACf,kBAAI,MAAK,gBAAgB,MAAK,aAAa,qBAAoB,GAAI;AAC/D,kBAAE,eAAc;AAChB,kBAAE,eAAe;AAEjB,sBAAK,aAAa,QAAO;;YAEjC;AAEA,gBAAI,KAAK,aAAa,SAAS;AAC3B,uBAAO,UAAU,IAAI,UAAU;AAE/B,kBAAM,SAAO,SAAS,cAAc,KAAK;AACzC,qBAAK,MAAM,SAAS;AACpB,qBAAK,aAAa,QAAQ,cAAc;AAMxC,qBAAK,MAAM,UAAU;AACrB,qBAAK,SAAS,WAAA;AACV,uBAAK,MAAM,eAAe,SAAS;cACvC;AACA,qBAAK,UAAU,WAAA;AACX,yBAAO,YAAY,MAAI;AACvB,yBAAO,UAAU,OAAO,UAAU;AAClC,yBAAO,UAAU,IAAI,UAAU;AAC/B,yBAAO,cACH,MAAK,gBAAgB,MAAK,aAAa,QACjC,MAAK,aAAa,QAClB,UAAA,QAAQ,SAAS,kBAAiB;cAChD;AAEA,qBAAK,MAAM,KAAK,aAAa;AAE7B,uBAAO,YAAY,MAAI;AACvB,uBAAO,QAAQ,KAAK,aAAa,QAC3B,KAAK,aAAa,QAClB,UAAA,QAAQ,SAAS,kBAAiB;mBACrC;AACH,uBAAO,UAAU,IAAI,UAAU;AAC/B,uBAAO,cAAc,KAAK,aAAa,QACjC,KAAK,aAAa,QAClB,UAAA,QAAQ,SAAS,kBAAiB;;AAG5C,iBAAK,aAAa,6BAA6B,UAAQ,IAAI;AAE3D,qBAAO,MAAM,aAAa;AAE1B,iBAAK,6BAA6B,YAAY,QAAM;;AAGxD,iBAAO;QACX;AAEA,QAAAA,WAAA,UAAA,kBAAA,WAAA;AACI,iBAAO;QACX;AAEA,QAAAA,WAAA,UAAA,gBAAA,WAAA;AACI,cAAM,SAAS,OAAA,UAAM,cAAa,KAAA,IAAA;AAElC,cAAI,KAAK,cAAc;AACnB,mBAAO,KAAK,KAAK,YAAY;;AAGjC,iBAAO;QACX;AAEA,QAAAA,WAAA,UAAA,gBAAA,SAAc,IAAU;AACpB,cAAI,SAAS,OAAA,UAAM,cAAa,KAAA,MAAC,EAAE;AAEnC,cAAI,CAAC,UAAU,KAAK,cAAc;AAC9B,qBAAS,KAAK,aAAa,cAAc,EAAE;;AAG/C,iBAAO;QACX;AAEA,QAAAA,WAAA,UAAA,QAAA,WAAA;AACI,iBAAO,KAAK,QAAQ,OAAO;QAC/B;AAEA,QAAAA,WAAA,UAAA,UAAA,WAAA;AACI,cAAI,CAAC,KAAK,OAAO;AACb,mBAAO;;AAGX,cAAI,KAAK,OAAO;AACZ,mBAAO,IAAI,OAAO,KAAK,OAAO,GAAG,EAAE,KAAK,KAAK,KAAK;;AAGtD,iBAAO;QACX;AAEA,eAAA,eAAIA,WAAA,WAAA,SAAK;eAAT,WAAA;AACI,gBAAI,KAAK,6BAA6B;AAClC,kBAAI,KAAK,aAAa;AAClB,uBAA6B,KAAK,4BAA6B;qBAC5D;AACH,uBAA0B,KAAK,4BAA6B;;mBAE7D;AACH,qBAAO;;UAEf;;;;AA9NgB,QAAAA,WAAA,gBAAgB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,OAAO;AACzD,QAAAA,WAAA,oBAAoB,IAAI,gBAAA,YAAY,gBAAA,SAAS,MAAM,WAAW;AAC9D,QAAAA,WAAA,sBAAsB,IAAI,gBAAA,aAAa,gBAAA,SAAS,MAAM,eAAe,KAAK;AAC1E,QAAAA,WAAA,sBAAsB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,aAAa;AACrE,QAAAA,WAAA,gBAAgB,IAAI,gBAAA,aAChC,gBAAA,SAAS,MACT,SACA,MAAM,gBACN,MAAM,eAAe,MACrB;UACI,EAAE,OAAO,MAAM,eAAe,KAAI;UAClC,EAAE,OAAO,MAAM,eAAe,IAAG;UACjC,EAAE,OAAO,MAAM,eAAe,IAAG;UACjC,EAAE,OAAO,MAAM,eAAe,MAAK;UACnC,EAAE,OAAO,MAAM,eAAe,UAAU,eAAe,gBAAA,SAAS,KAAI;SACvE;AAEW,QAAAA,WAAA,uBAAuB,IAAI,eAAe,gBAAA,SAAS,MAAM,gBAAgB;UACrF;SACH;AACe,QAAAA,WAAA,gBAAgB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,SAAS,IAAI;AAG/E,mBAAA;WADC,GAAA,gBAAA,UAASA,WAAU,aAAa;;AAIjC,mBAAA;WADC,GAAA,gBAAA,UAASA,WAAU,iBAAiB;;AAIrC,mBAAA;WADC,GAAA,gBAAA,UAASA,WAAU,mBAAmB;;AAIvC,mBAAA;WADC,GAAA,gBAAA,UAASA,WAAU,mBAAmB;;AAIvC,mBAAA;WADC,GAAA,gBAAA,UAASA,WAAU,aAAa;;AAIjC,mBAAA;WADC,GAAA,gBAAA,UAASA,WAAU,oBAAoB;;AAIxC,mBAAA;WADC,GAAA,gBAAA,UAASA,WAAU,aAAa;;AAuLrC,eAAAA;QAlO+B,KAAK;;AAAvB,YAAA,YAAA;AAoOb,QAAA;;MAAA,SAAA,QAAA;AAAiC,kBAAAC,cAAA,MAAA;AAAjC,iBAAAA,eAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AAkCI,gBAAA,UAAkB;AAGlB,gBAAA,WAAmB;AAGnB,gBAAA,OAAgB;;QA6HpB;AArHc,QAAAA,aAAA,UAAA,mCAAV,WAAA;AACI,cAAI,KAAK,uBAAuB;AAC5B,gBAAI,iBAAiB,KAAK,eAAc,EAAG,KAAK,GAAG;AAEnD,gBAAI,KAAK,8BAA8B,KAAK,2BAA2B,IAAI;AACvE,gCAAkB,MAAM,KAAK,2BAA2B;;AAG5D,gBAAI,gBAAgB;AAChB,mBAAK,sBAAsB,aAAa,mBAAmB,cAAc;mBACtE;AACH,mBAAK,sBAAsB,gBAAgB,iBAAiB;;;QAGxE;AAEU,QAAAA,aAAA,UAAA,iBAAV,WAAA;AAAA,cAAA,QAAA;AACI,cAAM,UAAU,SAAS,cAAc,KAAK;AAC5C,kBAAQ,YAAY,KAAK,WAAW,iBAAiB,YAAY,gBAAgB;AACjF,kBAAQ,MAAM,QAAQ;AACtB,kBAAQ,MAAM,UAAU;AACxB,kBAAQ,MAAM,aAAa;AAE3B,eAAK,wBAAwB,SAAS,cAAc,OAAO;AAC3D,eAAK,sBAAsB,KAAK,MAAM,iBAAgB;AACtD,eAAK,sBAAsB,OAAO;AAClC,eAAK,sBAAsB,MAAM,UAAU;AAC3C,eAAK,sBAAsB,MAAM,gBAAgB;AACjD,eAAK,sBAAsB,MAAM,SAAS;AAC1C,eAAK,sBAAsB,MAAM,OAAO;AAExC,cAAI,KAAK,OAAO;AACZ,iBAAK,sBAAsB,aAAa,cAAc,KAAK,KAAK;;AAGpE,cAAI,KAAK,YAAY;AACjB,iBAAK,sBAAsB,aAAa,iBAAiB,MAAM;;AAGnE,eAAK,sBAAsB,WAAW,KAAK,aAAY,IAAK,KAAK;AAEjE,cAAI,KAAK,iBAAiB,KAAK,SAAS;AACpC,iBAAK,sBAAsB,UAAU;;AAGzC,eAAK,oBAAoB,KAAK,sBAAsB;AAEpD,eAAK,sBAAsB,WAAW,WAAA;AAClC,kBAAK,aAAY;UACrB;AAEA,gBAAM,YAAY,SAAS,KAAK,qBAAqB;AAErD,cAAI,KAAK,SAAS,KAAK,aAAY,GAAI;AACnC,gBAAM,QAAQ,IAAI,UAAS;AAC3B,kBAAM,UAAU,IAAI;AACpB,kBAAM,eAAe,KAAK,sBAAsB;AAChD,kBAAM,aAAa,KAAK;AACxB,kBAAM,OAAO,CAAC,KAAK,QAAQ,KAAK,gBAAe,IAAK,KAAK;AACzD,kBAAM,cAAc,SAAA,eAAe;AACnC,kBAAM,OAAO,KAAK;AAElB,iBAAK,6BAA6B,MAAM,OAAM;AAE9C,gBAAI,KAAK,4BAA4B;AACjC,mBAAK,2BAA2B,KAAK,MAAM,iBAAgB;AAC3D,mBAAK,2BAA2B,MAAM,UAAU;AAChD,mBAAK,2BAA2B,MAAM,OAAO;AAC7C,mBAAK,2BAA2B,MAAM,aAAa;AACnD,mBAAK,2BAA2B,MAAM,gBAAgB;AAEtD,kBAAM,gBAAgB,SAAS,cAAc,KAAK;AAClD,4BAAc,MAAM,QAAQ;AAE5B,oBAAM,YAAY,SAAS,aAAa;AACxC,oBAAM,YAAY,SAAS,KAAK,0BAA0B;;;AAIlE,iBAAO;QACX;AAEA,eAAA,eAAcA,aAAA,WAAA,cAAU;eAAxB,WAAA;AACI,mBAAO;UACX;;;;AAEA,QAAAA,aAAA,UAAA,kBAAA,WAAA;AACI,iBAAO;QACX;AAEA,QAAAA,aAAA,UAAA,QAAA,WAAA;AACI,cAAI,KAAK,uBAAuB;AAC5B,iBAAK,sBAAsB,MAAK;;QAExC;AAEA,QAAAA,aAAA,UAAA,QAAA,WAAA;AACI,cAAI,KAAK,YAAY;AACjB,mBAAO,KAAK,UAAU,KAAK;;AAG/B,iBAAO,KAAK,QAAQ,OAAO;QAC/B;AAEA,QAAAA,aAAA,UAAA,UAAA,WAAA;AACI,iBAAO,KAAK,wBACN,KAAK,sBAAsB,YAAY,KAAK,oBAC5C;QACV;AAEA,eAAA,eAAIA,aAAA,WAAA,SAAK;eAAT,WAAA;AACI,gBAAI,KAAK,uBAAuB;AAC5B,qBAAO,KAAK,sBAAsB,UAAU,KAAK,UAAU,KAAK;mBAC7D;AACH,qBAAO;;UAEf;;;;AAjKgB,QAAAA,aAAA,gBAAgB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,OAAO;AACzD,QAAAA,aAAA,gBAAgB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,OAAO;AACzD,QAAAA,aAAA,kBAAkB,IAAI,gBAAA,eAClC,gBAAA,SAAS,MACT,WACA,MACA,QACA,QACA,SAAC,QAA0B;AACvB,iBAAO;QACX,CAAC;AAEW,QAAAA,aAAA,mBAAmB,IAAI,gBAAA,eACnC,gBAAA,SAAS,MACT,YACA,MACA,QACA,SACA,SAAC,QAA0B;AACvB,iBAAO;QACX,CAAC;AAEW,QAAAA,aAAA,eAAe,IAAI,gBAAA,aAAa,gBAAA,SAAS,MAAM,QAAQ,KAAK;AAG5E,mBAAA;WADC,GAAA,gBAAA,UAASA,aAAY,aAAa;;AAInC,mBAAA;WADC,GAAA,gBAAA,UAASA,aAAY,aAAa;;AAInC,mBAAA;WADC,GAAA,gBAAA,UAASA,aAAY,eAAe;;AAIrC,mBAAA;WADC,GAAA,gBAAA,UAASA,aAAY,gBAAgB;;AAItC,mBAAA;WADC,GAAA,gBAAA,UAASA,aAAY,YAAY;;AA8HtC,eAAAA;QArKiC,KAAK;;AAAzB,YAAA,cAAA;AAuKb,QAAA;;MAAA,SAAA,QAAA;AAA4B,kBAAAC,SAAA,MAAA;AAkBxB,iBAAAA,QAAY,OAAgB,OAAc;AAA1C,cAAA,QACI,OAAA,KAAA,IAAA,KAAO;AAEP,gBAAK,QAAQ;AACb,gBAAK,QAAQ;;QACjB;AATU,QAAAA,QAAA,UAAA,eAAV,WAAA;AACI,iBAAO;QACX;AAbgB,QAAAA,QAAA,gBAAgB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,OAAO;AACzD,QAAAA,QAAA,gBAAgB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,OAAO;AAGzE,mBAAA;WADC,GAAA,gBAAA,UAASA,QAAO,aAAa;;AAI9B,mBAAA;WADC,GAAA,gBAAA,UAASA,QAAO,aAAa;;AAelC,eAAAA;QAxB4B,gBAAA,kBAAkB;;AAAjC,YAAA,SAAA;AA0Bb,QAAA;;MAAA,SAAA,QAAA;AAAoC,kBAAAC,iBAAA,MAAA;AAApC,iBAAAA,kBAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AAsCI,gBAAA,gBAAyB;AAMzB,gBAAA,OAAgB;AAGhB,gBAAA,UAAoB,CAAA;;QAqYxB;AAvZI,eAAA,eAAIA,gBAAA,WAAA,aAAS;eAAb,WAAA;AACI,mBAAO,CAAC,KAAK,SAAS,KAAK,UAAU;UACzC;eAEA,SAAc,OAAc;AACxB,iBAAK,QAAQ,QAAQ,SAAY;UACrC;;;;AAkBe,QAAAA,gBAAA,wBAAf,WAAA;AACI,cAAM,qBAAqB,kBAAkBA,gBAAe;AAE5D,UAAAA,gBAAe;AAEf,iBAAO;QACX;AASQ,QAAAA,gBAAA,UAAA,2BAAR,WAAA;AACI,cAAI,KAAK,gBAAgB;AACrB,gBAAM,UAAU,KAAK,eAAe;AAEpC,gBAAI,SAAS;AACT,uBAAqB,KAAA,GAAA,KAAA,MAAM,KAAK,OAAO,GAAlB,KAAA,GAAA,QAAA,MAAqB;AAArC,oBAAM,SAAM,GAAA,EAAA;AACb,oBAAI,OAAO,UAAU;AACjB,yBAAO,aAAa,gBAAgB,MAAM;uBACvC;AACH,yBAAO,gBAAgB,cAAc;;;;;QAKzD;AAEQ,QAAAA,gBAAA,UAAA,sBAAR,SACI,cACA,MACA,eAAmC;AAHvC,cAAA,QAAA;AAKI,cAAM,UAAU,SAAS,cAAc,KAAK;AAC5C,kBAAQ,YAAY,KAAK,WAAW,iBAAiB,YAAY,YAAY;AAC7E,kBAAQ,MAAM,QAAQ;AAEtB,kBAAQ,WAAW,KAAK,aAAY,IAAK,KAAK;AAE9C,eAAK,gBAAgB,CAAA;AACrB,eAAK,UAAU,CAAA;AAEf,mBAAqB,KAAA,GAAA,KAAA,KAAK,SAAL,KAAA,GAAA,QAAA,MAAc;AAA9B,gBAAM,SAAM,GAAA,EAAA;AACb,gBAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,kBAAM,KAAK,MAAM,iBAAgB;AACjC,kBAAM,OAAO;AACb,kBAAM,MAAM,SAAS;AACrB,kBAAM,MAAM,UAAU;AACtB,kBAAM,MAAM,gBAAgB;AAC5B,kBAAM,MAAM,OAAO;AACnB,kBAAM,OAAO,KAAK,KAAK,KAAK,KAAK,KAAK;AAEtC,gBAAI,KAAK,YAAY;AACjB,oBAAM,aAAa,iBAAiB,MAAM;;AAG9C,kBAAM,WAAW,KAAK,aAAY,IAAK,KAAK;AAE5C,gBAAI,OAAO,OAAO;AACd,oBAAM,QAAQ,OAAO;;AAGzB,gBAAI,OAAO,OAAO;AACd,oBAAM,aAAa,cAAc,OAAO,KAAK;;AAGjD,gBAAI,iBAAiB,OAAO,OAAO;AAC/B,kBAAI,cAAc,QAAQ,OAAO,KAAK,KAAK,GAAG;AAC1C,sBAAM,UAAU;;;AAIxB,kBAAM,WAAW,WAAA;AACb,oBAAK,aAAY;YACrB;AAEA,iBAAK,cAAc,KAAK,KAAK;AAE7B,gBAAM,gBAAgB,SAAS,cAAc,KAAK;AAClD,0BAAc,MAAM,UAAU;AAC9B,0BAAc,MAAM,aAAa;AAEjC,kBAAM,YAAY,eAAe,KAAK;AAEtC,gBAAM,QAAQ,IAAI,UAAS;AAC3B,kBAAM,UAAU,IAAI;AACpB,kBAAM,eAAe,MAAM;AAC3B,kBAAM,aAAa,KAAK;AACxB,kBAAM,OAAO,OAAO,QAAQ,OAAO,QAAQ,YAAY,KAAK,cAAc;AAC1E,kBAAM,cAAc,SAAA,eAAe;AACnC,kBAAM,OAAO,KAAK;AAElB,gBAAM,eAAe,MAAM,OAAM;AAEjC,iBAAK,QAAQ,KAAK,YAAY;AAE9B,gBAAI,cAAc;AACd,2BAAa,KAAK,MAAM,iBAAgB;AACxC,2BAAa,MAAM,UAAU;AAC7B,2BAAa,MAAM,OAAO;AAC1B,2BAAa,MAAM,aAAa;AAChC,2BAAa,MAAM,gBAAgB;AAEnC,kBAAM,gBAAgB,SAAS,cAAc,KAAK;AAClD,4BAAc,MAAM,QAAQ;AAE5B,oBAAM,YAAY,eAAe,aAAa;AAC9C,oBAAM,YAAY,eAAe,YAAY;;AAGjD,kBAAM,YAAY,SAAS,aAAa;;AAG5C,iBAAO;QACX;AAEU,QAAAA,gBAAA,UAAA,mCAAV,WAAA;AACI,eACK,KAAK,iBAAiB,KAAK,UAAU,eACtC,KAAK,iBACL,KAAK,SACP;AACE,gBAAM,WAAqB,KAAK,eAAc;AAE9C,qBAAS,IAAI,GAAG,IAAI,KAAK,cAAc,QAAQ,KAAK;AAChD,kBAAI,iBAAiB,SAAS,KAAK,GAAG;AACtC,kBAAM,QAAQ,KAAK,QAAQ,CAAC;AAE5B,kBAAI,SAAS,MAAM,IAAI;AACnB,kCAAkB,MAAM,MAAM;;AAGlC,kBAAI,gBAAgB;AAChB,qBAAK,cAAc,CAAC,EAAE,aAAa,mBAAmB,cAAc;qBACjE;AACH,qBAAK,cAAc,CAAC,EAAE,gBAAgB,iBAAiB;;;iBAG5D;AACH,mBAAA,UAAM,iCAAgC,KAAA,IAAA;;QAE9C;AAEU,QAAAA,gBAAA,UAAA,iBAAV,WAAA;AAAA,cAAA,QAAA;AACI,eAAK,sBAAsBA,gBAAe,sBAAqB;AAE/D,cAAI,KAAK,eAAe;AAEpB,mBAAO,KAAK,oBACR,iCACA,YACA,KAAK,eACC,KAAK,aAAa,MAAM,KAAK,WAAW,4BAA4B,IACpE,MAAS;iBAEhB;AACH,gBAAI,KAAK,UAAU,YAAY;AAE3B,qBAAO,KAAK,oBACR,8BACA,SACA,KAAK,eAAe,CAAC,KAAK,YAAY,IAAI,MAAS;uBAEhD,KAAK,UAAU,YAAY;AAElC,kBAAM,iBAAiB,SAAS,cAAc,KAAK;AACnD,6BAAe,MAAM,QAAQ;AAE7B,mBAAK,aAAa,SAAS,cAAc,OAAO;AAChD,mBAAK,WAAW,YAAY,KAAK,WAAW,iBACxC,YACA,uBACA,4BAA4B;AAEhC,mBAAK,WAAW,OAAO;AACvB,mBAAK,WAAW,MAAM,QAAQ;AAC9B,mBAAK,WAAW,UAAU,WAAA;AACtB,sBAAK,aAAY;AAEjB,oBAAI,MAAK,YAAY;AAGjB,sBAAI,MAAK,OAAO;AACZ,0BAAK,WAAW,gBAAgB,aAAa;AAC7C,0BAAK,WAAW,gBAAgB,YAAY;6BACrC,MAAK,aAAa;AACzB,0BAAK,WAAW,cAAc,MAAK;AACnC,0BAAK,WAAW,aAAa,cAAc,MAAK,WAAW;;;cAGvE;AAEA,kBAAI,KAAK,cAAc;AACnB,qBAAK,WAAW,QAAQ,KAAK;;AAGjC,kBAAI,KAAK,eAAe,CAAC,KAAK,WAAW,OAAO;AAC5C,qBAAK,WAAW,cAAc,KAAK;AACnC,qBAAK,WAAW,aAAa,cAAc,KAAK,WAAW;;AAG/D,mBAAK,WAAW,WAAW,KAAK,aAAY,IAAK,KAAK;AAEtD,kBAAM,WAAW,SAAS,cAAc,UAAU;AAClD,uBAAS,KAAK,MAAM,iBAAgB;AAEpC,uBAAqB,KAAA,GAAA,KAAA,KAAK,SAAL,KAAA,GAAA,QAAA,MAAc;AAA9B,oBAAM,SAAM,GAAA,EAAA;AACb,oBAAM,SAAS,SAAS,cAAc,QAAQ;AAG9C,oBAAI,OAAO,OAAO;AACd,yBAAO,QAAQ,OAAO;AACtB,yBAAO,aAAa,cAAc,OAAO,KAAK;;AAGlD,uBAAO,WAAW,KAAK,aAAY,IAAK,KAAK;AAE7C,yBAAS,YAAY,MAAM;;AAG/B,mBAAK,WAAW,aAAa,QAAQ,SAAS,EAAE;AAEhD,6BAAe,OAAO,KAAK,YAAY,QAAQ;AAE/C,qBAAO;mBACJ;AAEH,mBAAK,iBAAiB,SAAS,cAAc,QAAQ;AACrD,mBAAK,eAAe,YAAY,KAAK,WAAW,iBAC5C,YACA,uBACA,2BAA2B;AAE/B,mBAAK,eAAe,MAAM,QAAQ;AAElC,mBAAK,eAAe,WAAW,KAAK,aAAY,IAAK,KAAK;AAE1D,kBAAM,oBAAoB,SAAS,cAAc,QAAQ;AACzD,gCAAkB,WAAW;AAC7B,gCAAkB,WAAW;AAC7B,gCAAkB,SAAS;AAC3B,gCAAkB,QAAQ;AAE1B,kBAAI,KAAK,aAAa;AAClB,kCAAkB,OAAO,KAAK;;AAGlC,oBAAM,YAAY,KAAK,gBAAgB,iBAAiB;AAExD,uBAAqB,KAAA,GAAA,KAAA,KAAK,SAAL,KAAA,GAAA,QAAA,MAAc;AAA9B,oBAAM,SAAM,GAAA,EAAA;AACb,oBAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,uBAAO,QAAQ,OAAO;AAEtB,oBAAI,OAAO,OAAO;AACd,yBAAO,OAAO,OAAO;AACrB,yBAAO,aAAa,cAAc,OAAO,KAAK;;AAGlD,uBAAO,WAAW,KAAK,aAAY,IAAK,KAAK;AAE7C,oBAAI,OAAO,UAAU,KAAK,cAAc;AACpC,yBAAO,WAAW;;AAGtB,sBAAM,YAAY,KAAK,gBAAgB,MAAM;;AAGjD,mBAAK,eAAe,WAAW,WAAA;AAC3B,sBAAK,yBAAwB;AAC7B,sBAAK,aAAY;cACrB;AAEA,mBAAK,yBAAwB;AAE7B,qBAAO,KAAK;;;QAGxB;AAEA,QAAAA,gBAAA,UAAA,kBAAA,WAAA;AACI,iBAAO;QACX;AAEA,QAAAA,gBAAA,UAAA,QAAA,WAAA;AACI,cAAI,KAAK,kBAAkB,KAAK,iBAAiB,KAAK,UAAU,aAAa;AACzE,gBAAI,KAAK,cAAc,SAAS,GAAG;AAC/B,mBAAK,cAAc,CAAC,EAAE,MAAK;;qBAExB,KAAK,YAAY;AACxB,iBAAK,WAAW,MAAK;iBAClB;AACH,mBAAA,UAAM,MAAK,KAAA,IAAA;;QAEnB;AAEA,QAAAA,gBAAA,UAAA,6BAAA,SAA2B,SAA0B;AACjD,iBAAA,UAAM,2BAA0B,KAAA,MAAC,OAAO;AAExC,cAAI,KAAK,QAAQ,WAAW,GAAG;AAC3B,oBAAQ,WACJ,MACA,MAAM,gBAAgB,uBACtB,UAAA,QAAQ,OAAO,kCAAiC,CAAE;;AAI1D,mBAAqB,KAAA,GAAA,KAAA,KAAK,SAAL,KAAA,GAAA,QAAA,MAAc;AAA9B,gBAAM,SAAM,GAAA,EAAA;AACb,gBAAI,CAAC,OAAO,SAAS,CAAC,OAAO,OAAO;AAChC,sBAAQ,WACJ,MACA,MAAM,gBAAgB,oBACtB,UAAA,QAAQ,OAAO,sCAAqC,CAAE;;;QAItE;AAEA,QAAAA,gBAAA,UAAA,QAAA,WAAA;AACI,iBAAO,KAAK,QAAQ,OAAO;QAC/B;AAEA,QAAAA,gBAAA,UAAA,UAAA,WAAA;AACI,cAAI,KAAK,YAAY;AACjB,gBAAI,KAAK,UAAU,MAAM,KAAK,UAAU,KAAK,aAAa;AACtD,qBAAO;;AAEX,qBAAqB,KAAA,GAAA,KAAA,KAAK,SAAL,KAAA,GAAA,QAAA,MAAc;AAA9B,kBAAM,SAAM,GAAA,EAAA;AACb,kBAAI,KAAK,UAAU,OAAO,OAAO;AAC7B,uBAAO;;;AAIf,mBAAO;;AAGX,iBAAO,OAAA,UAAM,QAAO,KAAA,IAAA;QACxB;AAEA,eAAA,eAAIA,gBAAA,WAAA,SAAK;eAAT,WAAA;AACI,gBAAI,CAAC,KAAK,eAAe;AACrB,kBAAI,KAAK,gBAAgB;AACrB,uBAAO,KAAK,eAAe,gBAAgB,IACrC,KAAK,eAAe,QACpB;yBACC,KAAK,YAAY;AACxB,yBAAqB,KAAA,GAAA,KAAA,KAAK,SAAL,KAAA,GAAA,QAAA,MAAc;AAA9B,sBAAM,SAAM,GAAA,EAAA;AACb,sBAAI,OAAO,SAAS,KAAK,WAAW,UAAU,OAAO,OAAO;AACxD,2BAAO,OAAO;;;AAGtB,uBAAO,KAAK,WAAW;yBAChB,KAAK,iBAAiB,KAAK,cAAc,SAAS,GAAG;AAC5D,yBAA0B,KAAA,GAAA,KAAA,KAAK,eAAL,KAAA,GAAA,QAAA,MAAoB;AAAzC,sBAAM,cAAW,GAAA,EAAA;AAClB,sBAAI,YAAY,SAAS;AACrB,2BAAO,YAAY;;;;AAK/B,qBAAO;mBACJ;AACH,kBAAI,CAAC,KAAK,iBAAiB,KAAK,cAAc,WAAW,GAAG;AACxD,uBAAO;;AAGX,kBAAI,SAAiB;AAErB,uBAA0B,KAAA,GAAA,KAAA,KAAK,eAAL,KAAA,GAAA,QAAA,MAAoB;AAAzC,oBAAM,cAAW,GAAA,EAAA;AAClB,oBAAI,YAAY,SAAS;AACrB,sBAAI,WAAW,IAAI;AACf,8BAAU,KAAK,WAAW;;AAG9B,4BAAU,YAAY;;;AAI9B,qBAAO,SAAS,SAAS;;UAEjC;;;;AAhbgB,QAAAA,gBAAA,gBAAgB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,OAAO;AACzD,QAAAA,gBAAA,kBAAkB,IAAI,gBAAA,qCAClC,gBAAA,SAAS,MACT,WACA,MAAM;AAEM,QAAAA,gBAAA,gBAAgB,IAAI,gBAAA,iBAChC,gBAAA,SAAS,MACT,SACA;UACI,EAAE,OAAO,UAAS;UAClB,EAAE,OAAO,WAAU;UACnB,EAAE,OAAO,YAAY,eAAe,gBAAA,SAAS,KAAI;WAErD,SAAS;AAEG,QAAAA,gBAAA,wBAAwB,IAAI,gBAAA,aAAa,gBAAA,SAAS,MAAM,iBAAiB,KAAK;AAC9E,QAAAA,gBAAA,sBAAsB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,aAAa;AACrE,QAAAA,gBAAA,eAAe,IAAI,gBAAA,aAAa,gBAAA,SAAS,MAAM,QAAQ,KAAK;AA8B7D,QAAAA,gBAAA,yBAAyB;AA3BxC,mBAAA;WADC,GAAA,gBAAA,UAASA,gBAAe,aAAa;;AAItC,mBAAA;WADC,GAAA,gBAAA,UAASA,gBAAe,aAAa;;AAYtC,mBAAA;WADC,GAAA,gBAAA,UAASA,gBAAe,qBAAqB;;AAI9C,mBAAA;WADC,GAAA,gBAAA,UAASA,gBAAe,mBAAmB;;AAI5C,mBAAA;WADC,GAAA,gBAAA,UAASA,gBAAe,YAAY;;AAIrC,mBAAA;WADC,GAAA,gBAAA,UAASA,gBAAe,eAAe;;AAsY5C,eAAAA;QApboC,KAAK;;AAA5B,YAAA,iBAAA;AAsbb,QAAA;;MAAA,SAAA,QAAA;AAAiC,kBAAAC,cAAA,MAAA;AAAjC,iBAAAA,eAAA;;QA+FA;AAvEc,QAAAA,aAAA,UAAA,iBAAV,WAAA;AAAA,cAAA,QAAA;AACI,eAAK,sBAAsB,SAAS,cAAc,OAAO;AACzD,eAAK,oBAAoB,aAAa,QAAQ,QAAQ;AAEtD,cAAI,KAAK,QAAQ,QAAW;AACxB,iBAAK,oBAAoB,aAAa,OAAO,KAAK,IAAI,SAAQ,CAAE;;AAGpE,cAAI,KAAK,QAAQ,QAAW;AACxB,iBAAK,oBAAoB,aAAa,OAAO,KAAK,IAAI,SAAQ,CAAE;;AAGpE,eAAK,oBAAoB,YAAY,KAAK,WAAW,iBACjD,YACA,gBAAgB;AAEpB,eAAK,oBAAoB,MAAM,QAAQ;AAEvC,eAAK,oBAAoB,WAAW,KAAK,aAAY,IAAK,KAAK;AAE/D,cAAI,KAAK,iBAAiB,QAAW;AACjC,iBAAK,oBAAoB,gBAAgB,KAAK;;AAGlD,cAAI,KAAK,aAAa;AAClB,iBAAK,oBAAoB,cAAc,KAAK;AAC5C,iBAAK,oBAAoB,aAAa,cAAc,KAAK,WAAW;;AAGxE,eAAK,oBAAoB,UAAU,WAAA;AAC/B,kBAAK,aAAY;UACrB;AAEA,iBAAO,KAAK;QAChB;AAEA,QAAAA,aAAA,UAAA,kBAAA,WAAA;AACI,iBAAO;QACX;AAEA,QAAAA,aAAA,UAAA,QAAA,WAAA;AACI,iBAAO,KAAK,UAAU,UAAa,CAAC,MAAM,KAAK,KAAK;QACxD;AAEA,QAAAA,aAAA,UAAA,UAAA,WAAA;AACI,cAAI,KAAK,UAAU,QAAW;AAC1B,mBAAO,CAAC,KAAK;;AAGjB,cAAI,SAAS;AAEb,cAAI,KAAK,QAAQ,QAAW;AACxB,qBAAS,UAAU,KAAK,SAAS,KAAK;;AAG1C,cAAI,KAAK,QAAQ,QAAW;AACxB,qBAAS,UAAU,KAAK,SAAS,KAAK;;AAG1C,iBAAO;QACX;AAEA,eAAA,eAAIA,aAAA,WAAA,SAAK;eAAT,WAAA;AACI,mBAAO,KAAK,sBAAsB,KAAK,oBAAoB,gBAAgB;UAC/E;eAEA,SAAU,OAAyB;AAC/B,gBAAI,SAAS,KAAK,qBAAqB;AACnC,mBAAK,oBAAoB,QAAQ,MAAM,SAAQ;;UAEvD;;;;AA3FgB,QAAAA,aAAA,gBAAgB,IAAI,gBAAA,YAAY,gBAAA,SAAS,MAAM,OAAO;AACtD,QAAAA,aAAA,sBAAsB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,aAAa;AACrE,QAAAA,aAAA,cAAc,IAAI,gBAAA,YAAY,gBAAA,SAAS,MAAM,KAAK;AAClD,QAAAA,aAAA,cAAc,IAAI,gBAAA,YAAY,gBAAA,SAAS,MAAM,KAAK;AAGlE,mBAAA;WADC,GAAA,gBAAA,UAASA,aAAY,aAAa;;AAInC,mBAAA;WADC,GAAA,gBAAA,UAASA,aAAY,WAAW;;AAIjC,mBAAA;WADC,GAAA,gBAAA,UAASA,aAAY,WAAW;;AAIjC,mBAAA;WADC,GAAA,gBAAA,UAASA,aAAY,mBAAmB;;AA8E7C,eAAAA;QA/FiC,KAAK;;AAAzB,YAAA,cAAA;AAiGb,QAAA;;MAAA,SAAA,QAAA;AAA+B,kBAAAC,YAAA,MAAA;AAA/B,iBAAAA,aAAA;;QA+FA;AAvEc,QAAAA,WAAA,UAAA,iBAAV,WAAA;AAAA,cAAA,QAAA;AACI,eAAK,oBAAoB,SAAS,cAAc,OAAO;AACvD,eAAK,kBAAkB,aAAa,QAAQ,MAAM;AAElD,cAAI,KAAK,KAAK;AACV,iBAAK,kBAAkB,aAAa,OAAO,KAAK,GAAG;;AAGvD,cAAI,KAAK,KAAK;AACV,iBAAK,kBAAkB,aAAa,OAAO,KAAK,GAAG;;AAGvD,cAAI,KAAK,aAAa;AAClB,iBAAK,kBAAkB,cAAc,KAAK;AAC1C,iBAAK,kBAAkB,aAAa,cAAc,KAAK,WAAW;;AAGtE,eAAK,kBAAkB,WAAW,KAAK,aAAY,IAAK,KAAK;AAE7D,eAAK,kBAAkB,YAAY,KAAK,WAAW,iBAC/C,YACA,cAAc;AAElB,eAAK,kBAAkB,MAAM,QAAQ;AAErC,eAAK,kBAAkB,UAAU,WAAA;AAC7B,kBAAK,aAAY;UACrB;AAEA,cAAI,KAAK,cAAc;AACnB,iBAAK,kBAAkB,QAAQ,KAAK;;AAGxC,iBAAO,KAAK;QAChB;AAEA,QAAAA,WAAA,UAAA,kBAAA,WAAA;AACI,iBAAO;QACX;AAEA,QAAAA,WAAA,UAAA,QAAA,WAAA;AACI,iBAAO,KAAK,QAAQ,OAAO;QAC/B;AAEA,QAAAA,WAAA,UAAA,UAAA,WAAA;AACI,cAAI,CAAC,KAAK,OAAO;AACb,mBAAO,CAAC,KAAK;;AAGjB,cAAM,cAAc,IAAI,KAAK,KAAK,KAAK;AAEvC,cAAI,SAAS;AAEb,cAAI,KAAK,KAAK;AACV,gBAAM,UAAU,IAAI,KAAK,KAAK,GAAG;AAEjC,qBAAS,UAAU,eAAe;;AAGtC,cAAI,KAAK,KAAK;AACV,gBAAM,UAAU,IAAI,KAAK,KAAK,GAAG;AAEjC,qBAAS,UAAU,eAAe;;AAGtC,iBAAO;QACX;AAEA,eAAA,eAAIA,WAAA,WAAA,SAAK;eAAT,WAAA;AACI,mBAAO,KAAK,oBAAoB,KAAK,kBAAkB,QAAQ;UACnE;;;;AA3FgB,QAAAA,WAAA,gBAAgB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,OAAO;AACzD,QAAAA,WAAA,sBAAsB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,aAAa;AACrE,QAAAA,WAAA,cAAc,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,KAAK;AACrD,QAAAA,WAAA,cAAc,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,KAAK;AAGrE,mBAAA;WADC,GAAA,gBAAA,UAASA,WAAU,aAAa;;AAIjC,mBAAA;WADC,GAAA,gBAAA,UAASA,WAAU,WAAW;;AAI/B,mBAAA;WADC,GAAA,gBAAA,UAASA,WAAU,WAAW;;AAI/B,mBAAA;WADC,GAAA,gBAAA,UAASA,WAAU,mBAAmB;;AA8E3C,eAAAA;QA/F+B,KAAK;;AAAvB,YAAA,YAAA;AAiGb,QAAA;;MAAA,SAAA,QAAA;AAAkC,kBAAAC,eAAA,MAAA;AAC9B,iBAAAA,cAAqB,eAAiC,MAAY;AAAlE,cAAA,QACI,OAAA,KAAA,MACI,eACA,MACA,SACI,QACA,MACA,QACA,SAAiC;AAEjC,gBAAM,QAAQ,OAAO,KAAK,IAAI;AAE9B,gBAAI,OAAO,UAAU,YAAY,SAAS,sBAAsB,KAAK,KAAK,GAAG;AACzE,qBAAO;;AAGX,mBAAO;UACX,GACA,SACI,QACA,MACA,QACA,OACA,SAAiC;AAEjC,oBAAQ,eAAe,QAAQ,KAAK,MAAM,KAAK;UACnD,CAAC,KACJ;AA3BgB,gBAAA,gBAAA;AAAiC,gBAAA,OAAA;;QA4BtD;AACJ,eAAAA;MAAA,EA9BkC,gBAAA,cAAc;;AAAnC,YAAA,eAAA;AAgCb,QAAA;;MAAA,SAAA,QAAA;AAA+B,kBAAAC,YAAA,MAAA;AAA/B,iBAAAA,aAAA;;QAkGA;AAjGmB,QAAAA,WAAA,0BAAf,SAAuC,YAAkB;AACrD,iBAAO,oBAAI,KAAK,gBAAgB,aAAa,MAAM;QACvD;AAyBU,QAAAA,WAAA,UAAA,iBAAV,WAAA;AAAA,cAAA,QAAA;AACI,eAAK,oBAAoB,SAAS,cAAc,OAAO;AACvD,eAAK,kBAAkB,aAAa,QAAQ,MAAM;AAElD,cAAI,KAAK,KAAK;AACV,iBAAK,kBAAkB,aAAa,OAAO,KAAK,GAAG;;AAGvD,cAAI,KAAK,KAAK;AACV,iBAAK,kBAAkB,aAAa,OAAO,KAAK,GAAG;;AAGvD,eAAK,kBAAkB,YAAY,KAAK,WAAW,iBAC/C,YACA,cAAc;AAElB,eAAK,kBAAkB,MAAM,QAAQ;AACrC,eAAK,kBAAkB,UAAU,WAAA;AAC7B,kBAAK,aAAY;UACrB;AAEA,cAAI,KAAK,aAAa;AAClB,iBAAK,kBAAkB,cAAc,KAAK;AAC1C,iBAAK,kBAAkB,aAAa,cAAc,KAAK,WAAW;;AAGtE,eAAK,kBAAkB,WAAW,KAAK,aAAY,IAAK,KAAK;AAE7D,cAAI,KAAK,cAAc;AACnB,iBAAK,kBAAkB,QAAQ,KAAK;;AAGxC,iBAAO,KAAK;QAChB;AAEA,QAAAA,WAAA,UAAA,kBAAA,WAAA;AACI,iBAAO;QACX;AAEA,QAAAA,WAAA,UAAA,QAAA,WAAA;AACI,iBAAO,KAAK,QAAQ,OAAO;QAC/B;AAEA,QAAAA,WAAA,UAAA,UAAA,WAAA;AACI,cAAI,CAAC,KAAK,OAAO;AACb,mBAAO,CAAC,KAAK;;AAGjB,cAAM,cAAcA,WAAU,wBAAwB,KAAK,KAAK;AAEhE,cAAI,SAAS;AAEb,cAAI,KAAK,KAAK;AACV,gBAAM,UAAUA,WAAU,wBAAwB,KAAK,GAAG;AAE1D,qBAAS,UAAU,eAAe;;AAGtC,cAAI,KAAK,KAAK;AACV,gBAAM,UAAUA,WAAU,wBAAwB,KAAK,GAAG;AAE1D,qBAAS,UAAU,eAAe;;AAGtC,iBAAO;QACX;AAEA,eAAA,eAAIA,WAAA,WAAA,SAAK;eAAT,WAAA;AACI,mBAAO,KAAK,oBAAoB,KAAK,kBAAkB,QAAQ;UACnE;;;;AA1FgB,QAAAA,WAAA,gBAAgB,IAAI,aAAa,gBAAA,SAAS,MAAM,OAAO;AACvD,QAAAA,WAAA,sBAAsB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,aAAa;AACrE,QAAAA,WAAA,cAAc,IAAI,aAAa,gBAAA,SAAS,MAAM,KAAK;AACnD,QAAAA,WAAA,cAAc,IAAI,aAAa,gBAAA,SAAS,MAAM,KAAK;AAGnE,mBAAA;WADC,GAAA,gBAAA,UAASA,WAAU,aAAa;;AAIjC,mBAAA;WADC,GAAA,gBAAA,UAASA,WAAU,WAAW;;AAI/B,mBAAA;WADC,GAAA,gBAAA,UAASA,WAAU,WAAW;;AAI/B,mBAAA;WADC,GAAA,gBAAA,UAASA,WAAU,mBAAmB;;AA6E3C,eAAAA;QAlG+B,KAAK;;AAAvB,YAAA,YAAA;AA4Gb,QAAA;;MAAA,SAAA,QAAA;AAAqC,kBAAAC,SAAA,MAAA;AAArC,iBAAAA,UAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AA+BI,gBAAA,QAAgB,MAAM,YAAY;AAGlC,gBAAA,OAAe,MAAM,WAAW;AAyExB,gBAAA,SAAM;AAEN,gBAAA,eAAwB;;QAiSpC;AAlWY,QAAAA,QAAA,UAAA,sBAAR,WAAA;AACI,cAAI,KAAK,iBAAiB;AAEtB,gBAAM,aAAa,KAAK;AAExB,gBAAM,eAAe,SAAS,cAAc,KAAK;AACjD,yBAAa,MAAM,WAAW;AAC9B,yBAAa,MAAM,eAAe;AAElC,gBACI,EACI,WAAW,QAAQ,kBAAkB,MAAM,oBAAoB,cAC/D,WAAW,QAAQ,mBAEzB;AACE,2BAAa,MAAM,aAAa;;AAGpC,gBAAI,KAAK,OAAO;AACZ,2BAAa,YAAY,KAAK;;AAGlC,gBAAI,CAAC,KAAK,SAAS;AACf,mBAAK,gBAAgB,UAAU,IAAI,QAAQ;AAC3C,mBAAK,gBAAgB,YAAY,YAAY;mBAC1C;AACH,kBAAM,cAAc,SAAS,cAAc,KAAK;AAChD,0BAAY,MAAM,KAAK;AACvB,0BAAY,MAAM,QAAQ,WAAW,QAAQ,WAAW;AACxD,0BAAY,MAAM,SAAS,WAAW,QAAQ,WAAW;AACzD,0BAAY,MAAM,OAAO;AAEzB,kBAAI,WAAW,QAAQ,kBAAkB,MAAM,oBAAoB,YAAY;AAC3E,qBAAK,gBAAgB,UAAU,IAAI,WAAW;AAC9C,qBAAK,gBAAgB,MAAM,gBAAgB;AAE3C,oBAAI,KAAK,OAAO;AACZ,8BAAY,MAAM,eAAe;;qBAElC;AACH,qBAAK,gBAAgB,UAAU,IAAI,UAAU;AAE7C,4BAAY,MAAM,YAAY;AAE9B,oBAAI,KAAK,OAAO;AACZ,8BAAY,MAAM,cAAc;;;AAIxC,mBAAK,gBAAgB,YAAY,WAAW;AAC5C,mBAAK,gBAAgB,YAAY,YAAY;;;QAGzD;AAEQ,QAAAA,QAAA,UAAA,qBAAR,WAAA;AACI,cAAI,KAAK,kBAAkB,WAAW;AAClC,mBAAO,KAAK;;AAGhB,iBAAO,KAAK,SAAS,KAAK,OAAO,mBAAkB,IAAK;QAC5D;AAMA,QAAAA,QAAA,UAAA,eAAA,WAAA;AACI,cAAM,cAAc,KAAK,cAAa;AAEtC,iBAAO,uBAAuB,eAAe,YAAY,aAAY;QACzE;AAEU,QAAAA,QAAA,UAAA,mBAAV,WAAA;;AACI,cAAI,KAAK,UAAU,KAAK,iBAAiB;AACrC,gBAAM,aAAa,KAAK,OAAO;AAE/B,iBAAK,gBAAgB,YAAY,WAAW,iBACxC,KAAK,qBAAoB,IAAK,kBAAkB,wBAAwB;AAG5E,gBAAM,kBAAkB,KAAK,mBAAkB;AAE/C,gBAAI,iBAAiB;AACjB,kBAAM,uBAAuB,gBAAgB,kBAAiB;AAE9D,kBAAI,sBAAsB;AACtB,qBAAK,gBAAgB,UAAU,IAAI,WAAW,oBAAoB;;;AAI1E,iBAAK,gBAAgB,WAAW,CAAC,KAAK,aAAY,KAAM,KAAK,cAAc,IAAI;AAE/E,oBAAQ,KAAK,QAAQ;cACjB,KAAA;AAEI;cAEJ,KAAA;AACI,qBAAK,gBAAgB,UAAU,IAAI,WAAW,iBAAiB,UAAU,CAAC;AAC1E;cACJ,KAAA;AACI,qBAAK,gBAAgB,UAAU,IAAI,WAAW,iBAAiB,SAAS,CAAC;AACzE;;AAGR,gBAAI,KAAK,SAAS,KAAK,qBAAoB,GAAI;AAC3C,kBAAI,KAAK,UAAU,MAAM,YAAY,UAAU;AAC3C,iBAAA,KAAA,KAAK,gBAAgB,WAAU,IAAG,MAAA,IAC3B,WAAW,kBAAkB,WAAW,gBAAgB,CAAC;qBAE7D;AACH,iBAAA,KAAA,KAAK,gBAAgB,WAAU,IAAG,MAAA,IAC3B,WAAW,kBAAkB,WAAW,KAAK,MAAM,YAAW,CAAE,CAAC;;;;QAKxF;AAEU,QAAAA,QAAA,UAAA,iCAAV,WAAA;AACI,iBAAO,IAAI,qBAAoB;QACnC;AAEU,QAAAA,QAAA,UAAA,8BAAV,WAAA;AACI,iBAAO,CAAA;QACX;AAEU,QAAAA,QAAA,UAAA,8BAAV,SAAsC,SAAsC;QAE5E;AAEU,QAAAA,QAAA,UAAA,yBAAV,SAAiC,kBAA+C;AAC5E,cAAM,SAAkB,CAAA;AAExB,cAAI,kBAAkB;AAClB,qBAAkB,KAAA,GAAA,KAAA,OAAO,KAAK,gBAAgB,GAA5B,KAAA,GAAA,QAAA,MAA+B;AAA5C,kBAAM,MAAG,GAAA,EAAA;AACV,kBAAM,QAAQ,iBAAiB,GAAG;AAElC,kBAAI,CAAC,MAAM,cAAa,GAAI;AACxB,uBAAO,KAAK,KAAK;;;;AAK7B,iBAAO;QACX;AAEU,QAAAA,QAAA,UAAA,kBAAV,SAA0B,SAA6B;AACnD,iBAAO,QAAQ,eAAe,WAAW,KAAK,gBAAe,CAAE,MAAM;QACzE;AAEU,QAAAA,QAAA,UAAA,0BAAV,WAAA;AACI,cAAI,KAAK,WAAW;AAChB,iBAAK,UAAU,IAAI;;AAGvB,kCAAwB,IAAI;QAChC;AAEU,QAAAA,QAAA,UAAA,uBAAV,WAAA;AACI,cAAI,aAAa,KAAK,cAAa;AAEnC,cAAI,sBAAsB,aAAa;AACnC,uBAAW,0BAAyB;;QAE5C;AAIA,QAAAA,QAAA,UAAA,UAAA,WAAA;AACI,iBAAO;QACX;AAEA,QAAAA,QAAA,UAAA,cAAA,WAAA;AACI,iBAAO;QACX;AAEA,QAAAA,QAAA,UAAA,+BAAA,SAA6B,SAAsB,uBAAsC;AAAtC,cAAA,0BAAA,QAAA;AAAA,oCAAA;UAAsC;AACrF,kBAAQ,WAAW,KAAK,qBAAoB,KAAM,CAAC,KAAK,aAAY,IAAK,IAAI;AAE7E,kBAAQ,aAAa,QAAQ,KAAK,YAAW,CAAE;AAE/C,cAAI,mBAAmB,mBAAmB;AACtC,oBAAQ,WAAW,CAAC,KAAK,qBAAoB;;AAGjD,cAAI,CAAC,KAAK,qBAAoB,GAAI;AAC9B,oBAAQ,aAAa,iBAAiB,MAAM;iBACzC;AACH,oBAAQ,gBAAgB,eAAe;AACvC,oBAAQ,UAAU,IAAI,KAAK,WAAW,iBAAiB,eAAe,CAAC;;AAG3E,cAAI,KAAK,OAAO;AACZ,oBAAQ,aAAa,cAAc,KAAK,KAAK;AAC7C,oBAAQ,QAAQ,KAAK;iBAClB;AACH,oBAAQ,gBAAgB,YAAY;AACpC,oBAAQ,gBAAgB,OAAO;;AAGnC,cAAI,KAAK,SAAS;AACd,gBAAM,sBAAsB,wBACtB,KAAK,QACD,qBACA,eACJ;AAEN,oBAAQ,aAAa,qBAAqB,KAAK,OAAO;AACtD,oBAAQ,QAAQ,KAAK;;QAE7B;AAEA,QAAAA,QAAA,UAAA,QAAA,SAAM,QAAa,SAA8B;AAC7C,iBAAO,OAAA,UAAM,MAAK,KAAA,MAAC,QAAQ,UAAU,UAAU,IAAI,qBAAoB,CAAE;QAC7E;AAEA,QAAAA,QAAA,UAAA,SAAA,WAAA;AAAA,cAAA,QAAA;AACI,cAAM,gBAAgB,SAAS,cAAc,QAAQ;AACrD,wBAAc,OAAO;AACrB,wBAAc,MAAM,UAAU;AAC9B,wBAAc,MAAM,aAAa;AACjC,wBAAc,MAAM,iBAAiB;AACrC,wBAAc,UAAU,SAAC,GAAC;AACtB,gBAAI,MAAK,qBAAoB,GAAI;AAC7B,gBAAE,eAAc;AAChB,gBAAE,eAAe;AAEjB,oBAAK,QAAO;;UAEpB;AAEA,eAAK,mBAAmB;AAExB,eAAK,oBAAmB;AACxB,eAAK,iBAAgB;AACrB,eAAK,6BAA6B,aAAa;QACnD;AAEA,QAAAA,QAAA,UAAA,UAAA,WAAA;AACI,cAAI,KAAK,mBAAmB;AACxB,iBAAK,kBAAkB,eAAe,IAAI;;AAG9C,eAAK,wBAAuB;AAC5B,eAAK,qBAAoB;QAC7B;AAEA,QAAAA,QAAA,UAAA,sBAAA,WAAA;AACI,cAAM,mBAAmB,KAAK,oBAAmB;AACjD,cAAM,gBAAgB,KAAK,uBAAuB,gBAAgB;AAElE,cAAI,cAAc,SAAS,GAAG;AAC1B,0BAAc,CAAC,EAAE,MAAK;AAEtB,mBAAO;;AAGX,eAAK,4BAA4B,gBAAgB;AAEjD,iBAAO;QACX;AAEA,QAAAA,QAAA,UAAA,SAAA,WAAA;AACI,cAAI,KAAK,mBAAmB;AACxB,mBAAO,KAAK,kBAAkB,aAAa,IAAI;;AAGnD,iBAAO;QACX;AAEA,QAAAA,QAAA,UAAA,eAAA,SAAa,gBAA8B;AAA9B,cAAA,mBAAA,QAAA;AAAA,6BAAA;UAA8B;AACvC,iBAAO,CAAA;QACX;AAEA,QAAAA,QAAA,UAAA,gBAAA,WAAA;AACI,iBAAO,CAAC,IAAI;QAChB;AAEA,QAAAA,QAAA,UAAA,yBAAA,WAAA;AACI,iBAAO,KAAK,UAAU,CAAC,EAAE,KAAK,KAAK,SAAS,UAAU,QAAO,CAAE,IAAI,CAAA;QACvE;AAEA,QAAAA,QAAA,UAAA,gBAAA,SAAc,IAAU;AACpB,iBAAO,KAAK,OAAO,KAAK,OAAO;QACnC;AAEA,QAAAA,QAAA,UAAA,sBAAA,WAAA;AACI,iBAAO,KAAK,4BAA2B;QAC3C;AAOA,QAAAA,QAAA,UAAA,iBAAA,WAAA;AACI,iBAAO,KAAK,uBAAuB,KAAK,oBAAmB,CAAE;QACjE;AAEA,QAAAA,QAAA,UAAA,qBAAA,WAAA;QAEA;AAEA,QAAAA,QAAA,UAAA,uBAAA,WAAA;AACI,iBAAO,KAAK;QAChB;AAEA,eAAA,eAAIA,QAAA,WAAA,aAAS;eAAb,WAAA;AACI,mBAAO,KAAK,UAAU,MAAM,YAAY;UAC5C;eAEA,SAAc,OAAc;AACxB,gBAAI,OAAO;AACP,mBAAK,QAAQ,MAAM,YAAY;mBAC5B;AACH,kBAAI,KAAK,UAAU,MAAM,YAAY,UAAU;AAC3C,qBAAK,QAAQ,MAAM,YAAY;;;UAG3C;;;;AAEA,eAAA,eAAIA,QAAA,WAAA,cAAU;eAAd,WAAA;AACI,mBAAO,KAAK,SAAS,KAAK,OAAO,aAAa,cAAA;UAClD;;;;AAEA,eAAA,eAAIA,QAAA,WAAA,UAAM;eAAV,WAAA;AACI,mBAAoB,KAAK;UAC7B;;;;AAEA,eAAA,eAAIA,QAAA,WAAA,SAAK;eAAT,WAAA;AACI,mBAAO,KAAK;UAChB;eAEA,SAAU,OAAwB;AAC9B,gBAAI,KAAK,WAAW,OAAO;AACvB,mBAAK,SAAS;AAEd,mBAAK,iBAAgB;;UAE7B;;;;AAEA,eAAA,eAAIA,QAAA,WAAA,eAAW;eAAf,WAAA;AACI,mBAAO,KAAK;UAChB;eAEA,SAAgB,OAAc;AAC1B,gBAAI,KAAK,iBAAiB,OAAO;AAC7B,mBAAK,eAAe;AAEpB,mBAAK,iBAAgB;;UAE7B;;;;AA1YgB,QAAAA,QAAA,gBAAgB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,OAAO;AACzD,QAAAA,QAAA,kBAAkB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,SAAS;AAC7D,QAAAA,QAAA,gBAAgB,IAAI,gBAAA,iBAChC,gBAAA,SAAS,MACT,SACA;UACI,EAAE,OAAO,MAAM,YAAY,QAAO;UAClC,EAAE,OAAO,MAAM,YAAY,SAAQ;UACnC,EAAE,OAAO,MAAM,YAAY,YAAW;WAE1C,MAAM,YAAY,OAAO;AAEb,QAAAA,QAAA,eAAe,IAAI,gBAAA,iBAC/B,gBAAA,SAAS,MACT,QACA,CAAC,EAAE,OAAO,MAAM,WAAW,QAAO,GAAI,EAAE,OAAO,MAAM,WAAW,UAAS,CAAE,GAC3E,MAAM,WAAW,OAAO;AAEZ,QAAAA,QAAA,kBAAkB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,SAAS;AAC7D,QAAAA,QAAA,oBAAoB,IAAI,gBAAA,aAAa,gBAAA,SAAS,MAAM,aAAa,IAAI;AAGrF,mBAAA;WADC,GAAA,gBAAA,UAASA,QAAO,aAAa;;AAI9B,mBAAA;WADC,GAAA,gBAAA,UAASA,QAAO,eAAe;;AAIhC,mBAAA;WADC,GAAA,gBAAA,UAASA,QAAO,aAAa;;AAI9B,mBAAA;WADC,GAAA,gBAAA,UAASA,QAAO,YAAY;;AAI7B,mBAAA;WADC,GAAA,gBAAA,UAASA,QAAO,eAAe;;AAIhC,mBAAA;WADC,GAAA,gBAAA,UAASA,QAAO,iBAAiB;;AAuWtC,eAAAA;QA9YqC,cAAA,UAAU;;AAAzB,YAAA,SAAA;AAgZtB,QAAA;;MAAA,SAAA,QAAA;AAA+C,kBAAAC,mBAAA,MAAA;AAA/C,iBAAAA,oBAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AA4CI,gBAAA,uCAAgD;AAIxC,gBAAA,cAAuB;AAEvB,gBAAA,4BAAqC;;QA0GjD;AAxGc,QAAAA,kBAAA,UAAA,8BAAV,WAAA;AACI,cAAM,SAA4B,CAAA;AAElC,cAAI,KAAK,qBAAqB,QAAQ;AAClC,gBAAI,UAAmC,KAAK;AAC5C,gBAAI,SAAkB,CAAA;AAEtB,mBAAO,SAAS;AACZ,qBAAO,KAAI,MAAX,QAAe,QAAQ,aAAa,KAAK,CAAC;AAE1C,wBAAU,QAAQ;;AAGtB,qBAAoB,KAAA,GAAA,WAAA,QAAA,KAAA,SAAA,QAAA,MAAQ;AAAvB,kBAAM,QAAK,SAAA,EAAA;AACZ,kBAAI,MAAM,IAAI;AACV,uBAAO,MAAM,EAAE,IAAI;;;;AAK/B,iBAAO;QACX;AAEU,QAAAA,kBAAA,UAAA,8BAAV,SAAsC,QAAqC;AACvE,cAAI,KAAK,eAAe;AACpB,iBAAK,iBAAiB,KAAK,MAAM,KAAK,UAAU,KAAK,aAAa,CAAC;iBAChE;AACH,iBAAK,iBAAiB,CAAA;;AAG1B,cAAI,KAAK,kBAAkB,QAAQ;AAC/B,qBAAkB,KAAA,GAAA,KAAA,OAAO,KAAK,MAAM,GAAlB,KAAA,GAAA,QAAA,MAAqB;AAAlC,kBAAM,MAAG,GAAA,EAAA;AACV,kBAAM,QAAQ,OAAO,GAAG;AAExB,kBAAI,MAAM,MAAM,MAAM,MAAK,GAAI;AAC3B,qBAAK,eAAe,MAAM,EAAE,IACxB,OAAO,MAAM,UAAU,WAAW,MAAM,QAAQ,MAAM,MAAM,SAAQ;;;;AAKpF,eAAK,cAAc;QACvB;AAEU,QAAAA,kBAAA,UAAA,uBAAV,WAAA;AACI,cAAI,SAAA,eAAe,2CAA2C;AAC1D,iBAAK,gCAA+B;;QAE5C;AAEA,QAAAA,kBAAA,UAAA,kCAAA,WAAA;AACI,cAAI,mBAAmB,KAAK,oBAAmB;AAE/C,eAAK,4BAA4B;AAEjC,cAAI,kBAAkB;AAClB,qBAAkB,KAAA,GAAA,KAAA,OAAO,KAAK,gBAAgB,GAA5B,KAAA,GAAA,QAAA,MAA+B;AAA5C,kBAAM,MAAG,GAAA,EAAA;AACV,kBAAM,QAAQ,iBAAiB,GAAG;AAElC,oBAAM,gBAAe;;;QAGjC;AAEA,QAAAA,kBAAA,UAAA,qBAAA,WAAA;AACI,eAAK,4BAA4B;AAEjC,cAAI,mBAAmB,KAAK,oBAAmB;AAE/C,cAAI,kBAAkB;AAClB,qBAAkB,KAAA,GAAA,KAAA,OAAO,KAAK,gBAAgB,GAA5B,KAAA,GAAA,QAAA,MAA+B;AAA5C,kBAAM,MAAG,GAAA,EAAA;AACV,kBAAM,QAAQ,iBAAiB,GAAG;AAElC,kBAAI,MAAM,QAAO,GAAI;AACjB,qBAAK,4BAA4B;AAEjC;;;;AAKZ,eAAK,iBAAgB;AAErB,cAAI,KAAK,kBAAkB;AACvB,iBAAK,6BAA6B,KAAK,gBAAgB;;QAE/D;AAEA,QAAAA,kBAAA,UAAA,uBAAA,WAAA;AACI,cAAI,SAAS,OAAA,UAAM,qBAAoB,KAAA,IAAA;AAEvC,iBAAO,KAAK,uCACN,UAAU,KAAK,4BACf;QACV;AAEA,eAAA,eAAIA,kBAAA,WAAA,QAAI;eAAR,WAAA;AACI,mBAAO,KAAK,cAAc,KAAK,iBAAiB,KAAK;UACzD;eAEA,SAAS,OAAyB;AAC9B,iBAAK,gBAAgB;AACrB,iBAAK,cAAc;UACvB;;;;AAxJgB,QAAAA,kBAAA,eAAe,IAAI,gBAAA,mBAAmB,gBAAA,SAAS,MAAM,MAAM;AAC3D,QAAAA,kBAAA,2BAA2B,IAAI,gBAAA,eAC3C,gBAAA,SAAS,MACT,oBACA,SACI,QACA,MACA,QACA,SAAiC;AAEjC,cAAM,QAAQ,OAAO,KAAK,IAAI;AAE9B,cAAI,UAAU,UAAa,OAAO,UAAU,UAAU;AAClD,mBAAO,MAAM,YAAW,MAAO,SAAS,SAAS;;AAGrD,iBAAO;QACX,GACA,SACI,QACA,MACA,QACA,OACA,SAAiC;AAEjC,kBAAQ,eAAe,QAAQ,KAAK,MAAM,KAAK;QACnD,CAAC;AAEW,QAAAA,kBAAA,+CAA+C,IAAI,gBAAA,aAC/D,gBAAA,SAAS,MACT,wCACA,KAAK;AAIT,mBAAA;WADC,GAAA,gBAAA,UAASA,kBAAiB,YAAY;;AAIvC,mBAAA;WADC,GAAA,gBAAA,UAASA,kBAAiB,wBAAwB;;AAInD,mBAAA;WADC,GAAA,gBAAA,UAASA,kBAAiB,4CAA4C;;AAiH3E,eAAAA;QA5J+C,MAAM;;AAA/B,YAAA,mBAAA;AA8JtB,QAAA;;MAAA,SAAA,QAAA;AAAkC,kBAAAC,eAAA,MAAA;AAAlC,iBAAAA,gBAAA;;QAQA;AAHI,QAAAA,cAAA,UAAA,kBAAA,WAAA;AACI,iBAAOA,cAAa;QACxB;AAJgB,QAAAA,cAAA,eAAgC;AAKpD,eAAAA;QARkC,gBAAgB;;AAArC,YAAA,eAAA;AAUb,QAAA;;MAAA,SAAA,QAAA;AAAmC,kBAAAC,gBAAA,MAAA;AAAnC,iBAAAA,iBAAA;;QAiBA;AAHI,QAAAA,eAAA,UAAA,kBAAA,WAAA;AACI,iBAAOA,eAAc;QACzB;AAbgB,QAAAA,eAAA,eAAiC;AAIjC,QAAAA,eAAA,eAAe,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,MAAM;AAGvE,mBAAA;WADC,GAAA,gBAAA,UAASA,eAAc,YAAY;;AAQxC,eAAAA;QAjBmC,gBAAgB;;AAAtC,YAAA,gBAAA;AAmBb,QAAA;;MAAA,SAAA,QAAA;AAAmC,kBAAAC,gBAAA,MAAA;AAAnC,iBAAAA,iBAAA;;QAqCA;AAvBI,QAAAA,eAAA,UAAA,kBAAA,WAAA;AACI,iBAAOA,eAAc;QACzB;AAEA,QAAAA,eAAA,UAAA,cAAA,WAAA;AACI,iBAAO;QACX;AAEA,QAAAA,eAAA,UAAA,6BAAA,SAA2B,SAA0B;AACjD,iBAAA,UAAM,2BAA0B,KAAA,MAAC,OAAO;AAExC,cAAI,CAAC,KAAK,KAAK;AACX,oBAAQ,WACJ,MACA,MAAM,gBAAgB,oBACtB,UAAA,QAAQ,OAAO,kBAAkB,KAAK,CAAC;;QAGnD;AAEA,QAAAA,eAAA,UAAA,UAAA,WAAA;AACI,iBAAO,KAAK;QAChB;AAjCgB,QAAAA,eAAA,cAAc,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,KAAK;AASrD,QAAAA,eAAA,eAAiC;AANjD,mBAAA;WADC,GAAA,gBAAA,UAASA,eAAc,WAAW;;AAgCvC,eAAAA;QArCmC,MAAM;;AAA5B,YAAA,gBAAA;AAuCb,QAAA;;MAAA,SAAA,QAAA;AAA4C,kBAAAC,yBAAA,MAAA;AAA5C,iBAAAA,0BAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AA2DI,gBAAA,iBAAyC,CAAA;;QAuE7C;AA/DY,QAAAA,wBAAA,UAAA,8BAAR,WAAA;AAEI,cAAI,KAAK,gBAAgB;AACrB,gBAAM,aAAa,OAAO,KAAK,KAAK,cAAc;AAElD,gBAAI,KAAK,kBAAkB;AACvB,kBAAI,WAAW,SAAS,GAAG;AACvB,qBAAK,iBAAiB,aAAa,iBAAiB,WAAW,KAAK,GAAG,CAAC;qBACrE;AACH,qBAAK,iBAAiB,gBAAgB,eAAe;;;;QAIrE;AAEA,QAAAA,wBAAA,UAAA,6BAAA,SAA2B,SAA0B;AACjD,iBAAA,UAAM,2BAA0B,KAAA,MAAC,OAAO;AAExC,cAAI,CAAC,KAAK,gBAAgB;AACtB,oBAAQ,WACJ,MACA,MAAM,gBAAgB,oBACtB,UAAA,QAAQ,OAAO,kBAAkB,gBAAgB,CAAC;;QAG9D;AAEA,QAAAA,wBAAA,UAAA,kBAAA,WAAA;AACI,iBAAOA,wBAAuB;QAClC;AAEA,QAAAA,wBAAA,UAAA,SAAA,WAAA;AACI,iBAAA,UAAM,OAAM,KAAA,IAAA;AAEZ,eAAK,4BAA2B;QACpC;AAEA,QAAAA,wBAAA,UAAA,UAAA,WAAA;AACI,iBAAA,UAAM,QAAO,KAAA,IAAA;AACb,cAAI,KAAK,QAAQ;AACb,qBAAwB,KAAA,GAAA,KAAA,OAAO,KAAK,KAAK,cAAc,GAA/B,KAAA,GAAA,QAAA,MAAkC;AAArD,kBAAM,YAAS,GAAA,EAAA;AAChB,kBAAM,gBAAgB,KAAK,OAAO,eAAc,EAAG,eAAe,SAAS;AAE3E,kBAAI,eAAe;AACf,oBAAI,OAAO,KAAK,eAAe,SAAS,MAAM,WAAW;AACrD,gCAAc,YAAY,KAAK,eAAe,SAAS;uBACpD;AACH,gCAAc,YAAY,CAAC,cAAc;;;;;QAK7D;AAEA,QAAAA,wBAAA,UAAA,mBAAA,SAAiB,WAAmB,WAA0C;AAA1C,cAAA,cAAA,QAAA;AAAA,wBAAA;UAA0C;AAC1E,eAAK,eAAe,SAAS,IAAI;AACjC,eAAK,4BAA2B;QACpC;AAEA,QAAAA,wBAAA,UAAA,sBAAA,SAAoB,WAAiB;AACjC,iBAAO,KAAK,eAAe,SAAS;AACpC,eAAK,4BAA2B;QACpC;AA9HgB,QAAAA,wBAAA,yBAAyB,IAAI,gBAAA,eACzC,gBAAA,SAAS,MACT,kBACA,SACI,QACA,MACA,QACA,SAAiC;AAEjC,cAAM,SAAsB,CAAA;AAE5B,cAAI,MAAM,QAAQ,OAAO,KAAK,IAAI,CAAC,GAAG;AAClC,qBAAmB,KAAA,GAAA,KAAA,OAAO,KAAK,IAAI,GAAhB,KAAA,GAAA,QAAA,MAAmB;AAAjC,kBAAM,OAAI,GAAA,EAAA;AACX,kBAAI,OAAO,SAAS,UAAU;AAC1B,uBAAO,IAAI,IAAI;yBACR,OAAO,SAAS,UAAU;AACjC,oBAAM,YAAY,KAAK,WAAW;AAElC,oBAAI,OAAO,cAAc,UAAU;AAC/B,yBAAO,SAAS,IAAI,MAAM,UAAU,KAAK,WAAW,CAAC;;;;;AAMrE,iBAAO;QACX,GACA,SACI,QACA,MACA,QACA,OACA,SAAiC;AAEjC,cAAM,iBAAwB,CAAA;AAE9B,mBAAiB,KAAA,GAAA,KAAA,OAAO,KAAK,KAAK,GAAjB,KAAA,GAAA,QAAA,MAAoB;AAAhC,gBAAM,KAAE,GAAA,EAAA;AACT,gBAAI,OAAO,MAAM,EAAE,MAAM,WAAW;AAChC,6BAAe,KAAK;gBAChB,WAAW;gBACX,WAAW,MAAM,EAAE;eACtB;mBACE;AACH,6BAAe,KAAK,EAAE;;;AAI9B,kBAAQ,eAAe,QAAQ,KAAK,MAAM,cAAc;QAC5D,GACA,CAAA,GACA,SAAC,QAA0B;AACvB,iBAAO,CAAA;QACX,CAAC;AAUW,QAAAA,wBAAA,eAA0C;AAN1D,mBAAA;WADC,GAAA,gBAAA,UAASA,wBAAuB,sBAAsB;;AAwE3D,eAAAA;QAlI4C,MAAM;;AAArC,YAAA,yBAAA;AAoIb,QAAA;;MAAA,SAAA,QAAA;AAA6C,kBAAAC,iCAAA,MAAA;AAqBzC,iBAAAA,gCAAqB,eAAiC,MAAY;AAAlE,cAAA,QACI,OAAA,KAAA,MAAM,eAAe,MAAM,QAAW,WAAA;AAClC,mBAAO,IAAI,SAAA,wBAAuB;UACtC,CAAC,KAAC;AAHe,gBAAA,gBAAA;AAAiC,gBAAA,OAAA;;QAItD;AAxBA,QAAAA,gCAAA,UAAA,QAAA,SACI,QACA,QACA,SAAiC;AAEjC,cAAM,SAAS,IAAI,SAAA,wBAAuB;AAC1C,iBAAO,IAAI,MAAM,YAAY,OAAO,KAAK,IAAI,CAAC,CAAC;AAE/C,iBAAO;QACX;AAEA,QAAAA,gCAAA,UAAA,SAAA,SACI,QACA,QACA,OACA,SAAiC;AAEjC,kBAAQ,eAAe,QAAQ,KAAK,MAAM,MAAM,YAAW,CAAE;QACjE;AAOJ,eAAAA;MAAA,EA1B6C,gBAAA,kBAAkB;;AA4B/D,QAAA;;MAAA,SAAA,QAAA;AAAgC,kBAAAC,aAAA,MAAA;AAkB5B,iBAAAA,YAAY,MAAmB,OAAkB;AAArC,cAAA,SAAA,QAAA;AAAA,mBAAA;UAAiB;AAAE,cAAA,UAAA,QAAA;AAAA,oBAAA;UAAkB;AAAjD,cAAA,QACI,OAAA,KAAA,IAAA,KAAO;AAEP,gBAAK,OAAO;AACZ,gBAAK,QAAQ;;QACjB;AAjBU,QAAAA,YAAA,UAAA,eAAV,WAAA;AACI,iBAAO;QACX;AAiBA,QAAAA,YAAA,UAAA,sBAAA,SAAoB,QAAiB,kBAAmC;AACpE,eAAK,OAAO,oBAAoB,QAAQ,gBAAgB;QAC5D;AAEA,QAAAA,YAAA,UAAA,sBAAA,SAAoB,QAAyB;AACzC,eAAK,OAAO,sBAAsB,QAAQ,SAAA,aAAa,6BAA6B;QACxF;AAEA,eAAA,eAAIA,YAAA,WAAA,SAAK;eAAT,WAAA;AACI,mBAAO,KAAK,OAAO,IAAG;UAC1B;eAEA,SAAU,UAA4B;AAClC,iBAAK,OAAO,IAAI,QAAQ;UAC5B;;;;AApCgB,QAAAA,YAAA,eAAe,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,MAAM;AACvD,QAAAA,YAAA,gBAAgB,IAAI,+BAA+B,gBAAA,SAAS,MAAM,OAAO;AAOzF,mBAAA;WADC,GAAA,gBAAA,UAASA,YAAW,YAAY;;AAIjC,mBAAA;WADC,GAAA,gBAAA,UAASA,YAAW,aAAa;;AA2BtC,eAAAA;QAxCgC,gBAAA,kBAAkB;;AAArC,YAAA,aAAA;AA0Cb,QAAA;;MAAA,SAAA,QAAA;AAAgC,kBAAAC,aAAA,MAAA;AAAhC,iBAAAA,cAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AA8BY,gBAAA,yBAAkC;;QA4F9C;AApFc,QAAAA,YAAA,UAAA,8BAAV,WAAA;AACI,cAAM,YAAY,KAAK,SAAS,KAAK,OAAO,eAAc,EAAG,aAAY,IAAK,CAAA;AAC9E,cAAM,SAA4B,CAAA;AAElC,eAAK,KAAK,oBAAoB,WAAW,MAAM;AAE/C,mBAAqB,KAAA,GAAA,KAAA,KAAK,SAAL,KAAA,GAAA,QAAA,MAAc;AAA9B,gBAAM,SAAM,GAAA,EAAA;AACb,mBAAO,oBAAoB,WAAW,MAAM;;AAGhD,eAAK,MAAM,oBAAoB,WAAW,MAAM;AAEhD,iBAAO;QACX;AAEU,QAAAA,YAAA,UAAA,8BAAV,SAAsC,QAAqC;AACvE,cAAI,QAAQ;AACR,iBAAK,KAAK,sBAAsB,QAAQ,SAAA,aAAa,6BAA6B;AAElF,gBAAI,cAAc,SAAA,aAAa;AAE/B,qBAAqB,KAAA,GAAA,KAAA,KAAK,SAAL,KAAA,GAAA,QAAA,MAAc;AAA9B,kBAAM,SAAM,GAAA,EAAA;AACb,qBAAO,oBAAoB,MAAM;AAEjC,kBAAI,OAAO,QAAQ,OAAO,KAAK,YAAW,MAAO,gBAAgB;AAC7D,8BAAc,OAAO;;;AAI7B,iBAAK,MAAM,sBAAsB,QAAQ,WAAW;;QAE5D;AAEA,QAAAA,YAAA,UAAA,kBAAA,WAAA;AACI,iBAAOA,YAAW;QACtB;AAEA,QAAAA,YAAA,UAAA,6BAAA,SAA2B,SAA0B;AACjD,iBAAA,UAAM,2BAA0B,KAAA,MAAC,OAAO;AAExC,cAAI,CAAC,KAAK,KAAK;AACX,oBAAQ,WACJ,MACA,MAAM,gBAAgB,oBACtB,UAAA,QAAQ,OAAO,kBAAkB,KAAK,CAAC;;AAI/C,cAAI,KAAK,QAAQ,SAAS,GAAG;AACzB,qBAAqB,KAAA,GAAA,KAAA,KAAK,SAAL,KAAA,GAAA,QAAA,MAAc;AAA9B,kBAAM,SAAM,GAAA,EAAA;AACb,kBAAI,CAAC,OAAO,MAAM;AACd,wBAAQ,WACJ,MACA,MAAM,gBAAgB,oBACtB,UAAA,QAAQ,OAAO,sCAAqC,CAAE;;;;QAK1E;AAEA,eAAA,eAAIA,YAAA,WAAA,yBAAqB;eAAzB,WAAA;AACI,mBAAO,KAAK;UAChB;eAEA,SAA0B,OAAc;AACpC,iBAAK,yBAAyB;UAClC;;;;AAEA,eAAA,eAAIA,YAAA,WAAA,OAAG;eAAP,WAAA;AACI,mBAAO,KAAK,KAAK,IAAG;UACxB;eAEA,SAAQ,OAAyB;AAC7B,iBAAK,KAAK,IAAI,KAAK;UACvB;;;;AAEA,eAAA,eAAIA,YAAA,WAAA,QAAI;eAAR,WAAA;AACI,mBAAO,KAAK,MAAM,IAAG;UACzB;eAEA,SAAS,OAAyB;AAC9B,iBAAK,MAAM,IAAI,KAAK;UACxB;;;;AAtHgB,QAAAA,YAAA,cAAc,IAAI,+BAA+B,gBAAA,SAAS,MAAM,KAAK;AACrE,QAAAA,YAAA,eAAe,IAAI,+BAA+B,gBAAA,SAAS,MAAM,MAAM;AACvE,QAAAA,YAAA,iBAAiB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,QAAQ;AAC3D,QAAAA,YAAA,kBAAkB,IAAI,gBAAA,qCAClC,gBAAA,SAAS,MACT,WACA,UAAU;AAEE,QAAAA,YAAA,gCAAgC,IAAI,gBAAA,aAChD,gBAAA,SAAS,MACT,yBACA,KAAK;AAsBO,QAAAA,YAAA,eAA8B;AAlB9C,mBAAA;WADC,GAAA,gBAAA,UAASA,YAAW,WAAW;;AAIhC,mBAAA;WADC,GAAA,gBAAA,UAASA,YAAW,YAAY;;AAIjC,mBAAA;WADC,GAAA,gBAAA,UAASA,YAAW,cAAc;;AAInC,mBAAA;WADC,GAAA,gBAAA,UAASA,YAAW,eAAe;;AAIpC,mBAAA;WADC,GAAA,gBAAA,UAASA,YAAW,6BAA6B;;AA6FtD,eAAAA;QA1HgC,MAAM;;AAAzB,YAAA,aAAA;AA4Hb,QAAA;;MAAA,SAAA,QAAA;AAAoC,kBAAAC,iBAAA,MAAA;AAApC,iBAAAA,kBAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AAkDa,gBAAA,OAAqB,IAAI,mBAAkB;;QAqDxD;AAlGc,QAAAA,gBAAA,UAAA,mBAAV,WAAA;AACI,iBAAA,UAAM,iBAAgB,KAAA,IAAA;AAEtB,cAAI,KAAK,iBAAiB;AACtB,gBAAM,sBAAsB,KAAK,SAAS,KAAK,OAAO,aAAa,cAAA;AAEnE,iBAAK,gBAAgB,UAAU,IAAI,oBAAoB,iBAAiB,YAAY,CAAC;AACrF,iBAAK,gBAAgB,aACjB,kBACC,KAAK,UAAK,GAAiC,SAAQ,CAAE;;QAGlE;AAEU,QAAAA,gBAAA,UAAA,gBAAV,SAAwB,QAAa,SAA6B;AAC9D,iBAAA,UAAM,cAAa,KAAA,MAAC,QAAQ,OAAO;AAEnC,cAAM,WAAW,OAAO,MAAM;AAE9B,cAAI,UAAU;AACV,iBAAK,KAAK,MAAM,UAAU,OAAO;iBAC9B;AACH,oBAAQ,cACJ,MACA,MAAM,gBAAgB,oBACtB,UAAA,QAAQ,OAAO,qBAAoB,CAAE;;QAGjD;AAEU,QAAAA,gBAAA,UAAA,iBAAV,SAAyB,QAAqB,SAA6B;AACvE,iBAAA,UAAM,eAAc,KAAA,MAAC,QAAQ,OAAO;AAEpC,cAAI,KAAK,MAAM;AACX,oBAAQ,eAAe,QAAQ,QAAQ,KAAK,KAAK,OAAO,OAAO,CAAC;;QAExE;AAEU,QAAAA,gBAAA,UAAA,0BAAV,WAAA;AACI,cAAI,KAAK,WAAW,QAAQ,SAAS,eAAe,MAAM,mBAAmB,OAAO;AAEhF,mBAAA,UAAM,wBAAuB,KAAA,IAAA;;QAErC;AAIA,QAAAA,gBAAA,UAAA,sBAAA,WAAA;AACI,iBAAA,UAAM,oBAAmB,KAAA,IAAA;AAEzB,eAAK,KAAK,oBAAmB;QACjC;AAEA,QAAAA,gBAAA,UAAA,kBAAA,WAAA;AACI,iBAAOA,gBAAe;QAC1B;AAEA,QAAAA,gBAAA,UAAA,6BAAA,SAA2B,SAA0B;AACjD,iBAAA,UAAM,2BAA0B,KAAA,MAAC,OAAO;AAExC,eAAK,KAAK,2BAA2B,OAAO;QAChD;AAEA,QAAAA,gBAAA,UAAA,YAAA,SAAU,OAAkB;AACxB,iBAAA,UAAM,UAAS,KAAA,MAAC,KAAK;AAErB,eAAK,KAAK,UAAU,KAAK;QAC7B;AAEA,QAAAA,gBAAA,UAAA,eAAA,SAAa,gBAA8B;AAA9B,cAAA,mBAAA,QAAA;AAAA,6BAAA;UAA8B;AACvC,iBAAO,KAAK,KAAK,aAAa,cAAc;QAChD;AAEA,QAAAA,gBAAA,UAAA,gBAAA,WAAA;AACI,cAAM,SAAS,OAAA,UAAM,cAAa,KAAA,IAAA;AAElC,iBAAO,KAAI,MAAX,QAAe,KAAK,KAAK,cAAa,CAAE;AAExC,iBAAO;QACX;AAEA,QAAAA,gBAAA,UAAA,yBAAA,WAAA;AACI,cAAI,SAAS,OAAA,UAAM,uBAAsB,KAAA,IAAA;AAEzC,iBAAO,KAAI,MAAX,QAAe,KAAK,KAAK,uBAAsB,CAAE;AAEjD,iBAAO;QACX;AAEA,QAAAA,gBAAA,UAAA,gBAAA,SAAc,IAAU;AACpB,cAAI,SAAS,OAAA,UAAM,cAAa,KAAA,MAAC,EAAE;AAEnC,cAAI,CAAC,QAAQ;AACT,qBAAS,KAAK,KAAK,cAAc,EAAE;;AAGvC,iBAAO;QACX;AAnGgB,QAAAA,gBAAA,eAAkC;AAoGtD,eAAAA;QAvGoC,MAAM;;AAA7B,YAAA,iBAAA;AAyGb,QAAA;;MAAA,SAAA,QAAA;AAA6B,kBAAAC,iBAAA,MAAA;AAIzB,iBAAAA,gBAAY,SAAiB;AAA7B,cAAA,QACI,OAAA,KAAA,IAAA,KAAO;AACP,gBAAK,WAAW;AAEhB,gBAAK,QAAQ,UAAA,QAAQ,SAAS,mBAAkB;;QACpD;AAEA,QAAAA,gBAAA,UAAA,aAAA,WAAA;AACI,iBAAO,KAAK;QAChB;AAEA,QAAAA,gBAAA,UAAA,gBAAA,WAAA;AACI,cAAM,SAAS,OAAA,UAAM,cAAa,KAAA,IAAA;AAElC,iBAAO,KAAI,MAAX,QAAe,KAAK,QAAQ;AAE5B,iBAAO;QACX;AAEA,QAAAA,gBAAA,UAAA,kBAAA,WAAA;AACI,iBAAO,eAAe;QAC1B;AAEA,QAAAA,gBAAA,UAAA,UAAA,WAAA;AAAA,cAAA,QAAA;;AACI,cAAM,yBAAyB,CAAC,oCAC5B,MACA,KAAK,eAAe;AAGxB,cAAI,0BAA0B,KAAK,iBAAiB;AAChD,gBAAM,gBAAc,IAAI,WAAA,UAAS;AACjC,0BAAY,aAAa,KAAK;mCAErBC,IAAC;AACN,kBAAM,WAAW,IAAI,WAAA,SAASA,GAAE,SAAQ,IAAI,KAAA,OAAK,SAASA,EAAC,EAAE,WAAK,QAAA,OAAA,SAAA,KAAI,EAAE;AACxE,uBAAS,YAAY,OAAK,SAASA,EAAC,EAAE;AACtC,uBAAS,UAAU,WAAA;AACf,oBAAM,kBAAkB,MAAK,SAASA,EAAC;AAEvC,8BAAY,WAAW,KAAK;AAE5B,oBAAI,gBAAgB,WAAW;AAC3B,kCAAgB,QAAO;;cAE/B;AAEA,4BAAY,MAAM,IAAI,QAAQ;;;AAblC,qBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAG;sBAApC,CAAC;;AAgBV,0BAAY,MAAM,KAAK,eAAe;;QAE9C;AAtDgB,QAAAD,gBAAA,eAAkC;AAuDtD,eAAAA;QAxD6B,MAAM;;AA0DnC,QAAA;;MAAA,WAAA;AAiJI,iBAAAE,kBAAY,OAAkB;AAJtB,eAAA,SAAmB,CAAA;AAEnB,eAAA,mBAA6B,CAAA;AAGjC,eAAK,SAAS;QAClB;AA7IQ,QAAAA,kBAAA,UAAA,kBAAR,SAAwB,QAAc;AAClC,cAAM,iBAAiB,KAAK,OAAO,wBAAuB;AAE1D,cAAI,gBAAgB;AAChB,qBAA4B,KAAA,GAAA,mBAAA,gBAAA,KAAA,iBAAA,QAAA,MAAgB;AAAvC,kBAAM,gBAAa,iBAAA,EAAA;AACpB,kBAAI,OAAO,gBAAgB,eAAe;AACtC,uBAAO;;;;AAKnB,iBAAO;QACX;AAEQ,QAAAA,kBAAA,UAAA,mBAAR,WAAA;AACI,uBAAa,KAAK,oBAAoB;AAEtC,cAAI,CAAC,KAAK,aAAa;AACnB,iBAAK,qBAAqB,MAAM,YAAY;AAE5C;;AAGJ,eAAK,qBAAqB,MAAM,YAC5B,KAAK,sBAAsB,IACrB,KAAK,OAAO,WAAW,QAAQ,SAAS,kBAAkB,OAC1D;AAEV,cAAM,UAAU,KAAK,OAAO,oBAAmB;AAE/C,eAAK,OAAO,+BAA+B,OAAO;AAElD,cAAM,kBACF,KAAK,OAAO,WAAW,qCAAqC,OAAO;AAEvE,cAAI,KAAK,aAAa;AAClB,iBAAK,YAAY,MAAM,cAAc,gBAAgB,OAAO;AAC5D,iBAAK,YAAY,MAAM,eAAe,gBAAgB,QAAQ;AAE9D,iBAAK,YAAY,MAAM,aAAa,MAAM,gBAAgB,OAAO;AACjE,iBAAK,YAAY,MAAM,cAAc,MAAM,gBAAgB,QAAQ;AAEnE,gBAAI,gBAAgB,WAAW,KAAK,CAAC,KAAK,OAAO,aAAY,GAAI;AAC7D,mBAAK,YAAY,MAAM,gBAAgB,gBAAgB,SAAS;AAChE,mBAAK,YAAY,MAAM,eAAe,MAAM,gBAAgB,SAAS;;AAGzE,kBAAM,YAAY,KAAK,sBAAsB,KAAK,WAAW;;QAErE;AAEQ,QAAAA,kBAAA,UAAA,gBAAR,WAAA;AACI,eAAK,OAAO,eAAc,EAAG,aAAY;QAC7C;AAEQ,QAAAA,kBAAA,UAAA,iBAAR,SACI,QACA,eACA,YAA0B;AAD1B,cAAA,kBAAA,QAAA;AAAA,4BAAA;UAA8B;AAC9B,cAAA,eAAA,QAAA;AAAA,yBAAA;UAA0B;AAEL,iBAAO,KAAM,gBAAgB;AAGlD,cAAM,eACF,OAAO,KAAK,mBAAmB,CAAC,KAAK,OAAO,aAAY,IAClD,OAAO,KAAK,kBACZ,OAAO,KAAK,OAAM;AAE5B,eAAK,cAAc;AACnB,eAAK,kBAAkB;AAEvB,eAAK,iBAAgB;AAErB,cAAI,YAAY;AACZ,iBAAK,cAAa;AAElB,yCAA6B,QAAQ,IAAI;;QAEjD;AAEQ,QAAAA,kBAAA,UAAA,yBAAR,WAAA;AACI,mBAAqB,KAAA,GAAA,KAAA,KAAK,kBAAL,KAAA,GAAA,QAAA,MAAuB;AAAvC,gBAAM,SAAM,GAAA,EAAA;AACb,mBAAO,QAAK;;AAGhB,cAAM,2BAA2B,KAAK;AAEtC,eAAK,kBAAkB;AACvB,eAAK,cAAc;AAEnB,eAAK,iBAAgB;AAErB,cAAI,0BAA0B;AAC1B,iBAAK,cAAa;AAElB,yCAA6B,0BAA0B,KAAK;;QAEpE;AAEQ,QAAAA,kBAAA,UAAA,uBAAR,SAA6B,QAAwB,YAAmB;AAAxE,cAAA,QAAA;AACI,cAAI,sBAAsB;AAE1B,mBAA6B,KAAA,GAAA,KAAA,KAAK,kBAAL,KAAA,GAAA,QAAA,MAAuB;AAA/C,gBAAM,iBAAc,GAAA,EAAA;AAErB,gBACI,KAAK,OAAO,WAAW,QAAQ,sBAAsB,MAAM,YAAY,cACvE,qBACF;AACE,6BAAe,cAAc;;AAGjC,gBAAI,mBAAmB,QAAQ;AAC3B,6BAAe,QAAK;mBACjB;AACH,6BAAe,QAAK;AAEpB,oCAAsB;AAEtB,kBAAI,eAAe,iBAAiB;AAChC,+BAAe,gBAAgB,SAAS,SAAC,IAAE;AACvC,2BAAiBC,MAAA,GAAA3C,MAAA,MAAK,kBAAL2C,MAAA3C,IAAA,QAAA2C,OAAuB;AAAnC,wBAAM,KAAE3C,IAAA2C,GAAA;AACT,uBAAG,cAAc;;gBAEzB;;;;AAKZ,eAAK,eACD,QACA,EAAE,KAAK,OAAO,gBAAe,KAAM,KAAK,OAAO,iBAAgB,IAC/D,UAAU;QAElB;AAUA,QAAAD,kBAAA,UAAA,sBAAA,WAAA;AACI,mBAAmB,KAAA,GAAA,KAAA,KAAK,kBAAL,KAAA,GAAA,QAAA,MAAuB;AAArC,gBAAI,SAAM,GAAA,EAAA;AACX,mBAAO,oBAAmB;;QAElC;AAEA,QAAAA,kBAAA,UAAA,iBAAA,SAAe,QAAc;AACzB,cAAI,EAAE,kBAAkB,iBAAiB;AACrC,iBAAK,uBAAsB;iBACxB;AACH,gBAAI,WAAW,KAAK,iBAAiB;AACjC,mBAAK,uBAAsB;uBAE3B,KAAK,OAAO,WAAW,QAAQ,SAAS,eACxC,MAAM,mBAAmB,QAC3B;AACE,mBAAK,qBAAqB,QAAQ,IAAI;;;QAGlD;AAEA,QAAAA,kBAAA,UAAA,QAAA,SAAM,QAAa,SAA6B;AAC5C,eAAK,MAAK;AAEV,cAAI,MAAM,QAAQ,MAAM,GAAG;AACvB,qBAAyB,KAAA,GAAA,WAAA,QAAA,KAAA,SAAA,QAAA,MAAQ;AAA5B,kBAAM,aAAU,SAAA,EAAA;AACjB,kBAAI,mBAA6B,CAAA;AAGjC,kBAAI,KAAK,kBAAkB,sBAAsB;AAC7C,mCAAmB,KAAK,OAAO,wBAAuB;;AAG1D,kBAAM,SAAS,QAAQ,YACnB,KAAK,QACL,YACA,kBACA,CAAC,KAAK,OAAO,aAAY,CAAE;AAG/B,kBAAI,QAAQ;AACR,qBAAK,UAAU,MAAM;;;;QAIrC;AAEA,QAAAA,kBAAA,UAAA,SAAA,SAAO,QAAqB,cAAsB,SAA6B;AAC3E,kBAAQ,eAAe,QAAQ,cAAc,KAAK,MAAM;QAC5D;AAEA,QAAAA,kBAAA,UAAA,cAAA,SAAY,IAAU;AAClB,iBAAO,KAAK,OAAO,EAAE;QACzB;AAEA,QAAAA,kBAAA,UAAA,iBAAA,WAAA;AACI,iBAAO,KAAK,OAAO;QACvB;AAEA,QAAAA,kBAAA,UAAA,gBAAA,SAAc,IAAU;AACpB,cAAI,SAA6B;AAEjC,mBAAmB,KAAA,GAAA,KAAA,KAAK,QAAL,KAAA,GAAA,QAAA,MAAa;AAA3B,gBAAM,OAAI,GAAA,EAAA;AACX,qBAAS,KAAK,cAAc,EAAE;AAE9B,gBAAI,QAAQ;AACR;;;AAIR,iBAAO;QACX;AAEA,QAAAA,kBAAA,UAAA,qBAAA,SAAmB,SAA0B;AACzC,cACI,KAAK,OAAO,WAAW,QAAQ,cAC/B,KAAK,OAAO,SAAS,KAAK,OAAO,WAAW,QAAQ,YACtD;AACE,oBAAQ,WACJ,KAAK,QACL,MAAM,gBAAgB,gBACtB,UAAA,QAAQ,OAAO,eAAe,KAAK,OAAO,WAAW,QAAQ,UAAU,CAAC;;AAIhF,cAAI,KAAK,OAAO,SAAS,KAAK,CAAC,KAAK,OAAO,WAAW,uBAAuB;AACzE,oBAAQ,WACJ,KAAK,QACL,MAAM,gBAAgB,yBACtB,UAAA,QAAQ,OAAO,wBAAuB,CAAE;;AAIhD,mBAAmB,KAAA,GAAA,KAAA,KAAK,QAAL,KAAA,GAAA,QAAA,MAAa;AAA3B,gBAAM,OAAI,GAAA,EAAA;AACX,gBAAI,CAAC,KAAK,gBAAgB,IAAI,GAAG;AAC7B,sBAAQ,WACJ,KAAK,QACL,MAAM,gBAAgB,sBACtB,UAAA,QAAQ,OAAO,qBAAqB,KAAK,gBAAe,CAAE,CAAC;;AAInE,iBAAK,2BAA2B,OAAO;;QAE/C;AAEA,QAAAA,kBAAA,UAAA,SAAA,SAAO,aAA8B;AAEjC,cAAM,aAAa,KAAK,OAAO;AAE/B,cAAI,CAAC,WAAW,uBAAuB;AACnC,mBAAO;;AAGX,cAAM,UAAU,SAAS,cAAc,KAAK;AAC5C,cAAM,aAAa,WAAW,QAAQ,aAChC,KAAK,IAAI,WAAW,QAAQ,YAAY,KAAK,OAAO,MAAM,IAC1D,KAAK,OAAO;AAElB,eAAK,uBAAuB,SAAS,cAAc,KAAK;AACxD,eAAK,mBAAmB,CAAA;AAExB,cACI,WAAW,QAAQ,iCACnB,eAAe,KACf,KAAK,OAAO,CAAC,aAAa,kBAC1B,KAAK,gBAAgB,KAAK,OAAO,CAAC,CAAC,GACrC;AACE,iBAAK,eAAe,KAAK,OAAO,CAAC,GAAG,IAAI;AACxC,iBAAK,iBAAiB,KAAK,KAAK,OAAO,CAAC,CAAC;iBACtC;AACH,gBAAM,cAAc,SAAS,cAAc,KAAK;AAChD,wBAAY,YAAY,WAAW,iBAAiB,cAAc;AAClE,wBAAY,MAAM,UAAU;AAE5B,gBAAI,gBAAgB,MAAM,YAAY,YAAY;AAC9C,0BAAY,MAAM,gBAAgB;AAElC,kBACI,KAAK,OAAO,uBACZ,WAAW,QAAQ,oBAAoB,MAAM,gBAAgB,SAC/D;AACE,wBAAQ,KAAK,OAAO,qBAAqB;kBACrC,KAAK,MAAM,oBAAoB;AAC3B,gCAAY,MAAM,iBAAiB;AACnC;kBACJ,KAAK,MAAM,oBAAoB;AAC3B,gCAAY,MAAM,iBAAiB;AACnC;kBACJ;AACI,gCAAY,MAAM,iBAAiB;AACnC;;qBAEL;AACH,wBAAQ,WAAW,QAAQ,iBAAiB;kBACxC,KAAK,MAAM,gBAAgB;AACvB,gCAAY,MAAM,iBAAiB;AACnC;kBACJ,KAAK,MAAM,gBAAgB;AACvB,gCAAY,MAAM,iBAAiB;AACnC;kBACJ;AACI,gCAAY,MAAM,iBAAiB;AACnC;;;mBAGT;AACH,0BAAY,MAAM,gBAAgB;AAElC,kBACI,KAAK,OAAO,uBACZ,WAAW,QAAQ,oBAAoB,MAAM,gBAAgB,SAC/D;AACE,wBAAQ,KAAK,OAAO,qBAAqB;kBACrC,KAAK,MAAM,oBAAoB;AAC3B,gCAAY,MAAM,aAAa;AAC/B;kBACJ,KAAK,MAAM,oBAAoB;AAC3B,gCAAY,MAAM,aAAa;AAC/B;kBACJ;AACI,gCAAY,MAAM,aAAa;AAC/B;;qBAEL;AACH,wBAAQ,WAAW,QAAQ,iBAAiB;kBACxC,KAAK,MAAM,gBAAgB;AACvB,gCAAY,MAAM,aAAa;AAC/B;kBACJ,KAAK,MAAM,gBAAgB;AACvB,gCAAY,MAAM,aAAa;AAC/B;kBACJ,KAAK,MAAM,gBAAgB;AACvB,gCAAY,MAAM,aAAa;AAC/B;kBACJ;AACI,gCAAY,MAAM,aAAa;AAC/B;;;;AAKhB,gBAAM,iBAAiB,KAAK,OAAO,OAAO,KAAK,gBAAgB,KAAK,IAAI,CAAC;AAEzE,gBAAI,mBAA2B,CAAA;AAC/B,gBAAM,qBAA6B,CAAA;AAEnC,gBAAI,CAAC,KAAK,OAAO,aAAY,GAAI;AAC7B,6BAAe,QAAQ,SAACE,SAAM;AAC1B,uBAAAA,QAAO,SAAS,MAAM,WAAW,YAC3B,mBAAiB,KAAKA,OAAM,IAC5B,iBAAe,KAAKA,OAAM;cAFhC,CAEiC;AAIrC,kBAAM,yBAAyB,iBAAe,OAAO,WAAW,QAAQ,UAAU;AAElF,kBAAI,SAAA,eAAe,uCAAuC;AACtD,mCAAiB,KAAI,MAArB,oBAAyB,sBAAsB;;AAGnD,kBAAI,mCAAmC;AAEvC,kBAAI,mBAAiB,SAAS,GAAG;AAC7B,oBAAI,CAAC,KAAK,iBAAiB;AACvB,uBAAK,kBAAkB,IAAI,eAAe,kBAAgB;AAC1D,uBAAK,gBAAgB,UAAU,KAAK,MAAM;AAC1C,uBAAK,gBAAgB,mBAAmB,IAAI;;AAGhD,oBAAM,eAAe,KAAK,kBAAkB,gBAAgB,CAAC,KAAK,OAAO;AACzE,mDAAmC,CAAC,gCAChC,KAAK,iBACL,YAAY;;AAIpB,kBAAI,KAAK,mBAAmB,kCAAkC;AAC1D,iCAAe,KAAK,KAAK,eAAe;;mBAEzC;AACH,iCAAiB;;AAGrB,qBAAS,IAAI,GAAG,IAAI,iBAAe,QAAQ,KAAK;AAC5C,kBAAM,SAAS,iBAAe,CAAC;AAC/B,qBAAO,OAAM;AAEb,kBAAI,OAAO,iBAAiB;AACxB,oBACI,WAAW,QAAQ,uBAAuB,MAAM,YAAY,cAC5D,WAAW,QAAQ,oBAAoB,MAAM,gBAAgB,SAC/D;AACE,yBAAO,gBAAgB,MAAM,OAAO;uBACjC;AACH,yBAAO,gBAAgB,MAAM,OAAO;;AAGxC,4BAAY,YAAY,OAAO,eAAe;AAE9C,qBAAK,iBAAiB,KAAK,MAAM;AAEjC,oBAAI,IAAI,iBAAe,SAAS,KAAK,WAAW,QAAQ,gBAAgB,GAAG;AACvE,sBAAM,SAAS,SAAS,cAAc,KAAK;AAE3C,sBAAI,gBAAgB,MAAM,YAAY,YAAY;AAC9C,2BAAO,MAAM,OAAO;AACpB,2BAAO,MAAM,QAAQ,WAAW,QAAQ,gBAAgB;yBACrD;AACH,2BAAO,MAAM,SAAS,WAAW,QAAQ,gBAAgB;;AAG7D,wBAAM,YAAY,aAAa,MAAM;;;;AAKjD,gBAAM,uBAAuB,SAAS,cAAc,KAAK;AACzD,iCAAqB,MAAM,WAAW;AACtC,iCAAqB,YAAY,WAAW;AAE5C,kBAAM,YAAY,SAAS,oBAAoB;;AAGnD,gBAAM,YAAY,SAAS,KAAK,oBAAoB;AAEpD,mBAA6B,KAAA,GAAA,KAAA,KAAK,kBAAL,KAAA,GAAA,QAAA,MAAuB;AAA/C,gBAAM,iBAAc,GAAA,EAAA;AACrB,gBAAI,eAAe,UAAK,GAAiC;AACrD,mBAAK,qBAAqC,gBAAgB,KAAK;AAE/D;;;AAIR,iBAAO,KAAK,iBAAiB,SAAS,IAAI,UAAU;QACxD;AAEA,QAAAF,kBAAA,UAAA,YAAA,SAAU,QAAc;AACpB,cAAI,CAAC,QAAQ;AACT,kBAAM,IAAI,MAAM,sCAAsC;;AAG1D,eAAK,CAAC,OAAO,UAAU,OAAO,WAAW,KAAK,WAAW,KAAK,OAAO,QAAQ,MAAM,IAAI,GAAG;AACtF,iBAAK,OAAO,KAAK,MAAM;AAEvB,gBAAI,CAAC,OAAO,QAAQ;AAChB,qBAAO,UAAU,KAAK,MAAM;;AAGhC,mBAAO,mBAAmB,IAAI;iBAC3B;AACH,kBAAM,IAAI,MAAM,UAAA,QAAQ,OAAO,sBAAqB,CAAE;;QAE9D;AAEA,QAAAA,kBAAA,UAAA,eAAA,SAAa,QAAc;AACvB,cAAI,KAAK,kBAAkB,KAAK,oBAAoB,QAAQ;AACxD,iBAAK,uBAAsB;;AAG/B,cAAM,cAAc,KAAK,OAAO,QAAQ,MAAM;AAE9C,cAAI,eAAe,GAAG;AAClB,iBAAK,OAAO,OAAO,aAAa,CAAC;AAEjC,mBAAO,UAAU,MAAS;AAE1B,mBAAO,mBAAmB,IAAI;AAE9B,qBAAS,IAAI,GAAG,IAAI,KAAK,iBAAiB,QAAQ,KAAK;AACnD,kBAAI,KAAK,iBAAiB,CAAC,MAAM,QAAQ;AACrC,qBAAK,iBAAiB,OAAO,GAAG,CAAC;AAEjC;;;AAIR,mBAAO;;AAGX,iBAAO;QACX;AAEA,QAAAA,kBAAA,UAAA,QAAA,WAAA;AACI,eAAK,SAAS,CAAA;AACd,eAAK,mBAAmB,CAAA;AACxB,eAAK,kBAAkB;QAC3B;AAEA,QAAAA,kBAAA,UAAA,eAAA,SAAa,gBAA8B;AAA9B,cAAA,mBAAA,QAAA;AAAA,6BAAA;UAA8B;AACvC,cAAI,SAAkB,CAAA;AAEtB,cAAI,gBAAgB;AAChB,qBAAqB,KAAA,GAAA,KAAA,KAAK,QAAL,KAAA,GAAA,QAAA,MAAa;AAA7B,kBAAM,SAAM,GAAA,EAAA;AACb,qBAAO,KAAI,MAAX,QAAe,OAAO,aAAY,CAAE;;;AAI5C,iBAAO;QACX;AAEA,QAAAA,kBAAA,UAAA,yBAAA,WAAA;AACI,cAAI,SAAiC,CAAA;AAErC,mBAAqB,KAAA,GAAA,KAAA,KAAK,QAAL,KAAA,GAAA,QAAA,MAAa;AAA7B,gBAAM,SAAM,GAAA,EAAA;AACb,mBAAO,KAAI,MAAX,QAAe,OAAO,uBAAsB,CAAE;;AAGlD,iBAAO;QACX;AAEA,eAAA,eAAIA,kBAAA,WAAA,uBAAmB;eAAvB,WAAA;AACI,mBAAO,KAAK,iBAAiB;UACjC;;;;AAEA,eAAA,eAAIA,kBAAA,WAAA,kBAAc;eAAlB,WAAA;AACI,mBAAO,KAAK;UAChB;;;;AACJ,eAAAA;MAAA,EA/gBA;;AAihBA,QAAA;;MAAA,SAAA,QAAA;AAA+B,kBAAAG,YAAA,MAAA;AAoC3B,iBAAAA,aAAA;AAAA,cAAA,QACI,OAAA,KAAA,IAAA,KAAO;AAEP,gBAAK,oBAAoB,IAAI,iBAAiB,KAAI;;QACtD;AAxBU,QAAAA,WAAA,UAAA,gBAAV,SAAwB,QAAa,SAA6B;AAC9D,iBAAA,UAAM,cAAa,KAAA,MAAC,QAAQ,OAAO;AAEnC,eAAK,kBAAkB,MAAM,OAAO,SAAS,GAAG,OAAO;QAC3D;AAEU,QAAAA,WAAA,UAAA,iBAAV,SAAyB,QAAqB,SAA6B;AACvE,iBAAA,UAAM,eAAc,KAAA,MAAC,QAAQ,OAAO;AAEpC,eAAK,kBAAkB,OAAO,QAAQ,WAAW,OAAO;QAC5D;AAEU,QAAAA,WAAA,UAAA,iBAAV,WAAA;AACI,iBAAO,KAAK,kBAAkB,OAC1B,KAAK,gBAAgB,SACf,KAAK,cACL,KAAK,WAAW,QAAQ,kBAAkB;QAExD;AAQA,QAAAA,WAAA,UAAA,sBAAA,WAAA;AACI,iBAAA,UAAM,oBAAmB,KAAA,IAAA;AAEzB,eAAK,kBAAkB,oBAAmB;QAC9C;AAEA,QAAAA,WAAA,UAAA,qBAAA,WAAA;AACI,cAAI,KAAK,kBAAkB,wBAAwB,GAAG;AAClD,mBAAO,OAAA,UAAM,mBAAkB,KAAA,IAAA;iBAC5B;AACH,gBAAI,KAAK,kBAAkB,eAAc,MAAO,GAAG;AAC/C,qBACI,KAAK,kBAAkB,mBAAmB,UAC1C,CAAC,KAAK,WAAW,QAAQ;mBAE1B;AACH,qBAAO,KAAK,kBAAkB,mBAAmB;;;QAG7D;AAEA,QAAAA,WAAA,UAAA,kBAAA,WAAA;AACI,iBAAO;QACX;AAEA,QAAAA,WAAA,UAAA,iBAAA,WAAA;AACI,iBAAO,KAAK,kBAAkB,eAAc;QAChD;AAEA,QAAAA,WAAA,UAAA,cAAA,SAAY,OAAa;AACrB,cAAI,SAAS,KAAK,QAAQ,KAAK,eAAc,GAAI;AAC7C,mBAAO,KAAK,kBAAkB,YAAY,KAAK;iBAC5C;AACH,mBAAO,OAAA,UAAM,YAAW,KAAA,MAAC,KAAK;;QAEtC;AAEA,QAAAA,WAAA,UAAA,gBAAA,SAAc,IAAU;AACpB,cAAM,SAA6B,KAAK,kBAAkB,cAAc,EAAE;AAE1E,iBAAO,SAAS,SAAS,OAAA,UAAM,cAAa,KAAA,MAAC,EAAE;QACnD;AAEA,QAAAA,WAAA,UAAA,gBAAA,WAAA;AACI,cAAM,SAAS,OAAA,UAAM,cAAa,KAAA,IAAA;AAElC,mBAAS,IAAI,GAAG,IAAI,KAAK,eAAc,GAAI,KAAK;AAC5C,gBAAI,SAAS,KAAK,YAAY,CAAC;AAE/B,gBAAI,QAAQ;AACR,qBAAO,KAAK,MAAM;;;AAI1B,iBAAO;QACX;AAEA,QAAAA,WAAA,UAAA,6BAAA,SAA2B,SAA0B;AACjD,iBAAA,UAAM,2BAA0B,KAAA,MAAC,OAAO;AAExC,eAAK,kBAAkB,mBAAmB,OAAO;QACrD;AAEA,QAAAA,WAAA,UAAA,YAAA,SAAU,QAAc;AACpB,eAAK,kBAAkB,UAAU,MAAM;QAC3C;AAEA,QAAAA,WAAA,UAAA,eAAA,SAAa,gBAA8B;AAA9B,cAAA,mBAAA,QAAA;AAAA,6BAAA;UAA8B;AACvC,iBAAO,iBAAiB,KAAK,kBAAkB,aAAY,IAAK,CAAA;QACpE;AAEA,QAAAA,WAAA,UAAA,yBAAA,WAAA;AACI,iBAAO,KAAK,kBAAkB,uBAAsB;QACxD;AAKA,QAAAA,WAAA,UAAA,mBAAA,SAAiB,MAAU;AACvB,cAAI,SAAiC;AAErC,mBAAS,IAAI,GAAG,IAAI,KAAK,eAAc,GAAI,KAAK;AAC5C,gBAAM,SAAS,KAAK,YAAY,CAAC;AAEjC,gBAAI,QAAQ;AAER,uBAAS,OAAO,iBAAiB,IAAI;AAErC,kBAAI,QAAQ;AACR,uBAAO;;;;AAMnB,iBAAO,OAAA,UAAM,iBAAgB,KAAA,MAAC,IAAI;QACtC;AAEA,eAAA,eAAIA,WAAA,WAAA,iBAAa;eAAjB,WAAA;AACI,mBAAO;UACX;;;;AA3IgB,QAAAA,WAAA,sBAAsB,IAAI,gBAAA,aACtC,gBAAA,SAAS,MACT,eACA,MAAM,WAAW;AAIrB,mBAAA;WADC,GAAA,gBAAA,UAASA,WAAU,mBAAmB;;AAsI3C,eAAAA;QA/I+B,WAAW;;AAA7B,YAAA,YAAA;AAiJb,QAAA;;MAAA,SAAA,QAAA;AAA4C,kBAAAC,yBAAA,MAAA;AACxC,iBAAAA,wBACa,eACA,MACA,cACA,mBAA0D;AAJvE,cAAA,QAMI,OAAA,KAAA,MACI,eACA,MACA;YACI,EAAE,OAAO,MAAM,eAAe,QAAO;YACrC,EAAE,OAAO,MAAM,eAAe,SAAQ;YACtC,EAAE,eAAe,gBAAA,SAAS,MAAM,OAAO,MAAM,eAAe,OAAM;YAClE,EAAE,eAAe,gBAAA,SAAS,MAAM,OAAO,MAAM,eAAe,KAAI;YAChE,EAAE,eAAe,gBAAA,SAAS,MAAM,OAAO,MAAM,eAAe,UAAS;YACrE,EAAE,eAAe,gBAAA,SAAS,MAAM,OAAO,MAAM,eAAe,QAAO;aAEvE,cACA,iBAAiB,KACpB;AAlBQ,gBAAA,gBAAA;AACA,gBAAA,OAAA;AACA,gBAAA,eAAA;AACA,gBAAA,oBAAA;;QAgBb;AACJ,eAAAA;MAAA,EAtB4C,gBAAA,gBAAgB;;AAA/C,YAAA,yBAAA;AAwBb,QAAA;;MAAA,SAAA,QAAA;AAA2D,kBAAAC,+BAAA,MAAA;AAA3D,iBAAAA,gCAAA;;QA6LA;AAvLI,eAAA,eAAIA,8BAAA,WAAA,SAAK;eAAT,WAAA;AACI,gBAAI,KAAK,kBAAkB;AACvB,kBAAM,QAAQ,KAAK,SAASA,8BAA6B,aAAa;AAEtE,kBAAI,SAAS,KAAK,WAAW,gBAAgB,eAAe,KAAK,GAAG;AAChE,uBAAO;;;AAIf,mBAAO;UACX;eAEA,SAAU,OAAyB;AAC/B,iBAAK,SAASA,8BAA6B,eAAe,KAAK;UACnE;;;;AAIA,eAAA,eAAcA,8BAAA,WAAA,oBAAgB;;eAA9B,WAAA;AACI,mBAAO;UACX;;;;AAEA,eAAA,eAAcA,8BAAA,WAAA,oBAAgB;eAA9B,WAAA;AACI,mBAAO,KAAK,SAASA,8BAA6B,aAAa,MAAM;UACzE;;;;AAEU,QAAAA,8BAAA,UAAA,cAAV,WAAA;QAEA;AAEU,QAAAA,8BAAA,UAAA,kBAAV,WAAA;AACI,cAAI,KAAK,iBAAiB;AACtB,gBAAM,kBAAkB,KAAK,WAAW,gBAAgB,eACpD,KAAK,OACL,KAAK,WAAW,gBAAgB,eAAe,KAAK,YAAY,CAAC;AAGrE,gBAAI,gBAAgB,iBAAiB;AACjC,kBAAM,UAAU,MAAM,iBAAiB,gBAAgB,eAAe;AACtE,kBAAI,SAAS;AACT,qBAAK,gBAAgB,MAAM,kBAAkB;;;;QAI7D;AAEU,QAAAA,8BAAA,UAAA,eAAV,WAAA;AACI,iBAAA,UAAM,aAAY,KAAA,IAAA;AAElB,cAAI,CAAC,KAAK,iBAAiB;AACvB;;AAGJ,cAAI,kBAAkB,IAAI,SAAA,kBAAiB;AAE3C,cAAI,KAAK,oBAAmB,GAAI;AAC5B,8BAAkB,KAAK,WAAW,qCAC9B,KAAK,oBAAmB,CAAE;;AAIlC,eAAK,gBAAgB,MAAM,aAAa,gBAAgB,MAAM;AAC9D,eAAK,gBAAgB,MAAM,eAAe,gBAAgB,QAAQ;AAClE,eAAK,gBAAgB,MAAM,gBAAgB,gBAAgB,SAAS;AACpE,eAAK,gBAAgB,MAAM,cAAc,gBAAgB,OAAO;AAEhE,cAAI,KAAK,WAAU,GAAI;AAEnB,gBAAM,UAAU,IAAI,SAAA,kBAAiB;AAErC,iBAAK,+BAA+B,OAAO;AAE3C,gBAAM,qBACF,KAAK,WAAW,qCAAqC,OAAO;AAEhE,iBAAK,gBAAgB,MAAM,cAAc,MAAM,mBAAmB,QAAQ;AAC1E,iBAAK,gBAAgB,MAAM,aAAa,MAAM,mBAAmB,OAAO;AAExE,gBAAI,CAAC,KAAK,aAAY,GAAI;AACtB,mBAAK,gBAAgB,MAAM,YAAY,MAAM,mBAAmB,MAAM;AACtE,mBAAK,gBAAgB,MAAM,eAAe,MAAM,mBAAmB,SAAS;;AAGhF,gBACI,KAAK,oBACL,KAAK,yBAAyB,MAAM,YAAY,YAClD;AACE,mBAAK,iBAAiB,MAAM,aAAa,MAAM,mBAAmB,OAAO;AACzE,mBAAK,iBAAiB,MAAM,cAAc,MAAM,mBAAmB,QAAQ;;iBAE5E;AACH,iBAAK,gBAAgB,MAAM,cAAc;AACzC,iBAAK,gBAAgB,MAAM,aAAa;AACxC,iBAAK,gBAAgB,MAAM,YAAY;AACvC,iBAAK,gBAAgB,MAAM,eAAe;AAE1C,gBACI,KAAK,oBACL,KAAK,yBAAyB,MAAM,YAAY,YAClD;AACE,mBAAK,iBAAiB,MAAM,cAAc;AAC1C,mBAAK,iBAAiB,MAAM,aAAa;;;QAGrD;AAEU,QAAAA,8BAAA,UAAA,mBAAV,SAA2B,wBAAuC;AAAvC,cAAA,2BAAA,QAAA;AAAA,qCAAA;UAAuC;AAC9D,cAAI,iBAA0C,KAAK;AAEnD,iBAAO,gBAAgB;AACnB,gBAAI,mCAA4C;AAEhD,gBAAI,wBAAwB;AACxB,iDAAmC;mBAChC;AACH,iDACI,0BAA0B,YACpB,eAAe,gBAAgB,QAAO,IACtC;;AAGd,gBAAI,0BAA0BA,+BAA8B;AACxD,kBACI,KAAK,qBACJ,eAAe,kBAAiB,MAAO,KAAK,kBAAiB,KAC1D,mCACN;AACE,uBAAO;;;AAIf,6BAAiB,eAAe;;AAGpC,iBAAO;QACX;AAEU,QAAAA,8BAAA,UAAA,oBAAV,WAAA;AACI,iBAAO,KAAK,iBAAgB,KAAM,KAAK,aAAY,IAC7C,IAAI,SAAA,kBACA,MAAM,QAAQ,SACd,MAAM,QAAQ,SACd,MAAM,QAAQ,SACd,MAAM,QAAQ,OAAO,IAEzB,OAAA,UAAM,kBAAiB,KAAA,IAAA;QACjC;AAEA,QAAAA,8BAAA,UAAA,6BAAA,SAA2B,SAA0B;AACjD,iBAAA,UAAM,2BAA0B,KAAA,MAAC,OAAO;AAExC,cAAM,gBAAgB,KAAK,SAASA,8BAA6B,aAAa;AAE9E,cAAI,kBAAkB,QAAW;AAC7B,gBAAM,kBAAkB,KAAK,WAAW,gBAAgB,eAAe,aAAa;AAEpF,gBAAI,CAAC,iBAAiB;AAClB,sBAAQ,WACJ,MACA,MAAM,gBAAgB,sBACtB,UAAA,QAAQ,OAAO,qBAAqB,eAAe,OAAO,CAAC;;;QAI3E;AAEA,QAAAA,8BAAA,UAAA,SAAA,WAAA;AACI,cAAM,kBAAkB,OAAA,UAAM,OAAM,KAAA,IAAA;AAEpC,cAAI,mBAAmB,KAAK,iBAAgB,GAAI;AAC5C,iBAAK,gBAAe;;AAGxB,eAAK,YAAW;AAEhB,iBAAO;QACX;AAEA,QAAAA,8BAAA,UAAA,oBAAA,WAAA;AACI,cAAM,iBAAiB,KAAK;AAE5B,iBAAO,iBAAiB,iBAAiB,OAAA,UAAM,kBAAiB,KAAA,IAAA;QACpE;AAzLgB,QAAAA,8BAAA,gBAAgB,IAAI,uBAAuB,gBAAA,SAAS,MAAM,OAAO;AAGjF,mBAAA;WADC,GAAA,gBAAA,UAASA,8BAA6B,aAAa;;AAwLxD,eAAAA;QA7L2D,oBAAoB;;AAAzD,YAAA,+BAAA;AA+LtB,QAAA;;MAAA,SAAA,QAAA;AAA4C,kBAAAC,gBAAA,MAAA;AAA5C,iBAAAA,iBAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AAOY,gBAAA,SAAkB;;QAkC9B;AA3Bc,QAAAA,eAAA,UAAA,4BAAV,SAAoC,iBAA4B;AAC5D,iBAAA,UAAM,0BAAyB,KAAA,MAAC,eAAe;AAE/C,cAAI,KAAK,gBAAgB;AACrB,4BAAgB,MAAM,YAAY,KAAK,iBAAiB;;QAEhE;AAEU,QAAAA,eAAA,UAAA,uBAAV,WAAA;AACI,iBAAO;QACX;AAEU,QAAAA,eAAA,UAAA,WAAV,WAAA;AACI,iBAAO,KAAK;QAChB;AAEU,QAAAA,eAAA,UAAA,WAAV,SAAmB,OAAc;AAC7B,eAAK,SAAS;QAClB;AAEA,eAAA,eAAcA,eAAA,WAAA,uBAAmB;eAAjC,WAAA;AACI,mBAAO;UACX;;;;AAEA,QAAAA,eAAA,UAAA,aAAA,WAAA;AACI,kBAAQ,KAAK,iBAAgB,KAAM,KAAK,WAAW,qBAAqB,KAAK,SAAQ;QACzF;AArCgB,QAAAA,eAAA,gBAAgB,IAAI,gBAAA,aAAa,gBAAA,SAAS,MAAM,SAAS,KAAK;AAC9D,QAAAA,eAAA,oBAAoB,IAAI,gBAAA,kBAAkB,gBAAA,SAAS,MAAM,WAAW;AAGpF,mBAAA;WADC,GAAA,gBAAA,UAASA,eAAc,aAAa;;AAIrC,mBAAA;WADC,GAAA,gBAAA,UAASA,eAAc,iBAAiB;;AAgC7C,eAAAA;QAzC4C,4BAA4B;;AAAlD,YAAA,gBAAA;AA2CtB,QAAA;;MAAA,SAAA,QAAA;AAAqC,kBAAAC,kBAAA,MAAA;AAArC,iBAAAA,mBAAA;;QAqGA;AAhEc,QAAAA,iBAAA,UAAA,eAAV,WAAA;AACI,iBAAO;QACX;AAEU,QAAAA,iBAAA,UAAA,gBAAV,SAAwB,QAAa,SAAiC;AAClE,cAAI,OAAO,WAAW,UAAU;AAC5B,iBAAK,mBAAkB;AACvB,iBAAK,MAAM;iBACR;AACH,mBAAO,OAAA,UAAM,cAAa,KAAA,MAAC,QAAQ,OAAO;;QAElD;AAEA,QAAAA,iBAAA,UAAA,QAAA,SAAM,SAAoB;AACtB,cAAI,KAAK,OAAO,QAAQ,iBAAiB;AACrC,oBAAQ,gBAAgB,MAAM,kBAC1B,UACA,QAAQ,wBAAwBA,iBAAgB,aAAa,KAAK,GAAG,IACrE;AAEJ,oBAAQ,KAAK,UAAU;cACnB,KAAK,MAAM,SAAS;AAChB,wBAAQ,gBAAgB,MAAM,mBAAmB;AACjD;cACJ,KAAK,MAAM,SAAS;AAChB,wBAAQ,gBAAgB,MAAM,mBAAmB;AACjD;cACJ,KAAK,MAAM,SAAS;AAChB,wBAAQ,gBAAgB,MAAM,mBAAmB;AACjD;cACJ,KAAK,MAAM,SAAS;cACpB;AACI,wBAAQ,gBAAgB,MAAM,mBAAmB;AACjD,wBAAQ,gBAAgB,MAAM,iBAAiB;AAC/C;;AAGR,oBAAQ,KAAK,qBAAqB;cAC9B,KAAK,MAAM,oBAAoB;AAC3B;cACJ,KAAK,MAAM,oBAAoB;AAC3B,wBAAQ,gBAAgB,MAAM,sBAAsB;AACpD;cACJ,KAAK,MAAM,oBAAoB;AAC3B,wBAAQ,gBAAgB,MAAM,sBAAsB;AACpD;;AAGR,oBAAQ,KAAK,mBAAmB;cAC5B,KAAK,MAAM,kBAAkB;AACzB;cACJ,KAAK,MAAM,kBAAkB;AACzB,wBAAQ,gBAAgB,MAAM,sBAAsB;AACpD;cACJ,KAAK,MAAM,kBAAkB;AACzB,wBAAQ,gBAAgB,MAAM,sBAAsB;AACpD;;;QAGhB;AAEA,QAAAA,iBAAA,UAAA,UAAA,WAAA;AACI,iBAAO,KAAK,MAAM,OAAO;QAC7B;AAjGgB,QAAAA,iBAAA,cAAc,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,KAAK;AACrD,QAAAA,iBAAA,mBAAmB,IAAI,gBAAA,aACnC,gBAAA,SAAS,MACT,YACA,MAAM,UACN,MAAM,SAAS,KAAK;AAER,QAAAA,iBAAA,8BAA8B,IAAI,gBAAA,aAC9C,gBAAA,SAAS,MACT,uBACA,MAAM,qBACN,MAAM,oBAAoB,IAAI;AAElB,QAAAA,iBAAA,4BAA4B,IAAI,gBAAA,aAC5C,gBAAA,SAAS,MACT,qBACA,MAAM,mBACN,MAAM,kBAAkB,GAAG;AAI/B,mBAAA;WADC,GAAA,gBAAA,UAASA,iBAAgB,WAAW;;AAIrC,mBAAA;WADC,GAAA,gBAAA,UAASA,iBAAgB,gBAAgB;;AAI1C,mBAAA;WADC,GAAA,gBAAA,UAASA,iBAAgB,2BAA2B;;AAIrD,mBAAA;WADC,GAAA,gBAAA,UAASA,iBAAgB,yBAAyB;;AAqEvD,eAAAA;QArGqC,gBAAA,kBAAkB;;AAA1C,YAAA,kBAAA;AAuGb,QAAA;;MAAA,SAAA,QAAA;AAA+B,kBAAAC,YAAA,MAAA;AAA/B,iBAAAA,aAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AA2BY,gBAAA,SAAwB,CAAA;AACxB,gBAAA,iBAAgC,CAAA;;QAsb5C;AAncI,eAAA,eAAIA,WAAA,WAAA,mBAAe;eAAnB,WAAA;AACI,mBAAO,KAAK,SAASA,WAAU,uBAAuB;UAC1D;;;;AAaU,QAAAA,WAAA,UAAA,eAAV,SAAuB,MAAmB,OAAe,aAAoB;AACzE,cAAI,CAAC,KAAK,UAAU,aAAa;AAC7B,gBAAI,KAAK,cAAc;AACnB,kBAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,QAAQ;AAC1C,qBAAK,OAAO,KAAK,IAAI;qBAClB;AACH,qBAAK,OAAO,OAAO,OAAO,GAAG,IAAI;;AAGrC,mBAAK,UAAU,IAAI;mBAChB;AACH,oBAAM,IAAI,MAAM,UAAA,QAAQ,OAAO,yBAAyB,KAAK,gBAAe,CAAE,CAAC;;iBAEhF;AACH,kBAAM,IAAI,MAAM,UAAA,QAAQ,OAAO,uBAAsB,CAAE;;QAE/D;AAEU,QAAAA,WAAA,UAAA,iCAAV,WAAA;AACI,iBAAO;QACX;AAEU,QAAAA,WAAA,UAAA,kBAAV,WAAA;AACI,cAAI,KAAK,gBAAgB,QAAO,KAAM,KAAK,iBAAiB;AACxD,iBAAK,gBAAgB,MAAM,IAAI;;AAGnC,iBAAA,UAAM,gBAAe,KAAA,IAAA;QACzB;AAEU,QAAAA,WAAA,UAAA,WAAV,SAAmB,SAAoB;AACnC,cAAI,KAAK,QAAQ,QAAW;AACxB,oBAAQ,MAAM,KAAK,MAAM,QAAQ;;QAEzC;AAEU,QAAAA,WAAA,UAAA,iBAAV,WAAA;AACI,eAAK,iBAAiB,CAAA;AAGtB,cAAM,aAAa,KAAK;AAExB,cAAM,UAAU,SAAS,cAAc,KAAK;AAE5C,eAAK,SAAS,OAAO;AAErB,kBAAQ,UAAU,IAAI,WAAW,iBAAiB,cAAc,CAAC;AACjE,kBAAQ,MAAM,UAAU;AACxB,kBAAQ,MAAM,gBAAgB;AAE9B,cAAI,SAAA,eAAe,iCAAiC;AAYhD,oBAAQ,MAAM,YAAY;;AAG9B,kBAAQ,KAAK,qCAAoC,GAAI;YACjD,KAAK,MAAM,kBAAkB;AACzB,sBAAQ,MAAM,iBAAiB;AAC/B;YACJ,KAAK,MAAM,kBAAkB;AACzB,sBAAQ,MAAM,iBAAiB;AAC/B;YACJ;AACI,sBAAQ,MAAM,iBAAiB;AAC/B;;AAGR,cAAI,KAAK,OAAO,SAAS,GAAG;AACxB,qBAAmB,KAAA,GAAA,KAAA,KAAK,QAAL,KAAA,GAAA,QAAA,MAAa;AAA3B,kBAAM,OAAI,GAAA,EAAA;AACX,kBAAM,eAAe,KAAK,iBAAiB,IAAI,IAAI,KAAK,OAAM,IAAK;AAEnE,kBAAI,cAAc;AACd,oBAAI,KAAK,eAAe,SAAS,KAAK,KAAK,kBAAkB;AACzD,uBAAK,iBAAiB,MAAM,OAAO;AAEnC,wBAAM,YAAY,SAAS,KAAK,gBAAgB;;AAGpD,sBAAM,YAAY,SAAS,YAAY;AAEvC,qBAAK,eAAe,KAAK,IAAI;;;iBAGlC;AACH,gBAAI,KAAK,aAAY,GAAI;AACrB,kBAAM,qBAAqB,KAAK,yBAAwB;AACxD,iCAAmB,MAAM,QAAQ;AACjC,iCAAmB,MAAM,SAAS;AAElC,sBAAQ,YAAY,kBAAkB;;;AAI9C,iBAAO;QACX;AAEU,QAAAA,WAAA,UAAA,mBAAV,SAA2B,WAAiB;AACxC,cAAI,KAAK,iBAAiB;AAEtB,gBAAM,aAAW,KAAK,gBAAgB,YAAY,YAAY;AAE9D,gBAAM,kBAAgB,SAAC,aAAwB;AAC3C,kBAAM,MAAM,YAAY;AAExB,kBAAI,KAAK;AACL,wBAAQ,MAAM,aAAa,KAAK,UAAQ,GAAG;kBACvC,KAAK,MAAM,mBAAmB;AAC1B,wBAAM,cAAc,YAAY,eAAe,EAAC;AAGhD,wBAAI,aAAa;AACb,sCAAc,WAAW;;AAE7B;kBACJ,KAAK,MAAM,mBAAmB;AAC1B,wBAAM,qBAAqB,aAAW,IAAI;AAC1C,gCAAY,gBAAgB,EAAE,kBAAkB;AAChD;kBACJ,KAAK,MAAM,mBAAmB;AAC1B,gCAAY,gBAAgB,EAAE,CAAC;AAC/B;;;YAGhB;AAEA,qBAAmB,KAAA,GAAA,KAAA,KAAK,QAAL,KAAA,GAAA,QAAA,MAAa;AAA3B,kBAAM,OAAI,GAAA,EAAA;AACX,8BAAc,IAAI;;AAGtB,mBAAO;;AAGX,iBAAO;QACX;AAEU,QAAAA,WAAA,UAAA,yBAAV,WAAA;AACI,mBAAmB,KAAA,GAAA,KAAA,KAAK,QAAL,KAAA,GAAA,QAAA,MAAa;AAA3B,gBAAM,OAAI,GAAA,EAAA;AACX,iBAAK,eAAe,EAAC;;QAE7B;AAEU,QAAAA,WAAA,UAAA,mBAAV,SAA2B,wBAAuC;AAAvC,cAAA,2BAAA,QAAA;AAAA,qCAAA;UAAuC;AAC9D,cAAI,SAAS,yBAAyB,QAAQ,KAAK,gBAAgB,QAAO;AAE1E,iBAAO,UAAU,OAAA,UAAM,iBAAgB,KAAA,MAAC,sBAAsB;QAClE;AAEU,QAAAA,WAAA,UAAA,oBAAV,WAAA;AACI,iBAAO;QACX;AAEU,QAAAA,WAAA,UAAA,gBAAV,SAAwB,QAAa,SAA6B;AAC9D,iBAAA,UAAM,cAAa,KAAA,MAAC,QAAQ,OAAO;AAEnC,eAAK,MAAK;AACV,eAAK,kBAAkB,KAAK;AAE5B,cAAI,YAAY,OAAO,KAAK,+BAA8B,CAAE;AAE5D,cACI,CAAC,MAAM,QAAQ,SAAS,KACxB,OAAO,cAAc,YACrB,KAAK,kBAAiB,GACxB;AACE,gBAAM,WAAW,MAAM,YAAY,UAAU,MAAM,CAAC;AACpD,gBAAI,UAAU;AACV,kBAAM,eAAe,QAAQ,gBAAgB,WAAW,QAAQ;AAChE,mBAAI,iBAAY,QAAZ,iBAAY,SAAA,SAAZ,aAAc,uBAAsB,WAAA,yBAAyB,YAAY;AACzE,oBAAM,UAAU,QAAQ,aACpB,MACA,WACA,CAAA,GACA,CAAC,KAAK,aAAY,GAClB,IAAI;AAGR,oBAAI,SAAS;AACT,uBAAK,aAAa,SAAS,IAAI,IAAI;;;;qBAIxC,MAAM,QAAQ,SAAS,GAAG;AACjC,qBAAmB,KAAA,GAAA,cAAA,WAAA,KAAA,YAAA,QAAA,MAAW;AAAzB,kBAAM,OAAI,YAAA,EAAA;AACX,kBAAM,UAAU,QAAQ,aACpB,MACA,MACA,KAAK,uBAAsB,GAC3B,CAAC,KAAK,aAAY,CAAE;AAGxB,kBAAI,SAAS;AACT,qBAAK,aAAa,SAAS,IAAI,IAAI;;;;QAInD;AAEU,QAAAA,WAAA,UAAA,iBAAV,SAAyB,QAAqB,SAA6B;AACvE,iBAAA,UAAM,eAAc,KAAA,MAAC,QAAQ,OAAO;AAEpC,cAAM,yBAAyB,KAAK,+BAA8B;AAElE,cACI,KAAK,OAAO,WAAW,KACvB,KAAK,OAAO,CAAC,EAAE,4BAA2B,MAAO,WAAA,yBAAyB,MAC5E;AAEE,oBAAQ,eAAe,QAAQ,wBAAwB,KAAK,OAAO,CAAC,EAAE,OAAO,OAAO,CAAC;iBAClF;AACH,oBAAQ,eAAe,QAAQ,wBAAwB,KAAK,MAAM;;QAE1E;AAEA,eAAA,eAAcA,WAAA,WAAA,gBAAY;eAA1B,WAAA;AACI,mBAAO;UACX;;;;AAEA,QAAAA,WAAA,UAAA,sBAAA,WAAA;AACI,cACI,SAAA,eAAe,kDACf,CAAC,KAAK,iBAAiB,IAAI,GAC7B;AACE,mBAAO,IAAI,SAAA,kBAAiB;;AAGhC,iBAAO,OAAA,UAAM,oBAAmB,KAAA,IAAA;QACpC;AAEA,QAAAA,WAAA,UAAA,uCAAA,WAAA;AACI,cAAI,KAAK,6BAA6B,QAAW;AAC7C,mBAAO,KAAK;;AAGhB,cAAM,kBAAkB,KAAK,mBAAkB;AAE/C,iBAAO,kBACD,gBAAgB,qCAAoC,IACpD,MAAM,kBAAkB;QAClC;AAEA,QAAAA,WAAA,UAAA,eAAA,WAAA;AACI,iBAAO,KAAK,OAAO;QACvB;AAEA,QAAAA,WAAA,UAAA,YAAA,SAAU,OAAa;AACnB,iBAAO,KAAK,OAAO,KAAK;QAC5B;AAEA,QAAAA,WAAA,UAAA,8BAAA,WAAA;AACI,cAAI,KAAK,mBAAmB,KAAK,kBAAkB,KAAK,eAAe,SAAS,GAAG;AAC/E,qBAAmB,KAAA,GAAA,KAAA,KAAK,gBAAL,KAAA,GAAA,QAAA,MAAqB;AAAnC,kBAAM,OAAI,GAAA,EAAA;AACX,kBAAI,KAAK,WAAW;AAChB,uBAAO;;;;AAKnB,iBAAO;QACX;AAEA,QAAAA,WAAA,UAAA,6BAAA,WAAA;AACI,cAAI,KAAK,mBAAmB,KAAK,kBAAkB,KAAK,eAAe,SAAS,GAAG;AAC/E,qBAAS,IAAI,KAAK,eAAe,SAAS,GAAG,KAAK,GAAG,KAAK;AACtD,kBAAI,KAAK,eAAe,CAAC,EAAE,WAAW;AAClC,uBAAO,KAAK,eAAe,CAAC;;;;AAKxC,iBAAO;QACX;AAEA,QAAAA,WAAA,UAAA,kBAAA,WAAA;AACI,iBAAO;QACX;AAEA,QAAAA,WAAA,UAAA,iBAAA,SAAe,SAAoB;AAC/B,cAAM,aAAa,KAAK,aAAY;AAEpC,mBAAmB,KAAA,GAAA,KAAA,KAAK,QAAL,KAAA,GAAA,QAAA,MAAa;AAA3B,gBAAM,OAAI,GAAA,EAAA;AACX,gBAAI,KAAK,aAAa,YAAY;AAC9B,qBAAO,SAAS;;;AAIxB,iBAAO;QACX;AAEA,QAAAA,WAAA,UAAA,gBAAA,SAAc,SAAoB;AAC9B,cAAM,aAAa,KAAK,aAAY;AAEpC,mBAAS,IAAI,KAAK,OAAO,SAAS,GAAG,KAAK,GAAG,KAAK;AAC9C,gBAAI,KAAK,OAAO,CAAC,EAAE,aAAa,YAAY;AACxC,qBAAO,KAAK,OAAO,CAAC,MAAM;;;AAIlC,iBAAO;QACX;AAEA,QAAAA,WAAA,UAAA,QAAA,WAAA;AACI,cAAI,KAAK,QAAQ,QAAW;AACxB,mBAAO,KAAK;iBACT;AACH,gBAAM,kBAAkB,KAAK,mBAAkB;AAE/C,mBAAO,kBAAkB,gBAAgB,MAAK,IAAK;;QAE3D;AAEA,QAAAA,WAAA,UAAA,kBAAA,WAAA;AACI,cAAM,oBAAoB,KAAK,4BAA2B;AAE1D,iBACI,KAAK,WAAU,MAAO,oBAAoB,kBAAkB,gBAAe,IAAK;QAExF;AAEA,QAAAA,WAAA,UAAA,qBAAA,WAAA;AACI,cAAM,mBAAmB,KAAK,2BAA0B;AAExD,iBACI,KAAK,WAAU,MACd,mBACK,iBAAiB,mBAAkB,KACnC,iBAAiB,kBAAiB,MAAO,KAAK,kBAAiB,IAC/D;QAEd;AAEA,QAAAA,WAAA,UAAA,UAAA,SAAQ,aAAwB;AAC5B,iBAAO,KAAK,OAAO,QAAQ,WAAW;QAC1C;AAEA,QAAAA,WAAA,UAAA,UAAA,SAAQ,MAAiB;AACrB,eAAK,aAAa,MAAM,IAAI,KAAK;QACrC;AAEA,QAAAA,WAAA,UAAA,mBAAA,SAAiB,MAAmB,cAAyB;AACzD,eAAK,aAAa,MAAM,KAAK,OAAO,QAAQ,YAAY,GAAG,KAAK;QACpE;AAEA,QAAAA,WAAA,UAAA,kBAAA,SAAgB,MAAmB,aAAwB;AACvD,eAAK,aAAa,MAAM,KAAK,OAAO,QAAQ,WAAW,IAAI,GAAG,KAAK;QACvE;AAEA,QAAAA,WAAA,UAAA,aAAA,SAAW,MAAiB;AACxB,cAAM,YAAY,KAAK,OAAO,QAAQ,IAAI;AAE1C,cAAI,aAAa,GAAG;AAChB,iBAAK,OAAO,OAAO,WAAW,CAAC;AAE/B,iBAAK,UAAU,MAAS;AAExB,iBAAK,aAAY;AAEjB,mBAAO;;AAGX,iBAAO;QACX;AAEA,QAAAA,WAAA,UAAA,QAAA,WAAA;AACI,eAAK,SAAS,CAAA;AACd,eAAK,iBAAiB,CAAA;QAC1B;AAEA,QAAAA,WAAA,UAAA,yBAAA,WAAA;AACI,cAAM,SAAS,OAAA,UAAM,uBAAsB,KAAA,IAAA;AAE3C,cAAI,KAAK,gBAAgB,QAAO,GAAI;AAChC,mBAAO,KAAK;;cAER,KAAK,KAAK,gBAAgB;cAC1B,UAAU;aACb;;AAGL,iBAAO;QACX;AAEA,QAAAA,WAAA,UAAA,gBAAA,SAAc,IAAU;AACpB,cAAI,SAA6B,OAAA,UAAM,cAAa,KAAA,MAAC,EAAE;AAEvD,cAAI,CAAC,QAAQ;AACT,gBAAI,KAAK,cAAc;AACnB,uBAAS,KAAK,aAAa,cAAc,EAAE;;AAG/C,gBAAI,CAAC,QAAQ;AACT,uBAAmB,KAAA,GAAA,KAAA,KAAK,QAAL,KAAA,GAAA,QAAA,MAAa;AAA3B,oBAAM,OAAI,GAAA,EAAA;AACX,yBAAS,KAAK,cAAc,EAAE;AAE9B,oBAAI,QAAQ;AACR;;;;;AAMhB,iBAAO;QACX;AAEA,eAAA,eAAIA,WAAA,WAAA,WAAO;eAAX,WAAA;AACI,mBAAO,KAAK,WAAU;UAC1B;eAEA,SAAY,OAAoC;AAC5C,iBAAK,WAAW,KAAK;UACzB;;;;AAEA,eAAA,eAAIA,WAAA,WAAA,gBAAY;eAAhB,WAAA;AACI,mBAAO,KAAK;UAChB;eAEA,SAAiB,OAAyB;AACtC,iBAAK,gBAAgB;UACzB;;;;AAEA,eAAA,eAAIA,WAAA,WAAA,SAAK;eAAT,WAAA;AACI,mBAAO,KAAK,SAAQ;UACxB;eAEA,SAAU,OAAc;AACpB,iBAAK,SAAS,KAAK;UACvB;;;;AA/cgB,QAAAA,WAAA,0BAA0B,IAAI,gBAAA,2BAC1C,gBAAA,SAAS,MACT,mBACA,eAAe;AAEH,QAAAA,WAAA,mCAAmC,IAAI,gBAAA,aACnD,gBAAA,SAAS,MACT,4BACA,MAAM,iBAAiB;AAEX,QAAAA,WAAA,cAAc,IAAI,gBAAA,aAAa,gBAAA,SAAS,MAAM,KAAK;AAGnE,mBAAA;WADC,GAAA,gBAAA,UAASA,WAAU,uBAAuB;;AAM3C,mBAAA;WADC,GAAA,gBAAA,UAASA,WAAU,gCAAgC;;AAIpD,mBAAA;WADC,GAAA,gBAAA,UAASA,WAAU,WAAW;;AA4bnC,eAAAA;QAld+B,aAAa;;AAA/B,YAAA,YAAA;AAsdb,QAAA;;MAAA,SAAA,QAAA;AAA4B,kBAAAC,SAAA,MAAA;AAsHxB,iBAAAA,QAAY,OAA8B;AAA9B,cAAA,UAAA,QAAA;AAAA,oBAAA;UAA8B;AAA1C,cAAA,QACI,OAAA,KAAA,IAAA,KAAO;AAjDX,gBAAA,QAAqB;AAIb,gBAAA,kBAA0B;AA+C9B,gBAAK,QAAQ;;QACjB;AA9CU,QAAAA,QAAA,UAAA,4BAAV,SAAoC,iBAA4B;AAC5D,cAAM,4BAA4B;AAElC,cAAI,KAAK,aAAY,GAAI;AACrB,4BAAgB,MAAM,WAAW;AACjC,4BAAgB,MAAM,aACjB,CAAC,KAAK,iBACD,4BACA,KAAK,IAAI,KAAK,gBAAgB,yBAAyB,KAAK;iBACnE;AACH,4BAAgB,MAAM,WAAW;AAEjC,gBAAI,KAAK,gBAAgB;AACrB,8BAAgB,MAAM,YAAY,KAAK,iBAAiB;;;AAIhE,cAAI,KAAK,UAAU,QAAQ;AACvB,4BAAgB,MAAM,OAAO;qBACtB,KAAK,UAAU,WAAW;AACjC,4BAAgB,MAAM,OAAO;qBACtB,KAAK,iBAAiB,SAAA,aAAa;AAC1C,gBAAI,KAAK,MAAM,SAAS,MAAM,SAAS,OAAO;AAC1C,8BAAgB,MAAM,OAAO;AAC7B,8BAAgB,MAAM,QAAQ,KAAK,MAAM,eAAe;mBACrD;AACH,8BAAgB,MAAM,OAClB,UACC,KAAK,kBAAkB,IAAI,KAAK,kBAAkB,KAAK,MAAM,gBAC9D;;;QAGhB;AAEU,QAAAA,QAAA,UAAA,kBAAV,SAA0B,UAA8B;AACpD,iBAAO;QACX;AAEA,eAAA,eAAcA,QAAA,WAAA,wBAAoB;eAAlC,WAAA;AACI,mBAAO,MAAM,YAAY;UAC7B;;;;AAQA,QAAAA,QAAA,UAAA,kBAAA,WAAA;AACI,iBAAO;QACX;AAEA,eAAA,eAAIA,QAAA,WAAA,uBAAmB;eAAvB,WAAA;AACI,gBAAI,KAAK,UAAU,KAAK,kBAAkB,WAAW;AACjD,qBAAO,KAAK,qBAAqB,UAAa,CAAC,KAAK,OAAO,kBAAkB,IAAI;mBAC9E;AACH,qBAAO;;UAEf;;;;AAEA,eAAA,eAAIA,QAAA,WAAA,gBAAY;eAAhB,WAAA;AACI,mBAAO;UACX;;;;AAvIgB,QAAAA,QAAA,gBAAgB,IAAI,gBAAA,eAChC,gBAAA,SAAS,MACT,SACA,SACI,QACA,MACA,QACA,SAAiC;AAEjC,cAAI,SAAsB,KAAK;AAC/B,cAAM,QAAQ,OAAO,KAAK,IAAI;AAC9B,cAAI,eAAe;AAEnB,cAAI,OAAO,UAAU,YAAY,CAAC,MAAM,KAAK,GAAG;AAC5C,qBAAS,IAAI,SAAA,YAAY,OAAO,MAAM,SAAS,MAAM;qBAC9C,UAAU,UAAU,UAAU,WAAW;AAChD,qBAAS;qBACF,OAAO,UAAU,UAAU;AAClC,gBAAI;AACA,uBAAS,SAAA,YAAY,MAAM,KAAK;AAEhC,kBACI,OAAO,SAAS,MAAM,SAAS,SAC/B,KAAK,cAAc,UAAU,QAAQ,aAAa,IAAI,GACxD;AACE,+BAAe;;qBAEd,GAAG;AACR,6BAAe;;iBAEhB;AACH,2BAAe;;AAGnB,cAAI,cAAc;AACd,oBAAQ,cACJ,QACA,MAAM,gBAAgB,sBACtB,UAAA,QAAQ,OAAO,mBAAmB,KAAK,CAAC;AAG5C,qBAAS;;AAGb,iBAAO;QACX,GACA,SACI,QACA,UACA,QACA,OACA,SAAiC;AAEjC,cAAI,iBAAiB,SAAA,aAAa;AAC9B,gBAAI,MAAM,SAAS,MAAM,SAAS,OAAO;AACrC,sBAAQ,eAAe,QAAQ,SAAS,MAAM,eAAe,IAAI;mBAC9D;AACH,sBAAQ,gBAAgB,QAAQ,SAAS,MAAM,YAAY;;iBAE5D;AACH,oBAAQ,eAAe,QAAQ,SAAS,KAAK;;QAErD,GACA,SAAS;AAIb,mBAAA;WADC,GAAA,gBAAA,UAASA,QAAO,aAAa;;AAsElC,eAAAA;QA3I4B,SAAS;;AAAxB,YAAA,SAAA;AA6Ib,QAAA;;MAAA,SAAA,QAAA;AAA+B,kBAAAC,YAAA,MAAA;AAA/B,iBAAAA,aAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AACY,gBAAA,WAAqB,CAAA;;QA+TjC;AA5TY,QAAAA,WAAA,UAAA,uBAAR,SAA6B,QAAa,SAA6B;AACnE,iBAAO,QAAQ,gBACX,MACA,QACA,CAAA,GACA,CAAC,KAAK,aAAY,GAClB,SAAC,UAAgB;AACb,mBAAO,CAAC,YAAY,aAAa,WAAW,IAAI,OAAM,IAAK;UAC/D,GACA,SAAC,UAAkB,YAA+B;AAC9C,oBAAQ,cACJ,QACA,MAAM,gBAAgB,uBACtB,UAAA,QAAQ,OAAO,sBAAsB,QAAQ,CAAC;UAEtD,CAAC;QAET;AAEU,QAAAA,WAAA,UAAA,iBAAV,WAAA;AACI,eAAK,mBAAmB,CAAA;AAExB,cAAI,KAAK,SAAS,SAAS,GAAG;AAE1B,gBAAM,aAAa,KAAK;AAExB,gBAAM,UAAU,SAAS,cAAc,KAAK;AAC5C,oBAAQ,YAAY,WAAW,iBAAiB,cAAc;AAC9D,oBAAQ,MAAM,UAAU;AAExB,gBAAI,SAAA,eAAe,iCAAiC;AAEhD,sBAAQ,MAAM,YAAY;;AAG9B,oBAAQ,KAAK,gCAA+B,GAAI;cAC5C,KAAK,MAAM,oBAAoB;AAC3B,wBAAQ,MAAM,iBAAiB;AAC/B;cACJ,KAAK,MAAM,oBAAoB;AAC3B,wBAAQ,MAAM,iBAAiB;AAC/B;cACJ;AACI,wBAAQ,MAAM,iBAAiB;AAC/B;;AAGR,gBAAI,cAAsB;AAE1B,qBAAqB,KAAA,GAAA,KAAA,KAAK,UAAL,KAAA,GAAA,QAAA,MAAe;AAA/B,kBAAM,SAAM,GAAA,EAAA;AACb,kBACI,OAAO,iBAAiB,SAAA,eACxB,OAAO,MAAM,SAAS,MAAM,SAAS,QACvC;AACE,+BAAe,OAAO,MAAM;;;AAIpC,qBAAqB,KAAA,GAAA,KAAA,KAAK,UAAL,KAAA,GAAA,QAAA,MAAe;AAA/B,kBAAM,SAAM,GAAA,EAAA;AACb,kBACI,OAAO,iBAAiB,SAAA,eACxB,OAAO,MAAM,SAAS,MAAM,SAAS,UACrC,cAAc,GAChB;AACE,oBAAM,iBAAkB,MAAM,cAAe,OAAO,MAAM;AAG1D,uBAAO,iBAAiB,IAAI;;AAGhC,kBAAM,iBAAiB,OAAO,OAAM;AAEpC,kBAAI,gBAAgB;AAChB,oBAAI,KAAK,iBAAiB,SAAS,KAAK,OAAO,kBAAkB;AAC7D,yBAAO,iBAAiB,MAAM,OAAO;AAErC,wBAAM,YAAY,SAAS,OAAO,gBAAgB;;AAGtD,sBAAM,YAAY,SAAS,cAAc;AAEzC,qBAAK,iBAAiB,KAAK,MAAM;;;AAIzC,mBAAO,KAAK,iBAAiB,SAAS,IAAI,UAAU;iBACjD;AACH,mBAAO;;QAEf;AAEU,QAAAA,WAAA,UAAA,mBAAV,SAA2B,WAAiB;AACxC,mBAAqB,KAAA,GAAA,KAAA,KAAK,UAAL,KAAA,GAAA,QAAA,MAAe;AAA/B,gBAAM,SAAM,GAAA,EAAA;AACb,mBAAO,gBAAgB,EAAE,SAAS;;AAGtC,iBAAO;QACX;AAEU,QAAAA,WAAA,UAAA,yBAAV,WAAA;AACI,mBAAqB,KAAA,GAAA,KAAA,KAAK,UAAL,KAAA,GAAA,QAAA,MAAe;AAA/B,gBAAM,SAAM,GAAA,EAAA;AACb,mBAAO,eAAe,EAAC;;QAE/B;AAEA,eAAA,eAAcA,WAAA,WAAA,gBAAY;eAA1B,WAAA;AACI,mBAAO;UACX;;;;AAEU,QAAAA,WAAA,UAAA,gBAAV,SAAwB,QAAa,SAA6B;AAC9D,iBAAA,UAAM,cAAa,KAAA,MAAC,QAAQ,OAAO;AAEnC,eAAK,WAAW,CAAA;AAChB,eAAK,mBAAmB,CAAA;AAExB,cAAM,cAAc,OAAO,SAAS;AAEpC,cAAI,MAAM,QAAQ,WAAW,GAAG;AAC5B,qBAAmB,KAAA,GAAA,gBAAA,aAAA,KAAA,cAAA,QAAA,MAAa;AAA3B,kBAAM,OAAI,cAAA,EAAA;AACX,kBAAM,SAAS,KAAK,qBAAqB,MAAM,OAAO;AAEtD,kBAAI,QAAQ;AACR,qBAAK,SAAS,KAAK,MAAM;;;;QAIzC;AAEU,QAAAA,WAAA,UAAA,iBAAV,SAAyB,QAAqB,SAA6B;AACvE,iBAAA,UAAM,eAAc,KAAA,MAAC,QAAQ,OAAO;AAEpC,kBAAQ,eAAe,QAAQ,WAAW,KAAK,QAAQ;QAC3D;AAEA,QAAAA,WAAA,UAAA,iBAAA,SAAe,SAAoB;AAC/B,mBAAqB,KAAA,GAAA,KAAA,KAAK,UAAL,KAAA,GAAA,QAAA,MAAe;AAA/B,gBAAM,SAAM,GAAA,EAAA;AACb,gBAAI,OAAO,WAAW;AAClB,qBAAO,WAAW;;;AAI1B,iBAAO;QACX;AAEA,QAAAA,WAAA,UAAA,kBAAA,WAAA;AACI,cAAI,KAAK,WAAU,GAAI;AACnB,mBAAO;;AAGX,cAAI,KAAK,oBAAoB,KAAK,iBAAiB,SAAS,GAAG;AAC3D,qBAAqB,KAAA,GAAA,KAAA,KAAK,UAAL,KAAA,GAAA,QAAA,MAAe;AAA/B,kBAAM,SAAM,GAAA,EAAA;AACb,kBAAI,OAAO,gBAAe,GAAI;AAC1B,uBAAO;;;;AAKnB,iBAAO;QACX;AAEA,QAAAA,WAAA,UAAA,qBAAA,WAAA;AACI,cAAI,KAAK,WAAU,GAAI;AACnB,mBAAO;;AAGX,cAAI,KAAK,oBAAoB,KAAK,iBAAiB,SAAS,GAAG;AAC3D,qBAAqB,KAAA,GAAA,KAAA,KAAK,UAAL,KAAA,GAAA,QAAA,MAAe;AAA/B,kBAAM,SAAM,GAAA,EAAA;AACb,kBAAI,OAAO,mBAAkB,GAAI;AAC7B,uBAAO;;;;AAKnB,iBAAO;QACX;AAEA,QAAAA,WAAA,UAAA,eAAA,WAAA;AACI,iBAAO,KAAK,SAAS;QACzB;AAEA,QAAAA,WAAA,UAAA,8BAAA,WAAA;AACI,cAAI,KAAK,mBAAmB,KAAK,oBAAoB,KAAK,iBAAiB,SAAS,GAAG;AACnF,mBAAO,KAAK,iBAAiB,CAAC;iBAC3B;AACH,mBAAO;;QAEf;AAEA,QAAAA,WAAA,UAAA,6BAAA,WAAA;AACI,cAAI,KAAK,mBAAmB,KAAK,oBAAoB,KAAK,iBAAiB,SAAS,GAAG;AACnF,mBAAO,KAAK,iBAAiB,KAAK,iBAAiB,SAAS,CAAC;iBAC1D;AACH,mBAAO;;QAEf;AAEA,QAAAA,WAAA,UAAA,cAAA,SAAY,OAAa;AACrB,iBAAO,KAAK,SAAS,KAAK;QAC9B;AAEA,QAAAA,WAAA,UAAA,YAAA,SAAU,OAAa;AACnB,iBAAO,KAAK,YAAY,KAAK;QACjC;AAEA,QAAAA,WAAA,UAAA,kBAAA,WAAA;AACI,iBAAO;QACX;AAEA,QAAAA,WAAA,UAAA,6BAAA,SAA2B,SAA0B;AACjD,iBAAA,UAAM,2BAA0B,KAAA,MAAC,OAAO;AAExC,cAAI,kBAA0B;AAC9B,cAAI,mBAA2B;AAE/B,mBAAqB,KAAA,GAAA,KAAA,KAAK,UAAL,KAAA,GAAA,QAAA,MAAe;AAA/B,gBAAM,SAAM,GAAA,EAAA;AACb,gBAAI,OAAO,OAAO,UAAU,UAAU;AAClC;uBACO,OAAO,UAAU,WAAW;AACnC;;;AAIR,cAAI,kBAAkB,KAAK,mBAAmB,GAAG;AAC7C,oBAAQ,WACJ,MACA,MAAM,gBAAgB,MACtB,UAAA,QAAQ,MAAM,4CAA2C,CAAE;;QAGvE;AAEA,QAAAA,WAAA,UAAA,YAAA,SAAU,QAAc;AACpB,cAAI,CAAC,OAAO,QAAQ;AAChB,iBAAK,SAAS,KAAK,MAAM;AAEzB,mBAAO,UAAU,IAAI;iBAClB;AACH,kBAAM,IAAI,MAAM,UAAA,QAAQ,OAAO,iCAAgC,CAAE;;QAEzE;AAEA,QAAAA,WAAA,UAAA,aAAA,SAAW,MAAiB;AACxB,cAAI,gBAAgB,QAAQ;AACxB,gBAAM,YAAY,KAAK,SAAS,QAAQ,IAAI;AAE5C,gBAAI,aAAa,GAAG;AAChB,mBAAK,SAAS,OAAO,WAAW,CAAC;AAEjC,mBAAK,UAAU,MAAS;AAExB,mBAAK,aAAY;AAEjB,qBAAO;;;AAIf,iBAAO;QACX;AAEA,QAAAA,WAAA,UAAA,UAAA,SAAQ,aAAwB;AAC5B,iBAAO,uBAAuB,SAAS,KAAK,SAAS,QAAQ,WAAW,IAAI;QAChF;AAEA,QAAAA,WAAA,UAAA,oBAAA,SAAkB,SAAoB;AAClC,iBAAO,KAAK,SAAS,QAAgB,OAAO,MAAM;QACtD;AAEA,QAAAA,WAAA,UAAA,qBAAA,SAAmB,SAAoB;AACnC,iBAAO,KAAK,SAAS,QAAgB,OAAO,MAAM,KAAK,SAAS,SAAS;QAC7E;AAEA,QAAAA,WAAA,UAAA,eAAA,SAAa,SAAoB;AAC7B,iBAAO,KAAK,SAAS,QAAgB,OAAO,KAAK;QACrD;AAEA,QAAAA,WAAA,UAAA,kBAAA,SAAgB,SAAoB;AAChC,iBAAO,KAAK,SAAS,QAAgB,OAAO,KAAK;QACrD;AAEA,QAAAA,WAAA,UAAA,gBAAA,SAAc,IAAU;AACpB,cAAI,SAA6B;AAEjC,mBAAqB,KAAA,GAAA,KAAA,KAAK,UAAL,KAAA,GAAA,QAAA,MAAe;AAA/B,gBAAM,SAAM,GAAA,EAAA;AACb,qBAAS,OAAO,cAAc,EAAE;AAEhC,gBAAI,QAAQ;AACR;;;AAIR,iBAAO;QACX;AAEA,eAAA,eAAIA,WAAA,WAAA,SAAK;eAAT,WAAA;AACI,mBAAO,KAAK,SAAQ;UACxB;eAEA,SAAU,OAAc;AACpB,iBAAK,SAAS,KAAK;UACvB;;;;AAEA,eAAA,eAAIA,WAAA,WAAA,WAAO;eAAX,WAAA;AACI,mBAAO,KAAK,WAAU;UAC1B;eAEA,SAAY,OAAoC;AAC5C,iBAAK,WAAW,KAAK;UACzB;;;;AAEA,eAAA,eAAIA,WAAA,WAAA,gBAAY;eAAhB,WAAA;AACI,mBAAO,KAAK;UAChB;eAEA,SAAiB,OAAyB;AACtC,iBAAK,gBAAgB;UACzB;;;;AACJ,eAAAA;MAAA,EAhU+B,aAAa;;AAA/B,YAAA,YAAA;AAkUb,aAAS,sBAAsB,OAAY;AACvC,UAAM,OAAO,MAAM,eAAc;AACjC,UAAM,uBACF,QAAQ,KAAK,gBAAgB,KAAK,gBAAgB,aAAa;AAEnE,UAAI,sBAAsB;AACtB,6BAAqB,KAAK;;IAElC;AAEA,aAAS,wBACL,SACA,QACA,IAAe;AAEf,UAAM,OAAO,QAAQ,eAAc;AACnC,UAAM,yBACF,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,aAAa;AAEvE,aAAO,2BAA2B,SAC5B,uBAAuB,SAAS,QAAQ,EAAE,IAC1C;IACV;AAEA,aAAS,wBAAwB,QAAc;AAC3C,UAAM,OAAO,OAAO,SAAU,OAAO,OAAO,eAAc,IAAsB;AAChF,UAAM,yBACF,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,aAAa;AAEvE,UAAI,OAAO,oBAAmB,KAAM,wBAAwB;AACxD,+BAAuB,MAAM;;IAErC;AAEA,aAAS,6BAA6B,QAAwB,YAAmB;AAC7E,UAAM,OAAO,OAAO,SAAU,OAAO,OAAO,eAAc,IAAsB;AAChF,UAAM,8BACF,QAAQ,KAAK,uBACP,KAAK,uBACL,aAAa;AAEvB,UAAI,6BAA6B;AAC7B,oCAA4B,QAAQ,UAAU;;IAEtD;AAEA,aAAS,4BAA4B,OAAY;AAC7C,UAAM,OAAO,MAAM,eAAc;AACjC,UAAM,6BACF,QAAQ,KAAK,sBACP,KAAK,sBACL,aAAa;AAEvB,UAAI,4BAA4B;AAC5B,mCAA2B,KAAK;;IAExC;AAEA,aAAS,mCACL,SACA,oBAAkC;AAAlC,UAAA,uBAAA,QAAA;AAAA,6BAAA;MAAkC;AAElC,UAAM,cAAc,QAAQ,eAAc;AAE1C,UAAI,oBAAoB;AACpB,oBAAY,aAAY;;AAG5B,UAAM,OAAO;AACb,UAAM,oCACF,QAAQ,KAAK,6BACP,KAAK,6BACL,aAAa;AAEvB,UAAI,sCAAsC,QAAW;AACjD,0CAAkC,OAAO;;IAEjD;AAKA,aAAS,oCACL,QACA,QAAoB;AAEpB,UAAM,OAAO,OAAO,SAAU,OAAO,OAAO,eAAc,IAAsB;AAChF,UAAM,qCACF,QAAQ,KAAK,8BACP,KAAK,8BACL,aAAa;AAEvB,aAAO,uCAAuC,SACxC,mCAAmC,OAAO,WAAU,GAAI,MAAM,IAC9D;IACV;AAKA,aAAS,gCACL,QACA,sBAA6B;AAE7B,UAAM,OAAO,OAAO,SAAU,OAAO,OAAO,eAAc,IAAsB;AAChF,UAAM,iCACF,QAAQ,KAAK,0BACP,KAAK,0BACL,aAAa;AAEvB,aAAO,mCAAmC,SACpC,+BAA+B,OAAO,WAAU,GAAI,oBAAoB,IACxE;IACV;AAEA,QAAA;;MAAA,SAAA,QAAA;AAAmD,kBAAAC,uBAAA,MAAA;AA0E/C,iBAAAA,wBAAA;AAAA,cAAA,QACI,OAAA,KAAA,IAAA,KAAO;AAEP,gBAAK,oBAAoB,IAAI,iBAAiB,KAAI;;QACtD;AA3EU,QAAAA,sBAAA,UAAA,gBAAV,SAAwB,QAAa,SAA6B;AAC9D,iBAAA,UAAM,cAAa,KAAA,MAAC,QAAQ,OAAO;AAEnC,eAAK,aAAa,QAAQ,OAAO;QACrC;AAEU,QAAAA,sBAAA,UAAA,eAAV,SAAuB,QAAa,SAA6B;AAC7D,eAAK,kBAAkB,MAAM,OAAO,SAAS,GAAG,OAAO;QAC3D;AAEU,QAAAA,sBAAA,UAAA,iBAAV,SAAyB,QAAqB,SAA6B;AACvE,iBAAA,UAAM,eAAc,KAAA,MAAC,QAAQ,OAAO;AAEpC,eAAK,kBAAkB,OAAO,QAAQ,WAAW,OAAO;QAC5D;AAEU,QAAAA,sBAAA,UAAA,iBAAV,WAAA;AACI,cAAM,UAAU,OAAA,UAAM,eAAc,KAAA,IAAA;AAEpC,cAAI,SAAS;AACT,gBAAM,kBAAkB,KAAK,kBAAkB,OAC3C,KAAK,WAAW,QAAQ,kBAAkB;AAG9C,gBAAI,iBAAiB;AACjB,oBAAM,YACF,SACA,iBACI,KAAK,YACL;gBACI,SAAS,KAAK,WAAW,oBACrB,KAAK,WAAW,QAAQ,OAAO;iBAGvC,MAAM,YAAY,UAAU,CAC/B;AAEL,oBAAM,YAAY,SAAS,eAAe;;AAG9C,gBAAI,KAAK,eAAe;AACpB,qBAAO;mBACJ;AACH,qBAAO,QAAQ,SAAS,SAAS,IAAI,UAAU;;iBAEhD;AACH,mBAAO;;QAEf;AAEU,QAAAA,sBAAA,UAAA,uBAAV,WAAA;AACI,cAAI,KAAK,wBAAwB,GAAG;AAChC,mBAAO;qBACA,KAAK,wBAAwB,GAAG;AACvC,mBACI,KAAK,kBAAkB,mBAAmB,UAC1C,CAAC,KAAK,WAAW,QAAQ;iBAE1B;AACH,mBAAO,KAAK,kBAAkB,mBAAmB;;QAEzD;AAEA,eAAA,eAAcA,sBAAA,WAAA,uBAAmB;eAAjC,WAAA;AACI,mBAAO,KAAK,kBAAkB;UAClC;;;;AAEA,eAAA,eAAcA,sBAAA,WAAA,iBAAa;eAA3B,WAAA;AACI,mBAAO;UACX;;;;AAQA,QAAAA,sBAAA,UAAA,sBAAA,WAAA;AACI,iBAAA,UAAM,oBAAmB,KAAA,IAAA;AAEzB,eAAK,kBAAkB,oBAAmB;QAC9C;AAEA,QAAAA,sBAAA,UAAA,iBAAA,WAAA;AACI,iBAAO,KAAK,kBAAkB,eAAc;QAChD;AAEA,QAAAA,sBAAA,UAAA,cAAA,SAAY,OAAa;AACrB,cAAI,SAAS,KAAK,QAAQ,KAAK,eAAc,GAAI;AAC7C,mBAAO,KAAK,kBAAkB,YAAY,KAAK;iBAC5C;AACH,mBAAO,OAAA,UAAM,YAAW,KAAA,MAAC,KAAK;;QAEtC;AAEA,QAAAA,sBAAA,UAAA,gBAAA,SAAc,IAAU;AACpB,cAAM,SAA6B,KAAK,kBAAkB,cAAc,EAAE;AAE1E,iBAAO,SAAS,SAAS,OAAA,UAAM,cAAa,KAAA,MAAC,EAAE;QACnD;AAEA,QAAAA,sBAAA,UAAA,6BAAA,SAA2B,SAA0B;AACjD,iBAAA,UAAM,2BAA0B,KAAA,MAAC,OAAO;AAExC,cAAI,KAAK,mBAAmB;AACxB,iBAAK,kBAAkB,mBAAmB,OAAO;;QAEzD;AAEA,QAAAA,sBAAA,UAAA,gBAAA,SAAc,SAAoB;AAC9B,iBAAO,OAAA,UAAM,cAAa,KAAA,MAAC,OAAO,KAAK,KAAK,kBAAkB,eAAc,MAAO;QACvF;AAEA,QAAAA,sBAAA,UAAA,YAAA,SAAU,QAAc;AACpB,eAAK,kBAAkB,UAAU,MAAM;QAC3C;AAEA,QAAAA,sBAAA,UAAA,QAAA,WAAA;AACI,iBAAA,UAAM,MAAK,KAAA,IAAA;AAEX,eAAK,kBAAkB,MAAK;QAChC;AAEA,QAAAA,sBAAA,UAAA,eAAA,SAAa,gBAA8B;AAA9B,cAAA,mBAAA,QAAA;AAAA,6BAAA;UAA8B;AACvC,cAAI,SAAS,OAAA,UAAM,aAAY,KAAA,MAAC,cAAc;AAE9C,cAAI,gBAAgB;AAChB,mBAAO,KAAI,MAAX,QAAe,KAAK,kBAAkB,aAAa,cAAc,CAAC;;AAGtE,iBAAO;QACX;AAEA,QAAAA,sBAAA,UAAA,yBAAA,WAAA;AACI,cAAI,SAAS,OAAA,UAAM,uBAAsB,KAAA,IAAA;AAEzC,iBAAO,KAAI,MAAX,QAAe,KAAK,kBAAkB,uBAAsB,CAAE;AAE9D,iBAAO;QACX;AAEA,QAAAA,sBAAA,UAAA,qBAAA,WAAA;AACI,cAAI,KAAK,kBAAkB,wBAAwB,GAAG;AAClD,mBAAO,OAAA,UAAM,mBAAkB,KAAA,IAAA;iBAC5B;AACH,gBAAI,KAAK,kBAAkB,eAAc,MAAO,GAAG;AAC/C,qBACI,KAAK,kBAAkB,mBAAmB,UAC1C,CAAC,KAAK,WAAW,QAAQ;mBAE1B;AACH,qBAAO,KAAK,kBAAkB,mBAAmB;;;QAG7D;AAEA,QAAAA,sBAAA,UAAA,0BAAA,WAAA;AACI,iBAAO,CAAA;QACX;AAEA,eAAA,eAAIA,sBAAA,WAAA,gBAAY;eAAhB,WAAA;AACI,mBAAO;UACX;;;;AACJ,eAAAA;MAAA,EAtKmD,SAAS;;AAAtC,YAAA,uBAAA;AA6KtB,QAAA;;MAAA,SAAA,QAAA;AAA2C,kBAAAC,wBAAA,MAAA;AA4CvC,iBAAAA,uBAAqB,eAAiC,MAAY;AAAlE,cAAA,QACI,OAAA,KAAA,MAAM,eAAe,MAAM,MAAS,KAAC;AADpB,gBAAA,gBAAA;AAAiC,gBAAA,OAAA;;QAEtD;AA7CA,QAAAA,uBAAA,UAAA,QAAA,SACI,QACA,QACA,SAA6B;AAE7B,cAAM,SAAS,QAAQ,YAAY,OAAO,QAAQ,OAAO,KAAK,IAAI,GAAG,CAAA,GAAI,KAAK;AAE9E,cAAI,WAAW,QAAW;AACtB,gBAAI,kBAAkB,eAAe;AACjC,qBAAO;;AAGX,oBAAQ,cACJ,QACA,MAAM,gBAAgB,sBACtB,UAAA,QAAQ,OAAO,qBAAqB,OAAO,gBAAe,CAAE,CAAC;;AAIrE,kBAAQ,cACJ,QACA,MAAM,gBAAgB,oBACtB,UAAA,QAAQ,OAAO,kBAAkB,QAAQ,CAAC;AAG9C,iBAAO;QACX;AAEA,QAAAA,uBAAA,UAAA,SAAA,SACI,QACA,QACA,OACA,SAA6B;AAE7B,kBAAQ,eACJ,QACA,KAAK,MACL,QAAQ,MAAM,OAAO,OAAO,IAAI,QAChC,QACA,IAAI;QAEZ;AAKJ,eAAAA;MAAA,EA/C2C,gBAAA,kBAAkB;;AAAhD,YAAA,wBAAA;AAiDb,QAAA;;MAAA,SAAA,QAAA;AAAuC,kBAAAC,oBAAA,MAAA;AAAvC,iBAAAA,qBAAA;;QA6BA;AAtBI,eAAA,eAAIA,mBAAA,WAAA,UAAM;eAAV,WAAA;AACI,mBAAO,KAAK,SAASA,mBAAkB,cAAc;UACzD;eAEA,SAAW,OAAoB;AAC3B,iBAAK,SAASA,mBAAkB,gBAAgB,KAAK;AAErD,gBAAI,OAAO;AACP,oBAAM,UAAU,KAAK,MAAM;;UAEnC;;;;AAKU,QAAAA,mBAAA,UAAA,eAAV,WAAA;AACI,iBAAO;QACX;AArBgB,QAAAA,mBAAA,iBAAiB,IAAI,sBAAsB,gBAAA,SAAS,MAAM,QAAQ;AAClE,QAAAA,mBAAA,kBAAkB,IAAI,gBAAA,oBAAoB,gBAAA,SAAS,MAAM,SAAS;AAGlF,mBAAA;WADC,GAAA,gBAAA,UAASA,mBAAkB,cAAc;;AAc1C,mBAAA;WADC,GAAA,gBAAA,UAASA,mBAAkB,eAAe;;AAU/C,eAAAA;QA7BuC,gBAAA,kBAAkB;;AAA5C,YAAA,oBAAA;AA+Bb,QAAA;;MAAA,SAAA,QAAA;AAAoC,kBAAAC,iBAAA,MAAA;AAApC,iBAAAA,kBAAA;;QAyBA;AAjBc,QAAAA,gBAAA,UAAA,eAAV,WAAA;AACI,iBAAO;QACX;AAPgB,QAAAA,gBAAA,eAAe,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,MAAM;AACvD,QAAAA,gBAAA,gBAAgB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,OAAO;AACzD,QAAAA,gBAAA,gBAAgB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,OAAO;AACzD,QAAAA,gBAAA,gBAAgB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,OAAO;AASzE,mBAAA;WADC,GAAA,gBAAA,UAASA,gBAAe,YAAY;;AAIrC,mBAAA;WADC,GAAA,gBAAA,UAASA,gBAAe,aAAa;;AAItC,mBAAA;WADC,GAAA,gBAAA,UAASA,gBAAe,aAAa;;AAItC,mBAAA;WADC,GAAA,gBAAA,UAASA,gBAAe,aAAa;;AAE1C,eAAAA;QAzBoC,gBAAA,kBAAkB;;AAAzC,YAAA,iBAAA;AA2Bb,QAAA;;MAAA,SAAA,QAAA;AAA2C,kBAAAC,wBAAA,MAAA;AAA3C,iBAAAA,yBAAA;;QAqBA;AAdc,QAAAA,uBAAA,UAAA,eAAV,WAAA;AACI,iBAAO;QACX;AANgB,QAAAA,uBAAA,aAAa,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,IAAI;AACnD,QAAAA,uBAAA,cAAc,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,KAAK;AACrD,QAAAA,uBAAA,qBAAqB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,YAAY;AASnF,mBAAA;WADC,GAAA,gBAAA,UAASA,uBAAsB,UAAU;;AAI1C,mBAAA;WADC,GAAA,gBAAA,UAASA,uBAAsB,WAAW;;AAI3C,mBAAA;WADC,GAAA,gBAAA,UAASA,uBAAsB,kBAAkB;;AAEtD,eAAAA;QArB2C,gBAAA,kBAAkB;;AAAhD,YAAA,wBAAA;AAuBb,QAAA;;MAAA,SAAA,QAAA;AAAoC,kBAAAC,iBAAA,MAAA;AAApC,iBAAAA,kBAAA;;QAkCA;AAjBc,QAAAA,gBAAA,UAAA,eAAV,WAAA;AACI,iBAAO;QACX;AAhBgB,QAAAA,gBAAA,eAAe,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,MAAM;AACvD,QAAAA,gBAAA,yBAAyB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,gBAAgB;AAC3E,QAAAA,gBAAA,kBAAkB,IAAI,gBAAA,qCAClC,gBAAA,SAAS,MACT,WACA,cAAc;AAEF,QAAAA,gBAAA,gCAAgC,IAAI,gBAAA,2BAChD,gBAAA,SAAS,MACT,yBACA,uBACA,IAAI;AAUR,mBAAA;WADC,GAAA,gBAAA,UAASA,gBAAe,YAAY;;AAIrC,mBAAA;WADC,GAAA,gBAAA,UAASA,gBAAe,sBAAsB;;AAI/C,mBAAA;WADC,GAAA,gBAAA,UAASA,gBAAe,eAAe;;AAIxC,mBAAA;WADC,GAAA,gBAAA,UAASA,gBAAe,6BAA6B;;AAE1D,eAAAA;QAlCoC,gBAAA,kBAAkB;;AAAzC,YAAA,iBAAA;AAqCb,QAAA;;MAAA,SAAA,QAAA;AAAkC,kBAAAC,eAAA,MAAA;AAAlC,iBAAAA,gBAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AA2QI,gBAAA,aAAsB;;QA0F1B;AA3QI,eAAA,eAAIA,cAAA,WAAA,WAAO;eAAX,WAAA;AACI,mBAAO,KAAK,SAASA,cAAa,eAAe;UACrD;eAEA,SAAY,OAAoC;AAC5C,iBAAK,SAASA,cAAa,iBAAiB,KAAK;AAEjD,gBAAI,OAAO;AACP,oBAAM,SAAS;;UAEvB;;;;AA6BA,eAAA,eAAWA,eAAA,mBAAe;eAA1B,WAAA;AACI,kBAAM,IAAI,MAAM,UAAA,QAAQ,OAAO,4BAA2B,CAAE;UAChE;;eAGA,SAA2B,QAAgC;AACvD,kBAAM,IAAI,MAAM,UAAA,QAAQ,OAAO,4BAA2B,CAAE;UAChE;;;;AAEO,QAAAA,cAAA,gBAAP,SAAqB,MAAY;AAC7B,cAAM,SAAoC;YACtC,YAAY;;AAGhB,cAAIA,cAAa,mBAAmB;AAChC,YAAAA,cAAa,kBAAkB,MAAM,MAAM;qBAC9B,OAAQ,YAAY;AAEjC,gBAAM,aAAwB,OAAQ;AACtC,mBAAO,aAAa,WAAU,EAAG,OAAO,IAAI;AAC5C,mBAAO,aAAa;qBACb,CAACA,cAAa,sCAAsC;AAE3D,oBAAQ,KAAK,UAAA,QAAQ,OAAO,4BAA4B;AACxD,YAAAA,cAAa,uCAAuC;;AAGxD,iBAAO;QACX;AAIQ,QAAAA,cAAA,UAAA,qBAAR,WAAA;AACI,cAAI,KAAK,oBAAoB;AACzB,mBAAO;iBACJ;AACH,gBAAM,qBACF,CAAC,KAAK,WACN,CAAC,KAAK,QAAQ,WACd,KAAK,WAAW,QAAQ,KAAK,QAAQ,SACpC,KAAK,WAAW,UAAU,KAAK,QAAQ,SACpC,KAAK,WAAW,QAAQ,KAAK,QAAQ;AAE7C,mBAAO,CAAC;;QAEhB;AAEU,QAAAA,cAAA,UAAA,iCAAV,WAAA;AACI,iBAAO,IAAI,qBAAqB,KAAK,OAAO;QAChD;AAEU,QAAAA,cAAA,UAAA,iCAAV,WAAA;AACI,iBAAO;QACX;AAEU,QAAAA,cAAA,UAAA,oBAAV,WAAA;AACI,iBAAO;QACX;AAEU,QAAAA,cAAA,UAAA,gBAAV,SAAwB,QAAa,SAA6B;AAC9D,eAAK,gBAAgB;AAErB,cAAM,kBAAkB,QAAQ,aAC5B,QACA,OAAO,UAAU,GACjB,KAAK,uBAAsB,GAC3B,CAAC,KAAK,aAAY,CAAE;AAGxB,cAAI,iBAAiB;AACjB,iBAAK,gBAAgB,IAAIA,cAAY;AACrC,iBAAK,cAAc,QAAQ,eAAe;;AAG9C,iBAAA,UAAM,cAAa,KAAA,MAAC,QAAQ,OAAO;QACvC;AAEU,QAAAA,cAAA,UAAA,iBAAV,SAAyB,QAAqB,SAA6B;AACvE,eAAK,SAASA,cAAa,iBAAiB,QAAQ,aAAa;AAEjE,iBAAA,UAAM,eAAc,KAAA,MAAC,QAAQ,OAAO;QACxC;AAEU,QAAAA,cAAA,UAAA,iBAAV,WAAA;AACI,cAAM,kBAAkB,OAAA,UAAM,eAAc,KAAA,IAAA;AAE5C,cAAI,SAAA,eAAe,mCAAmC,iBAAiB;AAInE,4BAAgB,MAAM,eAAe,WAAW;;AAGpD,iBAAO;QACX;AAEU,QAAAA,cAAA,UAAA,mBAAV,SAA2B,wBAAuC;AAAvC,cAAA,2BAAA,QAAA;AAAA,qCAAA;UAAuC;AAC9D,iBAAO;QACX;AAEU,QAAAA,cAAA,UAAA,oBAAV,WAAA;AACI,iBAAO,IAAI,SAAA,kBACP,MAAM,QAAQ,SACd,MAAM,QAAQ,SACd,MAAM,QAAQ,SACd,MAAM,QAAQ,OAAO;QAE7B;AAEU,QAAAA,cAAA,UAAA,kBAAV,SAA0B,UAA8B;AACpD,iBAAO;QACX;AAEA,eAAA,eAAcA,cAAA,WAAA,iBAAa;eAA3B,WAAA;AACI,mBAAO;UACX;;;;AAEA,eAAA,eAAcA,cAAA,WAAA,sBAAkB;eAAhC,WAAA;AACI,mBAAO;UACX;;;;AAEA,eAAA,eAAcA,cAAA,WAAA,oBAAgB;eAA9B,WAAA;AACI,mBAAO,KAAK,WAAW,gBAAgB,KAAK,WAAW,aAAa;UACxE;;;;AAEA,eAAA,eAAcA,cAAA,WAAA,iBAAa;eAA3B,WAAA;AACI,mBAAO;UACX;;;;AAaA,QAAAA,cAAA,UAAA,kBAAA,WAAA;AACI,iBAAO;QACX;AAEA,QAAAA,cAAA,UAAA,6BAAA,SAA2B,SAA0B;AACjD,iBAAA,UAAM,2BAA0B,KAAA,MAAC,OAAO;AAExC,cAAI,KAAK,SAAS,YAAY,gBAAgB,MAAM,gBAAgB;AAChE,oBAAQ,WACJ,MACA,MAAM,gBAAgB,iBACtB,UAAA,QAAQ,OAAO,gBAAe,CAAE;;AAIxC,cAAI,CAAC,KAAK,sBAAsB,CAAC,KAAK,SAAS;AAC3C,oBAAQ,WACJ,MACA,MAAM,gBAAgB,oBACtB,UAAA,QAAQ,OAAO,kBAAkB,SAAS,CAAC;qBAExC,CAAC,KAAK,mBAAkB,GAAI;AACnC,oBAAQ,WACJ,MACA,MAAM,gBAAgB,wBACtB,UAAA,QAAQ,OAAO,uBACX,KAAK,QAAQ,SAAQ,GACrB,KAAK,WAAW,SAAQ,CAAE,CAC7B;;QAGb;AAEA,QAAAA,cAAA,UAAA,SAAA,SAAO,QAAoB;AACvB,cAAI;AAEJ,cAAI,KAAK,eAAc,KAAM,KAAK,eAAe;AAC7C,iBAAK,cAAc,aAAa,KAAK;AAErC,2BAAe,KAAK,cAAc,OAAM;iBACrC;AACH,2BAAe,OAAA,UAAM,OAAM,KAAA,IAAA;AAE3B,gBAAI,cAAc;AACd,2BAAa,UAAU,IAAI,KAAK,WAAW,iBAAiB,iBAAiB,CAAC;AAO9E,kBAAI,SAAA,eAAe,uBAAuB;AACtC,6BAAa,WAAW;;AAG5B,kBAAI,KAAK,OAAO;AACZ,6BAAa,aAAa,cAAc,KAAK,KAAK;;;;AAK9D,cAAI,QAAQ;AACR,kBAAM,YAAY,QAAQ,YAAY;AAEtC,iBAAK,aAAY;;AAGrB,iBAAO;QACX;AAEA,QAAAA,cAAA,UAAA,eAAA,SAAa,iBAA+B;AAA/B,cAAA,oBAAA,QAAA;AAAA,8BAAA;UAA+B;AACxC,iBAAA,UAAM,aAAY,KAAA,MAAC,eAAe;AAElC,cAAI,SAAA,eAAe,mCAAmC,KAAK,YAAW,GAAI;AACtE,gBAAM,UAAU,KAAK,WAAW,oBAAoB,MAAM,QAAQ,OAAO;AAGzE,iBAAK,gBAAgB,EAAE,KAAK,gBAAiB,eAAe,OAAO;;QAE3E;AAEA,QAAAA,cAAA,UAAA,iBAAA,WAAA;AACI,iBAAO,OAAA,UAAM,eAAc,KAAA,IAAA,KAAM,CAAC,KAAK,mBAAkB;QAC7D;AAEA,eAAA,eAAIA,cAAA,WAAA,uBAAmB;eAAvB,WAAA;AACI,mBAAO;UACX;;;;AAnWgB,QAAAA,cAAA,YAAY;AAKF,QAAAA,cAAA,kBAAkB,IAAI,gBAAA,eAC5C,gBAAA,SAAS,MACT,WACA,SACI,QACA,UACA,QACA,SAAiC;AAEjC,iBAAOA,cAAa;QACxB,GACA,SACI,QACA,MACA,QACA,OACA,SAAiC;AAEjC,kBAAQ,eAAe,QAAQ,KAAK,MAAMA,cAAa,SAAS;QACpE,CAAC;AAGW,QAAAA,cAAA,kBAAkB,IAAI,gBAAA,eAClC,gBAAA,SAAS,MACT,WACA,SACI,QACA,MACA,QACA,SAAiC;AAEjC,cAAI,UAAU,gBAAA,QAAQ,MAAM,OAAO,KAAK,IAAI,GAAG,OAAO;AAEtD,cAAI,YAAY,QAAW;AACvB,sBAAU,gBAAA,SAAS;AAEnB,oBAAQ,cACJ,QACA,MAAM,gBAAgB,sBACtB,UAAA,QAAQ,OAAO,mBAAmB,QAAQ,SAAQ,CAAE,CAAC;;AAI7D,iBAAO;QACX,GACA,SACI,QACA,MACA,QACA,OACA,SAAiC;AAEjC,cAAI,UAAU,QAAW;AACrB,oBAAQ,eAAe,QAAQ,KAAK,MAAM,MAAM,SAAQ,CAAE;;QAElE,GACA,gBAAA,SAAS,IAAI;AAGD,QAAAA,cAAA,uBAAuB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,cAAc;AACvE,QAAAA,cAAA,gBAAgB,IAAI,gBAAA,eAAe,gBAAA,SAAS,MAAM,OAAO;AACzD,QAAAA,cAAA,kBAAkB,IAAI,gBAAA,2BAClC,gBAAA,SAAS,MACT,WACA,mBACA,IAAI;AAEQ,QAAAA,cAAA,yBAAyB,IAAI,gBAAA,2BACzC,gBAAA,SAAS,MACT,kBACA,gBACA,IAAI;AA8BO,QAAAA,cAAA,uCAAuC;AA1BtD,mBAAA;WADC,GAAA,gBAAA,UAASA,cAAa,eAAe;;AAItC,mBAAA;WADC,GAAA,gBAAA,UAASA,cAAa,oBAAoB;;AAI3C,mBAAA;WADC,GAAA,gBAAA,UAASA,cAAa,aAAa;;AAIpC,mBAAA;WADC,GAAA,gBAAA,UAASA,cAAa,eAAe;;AActC,mBAAA;WADC,GAAA,gBAAA,UAASA,cAAa,sBAAsB;;AA+PjD,eAAAA;QArWkC,oBAAoB;;AAAzC,YAAA,eAAA;AAuWb,QAAA;;MAAA,SAAA,QAAA;AAAiC,kBAAAC,qBAAA,MAAA;AAAjC,iBAAAA,sBAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AAsCI,gBAAA,gBAAyB;;QAY7B;AA/Cc,QAAAA,oBAAA,UAAA,eAAV,WAAA;AACI,iBAAO;QACX;AAEU,QAAAA,oBAAA,UAAA,iBAAV,SAAyB,QAAgC;AACrD,iBAAA,UAAM,eAAc,KAAA,MAAC,MAAM;AAE3B,iBAAO,OAAO,aAAa,iBAAiB,aAAa,eAAe;QAC5E;AAIU,QAAAA,oBAAA,UAAA,oBAAV,WAAA;AACI,iBAAO,IAAI,SAAA,kBACP,KAAK,gBAAgB,MAAM,QAAQ,OAAO,MAAM,QAAQ,SACxD,MAAM,QAAQ,SACd,KAAK,gBAAgB,MAAM,QAAQ,OAAO,MAAM,QAAQ,SACxD,MAAM,QAAQ,OAAO;QAE7B;AAEA,eAAA,eAAcA,oBAAA,WAAA,sBAAkB;eAAhC,WAAA;AACI,mBAAO;UACX;;;;AAEA,eAAA,eAAcA,oBAAA,WAAA,gBAAY;eAA1B,WAAA;AACI,gBAAI,KAAK,eAAe;AACpB,qBAAO,MAAM,eAAe;mBACzB;AACH,qBAAO,KAAK,WAAW,QAAQ,SAAS,QAClC,KAAK,WAAW,QAAQ,SAAS,QACjC,MAAM,eAAe;;UAEnC;;;;AAIA,QAAAA,oBAAA,UAAA,SAAA,SAAO,QAAoB;AACvB,cAAM,eAAe,OAAA,UAAM,OAAM,KAAA,MAAC,MAAM;AAExC,cAAI,cAAc;AACd,yBAAa,aAAa,aAAa,QAAQ;AAC/C,yBAAa,gBAAgB,UAAU;;AAG3C,iBAAO;QACX;AACJ,eAAAA;MAAA,EAlDiC,YAAY;;AAoD7C,QAAA;;MAAA,SAAA,QAAA;AAA0C,kBAAAC,uBAAA,MAAA;AAA1C,iBAAAA,wBAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AAIY,gBAAA,kBAA+B,oBAAI,IAAG;;QA4MlD;AA3MY,QAAAA,sBAAA,UAAA,0BAAR,SACI,QACA,QACA,gBACA,eACA,wBACA,eACA,wBAAuC;AAP3C,cAAA,QAAA;AAOI,cAAA,2BAAA,QAAA;AAAA,qCAAA;UAAuC;AAEvC,cAAI,SAAwB;AAE5B,cAAI,UAAU,OAAO,WAAW,UAAU;AACtC,gBAAM,sBAAoB,oBAAI,IAAG;AACjC,iBAAK,gBAAgB,QAAQ,SAAC,MAAI;AAC9B,kCAAkB,IAAI,IAAI;YAC9B,CAAC;AACD,2BAAe,QAAQ,SAAC,MAAI;AACxB,oBAAK,gBAAgB,IAAI,IAAI;YACjC,CAAC;AAED,gBAAM,WAAW,MAAM,YAAY,OAAO,MAAM,CAAC;AAEjD,gBAAM,sBAAsB,0BAA0B,aAAa;AAEnE,gBAAI,YAAY,KAAK,gBAAgB,IAAI,QAAQ,KAAK,CAAC,qBAAqB;AACxE,4BAAc,UAAU,MAAM,cAAc,aAAa;mBACtD;AACH,kBAAI,gBAAgB;AAEpB,uBAAS,uBAAuB,QAAQ;AAExC,kBAAI,CAAC,QAAQ;AACT,gCAAgB,SAAA,eAAe,kBAAkB;AAEjD,8BAAc,UAAU,MAAM,cAAc,WAAW;qBACpD;AACH,uBAAO,UAAU,MAAM;AACvB,uBAAO,MAAM,QAAQ,IAAI;AAEzB,gCACI,SAAA,eAAe,kBAAkB,iBAAiB,OAAO,eAAc;;AAG/E,kBAAI,eAAe;AACf,oBAAM,WAAW,OAAO,UAAU;AAElC,oBAAI,CAAC,YAAY,QAAQ;AACrB,yBAAO,kBAAkB,IAAI;;AAEjC,oBAAI,OAAO,aAAa,YAAY,SAAS,YAAW,MAAO,QAAQ;AACnE,2BAAS;2BACF,OAAO,aAAa,UAAU;AACrC,2BAAS,KAAK,wBACV,QACA,UACA,gBACA,MACA,wBACA,aAAa;;;;AAM7B,iBAAK,kBAAkB;;AAG3B,iBAAO;QACX;AAEU,QAAAA,sBAAA,UAAA,mBAAV,SAA2B,GAAuB,QAAW;AACzD,cAAI,aAAa,UAAU,KAAK,eAAe;AAC3C,iBAAK,cAAc,GAAG,QAAQ,IAAI;qBAC3B,aAAa,eAAe,KAAK,gBAAgB;AACxD,iBAAK,eAAe,GAAG,QAAQ,IAAI;;QAE3C;AAKA,QAAAA,sBAAA,UAAA,kBAAA,SAAgB,GAAqB;AACjC,cAAI,aAAa,QAAQ;AACrB,mBAAO,KAAK,eAAe,WAAW,EAAE,gBAAe,CAAE,MAAM;qBACxD,aAAa,aAAa;AACjC,mBAAO,KAAK,gBAAgB,WAAW,EAAE,gBAAe,CAAE,MAAM;iBAC7D;AACH,mBAAO;;QAEf;AAEA,QAAAA,sBAAA,UAAA,kBAAA,SACI,QACA,QACA,oBACA,eACA,wBACA,eACA,wBAAuC;AAAvC,cAAA,2BAAA,QAAA;AAAA,qCAAA;UAAuC;AAEvC,cAAM,iBAAiB,IAAI,IAAY,kBAAkB;AACzD,cAAM,SAAS,KAAK,wBAChB,QACA,QACA,gBACA,eACA,wBACA,eACA,sBAAsB;AAG1B,cAAI,WAAW,QAAW;AACtB,iBAAK,iBAAiB,QAAQ,MAAM;;AAGxC,iBAAO;QACX;AAEA,QAAAA,sBAAA,UAAA,eAAA,SACI,QACA,QACA,gBACA,eACA,yBAAwC;AAL5C,cAAA,QAAA;AAKI,cAAA,4BAAA,QAAA;AAAA,sCAAA;UAAwC;AAExC,iBAAO,KAAK,gBACR,QACA,QACA,gBACA,eACA,SAAC,UAAgB;AACb,mBAAO,MAAK,gBAAgB,eAAe,UAAU,MAAK,aAAa;UAC3E,GACA,SAAC,UAAkB,WAA8B;AAC7C,gBAAI,cAAc,MAAM,cAAc,aAAa;AAC/C,oBAAK,cACD,QACA,MAAM,gBAAgB,oBACtB,UAAA,QAAQ,OAAO,mBAAmB,QAAQ,CAAC;mBAE5C;AACH,oBAAK,cACD,QACA,MAAM,gBAAgB,uBACtB,UAAA,QAAQ,OAAO,sBAAsB,QAAQ,CAAC;;UAG1D,GACA,uBAAuB;QAE/B;AAEA,QAAAA,sBAAA,UAAA,cAAA,SACI,QACA,QACA,sBACA,eAAsB;AAJ1B,cAAA,QAAA;AAMI,iBAAO,KAAK,gBACR,QACA,QACA,sBACA,eACA,SAAC,UAAgB;AACb,mBAAO,MAAK,eAAe,eAAe,UAAU,MAAK,aAAa;UAC1E,GACA,SAAC,UAAkB,WAA8B;AAC7C,gBAAI,cAAc,MAAM,cAAc,aAAa;AAC/C,oBAAK,cACD,QACA,MAAM,gBAAgB,mBACtB,UAAA,QAAQ,OAAO,kBAAkB,QAAQ,CAAC;mBAE3C;AACH,oBAAK,cACD,QACA,MAAM,gBAAgB,sBACtB,UAAA,QAAQ,OAAO,qBAAqB,QAAQ,CAAC;;UAGzD,CAAC;QAET;AAEA,eAAA,eAAIA,sBAAA,WAAA,mBAAe;eAAnB,WAAA;;AACI,oBAAO,KAAA,KAAK,sBAAgB,QAAA,OAAA,SAAA,KAAI,WAAA,eAAe;UACnD;;;;AAIA,QAAAA,sBAAA,UAAA,qBAAA,SAAmB,OAAkD;AACjE,eAAK,mBAAmB;QAC5B;AAEA,eAAA,eAAIA,sBAAA,WAAA,kBAAc;eAAlB,WAAA;;AACI,oBAAO,KAAA,KAAK,qBAAe,QAAA,OAAA,SAAA,KAAI,WAAA,eAAe;UAClD;;;;AAIA,QAAAA,sBAAA,UAAA,oBAAA,SAAkB,OAA6C;AAC3D,eAAK,kBAAkB;QAC3B;AACJ,eAAAA;MAAA,EAhN0C,gBAAA,wBAAwB;;AAArD,YAAA,uBAAA;AAkNb,eAAA,eAAe,gBAAgB,SAAS,aAAa,SAAS;AAC9D,eAAA,eAAe,gBAAgB,SAAS,aAAa,SAAS;AAC9D,eAAA,eAAe,gBAAgB,SAAS,iBAAiB,eAAe,gBAAA,SAAS,IAAI;AACrF,eAAA,eAAe,gBAAgB,SAAS,WAAW,SAAS,gBAAA,SAAS,IAAI;AACzE,eAAA,eAAe,gBAAgB,SAAS,SAAS,KAAK;AACtD,eAAA,eAAe,gBAAgB,SAAS,YAAY,QAAQ;AAC5D,eAAA,eAAe,gBAAgB,SAAS,SAAS,OAAO,gBAAA,SAAS,IAAI;AACrE,eAAA,eAAe,gBAAgB,SAAS,WAAW,OAAO;AAC1D,eAAA,eAAe,gBAAgB,SAAS,aAAa,SAAS;AAC9D,eAAA,eAAe,gBAAgB,SAAS,aAAa,WAAW,gBAAA,SAAS,IAAI;AAC7E,eAAA,eAAe,gBAAgB,SAAS,cAAc,SAAS;AAC/D,eAAA,eAAe,gBAAgB,SAAS,cAAc,SAAS;AAC/D,eAAA,eAAe,gBAAgB,SAAS,cAAc,SAAS;AAC/D,eAAA,eAAe,gBAAgB,SAAS,gBAAgB,WAAW;AACnE,eAAA,eAAe,gBAAgB,SAAS,mBAAmB,cAAc;AACzE,eAAA,eAAe,gBAAgB,SAAS,gBAAgB,WAAW;AAEnE,eAAA,eAAe,eAAe,SAAS,cAAc,cAAc,aAAa;AAChF,eAAA,eAAe,eAAe,SAAS,aAAa,cAAc,YAAY;AAC9E,eAAA,eAAe,eAAe,SAAS,eAAe,cAAc,cAAc;AAClF,eAAA,eAAe,eAAe,SAC1B,uBAAuB,cACvB,wBACA,gBAAA,SAAS,IAAI;AAEjB,eAAA,eAAe,eAAe,SAAS,cAAc,cAAc,eAAe,gBAAA,SAAS,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACllR/F,QAAA,kBAAA;AAOA,QAAA,UAAA;AASA,QAAA,aAAA;AACA,QAAA,kBAAA;AAYA,QAAA,WAAA;AACA,QAAA,YAAA;AACA,QAAA,UAAA;AAEA,QAAA;;MAAA,SAAA,QAAA;AAA2C,kBAAAC,wBAAA,MAAA;AAA3C,iBAAAA,yBAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AAwEI,gBAAA,QAAqB,IAAI,SAAA,YAAY,GAAG,QAAA,SAAS,MAAM;;QAS3D;AAPI,QAAAA,uBAAA,UAAA,eAAA,WAAA;AACI,iBAAO;QACX;AAzEgB,QAAAA,uBAAA,yCAAyC,IAAI,gBAAA,aACzD,gBAAA,SAAS,MACT,kCACA,QAAA,mBAAmB;AAEP,QAAAA,uBAAA,uCAAuC,IAAI,gBAAA,aACvD,gBAAA,SAAS,MACT,gCACA,QAAA,iBAAiB;AAGL,QAAAA,uBAAA,gBAAgB,IAAI,gBAAA,eAChC,gBAAA,SAAS,MACT,SACA,SACI,QACA,MACA,QACA,SAAiC;AAEjC,cAAI,SAAsB,KAAK;AAC/B,cAAM,QAAQ,OAAO,KAAK,IAAI;AAC9B,cAAI,eAAe;AAEnB,cAAI,OAAO,UAAU,YAAY,CAAC,MAAM,KAAK,GAAG;AAC5C,qBAAS,IAAI,SAAA,YAAY,OAAO,QAAA,SAAS,MAAM;qBACxC,OAAO,UAAU,UAAU;AAClC,gBAAI;AACA,uBAAS,SAAA,YAAY,MAAM,KAAK;qBAC3B,GAAG;AACR,6BAAe;;iBAEhB;AACH,2BAAe;;AAGnB,cAAI,cAAc;AACd,oBAAQ,cACJ,QACA,QAAA,gBAAgB,sBAChB,UAAA,QAAQ,OAAO,mBAAmB,KAAK,CAAC;;AAIhD,iBAAO;QACX,GACA,SACI,QACA,UACA,QACA,OACA,SAAiC;AAEjC,cAAI,MAAM,SAAS,QAAA,SAAS,OAAO;AAC/B,oBAAQ,eAAe,QAAQ,SAAS,MAAM,eAAe,IAAI;iBAC9D;AACH,oBAAQ,gBAAgB,QAAQ,SAAS,MAAM,YAAY;;QAEnE,GACA,IAAI,SAAA,YAAY,GAAG,QAAA,SAAS,MAAM,CAAC;AAIvC,mBAAA;WADC,GAAA,gBAAA,UAASA,uBAAsB,sCAAsC;;AAItE,mBAAA;WADC,GAAA,gBAAA,UAASA,uBAAsB,oCAAoC;;AAIpE,mBAAA;WADC,GAAA,gBAAA,UAASA,uBAAsB,aAAa;;AAUjD,eAAAA;QAjF2C,gBAAA,kBAAkB;;AAAhD,YAAA,wBAAA;AAmFb,QAAA;;MAAA,SAAA,QAAA;AAEU,kBAAAC,oBAAA,MAAA;AAFV,iBAAAA,qBAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AAGY,gBAAA,SAAc,CAAA;;QAiG1B;AA/FY,QAAAA,mBAAA,UAAA,YAAR,SAAkB,QAAa,SAA6B;AAA5D,cAAA,QAAA;AACI,iBAAO,QAAQ;YACX;YACA;YACA,CAAA;;YACA,CAAC,KAAK,aAAY;YAClB,SAAC,UAAgB;AACb,qBAAO,MAAK,mBAAmB,QAAQ;YAC3C;YACA,SAAC,UAAkB,YAAyB;AACxC,sBAAQ,cACJ,QACA,QAAA,gBAAgB,uBAChB,UAAA,QAAQ,OAAO,sBAAsB,QAAQ,CAAC;YAEtD;UAAC;QAET;AAKU,QAAAA,mBAAA,UAAA,kBAAV,SAA0B,MAAO;AAC7B,cAAI,CAAC,KAAK,QAAQ;AACd,iBAAK,OAAO,KAAK,IAAI;AAErB,iBAAK,UAAU,IAAI;iBAChB;AACH,kBAAM,IAAI,MAAM,UAAA,QAAQ,OAAO,uBAAsB,CAAE;;QAE/D;AAEU,QAAAA,mBAAA,UAAA,qBAAV,SAA6B,MAAO;AAChC,cAAM,YAAY,KAAK,OAAO,QAAQ,IAAI;AAE1C,cAAI,aAAa,GAAG;AAChB,iBAAK,OAAO,OAAO,WAAW,CAAC;AAE/B,iBAAK,UAAU,MAAS;AAExB,iBAAK,aAAY;AAEjB,mBAAO;;AAGX,iBAAO;QACX;AAEU,QAAAA,mBAAA,UAAA,kBAAV,SAA0B,MAAO;AAC7B,iBAAO,KAAK,OAAO,QAAQ,IAAI;QACnC;AAEU,QAAAA,mBAAA,UAAA,gBAAV,SAAwB,QAAa,SAA6B;AAC9D,iBAAA,UAAM,cAAa,KAAA,MAAC,QAAQ,OAAO;AAEnC,eAAK,SAAS,CAAA;AAEd,cAAM,QAAQ,OAAO,KAAK,0BAAyB,CAAE;AAErD,cAAI,MAAM,QAAQ,KAAK,GAAG;AACtB,qBAAmB,KAAA,GAAA,UAAA,OAAA,KAAA,QAAA,QAAA,MAAO;AAArB,kBAAM,OAAI,QAAA,EAAA;AACX,kBAAM,WAAW,KAAK,UAAU,MAAM,OAAO;AAE7C,kBAAI,UAAU;AACV,qBAAK,OAAO,KAAK,QAAQ;;;;QAIzC;AAEU,QAAAA,mBAAA,UAAA,iBAAV,SAAyB,QAAqB,SAA6B;AACvE,iBAAA,UAAM,eAAc,KAAA,MAAC,QAAQ,OAAO;AAEpC,kBAAQ,eAAe,QAAQ,KAAK,0BAAyB,GAAI,KAAK,MAAM;QAChF;AAEA,QAAAA,mBAAA,UAAA,aAAA,SAAW,MAAO;AACd,iBAAO,KAAK,mBAAmB,IAAI;QACvC;AAEA,QAAAA,mBAAA,UAAA,eAAA,WAAA;AACI,iBAAO,KAAK,OAAO;QACvB;AAEA,QAAAA,mBAAA,UAAA,YAAA,SAAU,OAAa;AACnB,iBAAO,KAAK,OAAO,KAAK;QAC5B;AAEA,QAAAA,mBAAA,UAAA,8BAAA,WAAA;AACI,iBAAO,KAAK,aAAY,IAAK,IAAI,KAAK,UAAU,CAAC,IAAI;QACzD;AAEA,QAAAA,mBAAA,UAAA,6BAAA,WAAA;AACI,iBAAO,KAAK,aAAY,IAAK,IAAI,KAAK,UAAU,KAAK,aAAY,IAAK,CAAC,IAAI;QAC/E;AACJ,eAAAA;MAAA,EAlGU,gBAAA,4BAA4B;;AAFhB,YAAA,oBAAA;AAwGtB,QAAA;;MAAA,SAAA,QAAA;AAA+B,kBAAAC,YAAA,MAAA;AAA/B,iBAAAA,aAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AACY,gBAAA,eAAuB;AACvB,gBAAA,YAAsB;;QA+HlC;AA7Hc,QAAAA,WAAA,UAAA,eAAV,WAAA;AACI,iBAAO,KAAK,UAAU,YAAY;QACtC;AAEU,QAAAA,WAAA,UAAA,cAAV,WAAA;AACI,cAAI,KAAK,mBAAmB,KAAK,aAAY,GAAI;AAC7C,gBAAM,kBAAkB,KAAK,WAAW,gBAAgB,eACpD,KAAK,UAAU,YAAY,SAAS;AAGxC,gBAAI,gBAAgB,aAAa;AAC7B,kBAAM,eAAc,GAAA,QAAA,kBAAiB,gBAAgB,WAAW;AAEhE,kBAAI,aAAa;AACb,qBAAK,gBAAgB,MAAM,cAAc,eAAe;AACxD,qBAAK,gBAAgB,MAAM,eAAe,eAAe;;;;QAIzE;AAEU,QAAAA,WAAA,UAAA,oBAAV,WAAA;AACI,iBAAO,KAAK,iBAAgB,KAAM,KAAK,aAAY,IAC7C,IAAI,SAAA,kBAAkB,QAAA,QAAQ,OAAO,QAAA,QAAQ,OAAO,QAAA,QAAQ,OAAO,QAAA,QAAQ,KAAK,IAChF,OAAA,UAAM,kBAAiB,KAAA,IAAA;QACjC;AAEU,QAAAA,WAAA,UAAA,iBAAV,WAAA;AACI,cAAM,cAAc,OAAA,UAAM,eAAc,KAAA,IAAA;AAExC,cAAI,aAAa;AACb,wBAAY,aAAa,QAAQ,KAAK,aAAa,SAAS,SAAS,cAAc;AACnF,wBAAY,MAAM,WAAW;AAE7B,gBAAI,KAAK,aAAa,UAAU;AAC5B,0BAAY,aAAa,SAAS,KAAK;;;AAI/C,iBAAO;QACX;AAEU,QAAAA,WAAA,UAAA,kBAAV,SAA0B,UAA8B;AACpD,iBAAO;QACX;AAEA,QAAAA,WAAA,UAAA,kBAAA,WAAA;AACI,iBAAO;QACX;AAEA,QAAAA,WAAA,UAAA,kCAAA,WAAA;AACI,cAAI,KAAK,aAAa,UAAU;AAC5B,mBAAO,KAAK,WAAW,WAAW;;AAGtC,iBAAO,OAAA,UAAM,gCAA+B,KAAA,IAAA;QAChD;AAEA,QAAAA,WAAA,UAAA,kCAAA,WAAA;AACI,cAAI,KAAK,wBAAwB,QAAW;AACxC,mBAAO,KAAK;;AAGhB,cAAI,KAAK,UAAU,mCAAmC,QAAW;AAC7D,mBAAO,KAAK,UAAU;;AAG1B,cAAI,KAAK,eAAe,GAAG;AACvB,gBAAM,sBAAsB,KAAK,UAAU,YAAY,YACnD,KAAK,WAAW,EAClB;AAEF,gBAAI,wBAAwB,QAAW;AACnC,qBAAO;;;AAIf,cAAI,KAAK,UAAU,YAAY,mCAAmC,QAAW;AACzE,mBAAO,KAAK,UAAU,YAAY;;AAGtC,iBAAO,OAAA,UAAM,gCAA+B,KAAA,IAAA;QAChD;AAEA,QAAAA,WAAA,UAAA,uCAAA,WAAA;AACI,cAAI,KAAK,6BAA6B,QAAW;AAC7C,mBAAO,KAAK;;AAGhB,cAAI,KAAK,UAAU,iCAAiC,QAAW;AAC3D,mBAAO,KAAK,UAAU;;AAG1B,cAAI,KAAK,eAAe,GAAG;AACvB,gBAAM,oBAAoB,KAAK,UAAU,YAAY,YACjD,KAAK,WAAW,EAClB;AAEF,gBAAI,sBAAsB,QAAW;AACjC,qBAAO;;;AAIf,cAAI,KAAK,UAAU,YAAY,iCAAiC,QAAW;AACvE,mBAAO,KAAK,UAAU,YAAY;;AAGtC,iBAAO,OAAA,UAAM,qCAAoC,KAAA,IAAA;QACrD;AAEA,eAAA,eAAIA,WAAA,WAAA,eAAW;eAAf,WAAA;AACI,mBAAO,KAAK;UAChB;;;;AAEA,eAAA,eAAIA,WAAA,WAAA,YAAQ;eAAZ,WAAA;AACI,mBAAO,KAAK;UAChB;;;;AAEA,eAAA,eAAIA,WAAA,WAAA,aAAS;eAAb,WAAA;AACI,mBAAO,KAAK;UAChB;;;;AAEA,eAAA,eAAIA,WAAA,WAAA,gBAAY;eAAhB,WAAA;AACI,mBAAO;UACX;;;;AACJ,eAAAA;MAAA,EAjI+B,gBAAA,SAAS;;AAA3B,YAAA,YAAA;AAmIb,QAAA;;MAAA,SAAA,QAAA;AAA8B,kBAAAC,WAAA,MAAA;AAA9B,iBAAAA,YAAA;;QAoIA;AA7Gc,QAAAA,UAAA,UAAA,oBAAV,WAAA;AACI,iBAAO,IAAI,SAAA,kBAAkB,QAAA,QAAQ,MAAM,QAAA,QAAQ,MAAM,QAAA,QAAQ,MAAM,QAAA,QAAQ,IAAI;QACvF;AAEU,QAAAA,UAAA,UAAA,kBAAV,WAAA;AACI,cAAI,KAAK,iBAAiB;AACtB,gBAAM,kBAAkB,KAAK,WAAW,gBAAgB,eACpD,KAAK,OACL,KAAK,WAAW,gBAAgB,eAAe,KAAK,YAAY,CAAC;AAGrE,gBAAI,gBAAgB,iBAAiB;AACjC,kBAAM,WAAU,GAAA,QAAA,kBAAiB,gBAAgB,eAAe;AAEhE,kBAAI,SAAS;AACT,qBAAK,gBAAgB,MAAM,kBAAkB;;;;QAI7D;AAEU,QAAAA,UAAA,UAAA,4BAAV,WAAA;AACI,iBAAO;QACX;AAEU,QAAAA,UAAA,UAAA,qBAAV,SAA6B,UAAgB;AACzC,iBAAO,CAAC,YAAY,aAAa,cAAc,IAAI,UAAS,IAAK;QACrE;AAEU,QAAAA,UAAA,UAAA,iBAAV,WAAA;AACI,cAAM,aAAa,KAAK,cAAa;AACrC,cAAM,cAAc,KAAK,WAAW,MAAM;AAE1C,cAAM,aAAa,SAAS,cAAc,KAAK;AAC/C,qBAAW,aAAa,QAAQ,KAAK;AACrC,qBAAW,MAAM,UAAU;AAC3B,qBAAW,MAAM,gBAAgB;AAEjC,mBAAS,IAAI,GAAG,IAAI,KAAK,IAAI,KAAK,aAAY,GAAI,KAAK,YAAY,eAAc,CAAE,GAAG,KAAK;AACvF,gBAAM,OAAO,KAAK,UAAU,CAAC;AAG7B,iBAAK,cAAc,IAAI;AACvB,iBAAK,WAAW,IACZ,KAAK,YAAY,qBAAqB,aAAa,WAAW;AAElE,gBAAM,eAAe,KAAK,OAAM;AAEhC,gBAAI,cAAc;AACd,kBAAM,SAAS,KAAK,YAAY,YAAY,CAAC;AAE7C,kBAAI,OAAO,cAAc,SAAS,QAAA,SAAS,OAAO;AAC9C,6BAAa,MAAM,OAAO,SAAS,OAAO,cAAc,eAAe;qBACpE;AACH,6BAAa,MAAM,OAAO,SAAS,OAAO,cAAc,eAAe;;AAG3E,kBAAI,IAAI,KAAK,CAAC,KAAK,YAAY,iBAAiB,cAAc,GAAG;AAC7D,6BAAa,MAAM,aAAa,cAAc;;AAGlD,yBAAW,YAAY,YAAY;;;AAI3C,iBAAO,WAAW,SAAS,SAAS,IAAI,aAAa;QACzD;AAEU,QAAAA,UAAA,UAAA,kBAAV,SAA0B,UAA8B;AACpD,iBAAO;QACX;AAEA,QAAAA,UAAA,UAAA,UAAA,SAAQ,MAAe;AACnB,eAAK,gBAAgB,IAAI;QAC7B;AAEA,QAAAA,UAAA,UAAA,eAAA,SAAa,aAAmB;AAC5B,cAAI,eAAe,KAAK,cAAc,KAAK,aAAY,GAAI;AACvD,mBAAO,KAAK,WAAW,KAAK,UAAU,WAAW,CAAC;;AAGtD,iBAAO;QACX;AAEA,QAAAA,UAAA,UAAA,UAAA,SAAQ,aAAwB;AAC5B,iBAAO,uBAAuB,YAAY,KAAK,gBAAgB,WAAW,IAAI;QAClF;AAEA,QAAAA,UAAA,UAAA,uBAAA,SAAqB,WAAiB;AAClC,iBAAO,KAAK,aAAY,IAAK,WAAW;AACpC,iBAAK,QAAQ,IAAI,UAAS,CAAE;;QAEpC;AAEA,QAAAA,UAAA,UAAA,kBAAA,WAAA;AACI,iBAAO;QACX;AAEA,QAAAA,UAAA,UAAA,gBAAA,WAAA;AACI,iBAAO,KAAK,YAAY,UAAU,CAAC,MAAM;QAC7C;AAEA,eAAA,eAAIA,UAAA,WAAA,eAAW;eAAf,WAAA;AACI,mBAAO,KAAK;UAChB;;;;AAEA,eAAA,eAAIA,UAAA,WAAA,gBAAY;eAAhB,WAAA;AACI,mBAAO;UACX;;;;AAhIgB,QAAAA,UAAA,gBAAgB,IAAI,gBAAA,uBAAuB,gBAAA,SAAS,MAAM,OAAO;AACjE,QAAAA,UAAA,yCAAyC,IAAI,gBAAA,aACzD,gBAAA,SAAS,MACT,kCACA,QAAA,mBAAmB;AAEP,QAAAA,UAAA,uCAAuC,IAAI,gBAAA,aACvD,gBAAA,SAAS,MACT,gCACA,QAAA,iBAAiB;AAIrB,mBAAA;WADC,GAAA,gBAAA,UAASA,UAAS,sCAAsC;;AAIzD,mBAAA;WADC,GAAA,gBAAA,UAASA,UAAS,oCAAoC;;AAkH3D,eAAAA;QApI8B,iBAAiB;;AAAlC,YAAA,WAAA;AAsIb,QAAA;;MAAA,SAAA,QAAA;AAA2B,kBAAAC,QAAA,MAAA;AAA3B,iBAAAA,SAAA;AAAA,cAAA,QAAA,WAAA,QAAA,OAAA,MAAA,MAAA,SAAA,KAAA;AA4BY,gBAAA,WAAoC,CAAA;AAG5C,gBAAA,oBAA6B;AAG7B,gBAAA,gBAAyB;;QA4J7B;AAzJI,eAAA,eAAIA,OAAA,WAAA,aAAS;eAAb,WAAA;AACI,gBAAM,QAAQ,KAAK,SAASA,OAAM,iBAAiB;AAEnD,gBAAI,SAAS,KAAK,WAAW,gBAAgB,eAAe,KAAK,GAAG;AAChE,qBAAO;;AAGX,mBAAO;UACX;eAEA,SAAc,OAAyB;AACnC,iBAAK,SAASA,OAAM,mBAAmB,KAAK;UAChD;;;;AAUQ,QAAAA,OAAA,UAAA,4BAAR,WAAA;AACI,mBAAS,IAAI,GAAG,IAAI,KAAK,aAAY,GAAI,KAAK;AAC1C,iBAAK,UAAU,CAAC,EAAE,qBAAqB,KAAK,eAAc,CAAE;;QAEpE;AAEQ,QAAAA,OAAA,UAAA,wBAAR,SAA8B,aAAmB;AAC7C,mBAAS,IAAI,GAAG,IAAI,KAAK,aAAY,GAAI,KAAK;AAC1C,iBAAK,UAAU,CAAC,EAAE,aAAa,WAAW;;QAElD;AAEU,QAAAA,OAAA,UAAA,4BAAV,WAAA;AACI,iBAAO;QACX;AAEU,QAAAA,OAAA,UAAA,qBAAV,SAA6B,UAAgB;AACzC,iBAAO,CAAC,YAAY,aAAa,aAAa,IAAI,SAAQ,IAAK;QACnE;AAEU,QAAAA,OAAA,UAAA,gBAAV,SAAwB,QAAqB,SAA6B;AACtE,iBAAA,UAAM,cAAa,KAAA,MAAC,QAAQ,OAAO;AAEnC,eAAK,0BAAyB;QAClC;AAEU,QAAAA,OAAA,UAAA,iBAAV,WAAA;AACI,cAAI,KAAK,aAAY,IAAK,GAAG;AACzB,gBAAI,eAAuB;AAE3B,qBAAqB,KAAA,GAAA,KAAA,KAAK,UAAL,KAAA,GAAA,QAAA,MAAe;AAA/B,kBAAM,SAAM,GAAA,EAAA;AACb,kBAAI,OAAO,MAAM,SAAS,QAAA,SAAS,QAAQ;AACvC,gCAAgB,OAAO,MAAM;;;AAIrC,qBAAqB,KAAA,GAAA,KAAA,KAAK,UAAL,KAAA,GAAA,QAAA,MAAe;AAA/B,kBAAM,SAAM,GAAA,EAAA;AACb,kBAAI,OAAO,MAAM,SAAS,QAAA,SAAS,OAAO;AACtC,uBAAO,gBAAgB,IAAI,SAAA,YACvB,OAAO,MAAM,cACb,QAAA,SAAS,KAAK;qBAEf;AACH,uBAAO,gBAAgB,IAAI,SAAA,YACtB,MAAM,eAAgB,OAAO,MAAM,cACpC,QAAA,SAAS,MAAM;;;AAK3B,gBAAM,eAAe,SAAS,cAAc,KAAK;AACjD,yBAAa,aAAa,QAAQ,OAAO;AACzC,yBAAa,MAAM,UAAU;AAC7B,yBAAa,MAAM,gBAAgB;AAEnC,gBAAI,KAAK,eAAe;AACpB,kBAAM,kBAAkB,KAAK,WAAW,gBAAgB,eACpD,KAAK,SAAS;AAGlB,kBAAI,gBAAgB,aAAa;AAC7B,oBAAM,eAAc,GAAA,QAAA,kBAAiB,gBAAgB,WAAW;AAEhE,oBAAI,aAAa;AACb,+BAAa,MAAM,YAAY,eAAe;AAC9C,+BAAa,MAAM,aAAa,eAAe;;;;AAK3D,gBAAM,cAAc,KAAK,WAAW,MAAM;AAE1C,qBAAS,IAAI,GAAG,IAAI,KAAK,aAAY,GAAI,KAAK;AAC1C,kBAAM,cAAc,KAAK,UAAU,CAAC,EAAE,OAAM;AAE5C,kBAAI,aAAa;AACb,oBAAI,IAAI,KAAK,CAAC,KAAK,iBAAiB,cAAc,GAAG;AACjD,sBAAM,eAAe,SAAS,cAAc,KAAK;AACjD,+BAAa,aAAa,eAAe,MAAM;AAC/C,+BAAa,MAAM,SAAS,cAAc;AAE1C,+BAAa,YAAY,YAAY;;AAGzC,6BAAa,YAAY,WAAW;;;AAI5C,mBAAO;;AAGX,iBAAO;QACX;AAEA,QAAAA,OAAA,UAAA,YAAA,SAAU,QAA6B;AACnC,eAAK,SAAS,KAAK,MAAM;AAEzB,eAAK,0BAAyB;QAClC;AAEA,QAAAA,OAAA,UAAA,eAAA,SAAa,QAA6B;AACtC,cAAM,QAAQ,KAAK,SAAS,QAAQ,MAAM;AAE1C,cAAI,SAAS,GAAG;AACZ,iBAAK,sBAAsB,KAAK;AAEhC,iBAAK,SAAS,OAAO,OAAO,CAAC;;QAErC;AAEA,QAAAA,OAAA,UAAA,iBAAA,WAAA;AACI,iBAAO,KAAK,SAAS;QACzB;AAEA,QAAAA,OAAA,UAAA,cAAA,SAAY,OAAa;AACrB,iBAAO,KAAK,SAAS,KAAK;QAC9B;AAEA,QAAAA,OAAA,UAAA,SAAA,SAAO,KAAa;AAChB,eAAK,gBAAgB,GAAG;AAExB,cAAI,qBAAqB,KAAK,eAAc,CAAE;QAClD;AAEA,QAAAA,OAAA,UAAA,UAAA,SAAQ,aAAwB;AAC5B,iBAAO,uBAAuB,WAAW,KAAK,gBAAgB,WAAW,IAAI;QACjF;AAEA,QAAAA,OAAA,UAAA,kBAAA,WAAA;AACI,iBAAO;QACX;AA1LwB,QAAAA,OAAA,mBAAmB,IAAI,gBAAA,qCAC3C,gBAAA,SAAS,MACT,WACA,qBAAqB;AAGT,QAAAA,OAAA,4BAA4B,IAAI,gBAAA,aAC5C,gBAAA,SAAS,MACT,qBACA,IAAI;AAEQ,QAAAA,OAAA,wBAAwB,IAAI,gBAAA,aAAa,gBAAA,SAAS,MAAM,iBAAiB,IAAI;AAC7E,QAAAA,OAAA,oBAAoB,IAAI,gBAAA,uBAAuB,gBAAA,SAAS,MAAM,WAAW;AACzE,QAAAA,OAAA,yCAAyC,IAAI,gBAAA,aACzD,gBAAA,SAAS,MACT,kCACA,QAAA,mBAAmB;AAEP,QAAAA,OAAA,uCAAuC,IAAI,gBAAA,aACvD,gBAAA,SAAS,MACT,gCACA,QAAA,iBAAiB;AAIrB,mBAAA;WADC,GAAA,gBAAA,UAASA,OAAM,gBAAgB;;AAIhC,mBAAA;WADC,GAAA,gBAAA,UAASA,OAAM,yBAAyB;;AAIzC,mBAAA;WADC,GAAA,gBAAA,UAASA,OAAM,qBAAqB;;AAIrC,mBAAA;WADC,GAAA,gBAAA,UAASA,OAAM,iBAAiB;;AAgBjC,mBAAA;WADC,GAAA,gBAAA,UAASA,OAAM,sCAAsC;;AAItD,mBAAA;WADC,GAAA,gBAAA,UAASA,OAAM,oCAAoC;;AAwIxD,eAAAA;QA9L2B,iBAAiB;;AAA/B,YAAA,QAAA;AAgMb,eAAA,eAAe,gBAAgB,SAAS,SAAS,OAAO,gBAAA,SAAS,IAAI;;;;;;;;;;ACnqBrE,QAAA;;MAAA,2BAAA;AAAA,iBAAAC,kBAAA;QAEA;AAAA,eAAAA;MAAA,EAFA;;AAAsB,YAAA,iBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACKtB,QAAY;AAAZ,KAAA,SAAYC,yBAAsB;AAC9B,MAAAA,wBAAA,WAAA,IAAA;AACA,MAAAA,wBAAA,QAAA,IAAA;IACJ,GAHY,yBAAA,QAAA,2BAAA,QAAA,yBAAsB,CAAA,EAAA;AAiBlC,QAAA;;MAAA,2BAAA;AACI,iBAAAC,sBAAqB,MAAwB,SAAgB;AAAxC,eAAA,OAAA;AAAwB,eAAA,UAAA;QAAmB;AACpE,eAAAA;MAAA,EAFA;;AAAa,YAAA,uBAAA;AAIb,QAAA;;MAAA,2BAAA;AACI,iBAAAC,kBAAqB,SAAyB;AAAzB,eAAA,UAAA;QAA4B;AACrD,eAAAA;MAAA,EAFA;;AAAsB,YAAA,mBAAA;AAItB,QAAA;;MAAA,SAAA,QAAA;AAAqC,kBAAAC,kBAAA,MAAA;AACjC,iBAAAA,iBAAqB,SAAoC,YAAmB;AAA5E,cAAA,QACI,OAAA,KAAA,MAAM,OAAO,KAAC;AADG,gBAAA,UAAA;AAAoC,gBAAA,aAAA;;QAEzD;AACJ,eAAAA;MAAA,EAJqC,gBAAgB;;AAAxC,YAAA,kBAAA;AAMb,QAAA;;MAAA,SAAA,QAAA;AAAmC,kBAAAC,gBAAA,MAAA;AAC/B,iBAAAA,eAAqB,SAAoC,OAA2B;AAApF,cAAA,QACI,OAAA,KAAA,MAAM,OAAO,KAAC;AADG,gBAAA,UAAA;AAAoC,gBAAA,QAAA;;QAEzD;AACJ,eAAAA;MAAA,EAJmC,gBAAgB;;AAAtC,YAAA,gBAAA;AAMb,QAAA;;MAAA,SAAA,QAAA;AAA0C,kBAAAC,uBAAA,MAAA;AAItC,iBAAAA,sBAAqB,SAA2B,MAAoB;AAApE,cAAA,QACI,OAAA,KAAA,MAAM,OAAO,KAAC;AADG,gBAAA,UAAA;AAEjB,gBAAK,QAAQ;AAEb,mBAAqB,KAAA,GAAA,KAAA,MAAK,MAAM,SAAX,KAAA,GAAA,QAAA,MAAoB;AAApC,gBAAM,SAAM,GAAA,EAAA;AACb,gBAAI,OAAO,SAAS,YAAY,OAAO,UAAU,QAAW;AACxD,kBAAI;AACA,oBAAI,IAAI,OAAO,KAAK;AAEpB,sBAAK,eAAe;AAEpB;uBACK,GAAG;;;;;QAKxB;AAEA,eAAA,eAAIA,sBAAA,WAAA,yBAAqB;eAAzB,WAAA;AACI,mBAAO,KAAK,MAAM;UACtB;;;;AACJ,eAAAA;MAAA,EA1B0C,gBAAgB;;AAA7C,YAAA,uBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5Cb,QAAA,QAAA;AACA,QAAA,QAAA;AACA,QAAA,WAAA;AAEA,QAAA,qBAAA;AAQA,QAAA,YAAA;AACA,QAAA,kBAAA;AAUA,QAAA,kBAAA;AAGA,aAAS,SAAS,OAAuB,SAAa;AAAE,UAAA,iBAAA,CAAA;eAAA,KAAA,GAAA,KAAA,UAAA,QAAA,MAAwB;AAAxB,uBAAA,KAAA,CAAA,IAAA,UAAA,EAAA;;AACpD,UAAI,SAAA,eAAe,QAAQ,YAAY;AACnC,YAAI,SAAA,eAAe,QAAQ,YAAY;AACnC,mBAAA,eAAe,QAAQ,WAAW,OAAO,SAAS,cAAc;eAC7D;AAEH,kBAAQ,OAAO;YACX,KAAK,MAAM,SAAS;AAChB,sBAAQ,KAAK,SAAS,cAAc;AACpC;YACJ,KAAK,MAAM,SAAS;AAChB,sBAAQ,MAAM,SAAS,cAAc;AACrC;YACJ;AACI,sBAAQ,IAAI,SAAS,cAAc;AACnC;;;;IAKpB;AAEA,QAAA;;MAAA,WAAA;AACI,iBAAAC,iBACa,QACA,SACA,sBAA4B;AAF5B,eAAA,SAAA;AACA,eAAA,UAAA;AACA,eAAA,uBAAA;AAKb,eAAA,gBAAwB;QAJrB;AASG,QAAAA,iBAAA,UAAA,aAAN,WAAA;;;AACI,kBAAI,KAAK,QAAQ;AACb,qBAAK,OAAO,IAAI;;;;;;;;;AAG5B,eAAAA;MAAA,EAnBA;;AAqBA,QAAA;;MAAA,WAAA;AAgrBI,iBAAAC,kBAAA;AA1qBQ,eAAA,4BAAqC;AA2qBzC,eAAK,kBAAkB,SAAS,cAAc,KAAK;AACnD,eAAK,gBAAgB,YAAY;AACjC,eAAK,gBAAgB,MAAM,WAAW;AACtC,eAAK,gBAAgB,MAAM,UAAU;AACrC,eAAK,gBAAgB,MAAM,gBAAgB;AAE3C,eAAK,mBAAmB,SAAS,cAAc,KAAK;AAEpD,eAAK,4BAA4B,SAAS,cAAc,KAAK;AAC7D,eAAK,0BAA0B,YAAY;AAC3C,eAAK,0BAA0B,MAAM,UAAU;AAE/C,eAAK,gBAAgB,YAAY,KAAK,gBAAgB;AACtD,eAAK,gBAAgB,YAAY,KAAK,yBAAyB;QACnE;AAprBQ,QAAAA,gBAAA,UAAA,cAAR,SAAoB,MAAkB;AAClC,cAAI,KAAK,iBAAiB;AACtB,kBAAM,qBAAqB,KAAK,gBAAgB;AAEhD,iBAAK,0BAA0B,MAAM,UAAU;AAE/C,iBAAK,iBAAiB,YAAY,KAAK,eAAe;iBACnD;AACH,kBAAM,IAAI,MAAM,8BAA8B;;QAEtD;AAEQ,QAAAA,gBAAA,UAAA,0BAAR,SAAgC,eAA4B;AAA5D,cAAA,QAAA;AACI,cAAM,oCAAoC,KAAK,4BACzC,KAAK,0BAA0B,IAAI,IACnC;AAEN,cAAI,mCAAmC;AACnC,iBAAK,0BAA0B,MAAM,UAAU;AAE/C,gBAAI,wBAAiD;AAErD,gBAAI,KAAK,6BAA6B;AAClC,sCAAwB,KAAK,4BAA4B,IAAI;mBAC1D;AACH,kBAAI,UAAU,UAAA,QAAQ,QAAQ,gBAAe;AAE7C,kBAAI,SAAA,eAAe,QAAQ,QAAQ,SAAS,MAAM,YAAY,WAAW;AACrE,oBAAI,2BAA2B,UAAA,QAAQ,QAAQ,uBAAsB;AAErE,oBAAI,yBAAyB,yBAAyB,SAAS,CAAC,MAAM,KAAK;AACvE,8CAA4B;;AAGhC,0BAAU,UAAA,QAAQ,QAAQ,8BAA6B;;AAG3D,kBAAM,cAAc;gBAChB,MAAM;gBACN,SAAS;gBACT,MAAM;kBACF;oBACI,MAAM;oBACN,qBAAqB;oBACrB,SAAS;sBACL;wBACI,MAAM;wBACN,MAAM;wBACN,cAAc;0BACV,MAAM;0BACN,IAAI;;;;;;;AAQ5B,kBAAM,OAAO,IAAI,gBAAA,aAAY;AAC7B,mBAAK,MAAM,aAAa,IAAI,gBAAA,qBAAqB,gBAAA,SAAS,IAAI,CAAC;AAC/D,mBAAK,kBAAkB,SAAC,QAAc;AAClC,oBAAI,OAAO,OAAO,eAAe;AAC7B,wBAAM,qBAAqB,MAAK,yBAAyB;AAEzD,wBAAK,sBACD,eACA,mBAAA,uBAAuB,WACvB,CAAC;;cAGb;AAEA,sCAAwB,KAAK,OAAM;;AAGvC,gBAAI,uBAAuB;AACvB,oBAAM,qBAAqB,KAAK,yBAAyB;AAEzD,mBAAK,0BAA0B,YAAY,qBAAqB;AAEhE,mBAAK,0BAA0B,MAAM,eAAe,SAAS;;;QAGzE;AAEQ,QAAAA,gBAAA,UAAA,wBAAR,SACI,QACA,SACA,sBAA4B;AAHhC,cAAA,QAAA;AAKI,cAAI,KAAK,MAAM;AACX,gBAAM,YAAU,IAAI,gBAAgB,QAAQ,SAAS,oBAAoB;AACzE,sBAAQ,SAAS,SAAC,QAAuB;AACrC,qBAAO;AAEP,mBAAK,MAAK,iCAAiC,SAAO;YACtD;AAEA,gBAAM,SAAS,KAAK,2BACd,CAAC,KAAK,yBAAyB,MAAM,WAAS,MAAM,IACpD;AAEN,mBAAO,SAAS,SAAY;iBACzB;AACH,kBAAM,IAAI,MAAM,8CAA8C;;QAEtE;AAEQ,QAAAA,gBAAA,UAAA,2BAAR,SAAiC,eAAqB;AAClD,cAAM,UAAU;YACZ,MAAM;YACN,SAAS;YACT,MAAM;cACF;gBACI,MAAM;gBACN,OAAO;gBACP,MAAM,kBAAkB,IAAI,SAAY;gBACxC,MAAM;gBACN,qBAAqB;;cAEzB;gBACI,MAAM;gBACN,MAAM;gBACN,MAAM;gBACN,qBAAqB;;cAEzB;gBACI,MAAM;gBACN,IAAI;gBACJ,aAAa;;cAEjB;gBACI,MAAM;gBACN,qBAAqB;gBACrB,SAAS;kBACL;oBACI,MAAM;oBACN,IAAIA,gBAAe;oBACnB,OAAO;;kBAEX;oBACI,MAAM;oBACN,IAAIA,gBAAe;oBACnB,OAAO;;;;;;AAO3B,cAAM,OAAO,IAAI,gBAAA,aAAY;AAC7B,eAAK,MAAM,OAAO;AAElB,iBAAO;QACX;AAEQ,QAAAA,gBAAA,UAAA,yBAAR,WAAA;AACI,cAAI,KAAK,2BAA2B;AAChC,qBACI,MAAM,SAAS,SACf,8FAA8F;;AAItG,eAAK,4BAA4B;QACrC;AAEQ,QAAAA,gBAAA,UAAA,6BAAR,WAAA;AACI,iBAAO,KAAK,+BACN,KAAK,6BAA6B,IAAI,IACtC,IAAI,gBAAA,qBAAoB;QAClC;AAEQ,QAAAA,gBAAA,UAAA,kBAAR,SAAwB,SAAc,sBAA4B;AAAlE,cAAA,QAAA;AACI,cAAI,OAAO,YAAY,YAAY,QAAQ,MAAM,MAAM,gBAAgB;AACnE,iBAAK,eAAe;;AAGxB,cAAI,KAAK,cAAc;AACnB,gBAAI;AACA,kBAAM,OAAO,IAAI,gBAAA,aAAY;AAE7B,kBAAI,KAAK,YAAY;AACjB,qBAAK,aAAa,KAAK;;AAG3B,kBAAM,uBAAuB,KAAK,2BAA0B;AAE5D,mBAAK,MAAM,KAAK,cAAc,oBAAoB;AAElD,kBAAM,eAAe,KAAK,iBACpB,KAAK,eAAe,MAAM,KAAK,YAAY,IAC3C;AAEN,kBAAI,cAAc;AACd,qBAAK,QAAQ;AAEb,oBACI,KAAK,MAAM,kBACX,KAAK,MAAM,eAAe,yBAC1B,KAAK,oBACP;AACE,uBAAK,mBACD,MACA,KAAK,MAAM,eAAe,qBAAqB;;AAIvD,qBAAK,MAAM,kBAAkB,SAAC,QAAc;AAExC,wBAAK,uBAAsB;AAE3B,wBAAK,sBAAsB,QAAQ,mBAAA,uBAAuB,QAAQ,CAAC;gBACvE;AACA,qBAAK,MAAM,sBAAsB,SAAC,QAAa;AAE3C,wBAAK,uBAAsB;gBAC/B;AAEA,qBAAK,MAAM,OAAM;AAEjB,oBAAI,KAAK,MAAM,iBAAiB;AAC5B,uBAAK,YAAY,KAAK,KAAK;AAE3B,sBAAI,KAAK,eAAe;AACpB,yBAAK,cAAc,IAAI;;AAG3B,sBAAI,KAAK,MAAM,SAAS;AACpB,wBACI,SAAA,eAAe,QAAQ,QAAQ,SAC3B,MAAM,YAAY,aACtB,uBACI,SAAA,eAAe,QAAQ,QAClB,sCACX;AACE,0BACI,SAAA,eAAe,QAAQ,QAAQ,iCAC/B,GACF;AACE,iCACI,MAAM,SAAS,MACf,+CACK,uBAAuB,EAAE;AAGlC,6BAAK,sBACD,KAAK,MAAM,QAAQ,QACnB,mBAAA,uBAAuB,WACvB,uBAAuB,CAAC;6BAEzB;AACH,iCACI,MAAM,SAAS,MACf,+CACK,uBAAuB,KACxB,SACA,SAAA,eAAe,QAAQ,QAClB,gCACL,IAAI;AAGZ,4BAAM,WAAS,KAAK,MAAM,QAAQ;AAElC,6BAAK,4BAA4B;AAEjC,+BAAO,WAAW,WAAA;AACd,8BAAI,MAAK,2BAA2B;AAChC,kCAAK,sBACD,UACA,mBAAA,uBAAuB,WACvB,uBAAuB,CAAC;;wBAGpC,GAAG,SAAA,eAAe,QAAQ,QAAQ,6BAA6B;;+BAGnE,SAAA,eAAe,QAAQ,QAAQ,SAAS,MAAM,YAAY,UAC5D;AACE,0BAAI,uBAAuB,GAAG;AAC1B,iCACI,MAAM,SAAS,SACf,wCACI,uBACA,yBAAyB;6BAE9B;AACH,iCACI,MAAM,SAAS,SACf,uEAAuE;;AAI/E,0BACI,SAAA,eAAe,QAAQ,QAClB,+CACL,SAAA,eAAe,QAAQ,QAAQ,SAAS,MAAM,YAAY,QAC5D;AACE,iCAAS,MAAM,SAAS,MAAM,gCAAgC;AAE9D,6BAAK,wBAAwB,KAAK,MAAM,QAAQ,MAAM;;;;;;qBAMrE,OAAO;AAEZ,uBAAS,MAAM,SAAS,OAAO,cAAc,KAAK;;;QAG9D;AAEQ,QAAAA,gBAAA,UAAA,wBAAR,SACI,QACA,SACA,sBAA4B;AAE5B,cAAI,kBAAkB,gBAAA,eAAe;AACjC,gBAAI,KAAK,gBAAgB;AACrB,kBAAM,UAAU,KAAK,sBAAsB,QAAQ,SAAS,oBAAoB;AAEhF,kBAAI,SAAS;AACT,qBAAK,QAAQ,WAAU;;mBAExB;AACH,oBAAM,IAAI,MAAM,gDAAgD;;;AAIxE,cAAI,KAAK,UAAU;AACf,iBAAK,SAAS,MAAM,MAAM;;QAElC;AAEQ,QAAAA,gBAAA,UAAA,wBAAR,SAA8B,SAAwB;AAClD,cAAI,CAAC,KAAK,kBAAkB;AACxB,gBAAI,KAAK,yBAAyB;AAC9B,mBAAK,mBAAmB,KAAK,wBAAwB,MAAM,OAAO;mBAC/D;AACH,mBAAK,mBAAmB,SAAS,cAAc,KAAK;AACpD,mBAAK,iBAAiB,YAAY;AAElC,kBAAM,UAAU,SAAS,cAAc,KAAK;AAC5C,sBAAQ,YAAY;AACpB,sBAAQ,MAAM,QAAQ;AACtB,sBAAQ,MAAM,SAAS;AAEvB,mBAAK,iBAAiB,YAAY,OAAO;;;AAIjD,iBAAO,KAAK;QAChB;AAEQ,QAAAA,gBAAA,UAAA,wBAAR,SAA8B,SAAyB;AACnD,cAAI,KAAK,yBAAyB;AAC9B,iBAAK,wBAAwB,MAAM,OAAO;;AAG9C,cAAI,KAAK,qBAAqB,QAAW;AACrC,iBAAK,gBAAgB,YAAY,KAAK,gBAAgB;AAEtD,iBAAK,mBAAmB;;QAEhC;AAEQ,QAAAA,gBAAA,UAAA,2BAAR,SACI,UACA,eAAgD;AAEhD,cAAI,KAAK,4BAA4B;AACjC,iBAAK,2BAA2B,MAAM,UAAU,aAAa;;QAErE;AAEQ,QAAAA,gBAAA,UAAA,wBAAR,SAA8B,UAAuB;AACjD,iBAAO,KAAK,0BACN,KAAK,wBAAwB,MAAM,QAAQ,IAC3C,SAAA,eAAe,QAAQ;QACjC;AAEQ,QAAAA,gBAAA,UAAA,0BAAR,SAAgC,SAAwB;AAAxD,cAAA,QAAA;AACI,cAAM,+BAA+B,KAAK,4BACpC,KAAK,0BAA0B,MAAM,OAAO,IAC5C;AAEN,cAAI,8BAA8B;AAC9B,gBAAM,oBAAoB,KAAK,yBAAyB,QAAQ,aAAa;AAC7E,8BAAkB,OAAM;AACxB,8BAAkB,kBAAkB,SAAC,uBAA6B;AAC9D,kBAAI,MAAK,QAAQ,iCAAiC,gBAAA,cAAc;AAC5D,wBAAQ,sBAAsB,IAAI;kBAC9B,KAAKA,gBAAe;AAChB,wBAAI,WAA+B;AAEnC,wBACI,sBAAsB,QACtB,OAAa,sBAAsB,KAAM,WAAW,MAAM,UAC5D;AACE,iCAAiB,sBAAsB,KAAM,WAAW;;AAG5D,wBAAI,UAAU;AACV,4BAAK,YAAY,MAAK,IAAI;AAE1B,8BAAQ,WAAW;AACnB,2BAAK,QAAQ,WAAU;2BACpB;AACH,4BAAM,2CAA2C;;AAGrD;kBACJ,KAAKA,gBAAe;AAChB,6BAAS,MAAM,SAAS,SAAS,mCAAmC;AAEpE,0BAAK,YAAY,MAAK,IAAI;AAE1B;kBACJ;AACI,6BACI,MAAM,SAAS,OACf,8DACI,sBAAsB,KACtB,GAAG;AAGX,0BAAM,UAAA,QAAQ,mBAAmB,mBAAkB,CAAE;AAErD;;;YAGhB;AAEA,iBAAK,YAAY,iBAAiB;;QAE1C;AAEc,QAAAA,gBAAA,UAAA,mCAAd,SAA+C,SAAwB;;;;;;AACnE,sBAAI,CAAC,KAAK,gBAAgB;AACtB,0BAAM,IAAI,MAAM,8DAA8D;;AAG5E,4BAAU,KAAK,sBAAsB,OAAO;AAElD,sBAAI,YAAY,QAAW;AACvB,yBAAK,gBAAgB,YAAY,OAAO;;AAGxC,yBAAO;;;;;;AAGH,qCAAyC;AAE7C,8BAAI,QAAQ,kBAAkB,GAAG;AAC7B,qCACI,MAAM,SAAS,MACf,kDAAkD,QAAQ,gBAAgB,GAAG;iCAE9E;AACH,qCACI,MAAM,SAAS,MACf,qDAAqD,QAAQ,gBAAgB,GAAG;;;;;AAKzE,iCAAA,CAAA,GAAM,OAAK,eAAe,iBAAiB,OAAO,CAAC;;AAA9D,qCAAW,GAAA,KAAA;;;;AAEX,mCAAS,MAAM,SAAS,OAAO,8BAA8B,OAAK;AAElE,iCAAK,sBAAsB,OAAO;AAElC,iCAAO;;;+BAGP;AAAA,mCAAA,CAAA,GAAA,EAAA;gCACI,oBAAoB,mBAAA;AAApB,mCAAA,CAAA,GAAA,CAAA;AACA,iCAAK,sBAAsB,OAAO;AAElC,8BAAI,SAAS,eAAe,QAAW;AACnC,kCAAM,IAAI,MACN,sEAAsE;;AAI1E,0CAAgB,SAAS;AAE7B,8BAAI;AACA,4CAAgB,KAAK,MAAM,SAAS,UAAU;mCAChD,IAAM;;AAIR,8BAAI,OAAO,kBAAkB,UAAU;AACnC,qCACI,MAAM,SAAS,MACf,kDACI,QAAQ,gBACR,cAAc;AAGtB,mCAAK,yBAAyB,UAAU,aAAa;qCAErD,OAAO,kBAAkB,YACzB,cAAc,MAAM,MAAM,gBAC5B;AACE,qCACI,MAAM,SAAS,MACf,0DACI,QAAQ,gBACR,cAAc;AAGtB,mCAAK,gBAAgB,eAAe,QAAQ,oBAAoB;AAChE,mCAAK,yBAAyB,UAAU,OAAK,IAAI;iCAC9C;AACH,kCAAM,IAAI,MACN,qFACI,OAAO,SAAS,aAChB,GAAG;;AAIf,iCAAO;;;gCACA,oBAAoB,mBAAA;AAApB,mCAAA,CAAA,GAAA,CAAA;AACD,sCAAkB,OAAK,sBAAsB,QAAQ;gCAGvD,aAAW,KACX,QAAQ,gBAAgB,SAAA,eAAe,QAAQ;AAD/C,mCAAA,CAAA,GAAA,CAAA;AAGA,mCACI,MAAM,SAAS,SACf,4BAAA,OAA4B,SAAS,MAAM,SAAO,gBAAA,EAAA,OAAiB,WAAO,IAAA,CAAI;AAGlF,kCAAQ;AAER,iCAAA,CAAA,GAAM,IAAI,QAAc,SAAC,SAAS,SAAO;AACrC,mCAAO,WAAW,WAAA;AACd,sCAAO;4BACX,GAAG,SAAO;0BACd,CAAC,CAAC;;AAJF,6BAAA,KAAA;;;AAMA,mCACI,MAAM,SAAS,OACf,4BAAA,OAA4B,SAAS,MAAM,SAAO,oBAAA,EAAA,OAAqB,QAAQ,eAAa,aAAA,CAAa;AAG7G,iCAAK,sBAAsB,OAAO;AAElC,iCAAO;;;;;AAER,8BAAI,oBAAoB,mBAAA,sBAAsB;AACjD,qCACI,MAAM,SAAS,MACf,gEACI,QAAQ,gBACR,cAAc;AAGtB,gCAAI,QAAQ,iBAAiB,SAAA,eAAe,QAAQ,sBAAsB;AAClE,6CAAe;AAEnB,kCAAI,SAAS,yBAAyB,OAAK,kBAAkB;AAGzD,+CAAe,CAAC,OAAK,iBAAgB,QAEjC,SACA,SAAS,qBAAqB;;AAItC,kCAAI,cAAc;AAEd,uCAAK,sBAAsB,OAAO;AAElC,oCAAI,SAAS,iBAAiB,QAAW;AACrC,wCAAM,IAAI,MACN,yFAAyF;;AAIjG,yCACI,MAAM,SAAS,MACf,uBAAuB,SAAS,aAAa,KAAK;AAGtD,oCAAI,OAAK,oBAAoB;AAEzB,yCAAK,mBAAkB,QAAO,SAAS,SAAS,YAAY;uCACzD;AACH,yCAAK,wBAAwB,OAAO;AAE9B,yCACF,OAAO,WACN,OAAO,aAAa,SAAA,eAAe,QAAQ,mBACxC;AACF,0CACF,OAAO,WACN,OAAO,cAAc,SAAA,eAAe,QAAQ,oBACzC;AAER,yCAAO,KACH,SAAS,aAAa,OACtB,SAAS,aAAa,QAChB,SAAS,aAAa,QACtB,WACN,SAAA,OAAS,SAAA,eAAe,QAAQ,iBAAe,UAAA,EAAA,OAAW,SAAA,eAAe,QAAQ,kBAAgB,QAAA,EAAA,OAAS,MAAI,OAAA,EAAA,OAAQ,KAAG,CAAE;;;mCAIpI;AACH,uCACI,MAAM,SAAS,OACf,4CACI,QAAQ,gBACR,aAAa;AAGrB,oCAAM,UAAA,QAAQ,mBAAmB,qBAAoB,CAAE;;;iCAKxD;AACH,kCAAM,IAAI,MAAM,8BAA8B,KAAK,UAAU,QAAQ,CAAC;;;;;;;;;;;;;;uBAjL3E,CAAC;AAAI,2BAAA,CAAA,GAAA,CAAA;;;;;;;;;;;;;;;;AAmPhB,QAAAA,gBAAA,UAAA,cAAA,WAAA;AACI,cAAI,KAAK,SAAS,KAAK,MAAM,SAAS;AAClC,iBAAK,sBAAsB,KAAK,MAAM,QAAQ,QAAQ,mBAAA,uBAAuB,QAAQ,CAAC;;QAE9F;AAEA,QAAAA,gBAAA,UAAA,UAAA,SAAQ,SAAY;AAChB,eAAK,gBAAgB,SAAS,CAAC;QACnC;AAEA,eAAA,eAAIA,gBAAA,WAAA,QAAI;eAAR,WAAA;AACI,mBAAO,KAAK;UAChB;;;;AA5sBwB,QAAAA,gBAAA,2BAA2B;AAC3B,QAAAA,gBAAA,+BAA+B;AA4sB3D,eAAAA;QA9sBA;;AAAa,YAAA,iBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrEb,iBAAA,mBAAA,OAAA;AACA,iBAAA,iBAAA,OAAA;AACA,iBAAA,kBAAA,OAAA;AACA,iBAAA,iBAAA,OAAA;AACA,iBAAA,yBAAA,OAAA;AACA,iBAAA,6BAAA,OAAA;AACA,iBAAA,uBAAA,OAAA;AACA,iBAAA,oBAAA,OAAA;AACA,iBAAA,uBAAA,OAAA;AACA,iBAAA,yBAAA,OAAA;AACA,iBAAA,iBAAA,OAAA;AACA,iBAAA,2BAAA,OAAA;AACA,iBAAA,4BAAA,OAAA;AACA,iBAAA,2BAAA,OAAA;;;", + "names": ["Strings", "ContainerStyle", "ActionStyle", "ActionMode", "Size", "ImageSize", "SizeUnit", "TextSize", "TextWeight", "FontType", "Spacing", "TextColor", "HorizontalAlignment", "VerticalAlignment", "ActionAlignment", "ImageStyle", "ShowCardActionMode", "Orientation", "FillMode", "ActionIconPlacement", "InputTextStyle", "ValidationPhase", "ValidationEvent", "ContainerFitStatus", "TypeErrorType", "RefreshMode", "LogLevel", "GlobalSettings", "StringWithSubstitutions", "SpacingDefinition", "PaddingDefinition", "SizeAndUnit", "UUID", "_a", "Version", "Versions", "BaseSerializationContext", "SimpleSerializationContext", "PropertyDefinition", "StringProperty", "BoolProperty", "NumProperty", "PixelSizeProperty", "StringArrayProperty", "ValueSetProperty", "EnumProperty", "SerializableObjectProperty", "SerializableObjectCollectionProperty", "CustomProperty", "SerializableObjectSchema", "SerializableObject", "HostCapabilities", "ColorDefinition", "TextColorDefinition", "AdaptiveCardConfig", "ImageSetConfig", "MediaConfig", "TableConfig", "BaseTextDefinition", "TextStyleDefinition", "TextStyleSet", "TextBlockConfig", "RequiredInputLabelTextDefinition", "InputLabelConfig", "InputConfig", "FactTextDefinition", "FactTitleDefinition", "FactSetConfig", "ShowCardActionConfig", "ActionsConfig", "ColorSetDefinition", "ContainerStyleDefinition", "BuiltInContainerStyleDefinition", "ContainerStyleSet", "FontTypeDefinition", "FontTypeSet", "HostConfig", "ElementSingletonBehavior", "CardObjectRegistry", "GlobalRegistry", "ValidationResults", "CardObject", "AbstractTextFormatter", "DateFormatter", "TimeFormatter", "Constants", "MenuItem", "Collection", "PopupControl", "PopupMenu", "CardElement", "ActionProperty", "BaseTextBlock", "TextBlock", "_b", "_a", "anchor", "TextRun", "RichTextBlock", "Fact", "FactSet", "ImageDimensionProperty", "Image", "CardElementContainer", "ImageSet", "ContentSource", "CaptionSource", "MediaSource", "MediaPlayer", "HTML5MediaPlayer", "CustomMediaPlayer", "IFrameMediaMediaPlayer", "VimeoPlayer", "DailymotionPlayer", "YouTubePlayer", "Media", "Input", "TextInput", "ToggleInput", "Choice", "ChoiceSetInput", "NumberInput", "DateInput", "TimeProperty", "TimeInput", "Action", "SubmitActionBase", "SubmitAction", "ExecuteAction", "OpenUrlAction", "ToggleVisibilityAction", "StringWithSubstitutionProperty", "HttpHeader", "HttpAction", "ShowCardAction", "OverflowAction", "i", "ActionCollection", "_i", "action", "ActionSet", "ContainerStyleProperty", "StylableCardElementContainer", "ContainerBase", "BackgroundImage", "Container", "Column", "ColumnSet", "ContainerWithActions", "RefreshActionProperty", "RefreshDefinition", "AuthCardButton", "TokenExchangeResource", "Authentication", "AdaptiveCard", "InlineAdaptiveCard", "SerializationContext", "TableColumnDefinition", "StylableContainer", "TableCell", "TableRow", "Table", "ChannelAdapter", "ActivityRequestTrigger", "ActivityRequestError", "ActivityResponse", "SuccessResponse", "ErrorResponse", "LoginRequestResponse", "ActivityRequest", "AdaptiveApplet"] +} diff --git a/docs/.vitepress/cache/deps/apex-QXTPZBD5.js b/docs/.vitepress/cache/deps/apex-QXTPZBD5.js new file mode 100644 index 0000000..eb7fbde --- /dev/null +++ b/docs/.vitepress/cache/deps/apex-QXTPZBD5.js @@ -0,0 +1,328 @@ +import "./chunk-6PJEDKO5.js"; + +// node_modules/monaco-editor/esm/vs/basic-languages/apex/apex.js +var conf = { + wordPattern: /(-?\d*\.\d\w*)|([^\`\~\!\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g, + comments: { + lineComment: "//", + blockComment: ["/*", "*/"] + }, + brackets: [ + ["{", "}"], + ["[", "]"], + ["(", ")"] + ], + autoClosingPairs: [ + { open: "{", close: "}" }, + { open: "[", close: "]" }, + { open: "(", close: ")" }, + { open: '"', close: '"' }, + { open: "'", close: "'" } + ], + surroundingPairs: [ + { open: "{", close: "}" }, + { open: "[", close: "]" }, + { open: "(", close: ")" }, + { open: '"', close: '"' }, + { open: "'", close: "'" }, + { open: "<", close: ">" } + ], + folding: { + markers: { + start: new RegExp("^\\s*//\\s*(?:(?:#?region\\b)|(?:))") + } + } +}; +var keywords = [ + "abstract", + "activate", + "and", + "any", + "array", + "as", + "asc", + "assert", + "autonomous", + "begin", + "bigdecimal", + "blob", + "boolean", + "break", + "bulk", + "by", + "case", + "cast", + "catch", + "char", + "class", + "collect", + "commit", + "const", + "continue", + "convertcurrency", + "decimal", + "default", + "delete", + "desc", + "do", + "double", + "else", + "end", + "enum", + "exception", + "exit", + "export", + "extends", + "false", + "final", + "finally", + "float", + "for", + "from", + "future", + "get", + "global", + "goto", + "group", + "having", + "hint", + "if", + "implements", + "import", + "in", + "inner", + "insert", + "instanceof", + "int", + "interface", + "into", + "join", + "last_90_days", + "last_month", + "last_n_days", + "last_week", + "like", + "limit", + "list", + "long", + "loop", + "map", + "merge", + "native", + "new", + "next_90_days", + "next_month", + "next_n_days", + "next_week", + "not", + "null", + "nulls", + "number", + "object", + "of", + "on", + "or", + "outer", + "override", + "package", + "parallel", + "pragma", + "private", + "protected", + "public", + "retrieve", + "return", + "returning", + "rollback", + "savepoint", + "search", + "select", + "set", + "short", + "sort", + "stat", + "static", + "strictfp", + "super", + "switch", + "synchronized", + "system", + "testmethod", + "then", + "this", + "this_month", + "this_week", + "throw", + "throws", + "today", + "tolabel", + "tomorrow", + "transaction", + "transient", + "trigger", + "true", + "try", + "type", + "undelete", + "update", + "upsert", + "using", + "virtual", + "void", + "volatile", + "webservice", + "when", + "where", + "while", + "yesterday" +]; +var uppercaseFirstLetter = (lowercase) => lowercase.charAt(0).toUpperCase() + lowercase.substr(1); +var keywordsWithCaseVariations = []; +keywords.forEach((lowercase) => { + keywordsWithCaseVariations.push(lowercase); + keywordsWithCaseVariations.push(lowercase.toUpperCase()); + keywordsWithCaseVariations.push(uppercaseFirstLetter(lowercase)); +}); +var language = { + defaultToken: "", + tokenPostfix: ".apex", + keywords: keywordsWithCaseVariations, + operators: [ + "=", + ">", + "<", + "!", + "~", + "?", + ":", + "==", + "<=", + ">=", + "!=", + "&&", + "||", + "++", + "--", + "+", + "-", + "*", + "/", + "&", + "|", + "^", + "%", + "<<", + ">>", + ">>>", + "+=", + "-=", + "*=", + "/=", + "&=", + "|=", + "^=", + "%=", + "<<=", + ">>=", + ">>>=" + ], + symbols: /[=>](?!@symbols)/, "@brackets"], + [ + /@symbols/, + { + cases: { + "@operators": "delimiter", + "@default": "" + } + } + ], + [/@\s*[a-zA-Z_\$][\w\$]*/, "annotation"], + [/(@digits)[eE]([\-+]?(@digits))?[fFdD]?/, "number.float"], + [/(@digits)\.(@digits)([eE][\-+]?(@digits))?[fFdD]?/, "number.float"], + [/(@digits)[fFdD]/, "number.float"], + [/(@digits)[lL]?/, "number"], + [/[;,.]/, "delimiter"], + [/"([^"\\]|\\.)*$/, "string.invalid"], + [/'([^'\\]|\\.)*$/, "string.invalid"], + [/"/, "string", '@string."'], + [/'/, "string", "@string.'"], + [/'[^\\']'/, "string"], + [/(')(@escapes)(')/, ["string", "string.escape", "string"]], + [/'/, "string.invalid"] + ], + whitespace: [ + [/[ \t\r\n]+/, ""], + [/\/\*\*(?!\/)/, "comment.doc", "@apexdoc"], + [/\/\*/, "comment", "@comment"], + [/\/\/.*$/, "comment"] + ], + comment: [ + [/[^\/*]+/, "comment"], + [/\*\//, "comment", "@pop"], + [/[\/*]/, "comment"] + ], + apexdoc: [ + [/[^\/*]+/, "comment.doc"], + [/\*\//, "comment.doc", "@pop"], + [/[\/*]/, "comment.doc"] + ], + string: [ + [/[^\\"']+/, "string"], + [/@escapes/, "string.escape"], + [/\\./, "string.escape.invalid"], + [ + /["']/, + { + cases: { + "$#==$S2": { token: "string", next: "@pop" }, + "@default": "string" + } + } + ] + ] + } +}; +export { + conf, + language +}; +/*! Bundled license information: + +monaco-editor/esm/vs/basic-languages/apex/apex.js: + (*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Version: 0.41.0(38e1e3d097f84e336c311d071a9ffb5191d4ffd1) + * Released under the MIT license + * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt + *-----------------------------------------------------------------------------*) +*/ +//# sourceMappingURL=apex-QXTPZBD5.js.map diff --git a/docs/.vitepress/cache/deps/apex-QXTPZBD5.js.map b/docs/.vitepress/cache/deps/apex-QXTPZBD5.js.map new file mode 100644 index 0000000..8f5dfe5 --- /dev/null +++ b/docs/.vitepress/cache/deps/apex-QXTPZBD5.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../../../node_modules/monaco-editor/esm/vs/basic-languages/apex/apex.js"], + "sourcesContent": ["/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.41.0(38e1e3d097f84e336c311d071a9ffb5191d4ffd1)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\n\n// src/basic-languages/apex/apex.ts\nvar conf = {\n wordPattern: /(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)/g,\n comments: {\n lineComment: \"//\",\n blockComment: [\"/*\", \"*/\"]\n },\n brackets: [\n [\"{\", \"}\"],\n [\"[\", \"]\"],\n [\"(\", \")\"]\n ],\n autoClosingPairs: [\n { open: \"{\", close: \"}\" },\n { open: \"[\", close: \"]\" },\n { open: \"(\", close: \")\" },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" }\n ],\n surroundingPairs: [\n { open: \"{\", close: \"}\" },\n { open: \"[\", close: \"]\" },\n { open: \"(\", close: \")\" },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" },\n { open: \"<\", close: \">\" }\n ],\n folding: {\n markers: {\n start: new RegExp(\"^\\\\s*//\\\\s*(?:(?:#?region\\\\b)|(?:))\")\n }\n }\n};\nvar keywords = [\n \"abstract\",\n \"activate\",\n \"and\",\n \"any\",\n \"array\",\n \"as\",\n \"asc\",\n \"assert\",\n \"autonomous\",\n \"begin\",\n \"bigdecimal\",\n \"blob\",\n \"boolean\",\n \"break\",\n \"bulk\",\n \"by\",\n \"case\",\n \"cast\",\n \"catch\",\n \"char\",\n \"class\",\n \"collect\",\n \"commit\",\n \"const\",\n \"continue\",\n \"convertcurrency\",\n \"decimal\",\n \"default\",\n \"delete\",\n \"desc\",\n \"do\",\n \"double\",\n \"else\",\n \"end\",\n \"enum\",\n \"exception\",\n \"exit\",\n \"export\",\n \"extends\",\n \"false\",\n \"final\",\n \"finally\",\n \"float\",\n \"for\",\n \"from\",\n \"future\",\n \"get\",\n \"global\",\n \"goto\",\n \"group\",\n \"having\",\n \"hint\",\n \"if\",\n \"implements\",\n \"import\",\n \"in\",\n \"inner\",\n \"insert\",\n \"instanceof\",\n \"int\",\n \"interface\",\n \"into\",\n \"join\",\n \"last_90_days\",\n \"last_month\",\n \"last_n_days\",\n \"last_week\",\n \"like\",\n \"limit\",\n \"list\",\n \"long\",\n \"loop\",\n \"map\",\n \"merge\",\n \"native\",\n \"new\",\n \"next_90_days\",\n \"next_month\",\n \"next_n_days\",\n \"next_week\",\n \"not\",\n \"null\",\n \"nulls\",\n \"number\",\n \"object\",\n \"of\",\n \"on\",\n \"or\",\n \"outer\",\n \"override\",\n \"package\",\n \"parallel\",\n \"pragma\",\n \"private\",\n \"protected\",\n \"public\",\n \"retrieve\",\n \"return\",\n \"returning\",\n \"rollback\",\n \"savepoint\",\n \"search\",\n \"select\",\n \"set\",\n \"short\",\n \"sort\",\n \"stat\",\n \"static\",\n \"strictfp\",\n \"super\",\n \"switch\",\n \"synchronized\",\n \"system\",\n \"testmethod\",\n \"then\",\n \"this\",\n \"this_month\",\n \"this_week\",\n \"throw\",\n \"throws\",\n \"today\",\n \"tolabel\",\n \"tomorrow\",\n \"transaction\",\n \"transient\",\n \"trigger\",\n \"true\",\n \"try\",\n \"type\",\n \"undelete\",\n \"update\",\n \"upsert\",\n \"using\",\n \"virtual\",\n \"void\",\n \"volatile\",\n \"webservice\",\n \"when\",\n \"where\",\n \"while\",\n \"yesterday\"\n];\nvar uppercaseFirstLetter = (lowercase) => lowercase.charAt(0).toUpperCase() + lowercase.substr(1);\nvar keywordsWithCaseVariations = [];\nkeywords.forEach((lowercase) => {\n keywordsWithCaseVariations.push(lowercase);\n keywordsWithCaseVariations.push(lowercase.toUpperCase());\n keywordsWithCaseVariations.push(uppercaseFirstLetter(lowercase));\n});\nvar language = {\n defaultToken: \"\",\n tokenPostfix: \".apex\",\n keywords: keywordsWithCaseVariations,\n operators: [\n \"=\",\n \">\",\n \"<\",\n \"!\",\n \"~\",\n \"?\",\n \":\",\n \"==\",\n \"<=\",\n \">=\",\n \"!=\",\n \"&&\",\n \"||\",\n \"++\",\n \"--\",\n \"+\",\n \"-\",\n \"*\",\n \"/\",\n \"&\",\n \"|\",\n \"^\",\n \"%\",\n \"<<\",\n \">>\",\n \">>>\",\n \"+=\",\n \"-=\",\n \"*=\",\n \"/=\",\n \"&=\",\n \"|=\",\n \"^=\",\n \"%=\",\n \"<<=\",\n \">>=\",\n \">>>=\"\n ],\n symbols: /[=>](?!@symbols)/, \"@brackets\"],\n [\n /@symbols/,\n {\n cases: {\n \"@operators\": \"delimiter\",\n \"@default\": \"\"\n }\n }\n ],\n [/@\\s*[a-zA-Z_\\$][\\w\\$]*/, \"annotation\"],\n [/(@digits)[eE]([\\-+]?(@digits))?[fFdD]?/, \"number.float\"],\n [/(@digits)\\.(@digits)([eE][\\-+]?(@digits))?[fFdD]?/, \"number.float\"],\n [/(@digits)[fFdD]/, \"number.float\"],\n [/(@digits)[lL]?/, \"number\"],\n [/[;,.]/, \"delimiter\"],\n [/\"([^\"\\\\]|\\\\.)*$/, \"string.invalid\"],\n [/'([^'\\\\]|\\\\.)*$/, \"string.invalid\"],\n [/\"/, \"string\", '@string.\"'],\n [/'/, \"string\", \"@string.'\"],\n [/'[^\\\\']'/, \"string\"],\n [/(')(@escapes)(')/, [\"string\", \"string.escape\", \"string\"]],\n [/'/, \"string.invalid\"]\n ],\n whitespace: [\n [/[ \\t\\r\\n]+/, \"\"],\n [/\\/\\*\\*(?!\\/)/, \"comment.doc\", \"@apexdoc\"],\n [/\\/\\*/, \"comment\", \"@comment\"],\n [/\\/\\/.*$/, \"comment\"]\n ],\n comment: [\n [/[^\\/*]+/, \"comment\"],\n [/\\*\\//, \"comment\", \"@pop\"],\n [/[\\/*]/, \"comment\"]\n ],\n apexdoc: [\n [/[^\\/*]+/, \"comment.doc\"],\n [/\\*\\//, \"comment.doc\", \"@pop\"],\n [/[\\/*]/, \"comment.doc\"]\n ],\n string: [\n [/[^\\\\\"']+/, \"string\"],\n [/@escapes/, \"string.escape\"],\n [/\\\\./, \"string.escape.invalid\"],\n [\n /[\"']/,\n {\n cases: {\n \"$#==$S2\": { token: \"string\", next: \"@pop\" },\n \"@default\": \"string\"\n }\n }\n ]\n ]\n }\n};\nexport {\n conf,\n language\n};\n"], + "mappings": "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", + "names": [] +} diff --git a/docs/.vitepress/cache/deps/azcli-AKNZCCZ4.js b/docs/.vitepress/cache/deps/azcli-AKNZCCZ4.js new file mode 100644 index 0000000..302ff84 --- /dev/null +++ b/docs/.vitepress/cache/deps/azcli-AKNZCCZ4.js @@ -0,0 +1,83 @@ +import "./chunk-6PJEDKO5.js"; + +// node_modules/monaco-editor/esm/vs/basic-languages/azcli/azcli.js +var conf = { + comments: { + lineComment: "#" + } +}; +var language = { + defaultToken: "keyword", + ignoreCase: true, + tokenPostfix: ".azcli", + str: /[^#\s]/, + tokenizer: { + root: [ + { include: "@comment" }, + [ + /\s-+@str*\s*/, + { + cases: { + "@eos": { token: "key.identifier", next: "@popall" }, + "@default": { token: "key.identifier", next: "@type" } + } + } + ], + [ + /^-+@str*\s*/, + { + cases: { + "@eos": { token: "key.identifier", next: "@popall" }, + "@default": { token: "key.identifier", next: "@type" } + } + } + ] + ], + type: [ + { include: "@comment" }, + [ + /-+@str*\s*/, + { + cases: { + "@eos": { token: "key.identifier", next: "@popall" }, + "@default": "key.identifier" + } + } + ], + [ + /@str+\s*/, + { + cases: { + "@eos": { token: "string", next: "@popall" }, + "@default": "string" + } + } + ] + ], + comment: [ + [ + /#.*$/, + { + cases: { + "@eos": { token: "comment", next: "@popall" } + } + } + ] + ] + } +}; +export { + conf, + language +}; +/*! Bundled license information: + +monaco-editor/esm/vs/basic-languages/azcli/azcli.js: + (*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Version: 0.41.0(38e1e3d097f84e336c311d071a9ffb5191d4ffd1) + * Released under the MIT license + * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt + *-----------------------------------------------------------------------------*) +*/ +//# sourceMappingURL=azcli-AKNZCCZ4.js.map diff --git a/docs/.vitepress/cache/deps/azcli-AKNZCCZ4.js.map b/docs/.vitepress/cache/deps/azcli-AKNZCCZ4.js.map new file mode 100644 index 0000000..c9a449f --- /dev/null +++ b/docs/.vitepress/cache/deps/azcli-AKNZCCZ4.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../../../node_modules/monaco-editor/esm/vs/basic-languages/azcli/azcli.js"], + "sourcesContent": ["/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.41.0(38e1e3d097f84e336c311d071a9ffb5191d4ffd1)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\n\n// src/basic-languages/azcli/azcli.ts\nvar conf = {\n comments: {\n lineComment: \"#\"\n }\n};\nvar language = {\n defaultToken: \"keyword\",\n ignoreCase: true,\n tokenPostfix: \".azcli\",\n str: /[^#\\s]/,\n tokenizer: {\n root: [\n { include: \"@comment\" },\n [\n /\\s-+@str*\\s*/,\n {\n cases: {\n \"@eos\": { token: \"key.identifier\", next: \"@popall\" },\n \"@default\": { token: \"key.identifier\", next: \"@type\" }\n }\n }\n ],\n [\n /^-+@str*\\s*/,\n {\n cases: {\n \"@eos\": { token: \"key.identifier\", next: \"@popall\" },\n \"@default\": { token: \"key.identifier\", next: \"@type\" }\n }\n }\n ]\n ],\n type: [\n { include: \"@comment\" },\n [\n /-+@str*\\s*/,\n {\n cases: {\n \"@eos\": { token: \"key.identifier\", next: \"@popall\" },\n \"@default\": \"key.identifier\"\n }\n }\n ],\n [\n /@str+\\s*/,\n {\n cases: {\n \"@eos\": { token: \"string\", next: \"@popall\" },\n \"@default\": \"string\"\n }\n }\n ]\n ],\n comment: [\n [\n /#.*$/,\n {\n cases: {\n \"@eos\": { token: \"comment\", next: \"@popall\" }\n }\n }\n ]\n ]\n }\n};\nexport {\n conf,\n language\n};\n"], + "mappings": ";;;AAQA,IAAI,OAAO;AAAA,EACT,UAAU;AAAA,IACR,aAAa;AAAA,EACf;AACF;AACA,IAAI,WAAW;AAAA,EACb,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,KAAK;AAAA,EACL,WAAW;AAAA,IACT,MAAM;AAAA,MACJ,EAAE,SAAS,WAAW;AAAA,MACtB;AAAA,QACE;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,QAAQ,EAAE,OAAO,kBAAkB,MAAM,UAAU;AAAA,YACnD,YAAY,EAAE,OAAO,kBAAkB,MAAM,QAAQ;AAAA,UACvD;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,QAAQ,EAAE,OAAO,kBAAkB,MAAM,UAAU;AAAA,YACnD,YAAY,EAAE,OAAO,kBAAkB,MAAM,QAAQ;AAAA,UACvD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM;AAAA,MACJ,EAAE,SAAS,WAAW;AAAA,MACtB;AAAA,QACE;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,QAAQ,EAAE,OAAO,kBAAkB,MAAM,UAAU;AAAA,YACnD,YAAY;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,QAAQ,EAAE,OAAO,UAAU,MAAM,UAAU;AAAA,YAC3C,YAAY;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP;AAAA,QACE;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,QAAQ,EAAE,OAAO,WAAW,MAAM,UAAU;AAAA,UAC9C;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;", + "names": [] +} diff --git a/docs/.vitepress/cache/deps/bat-KITOMZVG.js b/docs/.vitepress/cache/deps/bat-KITOMZVG.js new file mode 100644 index 0000000..06e09e4 --- /dev/null +++ b/docs/.vitepress/cache/deps/bat-KITOMZVG.js @@ -0,0 +1,104 @@ +import "./chunk-6PJEDKO5.js"; + +// node_modules/monaco-editor/esm/vs/basic-languages/bat/bat.js +var conf = { + comments: { + lineComment: "REM" + }, + brackets: [ + ["{", "}"], + ["[", "]"], + ["(", ")"] + ], + autoClosingPairs: [ + { open: "{", close: "}" }, + { open: "[", close: "]" }, + { open: "(", close: ")" }, + { open: '"', close: '"' } + ], + surroundingPairs: [ + { open: "[", close: "]" }, + { open: "(", close: ")" }, + { open: '"', close: '"' } + ], + folding: { + markers: { + start: new RegExp("^\\s*(::\\s*|REM\\s+)#region"), + end: new RegExp("^\\s*(::\\s*|REM\\s+)#endregion") + } + } +}; +var language = { + defaultToken: "", + ignoreCase: true, + tokenPostfix: ".bat", + brackets: [ + { token: "delimiter.bracket", open: "{", close: "}" }, + { token: "delimiter.parenthesis", open: "(", close: ")" }, + { token: "delimiter.square", open: "[", close: "]" } + ], + keywords: /call|defined|echo|errorlevel|exist|for|goto|if|pause|set|shift|start|title|not|pushd|popd/, + symbols: /[=> `\\b${text}\\b`; +var identifierStart = "[_a-zA-Z]"; +var identifierContinue = "[_a-zA-Z0-9]"; +var identifier = bounded(`${identifierStart}${identifierContinue}*`); +var keywords = [ + "targetScope", + "resource", + "module", + "param", + "var", + "output", + "for", + "in", + "if", + "existing" +]; +var namedLiterals = ["true", "false", "null"]; +var nonCommentWs = `[ \\t\\r\\n]`; +var numericLiteral = `[0-9]+`; +var conf = { + comments: { + lineComment: "//", + blockComment: ["/*", "*/"] + }, + brackets: [ + ["{", "}"], + ["[", "]"], + ["(", ")"] + ], + surroundingPairs: [ + { open: "{", close: "}" }, + { open: "[", close: "]" }, + { open: "(", close: ")" }, + { open: "'", close: "'" }, + { open: "'''", close: "'''" } + ], + autoClosingPairs: [ + { open: "{", close: "}" }, + { open: "[", close: "]" }, + { open: "(", close: ")" }, + { open: "'", close: "'", notIn: ["string", "comment"] }, + { open: "'''", close: "'''", notIn: ["string", "comment"] } + ], + autoCloseBefore: ":.,=}])' \n ", + indentationRules: { + increaseIndentPattern: new RegExp("^((?!\\/\\/).)*(\\{[^}\"'`]*|\\([^)\"'`]*|\\[[^\\]\"'`]*)$"), + decreaseIndentPattern: new RegExp("^((?!.*?\\/\\*).*\\*/)?\\s*[\\}\\]].*$") + } +}; +var language = { + defaultToken: "", + tokenPostfix: ".bicep", + brackets: [ + { open: "{", close: "}", token: "delimiter.curly" }, + { open: "[", close: "]", token: "delimiter.square" }, + { open: "(", close: ")", token: "delimiter.parenthesis" } + ], + symbols: /[=> `\\\\b${text}\\\\b`;\nvar identifierStart = \"[_a-zA-Z]\";\nvar identifierContinue = \"[_a-zA-Z0-9]\";\nvar identifier = bounded(`${identifierStart}${identifierContinue}*`);\nvar keywords = [\n \"targetScope\",\n \"resource\",\n \"module\",\n \"param\",\n \"var\",\n \"output\",\n \"for\",\n \"in\",\n \"if\",\n \"existing\"\n];\nvar namedLiterals = [\"true\", \"false\", \"null\"];\nvar nonCommentWs = `[ \\\\t\\\\r\\\\n]`;\nvar numericLiteral = `[0-9]+`;\nvar conf = {\n comments: {\n lineComment: \"//\",\n blockComment: [\"/*\", \"*/\"]\n },\n brackets: [\n [\"{\", \"}\"],\n [\"[\", \"]\"],\n [\"(\", \")\"]\n ],\n surroundingPairs: [\n { open: \"{\", close: \"}\" },\n { open: \"[\", close: \"]\" },\n { open: \"(\", close: \")\" },\n { open: \"'\", close: \"'\" },\n { open: \"'''\", close: \"'''\" }\n ],\n autoClosingPairs: [\n { open: \"{\", close: \"}\" },\n { open: \"[\", close: \"]\" },\n { open: \"(\", close: \")\" },\n { open: \"'\", close: \"'\", notIn: [\"string\", \"comment\"] },\n { open: \"'''\", close: \"'''\", notIn: [\"string\", \"comment\"] }\n ],\n autoCloseBefore: \":.,=}])' \\n\t\",\n indentationRules: {\n increaseIndentPattern: new RegExp(\"^((?!\\\\/\\\\/).)*(\\\\{[^}\\\"'`]*|\\\\([^)\\\"'`]*|\\\\[[^\\\\]\\\"'`]*)$\"),\n decreaseIndentPattern: new RegExp(\"^((?!.*?\\\\/\\\\*).*\\\\*/)?\\\\s*[\\\\}\\\\]].*$\")\n }\n};\nvar language = {\n defaultToken: \"\",\n tokenPostfix: \".bicep\",\n brackets: [\n { open: \"{\", close: \"}\", token: \"delimiter.curly\" },\n { open: \"[\", close: \"]\", token: \"delimiter.square\" },\n { open: \"(\", close: \")\", token: \"delimiter.parenthesis\" }\n ],\n symbols: /[=>"] + ], + autoClosingPairs: [ + { open: "{", close: "}" }, + { open: "[", close: "]" }, + { open: "(", close: ")" }, + { open: "<", close: ">" }, + { open: "'", close: "'" }, + { open: '"', close: '"' }, + { open: "(*", close: "*)" } + ], + surroundingPairs: [ + { open: "{", close: "}" }, + { open: "[", close: "]" }, + { open: "(", close: ")" }, + { open: "<", close: ">" }, + { open: "'", close: "'" }, + { open: '"', close: '"' }, + { open: "(*", close: "*)" } + ] +}; +var language = { + defaultToken: "", + tokenPostfix: ".cameligo", + ignoreCase: true, + brackets: [ + { open: "{", close: "}", token: "delimiter.curly" }, + { open: "[", close: "]", token: "delimiter.square" }, + { open: "(", close: ")", token: "delimiter.parenthesis" }, + { open: "<", close: ">", token: "delimiter.angle" } + ], + keywords: [ + "abs", + "assert", + "block", + "Bytes", + "case", + "Crypto", + "Current", + "else", + "failwith", + "false", + "for", + "fun", + "if", + "in", + "let", + "let%entry", + "let%init", + "List", + "list", + "Map", + "map", + "match", + "match%nat", + "mod", + "not", + "operation", + "Operation", + "of", + "record", + "Set", + "set", + "sender", + "skip", + "source", + "String", + "then", + "to", + "true", + "type", + "with" + ], + typeKeywords: ["int", "unit", "string", "tz", "nat", "bool"], + operators: [ + "=", + ">", + "<", + "<=", + ">=", + "<>", + ":", + ":=", + "and", + "mod", + "or", + "+", + "-", + "*", + "/", + "@", + "&", + "^", + "%", + "->", + "<-", + "&&", + "||" + ], + symbols: /[=><:@\^&|+\-*\/\^%]+/, + tokenizer: { + root: [ + [ + /[a-zA-Z_][\w]*/, + { + cases: { + "@keywords": { token: "keyword.$0" }, + "@default": "identifier" + } + } + ], + { include: "@whitespace" }, + [/[{}()\[\]]/, "@brackets"], + [/[<>](?!@symbols)/, "@brackets"], + [ + /@symbols/, + { + cases: { + "@operators": "delimiter", + "@default": "" + } + } + ], + [/\d*\.\d+([eE][\-+]?\d+)?/, "number.float"], + [/\$[0-9a-fA-F]{1,16}/, "number.hex"], + [/\d+/, "number"], + [/[;,.]/, "delimiter"], + [/'([^'\\]|\\.)*$/, "string.invalid"], + [/'/, "string", "@string"], + [/'[^\\']'/, "string"], + [/'/, "string.invalid"], + [/\#\d+/, "string"] + ], + comment: [ + [/[^\(\*]+/, "comment"], + [/\*\)/, "comment", "@pop"], + [/\(\*/, "comment"] + ], + string: [ + [/[^\\']+/, "string"], + [/\\./, "string.escape.invalid"], + [/'/, { token: "string.quote", bracket: "@close", next: "@pop" }] + ], + whitespace: [ + [/[ \t\r\n]+/, "white"], + [/\(\*/, "comment", "@comment"], + [/\/\/.*$/, "comment"] + ] + } +}; +export { + conf, + language +}; +/*! Bundled license information: + +monaco-editor/esm/vs/basic-languages/cameligo/cameligo.js: + (*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Version: 0.41.0(38e1e3d097f84e336c311d071a9ffb5191d4ffd1) + * Released under the MIT license + * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt + *-----------------------------------------------------------------------------*) +*/ +//# sourceMappingURL=cameligo-47AYWHA2.js.map diff --git a/docs/.vitepress/cache/deps/cameligo-47AYWHA2.js.map b/docs/.vitepress/cache/deps/cameligo-47AYWHA2.js.map new file mode 100644 index 0000000..dcbe86d --- /dev/null +++ b/docs/.vitepress/cache/deps/cameligo-47AYWHA2.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../../../node_modules/monaco-editor/esm/vs/basic-languages/cameligo/cameligo.js"], + "sourcesContent": ["/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.41.0(38e1e3d097f84e336c311d071a9ffb5191d4ffd1)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\n\n// src/basic-languages/cameligo/cameligo.ts\nvar conf = {\n comments: {\n lineComment: \"//\",\n blockComment: [\"(*\", \"*)\"]\n },\n brackets: [\n [\"{\", \"}\"],\n [\"[\", \"]\"],\n [\"(\", \")\"],\n [\"<\", \">\"]\n ],\n autoClosingPairs: [\n { open: \"{\", close: \"}\" },\n { open: \"[\", close: \"]\" },\n { open: \"(\", close: \")\" },\n { open: \"<\", close: \">\" },\n { open: \"'\", close: \"'\" },\n { open: '\"', close: '\"' },\n { open: \"(*\", close: \"*)\" }\n ],\n surroundingPairs: [\n { open: \"{\", close: \"}\" },\n { open: \"[\", close: \"]\" },\n { open: \"(\", close: \")\" },\n { open: \"<\", close: \">\" },\n { open: \"'\", close: \"'\" },\n { open: '\"', close: '\"' },\n { open: \"(*\", close: \"*)\" }\n ]\n};\nvar language = {\n defaultToken: \"\",\n tokenPostfix: \".cameligo\",\n ignoreCase: true,\n brackets: [\n { open: \"{\", close: \"}\", token: \"delimiter.curly\" },\n { open: \"[\", close: \"]\", token: \"delimiter.square\" },\n { open: \"(\", close: \")\", token: \"delimiter.parenthesis\" },\n { open: \"<\", close: \">\", token: \"delimiter.angle\" }\n ],\n keywords: [\n \"abs\",\n \"assert\",\n \"block\",\n \"Bytes\",\n \"case\",\n \"Crypto\",\n \"Current\",\n \"else\",\n \"failwith\",\n \"false\",\n \"for\",\n \"fun\",\n \"if\",\n \"in\",\n \"let\",\n \"let%entry\",\n \"let%init\",\n \"List\",\n \"list\",\n \"Map\",\n \"map\",\n \"match\",\n \"match%nat\",\n \"mod\",\n \"not\",\n \"operation\",\n \"Operation\",\n \"of\",\n \"record\",\n \"Set\",\n \"set\",\n \"sender\",\n \"skip\",\n \"source\",\n \"String\",\n \"then\",\n \"to\",\n \"true\",\n \"type\",\n \"with\"\n ],\n typeKeywords: [\"int\", \"unit\", \"string\", \"tz\", \"nat\", \"bool\"],\n operators: [\n \"=\",\n \">\",\n \"<\",\n \"<=\",\n \">=\",\n \"<>\",\n \":\",\n \":=\",\n \"and\",\n \"mod\",\n \"or\",\n \"+\",\n \"-\",\n \"*\",\n \"/\",\n \"@\",\n \"&\",\n \"^\",\n \"%\",\n \"->\",\n \"<-\",\n \"&&\",\n \"||\"\n ],\n symbols: /[=><:@\\^&|+\\-*\\/\\^%]+/,\n tokenizer: {\n root: [\n [\n /[a-zA-Z_][\\w]*/,\n {\n cases: {\n \"@keywords\": { token: \"keyword.$0\" },\n \"@default\": \"identifier\"\n }\n }\n ],\n { include: \"@whitespace\" },\n [/[{}()\\[\\]]/, \"@brackets\"],\n [/[<>](?!@symbols)/, \"@brackets\"],\n [\n /@symbols/,\n {\n cases: {\n \"@operators\": \"delimiter\",\n \"@default\": \"\"\n }\n }\n ],\n [/\\d*\\.\\d+([eE][\\-+]?\\d+)?/, \"number.float\"],\n [/\\$[0-9a-fA-F]{1,16}/, \"number.hex\"],\n [/\\d+/, \"number\"],\n [/[;,.]/, \"delimiter\"],\n [/'([^'\\\\]|\\\\.)*$/, \"string.invalid\"],\n [/'/, \"string\", \"@string\"],\n [/'[^\\\\']'/, \"string\"],\n [/'/, \"string.invalid\"],\n [/\\#\\d+/, \"string\"]\n ],\n comment: [\n [/[^\\(\\*]+/, \"comment\"],\n [/\\*\\)/, \"comment\", \"@pop\"],\n [/\\(\\*/, \"comment\"]\n ],\n string: [\n [/[^\\\\']+/, \"string\"],\n [/\\\\./, \"string.escape.invalid\"],\n [/'/, { token: \"string.quote\", bracket: \"@close\", next: \"@pop\" }]\n ],\n whitespace: [\n [/[ \\t\\r\\n]+/, \"white\"],\n [/\\(\\*/, \"comment\", \"@comment\"],\n [/\\/\\/.*$/, \"comment\"]\n ]\n }\n};\nexport {\n conf,\n language\n};\n"], + "mappings": "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", + "names": [] +} diff --git a/docs/.vitepress/cache/deps/chunk-V634PGSD.js b/docs/.vitepress/cache/deps/chunk-3C4OEVM2.js similarity index 96% rename from docs/.vitepress/cache/deps/chunk-V634PGSD.js rename to docs/.vitepress/cache/deps/chunk-3C4OEVM2.js index 0d9dca7..12eea52 100644 --- a/docs/.vitepress/cache/deps/chunk-V634PGSD.js +++ b/docs/.vitepress/cache/deps/chunk-3C4OEVM2.js @@ -34,7 +34,7 @@ var isString = (val) => typeof val === "string"; var isSymbol = (val) => typeof val === "symbol"; var isObject = (val) => val !== null && typeof val === "object"; var isPromise = (val) => { - return isObject(val) && isFunction(val.then) && isFunction(val.catch); + return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch); }; var objectToString = Object.prototype.toString; var toTypeString = (value) => objectToString.call(value); @@ -65,12 +65,13 @@ var hyphenateRE = /\B([A-Z])/g; var hyphenate = cacheStringFunction( (str) => str.replace(hyphenateRE, "-$1").toLowerCase() ); -var capitalize = cacheStringFunction( - (str) => str.charAt(0).toUpperCase() + str.slice(1) -); -var toHandlerKey = cacheStringFunction( - (str) => str ? `on${capitalize(str)}` : `` -); +var capitalize = cacheStringFunction((str) => { + return str.charAt(0).toUpperCase() + str.slice(1); +}); +var toHandlerKey = cacheStringFunction((str) => { + const s = str ? `on${capitalize(str)}` : ``; + return s; +}); var hasChanged = (value, oldValue) => !Object.is(value, oldValue); var invokeArrayFns = (fns, arg) => { for (let i = 0; i < fns.length; i++) { @@ -96,8 +97,8 @@ var _globalThis; var getGlobalThis = () => { return _globalThis || (_globalThis = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : {}); }; -var GLOBALS_WHITE_LISTED = "Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console"; -var isGloballyWhitelisted = makeMap(GLOBALS_WHITE_LISTED); +var GLOBALS_ALLOWED = "Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console"; +var isGloballyAllowed = makeMap(GLOBALS_ALLOWED); function normalizeStyle(value) { if (isArray(value)) { const res = {}; @@ -111,9 +112,7 @@ function normalizeStyle(value) { } } return res; - } else if (isString(value)) { - return value; - } else if (isObject(value)) { + } else if (isString(value) || isObject(value)) { return value; } } @@ -456,7 +455,7 @@ function cleanupEffect(effect2) { } } function effect(fn, options) { - if (fn.effect) { + if (fn.effect instanceof ReactiveEffect) { fn = fn.effect.fn; } const _effect = new ReactiveEffect(fn); @@ -535,7 +534,7 @@ function trigger(target, type, key, newValue, oldValue, oldTarget) { } else if (key === "length" && isArray(target)) { const newLength = Number(newValue); depsMap.forEach((dep, key2) => { - if (key2 === "length" || key2 >= newLength) { + if (key2 === "length" || !isSymbol(key2) && key2 >= newLength) { deps.push(dep); } }); @@ -625,10 +624,6 @@ var isNonTrackableKeys = makeMap(`__proto__,__v_isRef,__isVue`); var builtInSymbols = new Set( Object.getOwnPropertyNames(Symbol).filter((key) => key !== "arguments" && key !== "caller").map((key) => Symbol[key]).filter(isSymbol) ); -var get$1 = createGetter(); -var shallowGet = createGetter(false, true); -var readonlyGet = createGetter(true); -var shallowReadonlyGet = createGetter(true, true); var arrayInstrumentations = createArrayInstrumentations(); function createArrayInstrumentations() { const instrumentations = {}; @@ -661,8 +656,13 @@ function hasOwnProperty2(key) { track(obj, "has", key); return obj.hasOwnProperty(key); } -function createGetter(isReadonly2 = false, shallow = false) { - return function get2(target, key, receiver) { +var BaseReactiveHandler = class { + constructor(_isReadonly = false, _shallow = false) { + this._isReadonly = _isReadonly; + this._shallow = _shallow; + } + get(target, key, receiver) { + const isReadonly2 = this._isReadonly, shallow = this._shallow; if (key === "__v_isReactive") { return !isReadonly2; } else if (key === "__v_isReadonly") { @@ -698,17 +698,18 @@ function createGetter(isReadonly2 = false, shallow = false) { return isReadonly2 ? readonly(res) : reactive(res); } return res; - }; -} -var set$1 = createSetter(); -var shallowSet = createSetter(true); -function createSetter(shallow = false) { - return function set2(target, key, value, receiver) { + } +}; +var MutableReactiveHandler = class extends BaseReactiveHandler { + constructor(shallow = false) { + super(false, shallow); + } + set(target, key, value, receiver) { let oldValue = target[key]; if (isReadonly(oldValue) && isRef(oldValue) && !isRef(value)) { return false; } - if (!shallow) { + if (!this._shallow) { if (!isShallow(value) && !isReadonly(value)) { oldValue = toRaw(oldValue); value = toRaw(value); @@ -728,37 +729,36 @@ function createSetter(shallow = false) { } } return result; - }; -} -function deleteProperty(target, key) { - const hadKey = hasOwn(target, key); - const oldValue = target[key]; - const result = Reflect.deleteProperty(target, key); - if (result && hadKey) { - trigger(target, "delete", key, void 0, oldValue); } - return result; -} -function has$1(target, key) { - const result = Reflect.has(target, key); - if (!isSymbol(key) || !builtInSymbols.has(key)) { - track(target, "has", key); + deleteProperty(target, key) { + const hadKey = hasOwn(target, key); + const oldValue = target[key]; + const result = Reflect.deleteProperty(target, key); + if (result && hadKey) { + trigger(target, "delete", key, void 0, oldValue); + } + return result; + } + has(target, key) { + const result = Reflect.has(target, key); + if (!isSymbol(key) || !builtInSymbols.has(key)) { + track(target, "has", key); + } + return result; + } + ownKeys(target) { + track( + target, + "iterate", + isArray(target) ? "length" : ITERATE_KEY + ); + return Reflect.ownKeys(target); } - return result; -} -function ownKeys(target) { - track(target, "iterate", isArray(target) ? "length" : ITERATE_KEY); - return Reflect.ownKeys(target); -} -var mutableHandlers = { - get: get$1, - set: set$1, - deleteProperty, - has: has$1, - ownKeys }; -var readonlyHandlers = { - get: readonlyGet, +var ReadonlyReactiveHandler = class extends BaseReactiveHandler { + constructor(shallow = false) { + super(true, shallow); + } set(target, key) { if (true) { warn( @@ -767,7 +767,7 @@ var readonlyHandlers = { ); } return true; - }, + } deleteProperty(target, key) { if (true) { warn( @@ -778,21 +778,12 @@ var readonlyHandlers = { return true; } }; -var shallowReactiveHandlers = extend( - {}, - mutableHandlers, - { - get: shallowGet, - set: shallowSet - } -); -var shallowReadonlyHandlers = extend( - {}, - readonlyHandlers, - { - get: shallowReadonlyGet - } +var mutableHandlers = new MutableReactiveHandler(); +var readonlyHandlers = new ReadonlyReactiveHandler(); +var shallowReactiveHandlers = new MutableReactiveHandler( + true ); +var shallowReadonlyHandlers = new ReadonlyReactiveHandler(true); var toShallow = (value) => value; var getProto = (v) => Reflect.getPrototypeOf(v); function get(target, key, isReadonly2 = false, isShallow3 = false) { @@ -800,7 +791,7 @@ function get(target, key, isReadonly2 = false, isShallow3 = false) { const rawTarget = toRaw(target); const rawKey = toRaw(key); if (!isReadonly2) { - if (key !== rawKey) { + if (hasChanged(key, rawKey)) { track(rawTarget, "get", key); } track(rawTarget, "get", rawKey); @@ -820,7 +811,7 @@ function has(key, isReadonly2 = false) { const rawTarget = toRaw(target); const rawKey = toRaw(key); if (!isReadonly2) { - if (key !== rawKey) { + if (hasChanged(key, rawKey)) { track(rawTarget, "has", key); } track(rawTarget, "has", rawKey); @@ -941,7 +932,7 @@ function createReadonlyMethod(type) { toRaw(this) ); } - return type === "delete" ? false : this; + return type === "delete" ? false : type === "clear" ? void 0 : this; }; } function createInstrumentations() { @@ -1352,11 +1343,7 @@ function toRef(source, key, defaultValue) { } function propertyToRef(source, key, defaultValue) { const val = source[key]; - return isRef(val) ? val : new ObjectRefImpl( - source, - key, - defaultValue - ); + return isRef(val) ? val : new ObjectRefImpl(source, key, defaultValue); } var ComputedRefImpl = class { constructor(getter, _setter, isReadonly2, isSSR) { @@ -1652,8 +1639,13 @@ function findInsertionIndex(id) { let end = queue.length; while (start < end) { const middle = start + end >>> 1; - const middleJobId = getId(queue[middle]); - middleJobId < id ? start = middle + 1 : end = middle; + const middleJob = queue[middle]; + const middleJobId = getId(middleJob); + if (middleJobId < id || middleJobId === id && middleJob.pre) { + start = middle + 1; + } else { + end = middle; + } } return start; } @@ -2220,9 +2212,19 @@ function renderComponentRoot(instance) { try { if (vnode.shapeFlag & 4) { const proxyToUse = withProxy || proxy; + const thisProxy = setupState.__isScriptSetup ? new Proxy(proxyToUse, { + get(target, key, receiver) { + warn2( + `Property '${String( + key + )}' was accessed via 'this'. Avoid using 'this' in templates.` + ); + return Reflect.get(target, key, receiver); + } + }) : proxyToUse; result = normalizeVNode( render2.call( - proxyToUse, + thisProxy, proxyToUse, renderCache, props, @@ -2456,6 +2458,60 @@ function updateHOCHostEl({ vnode, parent }, el) { parent = parent.parent; } } +var COMPONENTS = "components"; +var DIRECTIVES = "directives"; +function resolveComponent(name, maybeSelfReference) { + return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name; +} +var NULL_DYNAMIC_COMPONENT = Symbol.for("v-ndc"); +function resolveDynamicComponent(component) { + if (isString(component)) { + return resolveAsset(COMPONENTS, component, false) || component; + } else { + return component || NULL_DYNAMIC_COMPONENT; + } +} +function resolveDirective(name) { + return resolveAsset(DIRECTIVES, name); +} +function resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) { + const instance = currentRenderingInstance || currentInstance; + if (instance) { + const Component = instance.type; + if (type === COMPONENTS) { + const selfName = getComponentName( + Component, + false + /* do not include inferred name to avoid breaking existing code */ + ); + if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) { + return Component; + } + } + const res = ( + // local registration + // check instance[type] first which is resolved for options API + resolve(instance[type] || Component[type], name) || // global registration + resolve(instance.appContext[type], name) + ); + if (!res && maybeSelfReference) { + return Component; + } + if (warnMissing && !res) { + const extra = type === COMPONENTS ? ` +If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``; + warn2(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`); + } + return res; + } else if (true) { + warn2( + `resolve${capitalize(type.slice(0, -1))} can only be used in render() or setup().` + ); + } +} +function resolve(registry, name) { + return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]); +} var isSuspense = (type) => type.__isSuspense; var SuspenseImpl = { name: "Suspense", @@ -2769,14 +2825,16 @@ function createSuspenseBoundary(vnode, parentSuspense, parentComponent, containe parentComponent: parentComponent2, container: container2 } = suspense; + let delayEnter = false; if (suspense.isHydrating) { suspense.isHydrating = false; } else if (!resume) { - const delayEnter = activeBranch && pendingBranch.transition && pendingBranch.transition.mode === "out-in"; + delayEnter = activeBranch && pendingBranch.transition && pendingBranch.transition.mode === "out-in"; if (delayEnter) { activeBranch.transition.afterLeave = () => { if (pendingId === suspense.pendingId) { move(pendingBranch, container2, anchor2, 0); + queuePostFlushCb(effects); } }; } @@ -2802,7 +2860,7 @@ function createSuspenseBoundary(vnode, parentSuspense, parentComponent, containe } parent = parent.parent; } - if (!hasUnresolvedAncestor) { + if (!hasUnresolvedAncestor && !delayEnter) { queuePostFlushCb(effects); } suspense.effects = []; @@ -2988,7 +3046,7 @@ function normalizeSuspenseSlot(s) { } if (isArray(s)) { const singleChild = filterSingleRoot(s); - if (!singleChild) { + if (!singleChild && s.filter((child) => child !== NULL_DYNAMIC_COMPONENT).length > 0) { warn2(` slots expect a single root node.`); } s = singleChild; @@ -3125,6 +3183,7 @@ function doWatch(source, cb, { immediate, deep, flush, onTrack, onTrigger } = EM let onCleanup = (fn) => { cleanup = effect2.onStop = () => { callWithErrorHandling(fn, instance, 4); + cleanup = effect2.onStop = void 0; }; }; let ssrCleanup; @@ -3153,9 +3212,7 @@ function doWatch(source, cb, { immediate, deep, flush, onTrack, onTrigger } = EM } if (cb) { const newValue = effect2.run(); - if (deep || forceTrigger || (isMultiSource ? newValue.some( - (v, i) => hasChanged(v, oldValue[i]) - ) : hasChanged(newValue, oldValue)) || false) { + if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue)) || false) { if (cleanup) { cleanup(); } @@ -3326,6 +3383,8 @@ function invokeDirectiveHook(vnode, prevVNode, instance, name) { } } } +var leaveCbKey = Symbol("_leaveCb"); +var enterCbKey = Symbol("_enterCb"); function useTransitionState() { const state = { isMounted: false, @@ -3448,9 +3507,9 @@ var BaseTransitionImpl = { oldInnerChild ); leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild; - el._leaveCb = () => { + el[leaveCbKey] = () => { earlyRemove(); - el._leaveCb = void 0; + el[leaveCbKey] = void 0; delete enterHooks.delayedLeave; }; enterHooks.delayedLeave = delayedLeave; @@ -3521,15 +3580,15 @@ function resolveTransitionHooks(vnode, props, state, instance) { return; } } - if (el._leaveCb) { - el._leaveCb( + if (el[leaveCbKey]) { + el[leaveCbKey]( true /* cancelled */ ); } const leavingVNode = leavingVNodesCache[key]; - if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el._leaveCb) { - leavingVNode.el._leaveCb(); + if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el[leaveCbKey]) { + leavingVNode.el[leaveCbKey](); } callHook3(hook, [el]); }, @@ -3547,7 +3606,7 @@ function resolveTransitionHooks(vnode, props, state, instance) { } } let called = false; - const done = el._enterCb = (cancelled) => { + const done = el[enterCbKey] = (cancelled) => { if (called) return; called = true; @@ -3559,7 +3618,7 @@ function resolveTransitionHooks(vnode, props, state, instance) { if (hooks.delayedLeave) { hooks.delayedLeave(); } - el._enterCb = void 0; + el[enterCbKey] = void 0; }; if (hook) { callAsyncHook(hook, [el, done]); @@ -3569,8 +3628,8 @@ function resolveTransitionHooks(vnode, props, state, instance) { }, leave(el, remove2) { const key2 = String(vnode.key); - if (el._enterCb) { - el._enterCb( + if (el[enterCbKey]) { + el[enterCbKey]( true /* cancelled */ ); @@ -3580,7 +3639,7 @@ function resolveTransitionHooks(vnode, props, state, instance) { } callHook3(onBeforeLeave, [el]); let called = false; - const done = el._leaveCb = (cancelled) => { + const done = el[leaveCbKey] = (cancelled) => { if (called) return; called = true; @@ -3590,7 +3649,7 @@ function resolveTransitionHooks(vnode, props, state, instance) { } else { callHook3(onAfterLeave, [el]); } - el._leaveCb = void 0; + el[leaveCbKey] = void 0; if (leavingVNodesCache[key2] === vnode) { delete leavingVNodesCache[key2]; } @@ -3616,7 +3675,11 @@ function emptyPlaceholder(vnode) { } } function getKeepAliveChild(vnode) { - return isKeepAlive(vnode) ? vnode.children ? vnode.children[0] : void 0 : vnode; + return isKeepAlive(vnode) ? ( + // #7121 ensure get the child component subtree in case + // it's been replaced during HMR + vnode.component ? vnode.component.subTree : vnode.children ? vnode.children[0] : void 0 + ) : vnode; } function setTransitionHooks(vnode, hooks) { if (vnode.shapeFlag & 6 && vnode.component) { @@ -4090,60 +4153,6 @@ var onRenderTracked = createHook( function onErrorCaptured(hook, target = currentInstance) { injectHook("ec", hook, target); } -var COMPONENTS = "components"; -var DIRECTIVES = "directives"; -function resolveComponent(name, maybeSelfReference) { - return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name; -} -var NULL_DYNAMIC_COMPONENT = Symbol.for("v-ndc"); -function resolveDynamicComponent(component) { - if (isString(component)) { - return resolveAsset(COMPONENTS, component, false) || component; - } else { - return component || NULL_DYNAMIC_COMPONENT; - } -} -function resolveDirective(name) { - return resolveAsset(DIRECTIVES, name); -} -function resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) { - const instance = currentRenderingInstance || currentInstance; - if (instance) { - const Component = instance.type; - if (type === COMPONENTS) { - const selfName = getComponentName( - Component, - false - /* do not include inferred name to avoid breaking existing code */ - ); - if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) { - return Component; - } - } - const res = ( - // local registration - // check instance[type] first which is resolved for options API - resolve(instance[type] || Component[type], name) || // global registration - resolve(instance.appContext[type], name) - ); - if (!res && maybeSelfReference) { - return Component; - } - if (warnMissing && !res) { - const extra = type === COMPONENTS ? ` -If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``; - warn2(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`); - } - return res; - } else if (true) { - warn2( - `resolve${capitalize(type.slice(0, -1))} can only be used in render() or setup().` - ); - } -} -function resolve(registry, name) { - return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]); -} function renderList(source, renderItem, cache, index) { let ret; const cached = cache && cache[index]; @@ -4435,7 +4444,7 @@ var RuntimeCompiledPublicInstanceProxyHandlers = extend( return PublicInstanceProxyHandlers.get(target, key, target); }, has(_, key) { - const has2 = key[0] !== "_" && !isGloballyWhitelisted(key); + const has2 = key[0] !== "_" && !isGloballyAllowed(key); if (!has2 && PublicInstanceProxyHandlers.has(_, key)) { warn2( `Property ${JSON.stringify( @@ -5110,12 +5119,12 @@ function createAppAPI(render2, hydrate2) { }, set() { warn2( - `app.config.unwrapInjectedRef has been deprecated. 3.3 now alawys unwraps injected refs in Options API.` + `app.config.unwrapInjectedRef has been deprecated. 3.3 now always unwraps injected refs in Options API.` ); } }); } - const installedPlugins = /* @__PURE__ */ new Set(); + const installedPlugins = /* @__PURE__ */ new WeakSet(); let isMounted = false; const app = context.app = { _uid: uid$1++, @@ -5199,10 +5208,7 @@ function createAppAPI(render2, hydrate2) { If you want to mount another app on the same host container, you need to unmount the previous app by calling \`app.unmount()\` first.` ); } - const vnode = createVNode( - rootComponent, - rootProps - ); + const vnode = createVNode(rootComponent, rootProps); vnode.appContext = context; if (true) { context.reload = () => { @@ -5670,6 +5676,9 @@ function assertType(value, type) { }; } function getInvalidTypeMessage(name, value, expectedTypes) { + if (expectedTypes.length === 0) { + return `Prop type [] for prop "${name}" won't match anything. Did you mean to use type Array instead?`; + } let message = `Invalid prop: type check failed for prop "${name}". Expected ${expectedTypes.map(capitalize).join(" | ")}`; const expectedType = expectedTypes[0]; const receivedType = toRawType(value); @@ -5794,7 +5803,7 @@ var updateSlots = (instance, children, optimized) => { } if (needDeletionCheck) { for (const key in slots) { - if (!isInternalKey(key) && !(key in deletionComparisonTarget)) { + if (!isInternalKey(key) && deletionComparisonTarget[key] == null) { delete slots[key]; } } @@ -5937,6 +5946,20 @@ function createHydrationFunctions(rendererInternals) { const { type, ref: ref2, shapeFlag, patchFlag } = vnode; let domType = node.nodeType; vnode.el = node; + if (true) { + if (!("__vnode" in node)) { + Object.defineProperty(node, "__vnode", { + value: vnode, + enumerable: false + }); + } + if (!("__vueParentComponent" in node)) { + Object.defineProperty(node, "__vueParentComponent", { + value: parentComponent, + enumerable: false + }); + } + } if (patchFlag === -2) { optimized = false; vnode.dynamicChildren = null; @@ -5956,8 +5979,10 @@ function createHydrationFunctions(rendererInternals) { hasMismatch = true; warn2( `Hydration text mismatch: -- Client: ${JSON.stringify(node.data)} -- Server: ${JSON.stringify(vnode.children)}` +- Server rendered: ${JSON.stringify( + node.data + )} +- Client rendered: ${JSON.stringify(vnode.children)}` ); node.data = vnode.children; } @@ -5965,7 +5990,14 @@ function createHydrationFunctions(rendererInternals) { } break; case Comment: - if (domType !== 8 || isFragmentStart) { + if (isTemplateNode(node)) { + nextNode = nextSibling(node); + replaceNode( + vnode.el = node.content.firstChild, + node, + parentComponent + ); + } else if (domType !== 8 || isFragmentStart) { nextNode = onMismatch(); } else { nextNode = nextSibling(node); @@ -6008,7 +6040,7 @@ function createHydrationFunctions(rendererInternals) { break; default: if (shapeFlag & 1) { - if (domType !== 1 || vnode.type.toLowerCase() !== node.tagName.toLowerCase()) { + if ((domType !== 1 || vnode.type.toLowerCase() !== node.tagName.toLowerCase()) && !isTemplateNode(node)) { nextNode = onMismatch(); } else { nextNode = hydrateElement( @@ -6023,6 +6055,13 @@ function createHydrationFunctions(rendererInternals) { } else if (shapeFlag & 6) { vnode.slotScopeIds = slotScopeIds; const container = parentNode(node); + if (isFragmentStart) { + nextNode = locateClosingAnchor(node); + } else if (isComment(node) && node.data === "teleport start") { + nextNode = locateClosingAnchor(node, node.data, "teleport end"); + } else { + nextNode = nextSibling(node); + } mountComponent( vnode, container, @@ -6032,10 +6071,6 @@ function createHydrationFunctions(rendererInternals) { isSVGContainer(container), optimized ); - nextNode = isFragmentStart ? locateClosingAsyncAnchor(node) : nextSibling(node); - if (nextNode && isComment(nextNode) && nextNode.data === "teleport end") { - nextNode = nextSibling(nextNode); - } if (isAsyncWrapper(vnode)) { let subTree; if (isFragmentStart) { @@ -6085,16 +6120,17 @@ function createHydrationFunctions(rendererInternals) { }; const hydrateElement = (el, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => { optimized = optimized || !!vnode.dynamicChildren; - const { type, props, patchFlag, shapeFlag, dirs } = vnode; - const forcePatchValue = type === "input" && dirs || type === "option"; + const { type, props, patchFlag, shapeFlag, dirs, transition } = vnode; + const forcePatch = type === "input" || type === "option"; if (true) { if (dirs) { invokeDirectiveHook(vnode, null, parentComponent, "created"); } if (props) { - if (forcePatchValue || !optimized || patchFlag & (16 | 32)) { + if (forcePatch || !optimized || patchFlag & (16 | 32)) { for (const key in props) { - if (forcePatchValue && key.endsWith("value") || isOn(key) && !isReservedProp(key)) { + if (forcePatch && (key.endsWith("value") || key === "indeterminate") || isOn(key) && !isReservedProp(key) || // force hydrate v-bind with .prop modifiers + key[0] === ".") { patchProp2( el, key, @@ -6122,12 +6158,23 @@ function createHydrationFunctions(rendererInternals) { if (vnodeHooks = props && props.onVnodeBeforeMount) { invokeVNodeHook(vnodeHooks, parentComponent, vnode); } + let needCallTransitionHooks = false; + if (isTemplateNode(el)) { + needCallTransitionHooks = needTransition(parentSuspense, transition) && parentComponent && parentComponent.vnode.props && parentComponent.vnode.props.appear; + const content = el.content.firstChild; + if (needCallTransitionHooks) { + transition.beforeEnter(content); + } + replaceNode(content, el, parentComponent); + vnode.el = el = content; + } if (dirs) { invokeDirectiveHook(vnode, null, parentComponent, "beforeMount"); } - if ((vnodeHooks = props && props.onVnodeMounted) || dirs) { + if ((vnodeHooks = props && props.onVnodeMounted) || dirs || needCallTransitionHooks) { queueEffectWithSuspense(() => { vnodeHooks && invokeVNodeHook(vnodeHooks, parentComponent, vnode); + needCallTransitionHooks && transition.enter(el); dirs && invokeDirectiveHook(vnode, null, parentComponent, "mounted"); }, parentSuspense); } @@ -6160,8 +6207,8 @@ function createHydrationFunctions(rendererInternals) { hasMismatch = true; warn2( `Hydration text content mismatch in <${vnode.type}>: -- Client: ${el.textContent} -- Server: ${vnode.children}` +- Server rendered: ${el.textContent} +- Client rendered: ${vnode.children}` ); el.textContent = vnode.children; } @@ -6245,7 +6292,7 @@ function createHydrationFunctions(rendererInternals) { ); vnode.el = null; if (isFragment) { - const end = locateClosingAsyncAnchor(node); + const end = locateClosingAnchor(node); while (true) { const next2 = nextSibling(node); if (next2 && next2 !== end) { @@ -6270,14 +6317,14 @@ function createHydrationFunctions(rendererInternals) { ); return next; }; - const locateClosingAsyncAnchor = (node) => { + const locateClosingAnchor = (node, open = "[", close = "]") => { let match = 0; while (node) { node = nextSibling(node); if (node && isComment(node)) { - if (node.data === "[") + if (node.data === open) match++; - if (node.data === "]") { + if (node.data === close) { if (match === 0) { return nextSibling(node); } else { @@ -6288,6 +6335,22 @@ function createHydrationFunctions(rendererInternals) { } return node; }; + const replaceNode = (newNode, oldNode, parentComponent) => { + const parentNode2 = oldNode.parentNode; + if (parentNode2) { + parentNode2.replaceChild(newNode, oldNode); + } + let parent = parentComponent; + while (parent) { + if (parent.vnode.el === oldNode) { + parent.vnode.el = parent.subTree.el = newNode; + } + parent = parent.parent; + } + }; + const isTemplateNode = (node) => { + return node.nodeType === 1 && node.tagName.toLowerCase() === "template"; + }; return [hydrate2, hydrateNode]; } var supported; @@ -6635,7 +6698,7 @@ function baseCreateRenderer(options, createHydrationFns) { if (dirs) { invokeDirectiveHook(vnode, null, parentComponent, "beforeMount"); } - const needCallTransitionHooks = (!parentSuspense || parentSuspense && !parentSuspense.pendingBranch) && transition && !transition.persisted; + const needCallTransitionHooks = needTransition(parentSuspense, transition); if (needCallTransitionHooks) { transition.beforeEnter(el); } @@ -7540,8 +7603,8 @@ function baseCreateRenderer(options, createHydrationFns) { moveStaticNode(vnode, container, anchor); return; } - const needTransition = moveType !== 2 && shapeFlag & 1 && transition; - if (needTransition) { + const needTransition2 = moveType !== 2 && shapeFlag & 1 && transition; + if (needTransition2) { if (moveType === 0) { transition.beforeEnter(el); hostInsert(el, container, anchor); @@ -7761,6 +7824,9 @@ function baseCreateRenderer(options, createHydrationFns) { function toggleRecurse({ effect: effect2, update }, allowed) { effect2.allowRecurse = update.allowRecurse = allowed; } +function needTransition(parentSuspense, transition) { + return (!parentSuspense || parentSuspense && !parentSuspense.pendingBranch) && transition && !transition.persisted; +} function traverseStaticChildren(n1, n2, shallow = false) { const ch1 = n1.children; const ch2 = n2.children; @@ -7853,6 +7919,7 @@ var resolveTarget = (props, select) => { } }; var TeleportImpl = { + name: "Teleport", __isTeleport: true, process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, internals) { const { @@ -7941,6 +8008,10 @@ var TeleportImpl = { internals, 1 ); + } else { + if (n2.props && n1.props && n2.props.to !== n1.props.to) { + n2.props.to = n1.props.to; + } } } else { if ((n2.props && n2.props.to) !== (n1.props && n1.props.to)) { @@ -7981,19 +8052,18 @@ var TeleportImpl = { if (target) { hostRemove(targetAnchor); } - if (doRemove || !isTeleportDisabled(props)) { - hostRemove(anchor); - if (shapeFlag & 16) { - for (let i = 0; i < children.length; i++) { - const child = children[i]; - unmount( - child, - parentComponent, - parentSuspense, - true, - !!child.dynamicChildren - ); - } + doRemove && hostRemove(anchor); + if (shapeFlag & 16) { + const shouldRemove = doRemove || !isTeleportDisabled(props); + for (let i = 0; i < children.length; i++) { + const child = children[i]; + unmount( + child, + parentComponent, + parentSuspense, + shouldRemove, + !!child.dynamicChildren + ); } } }, @@ -8077,7 +8147,7 @@ function updateCssVars(vnode) { const ctx = vnode.ctx; if (ctx && ctx.ut) { let node = vnode.children[0].el; - while (node !== vnode.targetAnchor) { + while (node && node !== vnode.targetAnchor) { if (node.nodeType === 1) node.setAttribute("data-v-owner", ctx.uid); node = node.nextSibling; @@ -8270,7 +8340,7 @@ function _createVNode(type, props = null, children = null, patchFlag = 0, dynami if (shapeFlag & 4 && isProxy(type)) { type = toRaw(type); warn2( - `Vue received a Component which was made a reactive object. This can lead to unnecessary performance overhead, and should be avoided by marking the component with \`markRaw\` or using \`shallowRef\` instead of \`ref\`.`, + `Vue received a Component that was made a reactive object. This can lead to unnecessary performance overhead and should be avoided by marking the component with \`markRaw\` or using \`shallowRef\` instead of \`ref\`.`, ` Component that was made reactive: `, type @@ -8733,9 +8803,12 @@ function finishComponentSetup(instance, isSSR, skipOptions) { if (__VUE_OPTIONS_API__ && true) { setCurrentInstance(instance); pauseTracking(); - applyOptions(instance); - resetTracking(); - unsetCurrentInstance(); + try { + applyOptions(instance); + } finally { + resetTracking(); + unsetCurrentInstance(); + } } if (!Component.render && instance.render === NOOP && !isSSR) { if (!compile && Component.template) { @@ -9112,7 +9185,7 @@ function isMemoSame(cached, memo) { } return true; } -var version = "3.3.4"; +var version = "3.3.9"; var _ssrUtils = { createComponentInstance, setupComponent, @@ -9192,19 +9265,333 @@ var nodeOps = { ]; } }; -function patchClass(el, value, isSVG) { - const transitionClasses = el._vtc; - if (transitionClasses) { - value = (value ? [value, ...transitionClasses] : [...transitionClasses]).join(" "); +var TRANSITION = "transition"; +var ANIMATION = "animation"; +var vtcKey = Symbol("_vtc"); +var Transition = (props, { slots }) => h(BaseTransition, resolveTransitionProps(props), slots); +Transition.displayName = "Transition"; +var DOMTransitionPropsValidators = { + name: String, + type: String, + css: { + type: Boolean, + default: true + }, + duration: [String, Number, Object], + enterFromClass: String, + enterActiveClass: String, + enterToClass: String, + appearFromClass: String, + appearActiveClass: String, + appearToClass: String, + leaveFromClass: String, + leaveActiveClass: String, + leaveToClass: String +}; +var TransitionPropsValidators = Transition.props = extend( + {}, + BaseTransitionPropsValidators, + DOMTransitionPropsValidators +); +var callHook2 = (hook, args = []) => { + if (isArray(hook)) { + hook.forEach((h2) => h2(...args)); + } else if (hook) { + hook(...args); } - if (value == null) { - el.removeAttribute("class"); - } else if (isSVG) { - el.setAttribute("class", value); - } else { - el.className = value; +}; +var hasExplicitCallback = (hook) => { + return hook ? isArray(hook) ? hook.some((h2) => h2.length > 1) : hook.length > 1 : false; +}; +function resolveTransitionProps(rawProps) { + const baseProps = {}; + for (const key in rawProps) { + if (!(key in DOMTransitionPropsValidators)) { + baseProps[key] = rawProps[key]; + } } -} + if (rawProps.css === false) { + return baseProps; + } + const { + name = "v", + type, + duration, + enterFromClass = `${name}-enter-from`, + enterActiveClass = `${name}-enter-active`, + enterToClass = `${name}-enter-to`, + appearFromClass = enterFromClass, + appearActiveClass = enterActiveClass, + appearToClass = enterToClass, + leaveFromClass = `${name}-leave-from`, + leaveActiveClass = `${name}-leave-active`, + leaveToClass = `${name}-leave-to` + } = rawProps; + const durations = normalizeDuration(duration); + const enterDuration = durations && durations[0]; + const leaveDuration = durations && durations[1]; + const { + onBeforeEnter, + onEnter, + onEnterCancelled, + onLeave, + onLeaveCancelled, + onBeforeAppear = onBeforeEnter, + onAppear = onEnter, + onAppearCancelled = onEnterCancelled + } = baseProps; + const finishEnter = (el, isAppear, done) => { + removeTransitionClass(el, isAppear ? appearToClass : enterToClass); + removeTransitionClass(el, isAppear ? appearActiveClass : enterActiveClass); + done && done(); + }; + const finishLeave = (el, done) => { + el._isLeaving = false; + removeTransitionClass(el, leaveFromClass); + removeTransitionClass(el, leaveToClass); + removeTransitionClass(el, leaveActiveClass); + done && done(); + }; + const makeEnterHook = (isAppear) => { + return (el, done) => { + const hook = isAppear ? onAppear : onEnter; + const resolve2 = () => finishEnter(el, isAppear, done); + callHook2(hook, [el, resolve2]); + nextFrame(() => { + removeTransitionClass(el, isAppear ? appearFromClass : enterFromClass); + addTransitionClass(el, isAppear ? appearToClass : enterToClass); + if (!hasExplicitCallback(hook)) { + whenTransitionEnds(el, type, enterDuration, resolve2); + } + }); + }; + }; + return extend(baseProps, { + onBeforeEnter(el) { + callHook2(onBeforeEnter, [el]); + addTransitionClass(el, enterFromClass); + addTransitionClass(el, enterActiveClass); + }, + onBeforeAppear(el) { + callHook2(onBeforeAppear, [el]); + addTransitionClass(el, appearFromClass); + addTransitionClass(el, appearActiveClass); + }, + onEnter: makeEnterHook(false), + onAppear: makeEnterHook(true), + onLeave(el, done) { + el._isLeaving = true; + const resolve2 = () => finishLeave(el, done); + addTransitionClass(el, leaveFromClass); + forceReflow(); + addTransitionClass(el, leaveActiveClass); + nextFrame(() => { + if (!el._isLeaving) { + return; + } + removeTransitionClass(el, leaveFromClass); + addTransitionClass(el, leaveToClass); + if (!hasExplicitCallback(onLeave)) { + whenTransitionEnds(el, type, leaveDuration, resolve2); + } + }); + callHook2(onLeave, [el, resolve2]); + }, + onEnterCancelled(el) { + finishEnter(el, false); + callHook2(onEnterCancelled, [el]); + }, + onAppearCancelled(el) { + finishEnter(el, true); + callHook2(onAppearCancelled, [el]); + }, + onLeaveCancelled(el) { + finishLeave(el); + callHook2(onLeaveCancelled, [el]); + } + }); +} +function normalizeDuration(duration) { + if (duration == null) { + return null; + } else if (isObject(duration)) { + return [NumberOf(duration.enter), NumberOf(duration.leave)]; + } else { + const n = NumberOf(duration); + return [n, n]; + } +} +function NumberOf(val) { + const res = toNumber(val); + if (true) { + assertNumber(res, " explicit duration"); + } + return res; +} +function addTransitionClass(el, cls) { + cls.split(/\s+/).forEach((c) => c && el.classList.add(c)); + (el[vtcKey] || (el[vtcKey] = /* @__PURE__ */ new Set())).add(cls); +} +function removeTransitionClass(el, cls) { + cls.split(/\s+/).forEach((c) => c && el.classList.remove(c)); + const _vtc = el[vtcKey]; + if (_vtc) { + _vtc.delete(cls); + if (!_vtc.size) { + el[vtcKey] = void 0; + } + } +} +function nextFrame(cb) { + requestAnimationFrame(() => { + requestAnimationFrame(cb); + }); +} +var endId = 0; +function whenTransitionEnds(el, expectedType, explicitTimeout, resolve2) { + const id = el._endId = ++endId; + const resolveIfNotStale = () => { + if (id === el._endId) { + resolve2(); + } + }; + if (explicitTimeout) { + return setTimeout(resolveIfNotStale, explicitTimeout); + } + const { type, timeout, propCount } = getTransitionInfo(el, expectedType); + if (!type) { + return resolve2(); + } + const endEvent = type + "end"; + let ended = 0; + const end = () => { + el.removeEventListener(endEvent, onEnd); + resolveIfNotStale(); + }; + const onEnd = (e) => { + if (e.target === el && ++ended >= propCount) { + end(); + } + }; + setTimeout(() => { + if (ended < propCount) { + end(); + } + }, timeout + 1); + el.addEventListener(endEvent, onEnd); +} +function getTransitionInfo(el, expectedType) { + const styles = window.getComputedStyle(el); + const getStyleProperties = (key) => (styles[key] || "").split(", "); + const transitionDelays = getStyleProperties(`${TRANSITION}Delay`); + const transitionDurations = getStyleProperties(`${TRANSITION}Duration`); + const transitionTimeout = getTimeout(transitionDelays, transitionDurations); + const animationDelays = getStyleProperties(`${ANIMATION}Delay`); + const animationDurations = getStyleProperties(`${ANIMATION}Duration`); + const animationTimeout = getTimeout(animationDelays, animationDurations); + let type = null; + let timeout = 0; + let propCount = 0; + if (expectedType === TRANSITION) { + if (transitionTimeout > 0) { + type = TRANSITION; + timeout = transitionTimeout; + propCount = transitionDurations.length; + } + } else if (expectedType === ANIMATION) { + if (animationTimeout > 0) { + type = ANIMATION; + timeout = animationTimeout; + propCount = animationDurations.length; + } + } else { + timeout = Math.max(transitionTimeout, animationTimeout); + type = timeout > 0 ? transitionTimeout > animationTimeout ? TRANSITION : ANIMATION : null; + propCount = type ? type === TRANSITION ? transitionDurations.length : animationDurations.length : 0; + } + const hasTransform = type === TRANSITION && /\b(transform|all)(,|$)/.test( + getStyleProperties(`${TRANSITION}Property`).toString() + ); + return { + type, + timeout, + propCount, + hasTransform + }; +} +function getTimeout(delays, durations) { + while (delays.length < durations.length) { + delays = delays.concat(delays); + } + return Math.max(...durations.map((d, i) => toMs(d) + toMs(delays[i]))); +} +function toMs(s) { + if (s === "auto") + return 0; + return Number(s.slice(0, -1).replace(",", ".")) * 1e3; +} +function forceReflow() { + return document.body.offsetHeight; +} +function patchClass(el, value, isSVG) { + const transitionClasses = el[vtcKey]; + if (transitionClasses) { + value = (value ? [value, ...transitionClasses] : [...transitionClasses]).join(" "); + } + if (value == null) { + el.removeAttribute("class"); + } else if (isSVG) { + el.setAttribute("class", value); + } else { + el.className = value; + } +} +var vShowOldKey = Symbol("_vod"); +var vShow = { + beforeMount(el, { value }, { transition }) { + el[vShowOldKey] = el.style.display === "none" ? "" : el.style.display; + if (transition && value) { + transition.beforeEnter(el); + } else { + setDisplay(el, value); + } + }, + mounted(el, { value }, { transition }) { + if (transition && value) { + transition.enter(el); + } + }, + updated(el, { value, oldValue }, { transition }) { + if (!value === !oldValue) + return; + if (transition) { + if (value) { + transition.beforeEnter(el); + setDisplay(el, true); + transition.enter(el); + } else { + transition.leave(el, () => { + setDisplay(el, false); + }); + } + } else { + setDisplay(el, value); + } + }, + beforeUnmount(el, { value }) { + setDisplay(el, value); + } +}; +function setDisplay(el, value) { + el.style.display = value ? el[vShowOldKey] : "none"; +} +function initVShowForSSR() { + vShow.getSSRProps = ({ value }) => { + if (!value) { + return { style: { display: "none" } }; + } + }; +} function patchStyle(el, prev, next) { const style = el.style; const isCssString = isString(next); @@ -9228,7 +9615,7 @@ function patchStyle(el, prev, next) { } else if (prev) { el.removeAttribute("style"); } - if ("_vod" in el) { + if (vShowOldKey in el) { style.display = currentDisplay; } } @@ -9354,8 +9741,9 @@ function addEventListener(el, event, handler, options) { function removeEventListener(el, event, handler, options) { el.removeEventListener(event, handler, options); } +var veiKey = Symbol("_vei"); function patchEvent(el, rawName, prevValue, nextValue, instance = null) { - const invokers = el._vei || (el._vei = {}); + const invokers = el[veiKey] || (el[veiKey] = {}); const existingInvoker = invokers[rawName]; if (nextValue && existingInvoker) { existingInvoker.value = nextValue; @@ -9497,6 +9885,7 @@ var VueElement = class _VueElement extends BaseClass { this._connected = false; this._resolved = false; this._numberProps = null; + this._ob = null; if (this.shadowRoot && hydrate2) { hydrate2(this._createVNode(), this.shadowRoot); } else { @@ -9523,6 +9912,10 @@ var VueElement = class _VueElement extends BaseClass { } disconnectedCallback() { this._connected = false; + if (this._ob) { + this._ob.disconnect(); + this._ob = null; + } nextTick(() => { if (!this._connected) { render(null, this.shadowRoot); @@ -9538,11 +9931,12 @@ var VueElement = class _VueElement extends BaseClass { for (let i = 0; i < this.attributes.length; i++) { this._setAttr(this.attributes[i].name); } - new MutationObserver((mutations) => { + this._ob = new MutationObserver((mutations) => { for (const m of mutations) { this._setAttr(m.attributeName); } - }).observe(this, { attributes: true }); + }); + this._ob.observe(this, { attributes: true }); const resolve2 = (def2, isAsync = false) => { const { props, styles } = def2; let numberProps; @@ -9669,364 +10063,101 @@ var VueElement = class _VueElement extends BaseClass { } return vnode; } - _applyStyles(styles) { - if (styles) { - styles.forEach((css) => { - const s = document.createElement("style"); - s.textContent = css; - this.shadowRoot.appendChild(s); - if (true) { - (this._styles || (this._styles = [])).push(s); - } - }); - } - } -}; -function useCssModule(name = "$style") { - { - const instance = getCurrentInstance(); - if (!instance) { - warn2(`useCssModule must be called inside setup()`); - return EMPTY_OBJ; - } - const modules = instance.type.__cssModules; - if (!modules) { - warn2(`Current instance does not have CSS modules injected.`); - return EMPTY_OBJ; - } - const mod = modules[name]; - if (!mod) { - warn2(`Current instance does not have CSS module named "${name}".`); - return EMPTY_OBJ; - } - return mod; - } -} -function useCssVars(getter) { - const instance = getCurrentInstance(); - if (!instance) { - warn2(`useCssVars is called without current active component instance.`); - return; - } - const updateTeleports = instance.ut = (vars = getter(instance.proxy)) => { - Array.from( - document.querySelectorAll(`[data-v-owner="${instance.uid}"]`) - ).forEach((node) => setVarsOnNode(node, vars)); - }; - const setVars = () => { - const vars = getter(instance.proxy); - setVarsOnVNode(instance.subTree, vars); - updateTeleports(vars); - }; - watchPostEffect(setVars); - onMounted(() => { - const ob = new MutationObserver(setVars); - ob.observe(instance.subTree.el.parentNode, { childList: true }); - onUnmounted(() => ob.disconnect()); - }); -} -function setVarsOnVNode(vnode, vars) { - if (vnode.shapeFlag & 128) { - const suspense = vnode.suspense; - vnode = suspense.activeBranch; - if (suspense.pendingBranch && !suspense.isHydrating) { - suspense.effects.push(() => { - setVarsOnVNode(suspense.activeBranch, vars); - }); - } - } - while (vnode.component) { - vnode = vnode.component.subTree; - } - if (vnode.shapeFlag & 1 && vnode.el) { - setVarsOnNode(vnode.el, vars); - } else if (vnode.type === Fragment) { - vnode.children.forEach((c) => setVarsOnVNode(c, vars)); - } else if (vnode.type === Static) { - let { el, anchor } = vnode; - while (el) { - setVarsOnNode(el, vars); - if (el === anchor) - break; - el = el.nextSibling; - } - } -} -function setVarsOnNode(el, vars) { - if (el.nodeType === 1) { - const style = el.style; - for (const key in vars) { - style.setProperty(`--${key}`, vars[key]); - } - } -} -var TRANSITION = "transition"; -var ANIMATION = "animation"; -var Transition = (props, { slots }) => h(BaseTransition, resolveTransitionProps(props), slots); -Transition.displayName = "Transition"; -var DOMTransitionPropsValidators = { - name: String, - type: String, - css: { - type: Boolean, - default: true - }, - duration: [String, Number, Object], - enterFromClass: String, - enterActiveClass: String, - enterToClass: String, - appearFromClass: String, - appearActiveClass: String, - appearToClass: String, - leaveFromClass: String, - leaveActiveClass: String, - leaveToClass: String -}; -var TransitionPropsValidators = Transition.props = extend( - {}, - BaseTransitionPropsValidators, - DOMTransitionPropsValidators -); -var callHook2 = (hook, args = []) => { - if (isArray(hook)) { - hook.forEach((h2) => h2(...args)); - } else if (hook) { - hook(...args); - } -}; -var hasExplicitCallback = (hook) => { - return hook ? isArray(hook) ? hook.some((h2) => h2.length > 1) : hook.length > 1 : false; -}; -function resolveTransitionProps(rawProps) { - const baseProps = {}; - for (const key in rawProps) { - if (!(key in DOMTransitionPropsValidators)) { - baseProps[key] = rawProps[key]; - } - } - if (rawProps.css === false) { - return baseProps; - } - const { - name = "v", - type, - duration, - enterFromClass = `${name}-enter-from`, - enterActiveClass = `${name}-enter-active`, - enterToClass = `${name}-enter-to`, - appearFromClass = enterFromClass, - appearActiveClass = enterActiveClass, - appearToClass = enterToClass, - leaveFromClass = `${name}-leave-from`, - leaveActiveClass = `${name}-leave-active`, - leaveToClass = `${name}-leave-to` - } = rawProps; - const durations = normalizeDuration(duration); - const enterDuration = durations && durations[0]; - const leaveDuration = durations && durations[1]; - const { - onBeforeEnter, - onEnter, - onEnterCancelled, - onLeave, - onLeaveCancelled, - onBeforeAppear = onBeforeEnter, - onAppear = onEnter, - onAppearCancelled = onEnterCancelled - } = baseProps; - const finishEnter = (el, isAppear, done) => { - removeTransitionClass(el, isAppear ? appearToClass : enterToClass); - removeTransitionClass(el, isAppear ? appearActiveClass : enterActiveClass); - done && done(); - }; - const finishLeave = (el, done) => { - el._isLeaving = false; - removeTransitionClass(el, leaveFromClass); - removeTransitionClass(el, leaveToClass); - removeTransitionClass(el, leaveActiveClass); - done && done(); - }; - const makeEnterHook = (isAppear) => { - return (el, done) => { - const hook = isAppear ? onAppear : onEnter; - const resolve2 = () => finishEnter(el, isAppear, done); - callHook2(hook, [el, resolve2]); - nextFrame(() => { - removeTransitionClass(el, isAppear ? appearFromClass : enterFromClass); - addTransitionClass(el, isAppear ? appearToClass : enterToClass); - if (!hasExplicitCallback(hook)) { - whenTransitionEnds(el, type, enterDuration, resolve2); - } - }); - }; - }; - return extend(baseProps, { - onBeforeEnter(el) { - callHook2(onBeforeEnter, [el]); - addTransitionClass(el, enterFromClass); - addTransitionClass(el, enterActiveClass); - }, - onBeforeAppear(el) { - callHook2(onBeforeAppear, [el]); - addTransitionClass(el, appearFromClass); - addTransitionClass(el, appearActiveClass); - }, - onEnter: makeEnterHook(false), - onAppear: makeEnterHook(true), - onLeave(el, done) { - el._isLeaving = true; - const resolve2 = () => finishLeave(el, done); - addTransitionClass(el, leaveFromClass); - forceReflow(); - addTransitionClass(el, leaveActiveClass); - nextFrame(() => { - if (!el._isLeaving) { - return; - } - removeTransitionClass(el, leaveFromClass); - addTransitionClass(el, leaveToClass); - if (!hasExplicitCallback(onLeave)) { - whenTransitionEnds(el, type, leaveDuration, resolve2); + _applyStyles(styles) { + if (styles) { + styles.forEach((css) => { + const s = document.createElement("style"); + s.textContent = css; + this.shadowRoot.appendChild(s); + if (true) { + (this._styles || (this._styles = [])).push(s); } }); - callHook2(onLeave, [el, resolve2]); - }, - onEnterCancelled(el) { - finishEnter(el, false); - callHook2(onEnterCancelled, [el]); - }, - onAppearCancelled(el) { - finishEnter(el, true); - callHook2(onAppearCancelled, [el]); - }, - onLeaveCancelled(el) { - finishLeave(el); - callHook2(onLeaveCancelled, [el]); } - }); -} -function normalizeDuration(duration) { - if (duration == null) { - return null; - } else if (isObject(duration)) { - return [NumberOf(duration.enter), NumberOf(duration.leave)]; - } else { - const n = NumberOf(duration); - return [n, n]; - } -} -function NumberOf(val) { - const res = toNumber(val); - if (true) { - assertNumber(res, " explicit duration"); } - return res; -} -function addTransitionClass(el, cls) { - cls.split(/\s+/).forEach((c) => c && el.classList.add(c)); - (el._vtc || (el._vtc = /* @__PURE__ */ new Set())).add(cls); -} -function removeTransitionClass(el, cls) { - cls.split(/\s+/).forEach((c) => c && el.classList.remove(c)); - const { _vtc } = el; - if (_vtc) { - _vtc.delete(cls); - if (!_vtc.size) { - el._vtc = void 0; +}; +function useCssModule(name = "$style") { + { + const instance = getCurrentInstance(); + if (!instance) { + warn2(`useCssModule must be called inside setup()`); + return EMPTY_OBJ; } - } -} -function nextFrame(cb) { - requestAnimationFrame(() => { - requestAnimationFrame(cb); - }); -} -var endId = 0; -function whenTransitionEnds(el, expectedType, explicitTimeout, resolve2) { - const id = el._endId = ++endId; - const resolveIfNotStale = () => { - if (id === el._endId) { - resolve2(); + const modules = instance.type.__cssModules; + if (!modules) { + warn2(`Current instance does not have CSS modules injected.`); + return EMPTY_OBJ; } - }; - if (explicitTimeout) { - return setTimeout(resolveIfNotStale, explicitTimeout); + const mod = modules[name]; + if (!mod) { + warn2(`Current instance does not have CSS module named "${name}".`); + return EMPTY_OBJ; + } + return mod; } - const { type, timeout, propCount } = getTransitionInfo(el, expectedType); - if (!type) { - return resolve2(); +} +function useCssVars(getter) { + const instance = getCurrentInstance(); + if (!instance) { + warn2(`useCssVars is called without current active component instance.`); + return; } - const endEvent = type + "end"; - let ended = 0; - const end = () => { - el.removeEventListener(endEvent, onEnd); - resolveIfNotStale(); + const updateTeleports = instance.ut = (vars = getter(instance.proxy)) => { + Array.from( + document.querySelectorAll(`[data-v-owner="${instance.uid}"]`) + ).forEach((node) => setVarsOnNode(node, vars)); }; - const onEnd = (e) => { - if (e.target === el && ++ended >= propCount) { - end(); - } + const setVars = () => { + const vars = getter(instance.proxy); + setVarsOnVNode(instance.subTree, vars); + updateTeleports(vars); }; - setTimeout(() => { - if (ended < propCount) { - end(); - } - }, timeout + 1); - el.addEventListener(endEvent, onEnd); + watchPostEffect(setVars); + onMounted(() => { + const ob = new MutationObserver(setVars); + ob.observe(instance.subTree.el.parentNode, { childList: true }); + onUnmounted(() => ob.disconnect()); + }); } -function getTransitionInfo(el, expectedType) { - const styles = window.getComputedStyle(el); - const getStyleProperties = (key) => (styles[key] || "").split(", "); - const transitionDelays = getStyleProperties(`${TRANSITION}Delay`); - const transitionDurations = getStyleProperties(`${TRANSITION}Duration`); - const transitionTimeout = getTimeout(transitionDelays, transitionDurations); - const animationDelays = getStyleProperties(`${ANIMATION}Delay`); - const animationDurations = getStyleProperties(`${ANIMATION}Duration`); - const animationTimeout = getTimeout(animationDelays, animationDurations); - let type = null; - let timeout = 0; - let propCount = 0; - if (expectedType === TRANSITION) { - if (transitionTimeout > 0) { - type = TRANSITION; - timeout = transitionTimeout; - propCount = transitionDurations.length; +function setVarsOnVNode(vnode, vars) { + if (vnode.shapeFlag & 128) { + const suspense = vnode.suspense; + vnode = suspense.activeBranch; + if (suspense.pendingBranch && !suspense.isHydrating) { + suspense.effects.push(() => { + setVarsOnVNode(suspense.activeBranch, vars); + }); } - } else if (expectedType === ANIMATION) { - if (animationTimeout > 0) { - type = ANIMATION; - timeout = animationTimeout; - propCount = animationDurations.length; + } + while (vnode.component) { + vnode = vnode.component.subTree; + } + if (vnode.shapeFlag & 1 && vnode.el) { + setVarsOnNode(vnode.el, vars); + } else if (vnode.type === Fragment) { + vnode.children.forEach((c) => setVarsOnVNode(c, vars)); + } else if (vnode.type === Static) { + let { el, anchor } = vnode; + while (el) { + setVarsOnNode(el, vars); + if (el === anchor) + break; + el = el.nextSibling; } - } else { - timeout = Math.max(transitionTimeout, animationTimeout); - type = timeout > 0 ? transitionTimeout > animationTimeout ? TRANSITION : ANIMATION : null; - propCount = type ? type === TRANSITION ? transitionDurations.length : animationDurations.length : 0; } - const hasTransform = type === TRANSITION && /\b(transform|all)(,|$)/.test( - getStyleProperties(`${TRANSITION}Property`).toString() - ); - return { - type, - timeout, - propCount, - hasTransform - }; } -function getTimeout(delays, durations) { - while (delays.length < durations.length) { - delays = delays.concat(delays); +function setVarsOnNode(el, vars) { + if (el.nodeType === 1) { + const style = el.style; + for (const key in vars) { + style.setProperty(`--${key}`, vars[key]); + } } - return Math.max(...durations.map((d, i) => toMs(d) + toMs(delays[i]))); -} -function toMs(s) { - return Number(s.slice(0, -1).replace(",", ".")) * 1e3; -} -function forceReflow() { - return document.body.offsetHeight; } var positionMap = /* @__PURE__ */ new WeakMap(); var newPositionMap = /* @__PURE__ */ new WeakMap(); +var moveCbKey = Symbol("_moveCb"); +var enterCbKey2 = Symbol("_enterCb"); var TransitionGroupImpl = { name: "TransitionGroup", props: extend({}, TransitionPropsValidators, { @@ -10059,13 +10190,13 @@ var TransitionGroupImpl = { const style = el.style; addTransitionClass(el, moveClass); style.transform = style.webkitTransform = style.transitionDuration = ""; - const cb = el._moveCb = (e) => { + const cb = el[moveCbKey] = (e) => { if (e && e.target !== el) { return; } if (!e || /transform$/.test(e.propertyName)) { el.removeEventListener("transitionend", cb); - el._moveCb = null; + el[moveCbKey] = null; removeTransitionClass(el, moveClass); } }; @@ -10108,11 +10239,11 @@ removeMode(TransitionGroupImpl.props); var TransitionGroup = TransitionGroupImpl; function callPendingCbs(c) { const el = c.el; - if (el._moveCb) { - el._moveCb(); + if (el[moveCbKey]) { + el[moveCbKey](); } - if (el._enterCb) { - el._enterCb(); + if (el[enterCbKey2]) { + el[enterCbKey2](); } } function recordPosition(c) { @@ -10132,8 +10263,9 @@ function applyTranslation(c) { } function hasCSSTransform(el, root, moveClass) { const clone = el.cloneNode(); - if (el._vtc) { - el._vtc.forEach((cls) => { + const _vtc = el[vtcKey]; + if (_vtc) { + _vtc.forEach((cls) => { cls.split(/\s+/).forEach((c) => c && clone.classList.remove(c)); }); } @@ -10159,9 +10291,10 @@ function onCompositionEnd(e) { target.dispatchEvent(new Event("input")); } } +var assignKey = Symbol("_assign"); var vModelText = { created(el, { modifiers: { lazy, trim, number } }, vnode) { - el._assign = getModelAssigner(vnode); + el[assignKey] = getModelAssigner(vnode); const castToNumber = number || vnode.props && vnode.props.type === "number"; addEventListener(el, lazy ? "change" : "input", (e) => { if (e.target.composing) @@ -10173,7 +10306,7 @@ var vModelText = { if (castToNumber) { domValue = looseToNumber(domValue); } - el._assign(domValue); + el[assignKey](domValue); }); if (trim) { addEventListener(el, "change", () => { @@ -10191,36 +10324,35 @@ var vModelText = { el.value = value == null ? "" : value; }, beforeUpdate(el, { value, modifiers: { lazy, trim, number } }, vnode) { - el._assign = getModelAssigner(vnode); + el[assignKey] = getModelAssigner(vnode); if (el.composing) return; + const elValue = number || el.type === "number" ? looseToNumber(el.value) : el.value; + const newValue = value == null ? "" : value; + if (elValue === newValue) { + return; + } if (document.activeElement === el && el.type !== "range") { if (lazy) { return; } - if (trim && el.value.trim() === value) { + if (trim && el.value.trim() === newValue) { return; } - if ((number || el.type === "number") && looseToNumber(el.value) === value) { - return; - } - } - const newValue = value == null ? "" : value; - if (el.value !== newValue) { - el.value = newValue; } + el.value = newValue; } }; var vModelCheckbox = { // #4096 array checkboxes need to be deep traversed deep: true, created(el, _, vnode) { - el._assign = getModelAssigner(vnode); + el[assignKey] = getModelAssigner(vnode); addEventListener(el, "change", () => { const modelValue = el._modelValue; const elementValue = getValue(el); const checked = el.checked; - const assign = el._assign; + const assign = el[assignKey]; if (isArray(modelValue)) { const index = looseIndexOf(modelValue, elementValue); const found = index !== -1; @@ -10247,7 +10379,7 @@ var vModelCheckbox = { // set initial checked on mount to wait for true-value/false-value mounted: setChecked, beforeUpdate(el, binding, vnode) { - el._assign = getModelAssigner(vnode); + el[assignKey] = getModelAssigner(vnode); setChecked(el, binding, vnode); } }; @@ -10264,13 +10396,13 @@ function setChecked(el, { value, oldValue }, vnode) { var vModelRadio = { created(el, { value }, vnode) { el.checked = looseEqual(value, vnode.props.value); - el._assign = getModelAssigner(vnode); + el[assignKey] = getModelAssigner(vnode); addEventListener(el, "change", () => { - el._assign(getValue(el)); + el[assignKey](getValue(el)); }); }, beforeUpdate(el, { value, oldValue }, vnode) { - el._assign = getModelAssigner(vnode); + el[assignKey] = getModelAssigner(vnode); if (value !== oldValue) { el.checked = looseEqual(value, vnode.props.value); } @@ -10285,11 +10417,11 @@ var vModelSelect = { const selectedVal = Array.prototype.filter.call(el.options, (o) => o.selected).map( (o) => number ? looseToNumber(getValue(o)) : getValue(o) ); - el._assign( + el[assignKey]( el.multiple ? isSetModel ? new Set(selectedVal) : selectedVal : selectedVal[0] ); }); - el._assign = getModelAssigner(vnode); + el[assignKey] = getModelAssigner(vnode); }, // set value in mounted & updated because - - - -
-
-
-
-
-

Select a 1-1 conversation from the left

-
Note: Bots can only request mentions, not whole conversations
-
-
-
-
- - - \ No newline at end of file diff --git a/docs/webhooks.md b/docs/webhooks.md new file mode 100644 index 0000000..81f75ab --- /dev/null +++ b/docs/webhooks.md @@ -0,0 +1,169 @@ +--- +# layout: home +outline: deep +--- + +## Webhooks + +Webhooks are the "glue" that connect your agent to your users. Note that to use webhooks (rather than websockets), you will need a publically-accessible hostname in order to register a webhook. + +If you use a **[secret](https://developer.webex.com/blog/using-a-webhook-secret)** with your webhook (which you should), see **[Securing Webhooks](#securing-webhooks)** for information about how to validate the secret passed on payloads. + +Below you can create, inspect, and delete webhooks associated with your bot's access token. + + + + + + + + + +## Securing Webhooks + +## Webhook secrets + +To help secure your agent, you can add a "secret" when creating webhooks. + +If you add a secret when creating a webhook on each incoming request will receive a hashed version of the request body under the header **X-Spark-Signature** + +**Bottom line:** DO THIS. With your webhook secret you can take the SHA-1 representation of the request body and if it matches the signature on the header proceed otherwise simply discard the request. + +Note: All of the samples in the **[examples directory](./examples/index)** of the SpeedyBot repo have reference implementations of validating webhooks appropriate for each platform. + +## Reference implementations + +## NodeJS + +::: code-group + +```ts [validateWebhook.ts] +import crypto from "crypto"; + +export const validateWebhook = ( + signature: string, + secret: string, + requestBody: T +): boolean => { + const hmac = crypto.createHmac("sha1", secret); + if (typeof requestBody === "string") { + hmac.update(requestBody); + } else { + hmac.update(JSON.stringify(requestBody)); + } + const isValid = hmac.digest("hex") === signature; + return isValid; +}; +``` + +```js [validateWebhook.js (plain/common js)] +const crypto = require("crypto"); + +// validate signature +export const validateWebhook = (secret, signature, requestData) => { + const hmac = crypto.createHmac("sha1", secret); + if (typeof requestData === "string") { + hmac.update(requestData); + } else { + hmac.update(JSON.stringify(requestData)); + } + + const isValid = hmac.digest("hex") === signature; + return isValid; +}; +``` + +::: + +## Sample data + +```js +const requestBody = { + data: { + a: 1, + b: 2, + c: { + d: 3, + }, + }, + signature: "01e0cb6a53731b9615b483335d77d97023410c72", +}; +const secret = "myBongoSecret"; + +const res = validateWebhook(secret, requestBody.signature, requestBody.data); + +console.log("is valid?", res); +``` + +## Web Crypto (for "Workers", V8 Isolates) + +```js +const validateWebhook = async (secret, signature, requestData) => { + const stringyBody = + typeof requestData !== "string" ? JSON.stringify(requestData) : requestData; + const algo = { + name: "HMAC", + hash: "SHA-1", + }; + const enc = { + name: "UTF-8", + }; + const hmacKey = await crypto.subtle.importKey( + "raw", + new TextEncoder().encode(secret), + algo, + false, + ["sign"] + ); + const hmacData = await crypto.subtle.sign( + algo, + hmacKey, + new TextEncoder().encode(stringyBody) + ); + + const bufferToHex = (buffer) => { + return Array.prototype.map + .call(new Uint8Array(buffer), (x) => ("00" + x.toString(16)).slice(-2)) + .join(""); + }; + const hmacDataHex = bufferToHex(hmacData); + return hmacDataHex === signature; +}; + +const requestBody = { + data: { + a: 1, + b: 2, + c: { + d: 3, + }, + }, + signature: "01e0cb6a53731b9615b483335d77d97023410c72", +}; +const secret = "myBongoSecret"; + +const res = validateWebhook( + secret, + requestBody.signature, + requestBody.data +).then((val) => console.log("is valid?", val)); +``` + +## Resources + +- https://developer.webex.com/blog/using-a-webhook-secret +- https://community.cisco.com/t5/collaboration-blogs/using-a-webhook-secret/ba-p/3662176 +- https://blogs.cisco.com/learning/chatops-how-to-secure-your-webex-bot + + diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 0000000..4dbab7a --- /dev/null +++ b/examples/README.md @@ -0,0 +1,16 @@ +## Examples + +SpeedyBot has several "batteries-included" examples that show how to deploy Speedybot on a variety of platforms/services. It doesn't matter if it's Serverless-less/Server-ful, websockets or whatever-- it can probably run Speedybot. There's no "best" infrastructure solution but rather choices/options depending on your setup and particular requirements. + +SpeedyBot makes it easy to focus on that parts that matter-- your content + integrations and you do all of that from a simple `bot.ts` file. + +Grab an example and see the included README for instructions on how to quickly go from zero to an agent with which you can virtal + +| Platform | Needs server? | Needs webhooks? | +| --------------------------------------------------------------------------------- | ------------- | --------------- | +| **[🔌 Deploy with websockets](./speedybot-starter/README.md)** | ❌ | ❌ | +| **[💻 Deploy to Simple Express Server](./standard-server/README.md)** | ✅ | ✅ | +| **[λ Deploy to AWS Lamda](./lambda/README.md)** using **[SST](https://sst.dev/)** | ❌ | ✅ | +| **[🔥 Deploy to Worker](./worker/README.md)** | ❌ | ✅ | +| **[🦖 Deploy to Deno](./deno/README.md)** | ❌ | ✅ | +| **[📲 LLM Stream](./llm-stream/README.md)** | ❌ | ❌ | diff --git a/examples/deno/README.md b/examples/deno/README.md new file mode 100644 index 0000000..e2ea210 --- /dev/null +++ b/examples/deno/README.md @@ -0,0 +1,47 @@ +# [QUICKSTART] 🦖 Deploy your bot to Deno + +Note: The steps below assume you have a **[working WebEx account](https://developer.webex.com/signup)** & a **[Deno Deploy account](https://deno.com/deploy/)** + +## 1) Get your bot access token + +- If you have an existing bot, get its token here: **[https://developer.webex.com/my-apps](https://developer.webex.com/my-apps)** + +- If you don't have a bot, create one and save the token from here: **[https://developer.webex.com/my-apps/new/bot](https://developer.webex.com/my-apps/new/bot)** + +- Write down your bot's access token, you'll need it in a minute + +## 2) Create a new Project in Deno + +- If you don't have one, sign up for a **[deno deploy account](https://deno.com/deploy)** + +- Press the blue "New Playground" button + +![sb](./../../docs/assets/deno/deno_playground.png) + +Note: There are many (better) ways to setup Deno, but for now we can just use the Playground and copy/paste everything in **[index.ts](./index.ts)** + +![sb](./../../docs/assets/deno/deno_addcode.png) + +## 3) Expose your bot access token to Deno + +- You could insert your bot token directly in the Playground but a safer way is to use Deno environmental variables + +- Inside your playground, tap the Settings button and add your `token` secret (the Bot token from step 1) + +- If you're using a webhook secret (which you should), add it as a secret `webhookSecret` + +![sb](./../../docs/assets/deno/set_secrets.png) + +Verify you hit save underneath each secret you add to the playground + +![sb](./../../docs/assets/deno/set_secrets_saved.png) + +## 4) Register your webhook + +- Grab your playground's URL (it'll be a strange name like https://noisy-bongodrum-75.deno.dev) and register your webhook using SpeedyBot Garage + +- Visit https://speedybot.js.org/garage and select **webhooks** and add your URL and optional (though highly recommeneded) webhook secret + +- If all went well you should see this and your bot is up and running on Deno! + +![sb](./../../docs/assets/deno/deno_webhook.png) diff --git a/examples/deno/index.ts b/examples/deno/index.ts new file mode 100644 index 0000000..2e3b81e --- /dev/null +++ b/examples/deno/index.ts @@ -0,0 +1,172 @@ +import { SpeedyBot, logoRoll } from "https://cdn.skypack.dev/speedybot@latest"; + +Deno.serve(async (req: Request) => { + if (req.method === "GET") { + return new Response(`Server is running ${new Date()} ${logoRoll()}`); + } + + const CONFIG = { + token: Deno.env.get("token"), + webhookSecret: Deno.env.get("webhookSecret"), + }; + + if (req.method === "POST") { + const signature = + req.headers.get("x-spark-signature") || + req.headers.get("X-Spark-Signature"); + const Bot = new SpeedyBot(CONFIG.token); + const json = await req.json(); + + if (CONFIG.webhookSecret && signature) { + const validateWebhook = async ( + requestData: T, + secret: string, + signature: string + ): Promise => { + const stringyBody = + typeof requestData !== "string" + ? JSON.stringify(requestData) + : requestData; + const algo = { + name: "HMAC", + hash: "SHA-1", + }; + const enc = { + name: "UTF-8", + }; + const hmacKey = await crypto.subtle.importKey( + "raw", + new TextEncoder().encode(secret), + algo, + false, + ["sign"] + ); + const hmacData = await crypto.subtle.sign( + algo, + hmacKey, + new TextEncoder().encode(stringyBody) + ); + + const bufferToHex = (buffer: ArrayBufferLike) => { + return Array.prototype.map + .call(new Uint8Array(buffer), (x) => + ("00" + x.toString(16)).slice(-2) + ) + .join(""); + }; + const hmacDataHex = bufferToHex(hmacData); + return hmacDataHex === signature; + }; + const proceed = await validateWebhook( + json, + CONFIG.webhookSecret, + signature + ); + if (proceed === false) { + return new Response("Webhook Secret Rejected"); + } + } + + Bot.exact("$clear", async ($) => { + await $.clearScreen(); + return $.end; + }); + + Bot.addStep(async ($) => { + if ($.data && !$.data.showCard) { + const dataSnippet = $.buildDataSnippet($.data); + await $.send(`This data was submitted:`); + await $.send(dataSnippet); + return $.end; + } else { + return $.next; + } + }); + + Bot.addStep(async ($) => { + await $.send(`helllllooo, you said "${$.text}"`); + const card = $.card().survey([ + { + type: "text", + question: "What is the name of your company?", + id: "company_name", + }, + { + type: "text", + question: "Describe the service performed by the vendor.", + id: "service_type", + }, + { + type: "picker-date", + question: "When was the service provided?", + id: "service_date", + }, + { + type: "single-select", + question: "How would you rate the quality of service?", + choices: ["Excellent", "Good", "Average", "Poor", "Very poor"], + id: "service_quality", + }, + { + type: "multi-select", + question: "What were the highlights of the service?", + choices: [ + "Communication", + "Punctuality", + "Time to Resolution", + "Friendliness", + "Cost", + ], + id: "service_highlights", + }, + { + type: "single-select", + question: + "Would you consider using our services again in the future?", + choices: [ + "Definitely", + "Probably", + "Not sure", + "Probably not", + "Definitely not", + ], + id: "future_use", + }, + { + type: "textarea", + question: + "Please provide any other comments or suggestions for improvement.", + id: "other_comments", + }, + { + type: "picker-time", + question: "What time of day is preferable for future contact?", + id: "preferred_contact_time", + }, + { + type: "picker-dropdown", + question: "Preferred method of communication for future updates?", + choices: ["Email", "Phone", "Text"], + id: "communication_method", + }, + ]); + + await $.send(card); + + return $.next; + }); + + Bot.captureError(async (payload) => { + const { roomId } = payload; + if (roomId) { + await Bot.sendTo( + roomId, + `Whoops, there was a problem: ${payload.message}` + ); + } + }); + + await Bot.runMiddleware(json); + } + return new Response(`Request processed`); // webhooks should return **something** +}); diff --git a/examples/lambda/.env.example b/examples/lambda/.env.example new file mode 100644 index 0000000..af5da8a --- /dev/null +++ b/examples/lambda/.env.example @@ -0,0 +1,2 @@ +WEBHOOK_SECRET=__REPLACE__ME__ +BOT_TOKEN=__REPLACE__ME__ \ No newline at end of file diff --git a/examples/lambda/.gitignore b/examples/lambda/.gitignore new file mode 100644 index 0000000..37b9471 --- /dev/null +++ b/examples/lambda/.gitignore @@ -0,0 +1,15 @@ +# dependencies +node_modules + +# sst +.sst +.build + +# opennext +.open-next + +# misc +.DS_Store + +# local env files +.env*.local diff --git a/examples/lambda/.vscode/launch.json b/examples/lambda/.vscode/launch.json new file mode 100644 index 0000000..58b32d1 --- /dev/null +++ b/examples/lambda/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Debug SST Start", + "type": "node", + "request": "launch", + "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/sst", + "runtimeArgs": ["start", "--increase-timeout"], + "console": "integratedTerminal", + "skipFiles": ["/**"], + "env": {} + } + ] +} diff --git a/examples/lambda/.vscode/settings.json b/examples/lambda/.vscode/settings.json new file mode 100644 index 0000000..3b42f01 --- /dev/null +++ b/examples/lambda/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "search.exclude": { + "**/.sst": true + } +} diff --git a/examples/lambda/README.md b/examples/lambda/README.md new file mode 100644 index 0000000..4bb9c32 --- /dev/null +++ b/examples/lambda/README.md @@ -0,0 +1,58 @@ +# SpeedyBot on AWS Lambda + +Note: This example uses the **[Serverless Stack (SST)](https://serverless-stack.com/)** toolchain for provisioning, deployment of infrastructure. SST is built on top of a version **[AWS Cloud Development Kit (cdk)](https://aws.amazon.com/cdk/)** and makes it possible to express your infrastructure needs as spec/code. SST is definitely not required, but is the quickest route to a serverless deployment. + +SpeedyBot has been built with serverless in mind from the beginning-- serverless infrastructure is "asleep" until you need it. Start-up times are fast enough to interact with the chat client withot timing out. + +## 1) Fetch repo & install dependencies + +``` +git clone https://github.com/valgaze/speedybot +cd speedybot +cd examples/lambda +npm install +``` + +## 2) Set your bot access token + +- If you have an existing bot, get its token here: **[https://developer.webex.com/my-apps](https://developer.webex.com/my-apps)** + +- If you don't have a bot, create one and save the token from here: **[https://developer.webex.com/my-apps/new/bot](https://developer.webex.com/my-apps/new/bot)** + +- Create a `.env` file like **[.env.example](./.env.example)** + +```sh +WEBHOOK_SECRET=__REPLACE__ME__ +BOT_TOKEN=__REPLACE__ME__ +``` + +Note: WEBHOOK_SECRET is up to you, incoming requests will be hashed with it, if the hash is present on the incoming request & `WEBHOOK_SECRET` is present, the lambda will attempt to validate the request. If it fails to match the request will be rejected + +Note: The `.env` file musts never be aded to source control (and there are may ways to supply sensitive data to lambda functions with SST) + +## 3) Set up your AWS credentials on your machine + +Note: You'll need an AWS account that has authorization/billing to create lambda functions + +3a. Setup IAM here: https://sst.dev/chapters/create-an-iam-user.html + +3b. Setup AWS CLI: https://sst.dev/chapters/configure-the-aws-cli.html + +## 4) Deploy your bot and get its public URL + +Run this command from the project directory: + +``` +npm run deploy +``` + +If deployment is successful, you should find that your url that looks something like this: https://abcd123456.execute-api.us-east-1.amazonaws.com + +## 4) Register webhooks + +Hop on over to the **[Webhooks Section](https://speedybot.js.org/webhooks)** to register your webhooks and secret + +Note: +This uses SST but any deployment mechanism/structure you prefer works fine + +Note: This SST configuration is setup to capture incoming WebEx requests on the `/speedybot` route, you can change any/all the behavior in **[the stack config](./stacks/MyStack.ts)** diff --git a/examples/lambda/index.ts b/examples/lambda/index.ts new file mode 100644 index 0000000..e69de29 diff --git a/examples/lambda/package.json b/examples/lambda/package.json new file mode 100644 index 0000000..77e3af8 --- /dev/null +++ b/examples/lambda/package.json @@ -0,0 +1,451 @@ +{ + "name": "speedybot-lambda", + "version": "1.0.0", + "private": true, + "type": "module", + "scripts": { + "bot:dev": "npm run dev", + "dev": "sst dev", + "build": "sst build", + "deploy": "sst deploy", + "remove": "sst remove", + "console": "sst console", + "typecheck": "tsc --noEmit" + }, + "devDependencies": { + "@tsconfig/node16": "^16.1.0", + "aws-cdk-lib": "2.84.0", + "constructs": "10.1.156", + "sst": "^2.22.6", + "typescript": "^5.1.6" + }, + "workspaces": [ + "packages/*" + ], + "main": "index.js", + "dependencies": { + "accepts": "^1.3.8", + "acorn": "^8.10.0", + "acorn-walk": "^8.2.0", + "adm-zip": "^0.5.10", + "ajv": "^8.12.0", + "ajv-formats": "^2.1.1", + "ansi": "^0.3.1", + "ansi-escapes": "^6.2.0", + "ansi-regex": "^6.0.1", + "ansi-styles": "^6.2.1", + "anymatch": "^3.1.3", + "archiver": "^5.3.1", + "archiver-utils": "^2.1.0", + "are-we-there-yet": "^1.0.6", + "array-flatten": "^1.1.1", + "asn1.js": "^5.4.1", + "asn1js": "^3.0.5", + "assertion-error": "^1.1.0", + "astral-regex": "^2.0.0", + "async": "^3.2.4", + "async-limiter": "^1.0.1", + "at-least-node": "^1.0.0", + "atomically": "^1.7.0", + "auto-bind": "^5.0.1", + "available-typed-arrays": "^1.0.5", + "aws-crt": "^1.17.0", + "aws-iot-device-sdk": "^2.2.12", + "aws-sdk": "^2.1425.0", + "axios": "^0.24.0", + "balanced-match": "^1.0.2", + "base64-js": "^1.5.1", + "big-integer": "^1.6.51", + "binary": "^0.3.0", + "binary-extensions": "^2.2.0", + "bl": "^4.1.0", + "bluebird": "^3.7.2", + "bn.js": "^4.12.0", + "body-parser": "^1.20.1", + "bowser": "^2.11.0", + "brace-expansion": "^2.0.1", + "braces": "^3.0.2", + "browserslist": "^4.21.9", + "buffer": "^6.0.3", + "buffer-crc32": "^0.2.13", + "buffer-from": "^1.1.2", + "buffer-indexof-polyfill": "^1.0.2", + "buffer-shims": "^1.0.0", + "buffers": "^0.1.1", + "builtin-modules": "^3.2.0", + "busboy": "^1.6.0", + "bytes": "^3.1.2", + "cac": "^6.7.14", + "call-bind": "^1.0.2", + "camelcase": "^2.1.1", + "caniuse-lite": "^1.0.30001517", + "cdk-assets": "^2.84.0", + "chai": "^4.3.7", + "chainsaw": "^0.1.0", + "chalk": "^5.3.0", + "charenc": "^0.0.2", + "check-error": "^1.0.2", + "cheerio": "^1.0.0-rc.12", + "chokidar": "^3.5.3", + "chownr": "^2.0.0", + "ci-info": "^3.8.0", + "cli-boxes": "^3.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.9.0", + "cli-truncate": "^3.1.0", + "cliui": "^8.0.1", + "clone": "^1.0.4", + "cmake-js": "^6.3.2", + "code-excerpt": "^4.0.0", + "code-point-at": "^1.1.0", + "color-convert": "^2.0.1", + "color-name": "^1.1.4", + "colorette": "^2.0.20", + "commist": "^1.1.0", + "compress-commons": "^4.1.1", + "concat-map": "^0.0.1", + "concat-stream": "^2.0.0", + "conf": "^10.2.0", + "content-disposition": "^0.5.4", + "content-type": "^1.0.5", + "convert-source-map": "^1.9.0", + "convert-to-spaces": "^2.0.1", + "cookie": "^0.5.0", + "cookie-signature": "^1.0.6", + "core-util-is": "^1.0.3", + "crc-32": "^1.2.2", + "crc32-stream": "^4.0.2", + "cross-fetch": "^4.0.0", + "cross-spawn": "^7.0.3", + "crypt": "^0.0.2", + "crypto-js": "^4.1.1", + "debounce-fn": "^4.0.0", + "debug": "^4.3.4", + "decamelize": "^1.2.0", + "deep-eql": "^4.1.3", + "deep-extend": "^0.6.0", + "defaults": "^1.0.4", + "delegates": "^1.0.0", + "dendriform-immer-patch-optimiser": "^2.1.3", + "depd": "^2.0.0", + "destroy": "^1.2.0", + "diff": "^5.1.0", + "diff-sequences": "^29.4.3", + "dot-prop": "^6.0.1", + "dotenv": "^16.3.1", + "dset": "^3.1.2", + "duplexer2": "^0.1.4", + "duplexify": "^3.7.1", + "eastasianwidth": "^0.2.0", + "ecdsa-sig-formatter": "^1.0.11", + "ee-first": "^1.1.1", + "electron-to-chromium": "^1.4.477", + "emoji-regex": "^8.0.0", + "encodeurl": "^1.0.2", + "end-of-stream": "^1.4.4", + "env-paths": "^2.2.1", + "esbuild": "^0.18.13", + "escalade": "^3.1.1", + "escape-html": "^1.0.3", + "escape-string-regexp": "^2.0.0", + "etag": "^1.8.1", + "events": "^1.1.1", + "express": "^4.18.2", + "fast-decode-uri-component": "^1.0.1", + "fast-deep-equal": "^3.1.3", + "fast-jwt": "^1.7.2", + "fast-querystring": "^1.1.2", + "fast-url-parser": "^1.1.3", + "fast-xml-parser": "^4.2.5", + "fill-range": "^7.0.1", + "finalhandler": "^1.2.0", + "find-up": "^3.0.0", + "follow-redirects": "^1.15.2", + "for-each": "^0.3.3", + "formdata-polyfill": "^4.0.10", + "forwarded": "^0.2.0", + "fresh": "^0.5.2", + "fs-constants": "^1.0.0", + "fs-extra": "^9.1.0", + "fs-minipass": "^2.1.0", + "fs.realpath": "^1.0.0", + "fsevents": "^2.3.2", + "fstream": "^1.0.12", + "function-bind": "^1.1.1", + "gauge": "^1.2.7", + "gensync": "^1.0.0-beta.2", + "get-caller-file": "^2.0.5", + "get-func-name": "^2.0.0", + "get-intrinsic": "^1.2.1", + "get-port": "^6.1.2", + "glob": "^8.1.0", + "glob-parent": "^5.1.2", + "globals": "^11.12.0", + "gopd": "^1.0.1", + "graceful-fs": "^4.2.11", + "graphql": "^16.7.1", + "graphql-yoga": "^3.9.1", + "has": "^1.0.3", + "has-flag": "^4.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "has-tostringtag": "^1.0.0", + "has-unicode": "^2.0.1", + "hash-it": "^6.0.0", + "help-me": "^3.0.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.4.24", + "ieee754": "^1.1.13", + "immer": "^9.0.21", + "indent-string": "^5.0.0", + "inflight": "^1.0.6", + "inherits": "^2.0.4", + "ini": "^1.3.8", + "ink": "^4.3.0", + "ink-spinner": "^5.0.0", + "invert-kv": "^1.0.0", + "ipaddr.js": "^1.9.1", + "is-arguments": "^1.1.1", + "is-binary-path": "^2.1.0", + "is-buffer": "^1.1.6", + "is-callable": "^1.2.7", + "is-ci": "^3.0.1", + "is-extglob": "^2.1.1", + "is-fullwidth-code-point": "^4.0.0", + "is-generator-function": "^1.0.10", + "is-glob": "^4.0.3", + "is-interactive": "^2.0.0", + "is-iojs": "^1.1.0", + "is-lower-case": "^2.0.2", + "is-number": "^7.0.0", + "is-obj": "^2.0.0", + "is-typed-array": "^1.1.12", + "is-unicode-supported": "^1.3.0", + "is-upper-case": "^2.0.2", + "isarray": "^1.0.0", + "isexe": "^2.0.0", + "isomorphic-ws": "^4.0.1", + "jmespath": "^0.16.0", + "jose": "^4.14.4", + "js-sdsl": "^4.3.0", + "js-tokens": "^4.0.0", + "jsesc": "^2.5.2", + "json-schema-traverse": "^1.0.0", + "json-schema-typed": "^7.0.3", + "json5": "^2.2.3", + "jsonc-parser": "^3.2.0", + "jsonfile": "^6.1.0", + "kysely": "^0.25.0", + "kysely-codegen": "^0.10.1", + "kysely-data-api": "^0.2.1", + "langchain": "^0.0.126", + "lazystream": "^1.0.1", + "lcid": "^1.0.0", + "leven": "^2.1.0", + "listenercount": "^1.0.1", + "local-pkg": "^0.4.3", + "locate-path": "^3.0.0", + "lodash": "^4.17.21", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.pad": "^4.5.1", + "lodash.padend": "^4.6.1", + "lodash.padstart": "^4.6.1", + "lodash.truncate": "^4.4.2", + "lodash.union": "^4.6.0", + "log-symbols": "^5.1.0", + "loose-envify": "^1.4.0", + "loupe": "^2.3.6", + "lru-cache": "^5.1.1", + "magic-string": "^0.30.2", + "md5": "^2.3.0", + "media-typer": "^0.3.0", + "memory-stream": "^0.0.3", + "merge-descriptors": "^1.0.1", + "methods": "^1.1.2", + "micromatch": "^4.0.5", + "mime": "^1.6.0", + "mime-db": "^1.52.0", + "mime-types": "^2.1.35", + "mimic-fn": "^3.1.0", + "minimalistic-assert": "^1.0.1", + "minimatch": "^6.2.0", + "minimist": "^1.2.6", + "minipass": "^5.0.0", + "minizlib": "^2.1.2", + "mkdirp": "^1.0.4", + "mlly": "^1.4.0", + "mnemonist": "^0.39.5", + "mqtt": "^4.3.7", + "mqtt-packet": "^6.10.0", + "ms": "^2.1.2", + "mute-stream": "^0.0.8", + "nanoid": "^3.3.6", + "negotiator": "^0.6.3", + "node-fetch": "^2.7.0", + "node-releases": "^2.0.13", + "normalize-path": "^3.0.0", + "npmlog": "^1.2.1", + "number-allocator": "^1.0.14", + "number-is-nan": "^1.0.1", + "object-hash": "^2.2.0", + "object-inspect": "^1.12.3", + "obliterator": "^2.0.4", + "oidc-token-hash": "^5.0.3", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "onetime": "^5.1.2", + "openid-client": "^5.4.3", + "ora": "^6.3.1", + "os-locale": "^1.4.0", + "p-limit": "^2.3.0", + "p-locate": "^3.0.0", + "p-try": "^2.2.0", + "parseurl": "^1.3.3", + "patch-console": "^2.0.0", + "path-exists": "^3.0.0", + "path-is-absolute": "^1.0.1", + "path-key": "^3.1.1", + "path-to-regexp": "^0.1.7", + "pathe": "^1.1.1", + "pathval": "^1.1.1", + "picocolors": "^1.0.0", + "picomatch": "^2.3.1", + "pkg-types": "^1.0.3", + "pkg-up": "^3.1.0", + "postcss": "^8.4.27", + "pretty-format": "^29.6.2", + "process": "^0.11.10", + "process-nextick-args": "^2.0.1", + "promptly": "^3.2.0", + "proxy-addr": "^2.0.7", + "pump": "^3.0.0", + "punycode": "^1.4.1", + "puppeteer": "^19.11.1", + "pvtsutils": "^1.3.2", + "pvutils": "^1.1.3", + "qs": "^6.11.0", + "querystring": "^0.2.0", + "range-parser": "^1.2.1", + "raw-body": "^2.5.1", + "rc": "^1.2.8", + "react": "^18.2.0", + "react-is": "^18.2.0", + "react-reconciler": "^0.29.0", + "read": "^1.0.7", + "readable-stream": "^2.3.8", + "readdir-glob": "^1.1.3", + "readdirp": "^3.6.0", + "reinterval": "^1.1.0", + "remeda": "^1.24.0", + "require-directory": "^2.1.1", + "require-from-string": "^2.0.2", + "restore-cursor": "^4.0.0", + "rfdc": "^1.3.0", + "rimraf": "^2.7.1", + "rollup": "^3.27.0", + "safe-buffer": "^5.2.1", + "safer-buffer": "^2.1.2", + "sax": "^1.2.1", + "scheduler": "^0.23.0", + "semver": "^6.3.1", + "send": "^0.18.0", + "serve-static": "^1.15.0", + "setimmediate": "^1.0.5", + "setprototypeof": "^1.2.0", + "shebang-command": "^2.0.0", + "shebang-regex": "^3.0.0", + "side-channel": "^1.0.4", + "siginfo": "^2.0.0", + "signal-exit": "^3.0.7", + "slice-ansi": "^6.0.0", + "source-map-js": "^1.0.2", + "speedybot": "^2.0.0-beta.1", + "split2": "^3.2.2", + "splitargs": "^0.0.7", + "sst-aws-cdk": "^2.84.0", + "stack-utils": "^2.0.6", + "stackback": "^0.0.2", + "statuses": "^2.0.1", + "std-env": "^3.3.3", + "stdin-discarder": "^0.1.0", + "stream-shift": "^1.0.1", + "streamsearch": "^1.1.0", + "string_decoder": "^1.1.1", + "string-width": "^4.2.3", + "strip-ansi": "^7.1.0", + "strip-json-comments": "^2.0.1", + "strip-literal": "^1.0.1", + "strnum": "^1.0.5", + "supports-color": "^7.2.0", + "table": "^6.8.1", + "tar": "^6.1.15", + "tar-stream": "^2.2.0", + "tinybench": "^2.5.0", + "tinypool": "^0.6.0", + "tinyspy": "^2.1.1", + "to-fast-properties": "^2.0.0", + "to-regex-range": "^5.0.1", + "toidentifier": "^1.0.1", + "tr46": "^0.0.3", + "traverse": "^0.3.9", + "tree-kill": "^1.2.2", + "tslib": "^2.6.1", + "type-detect": "^4.0.8", + "type-fest": "^0.12.0", + "type-is": "^1.6.18", + "typedarray": "^0.0.6", + "ufo": "^1.1.2", + "ultron": "^1.1.1", + "undici": "^5.22.1", + "universalify": "^2.0.0", + "unpipe": "^1.0.0", + "unzipper": "^0.8.14", + "update-browserslist-db": "^1.0.11", + "uri-js": "^4.4.1", + "url": "^0.10.3", + "url-join": "^0.0.1", + "urlpattern-polyfill": "^8.0.2", + "util": "^0.12.5", + "util-deprecate": "^1.0.2", + "utils-merge": "^1.0.1", + "uuid": "^9.0.0", + "value-or-promise": "^1.0.12", + "vary": "^1.1.2", + "vite": "^4.4.7", + "vite-node": "^0.33.0", + "vitest": "^0.33.0", + "wcwidth": "^1.0.1", + "web-streams-polyfill": "^3.2.1", + "webcrypto-core": "^1.7.7", + "webidl-conversions": "^3.0.1", + "websocket-stream": "^5.5.2", + "whatwg-url": "^5.0.0", + "which": "^1.3.1", + "which-typed-array": "^1.1.11", + "why-is-node-running": "^2.2.2", + "widest-line": "^4.0.1", + "window-size": "^0.1.4", + "wrap-ansi": "^8.1.0", + "wrappy": "^1.0.2", + "ws": "^8.13.0", + "xml2js": "^0.5.0", + "xmlbuilder": "^11.0.1", + "xtend": "^4.0.2", + "y18n": "^5.0.8", + "yallist": "^3.1.1", + "yaml": "^1.10.2", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", + "yocto-queue": "^1.0.0", + "yoga-wasm-web": "^0.3.3", + "zip-stream": "^4.1.0", + "zod": "^3.21.4" + }, + "keywords": [], + "author": "", + "license": "ISC", + "description": "" +} diff --git a/examples/lambda/packages/functions/package.json b/examples/lambda/packages/functions/package.json new file mode 100644 index 0000000..1c4903a --- /dev/null +++ b/examples/lambda/packages/functions/package.json @@ -0,0 +1,19 @@ +{ + "name": "@my-sst-app/functions", + "version": "0.0.0", + "type": "module", + "scripts": { + "test": "sst bind vitest", + "typecheck": "tsc -noEmit" + }, + "devDependencies": { + "@types/aws-lambda": "^8.10.119", + "@types/node": "^20.4.5", + "sst": "^2.22.6", + "vitest": "^0.33.0" + }, + "dependencies": { + "cross-fetch": "^4.0.0", + "speedybot": "latest" + } +} diff --git a/examples/lambda/packages/functions/src/lambda.ts b/examples/lambda/packages/functions/src/lambda.ts new file mode 100644 index 0000000..7cadfed --- /dev/null +++ b/examples/lambda/packages/functions/src/lambda.ts @@ -0,0 +1,68 @@ +import { APIGatewayProxyHandlerV2 } from "aws-lambda"; +import { ENVELOPES } from "speedybot"; // relace w/ speedybot +import Bot from "./settings/bot"; +import { validateSignature } from "./validate_webhook"; +import "cross-fetch/polyfill"; // for node <18, need Blob + FormData + +export const handler: APIGatewayProxyHandlerV2 = async (event, context) => { + // Check webhook secret + const signature = event.headers["x-spark-signature"]; + const CONFIG = { + secret: process.env.WEBHOOK_SECRET as string, + BOT_TOKEN: process.env.BOT_TOKEN as string, + }; + Bot.setToken(CONFIG.BOT_TOKEN); + + let data = {}; + if ("body" in event && event.body) { + try { + data = JSON.parse(event.body); + } catch (e) { + console.log("#Error with body", e); + } + } + + const secret = CONFIG.secret; // webhook secret + try { + // patch to run before starting middleware loop + // useful for validating secrets, see deets: https://github.com/valgaze/speedybot/blob/deploy/docs/webhooks.md#webhook-secrets + + Bot.insertStepToFront(async ($) => { + // Webhook "secret" check + if (secret && signature) { + const proceed = validateSignature( + signature as string, + secret as string, + data + ); + if (!proceed) { + // Invalid webhook signature, discard + return $.end; + } + await $.send(`Just wanna let you know, we decided: ${$.next}`); + return $.next; + } else { + // no signature check + return $.next; + } + }); + + Bot.addSecrets(CONFIG); + await Bot.runMiddleware(data as ENVELOPES); + + console.log(">>[FINISHED]: await Bot.runMiddleware(data as ENVELOPES);"); + } catch (e) { + return { + statusCode: 200, + body: JSON.stringify({ + msg: `There was an issue`, + error: e, + }), + }; + } + return { + statusCode: 200, + headers: { "Content-Type": "text/plain" }, + body: `SpeedyBot: Your request was received at ${event.requestContext.time}.`, + }; +}; diff --git a/examples/lambda/packages/functions/src/settings/bot.ts b/examples/lambda/packages/functions/src/settings/bot.ts new file mode 100644 index 0000000..ab007f4 --- /dev/null +++ b/examples/lambda/packages/functions/src/settings/bot.ts @@ -0,0 +1,705 @@ +import { SpeedyBot, SpeedyCard, SurveyQuestion } from "speedybot"; + +const Bot = new SpeedyBot(); + +Bot.addStep(async ($) => { + // handle text + if ($.text) { + if ($.text.toLowerCase() === "showcard") { + const card = $.card() + .addTitle("Capture data") + .addTextarea("Submit data") + .addPickerDropdown(["option 1", "option 2", "option 3", "option 4"]); + await $.send(card); + } + } + + // file handler + if ($.file) { + const { name, extension, contentType } = $.file; + await $.send( + `You uploaded "${name}", a *.${extension} file [${contentType}]` + ); + // Fetch raw bytes (which you can pass onto other systems) + // const TheData = await $.file.getData(); // do something w/ the contents/bytes + } + + // adaptive card/form submissions + if ($.data && !$.data.showCard && !$.data.randomSpeedyBot) { + const dataSnippet = $.buildDataSnippet($.data); + await $.send(`This data was submitted:`); + await $.send(dataSnippet); + } + + return $.next; +}); + +Bot.addStep(async ($) => { + if ($.data && $.data.randomSpeedyBot) { + const randomImage = `https://raw.githubusercontent.com/valgaze/speedybot-utils/main/assets/memes/logo${$.pickRandom( + 1, + 33 + )}.jpeg`; + + await $.send( + $.card() + .addHeader("\u{1F916} SpeedyBot") + .addImage(randomImage, { + targetURL: "https://speedybot.js.org", + size: "ExtraLarge", + }) + .addButton("🤖 Show another SpeedyBot", "randomSpeedyBot") + ); + return $.end; + } + return $.next; +}); + +// ## File upload handler +Bot.addStep(async ($) => { + if ($.file) { + const { name, extension, contentType } = $.file; + await $.send( + `You uploaded "${name}", a *.${extension} file [${contentType}]` + ); + // Fetch raw bytes (which you can send to database or send to external system) + // const TheData = await $.file.getData(); // do something w/ the contents/bytes + } + return $.next; +}); + +// ## "ping/pong", run logic on inputs +Bot.addStep(async ($) => { + if ($.text) { + const lowered = $.text.toLowerCase(); + if (lowered === "ping") { + await $.send("pong"); + return $.end; + } else if (lowered === "pong") { + await $.send("ping"); + return $.end; + } + } + return $.next; // pass through to rest of steps +}); + +// ## "show-cards, show adaptive cards +Bot.addStep(async ($) => { + if ($.text) { + const lowered = $.text.toLowerCase(); + if (lowered === "show-cards") { + await $.send( + "SpeedyCards make it easy to send rich, interactive cards to the user" + ); + const { value } = Bot.pickRandom(cardChoices); + const card = cardHash[value].addSubcard( + $.card() + .addLink( + "https://speedybot.js.org/docs/speedycard?card=${value}", + "See the source for this card" + ) + .addText("Pick a new card") + .addPickerDropdown(cardChoices, "showCard"), + "Learn more" + ); + await $.send(card); + return $.end; + } + } + return $.next; // pass through to rest of steps +}); + +// ## "files", show file capabilities (not upload file-- different idea-- but sending data to the user as a file) +Bot.addStep(async ($) => { + if ($.text && $.text.toLowerCase() === "files") { + await $.send( + `You can of course upload files but SpeedyBot also provides handy features to send data to the user as files` + ); + + // send a *.json file + const fileData = $.debug(); + await $.sendFile(fileData, "json"); + + // Send HTML w/ dynamic data + await $.sendFile( + makeHTML(`Here's your generated file, ${$.author.name}`, fileData), + "html" + ); + return $.end; + } else { + return $.next; + } +}); + +// ## "kitchensink", show everything +Bot.addStep(async ($) => { + $.author; + if ($.text && ["kitchen", "kitchensink"].includes($.text)) { + await $.clearScreen(); + await $.send(`## Kitchen Sink`); + + await $.thread([ + $.card({ + title: `This is a 'thread'`, + subTitle: "You can have many entries after the 1st", + chips: [ + { + title: "Go Again 🔄", + value: "kitchensink", + }, + ], + }) + .addText("Pick an entry from the list to preview a SpeedyCard") + .addPickerDropdown(cardChoices, "showCard"), + "thread item 1", + "thread item 2", + "thread item 3", + "thread item 4", + "thread item 5", + ]); + + await $.send(`-----------`); + await $.send($.buildDMLink("speedybot@webex.bot", "🤖 Talk to SpeedyBot")); + await $.send(`-----------`); + + await $.send(`## Files`); + + // Send data as a *.json file + await $.send(`Send data to user (here as *.json or *.html)`); + const fileData = $.debug(); + await $.sendFile(fileData, "json"); + await $.sendFile( + makeHTML(`Here's your generated file, ${$.author.name}`, fileData), + "html" + ); + return $.end; + } + return $.next; +}); + +// ## Main greeting +Bot.addStep(async ($) => { + if ($.text && !$.file) { + const utterances = [ + `Heya how's it going $[name]?`, + `Hi there, $[name]!`, + `Hiya $[name]!`, + `What's new $[name]?`, + `Helllooo $[name]!`, + ]; + const template = { + name: $.author.name, + }; + await $.send($.fillTemplate(utterances, template)); + + const randomImage = `https://raw.githubusercontent.com/valgaze/speedybot-utils/main/assets/memes/logo${$.pickRandom( + 1, + 33 + )}.jpeg`; + + const introCard = $.card() + .addHeader("🤖 SpeedyBot") + .addImage(randomImage, { + targetURL: "https://speedybot.js.org", + size: "ExtraLarge", + }) + .addChips([ + { title: "SpeedyCards 🌠", value: "show-cards" }, + { title: "ping 🏓", value: "ping" }, + { title: "🏓 pong", value: "pong" }, + { title: "🗂 files", value: "files" }, + { title: "🗂 Everything (warning: fast)", value: "kitchensink" }, + ]) + .addButton("🤖 random", "randomSpeedyBot") + .addSubcard( + $.card() + .addTitle("SpeedyCards") + .addText( + "**SpeedyCards** make it easy to build cards that deliver information in a visually attractive way or craft or cards with interactive forms that will let you capture structured data submitted from users" + ) + .addText("Pick a new card template") + .addPickerDropdown(cardChoices, "showCard"), + "See More " + ); + await $.send(introCard); + return $.next; + } + return $.next; +}); + +// ## Card utilities +// SpeedyCard form submissions, check for $.data, can add generics for type assurance + +// handle card picks from dropdown, attach preview, this can happen from multiple cards + locations +Bot.addStep>(async ($) => { + type CardKey = keyof typeof cardHash; + const isCardKey = (key: CardKey | undefined): key is CardKey => { + return key !== undefined && key in cardHash; + }; + + if ($.data && isCardKey($.data.showCard)) { + const card = cardHash[$.data.showCard].addSubcard( + $.card() + .addLink( + `https://speedybot.js.org/speedycard?card=${$.data.showCard}`, + "See the source for this card" + ) + .addText("Pick a new card") + .addPickerDropdown(cardChoices, "showCard"), + "Learn more" + ); + await $.send(card); + } + + return $.next; +}); + +// ## ex. pass data/flags between steps during runs +Bot.addStep(($) => { + $.ctx.isDev = true; // set to true on debug mode to trace incoming messages + return $.next; +}); + +// ## read flags +Bot.addStep(async ($) => { + // if ($.ctx.isDev) { + // await $.send($.buildDataSnippet($.debug())); + // } + return $.next; +}); + +// short-hand for exact match +Bot.exact("$clear", async ($) => { + await $.clearScreen(); + return $.end; +}); + +// ## Don't leave users hanging +Bot.captureError(async (payload) => { + const { roomId } = payload; + if (roomId) + await Bot.sendTo(roomId, `Whoops, there was a problem: ${payload.message}`); +}); +// export the Bot +export default Bot; + +// Bunch of cards +export const cardChoices = [ + { title: "Text Formatting 📄", value: "format-card" }, + { title: "Tabular Data 🐸", value: "table-card" }, + { title: "Survey 📝", value: "survey" }, + { title: "Acai 🍇", value: "acai" }, + { title: "Appcard 💳", value: "appcard" }, + { title: "Appcard RTL ⬅️", value: "appcard-rtl" }, + { title: "Red Danger 🔴", value: "red-danger" }, + { title: "Green Success ✅", value: "green-success" }, + { title: "Yellow Warning ⚠️", value: "yellow-warning" }, + { title: "Banner Yellow 🟡", value: "banner-yellow" }, + { title: "Confirm ✔️", value: "confirm" }, + { title: "Image 🖼️", value: "image" }, + { title: "Old Survey", value: "old-survey" }, +]; + +export const cardHash: { [key: string]: SpeedyCard } = { + survey: Bot.card().survey([ + { + type: "text", + question: "What is the name of your company?", + id: "company_name", + }, + { + type: "text", + question: "Describe the service performed by the vendor.", + id: "service_type", + }, + { + type: "picker-date", + question: "When was the service provided?", + id: "service_date", + }, + { + type: "single-select", + question: "How would you rate the quality of service?", + choices: ["Excellent", "Good", "Average", "Poor", "Very poor"], + id: "service_quality", + }, + { + type: "multi-select", + question: "What were the highlights of the service?", + choices: [ + "Communication", + "Punctuality", + "Time to Resolution", + "Friendliness", + "Cost", + ], + id: "service_highlights", + }, + { + type: "single-select", + question: "Would you consider using our services again in the future?", + choices: [ + "Definitely", + "Probably", + "Not sure", + "Probably not", + "Definitely not", + ], + id: "future_use", + }, + { + type: "textarea", + question: + "Please provide any other comments or suggestions for improvement.", + id: "other_comments", + }, + { + type: "picker-time", + question: "What time of day is preferable for future contact?", + id: "preferred_contact_time", + }, + { + type: "picker-dropdown", + question: "Preferred method of communication for future updates?", + choices: ["Email", "Phone", "Text"], + id: "communication_method", + }, + ]), + "format-card": Bot.card() + .addHeader("🌟 Formatted Card 🌟") + .addTitle("SpeedyCards can fit a lot of text + visual formatting") + .addText("You do lots of fun things with text", { size: "Large" }) + .addText("You can change colors", { size: "Large", color: "green" }) + .addText("...also mess with alignment + sizes", { + size: "Stretch", + color: "red", + align: "Right", + }) + .addText("Change background colors", { + size: "Medium", + color: "red", + backgroundColor: "blue", + }) + .addText("Change background + foreground", { + size: "Medium", + align: "Right", + color: "green", + backgroundColor: "yellow", + }) + .addText("Align in the middle", { + size: "Medium", + align: "Center", + backgroundColor: "red", + }) + .addText("More fun like other colors + images", { + size: "Large", + color: "red", + backgroundColor: "yellow", + }) + .addText( + "By the way, text blocks support simple markdown like **bolding**, *italics*, and even **[links](https://speedybot.js.org/new)**" + ) + .addImage( + "https://raw.githubusercontent.com/valgaze/speedybot-utils/main/assets/memes/logo4.jpeg", + { align: "Center" } + ), + appcard: Bot.appCard( + "Design News", + "https://raw.githubusercontent.com/valgaze/speedybot-mini/deploy/docs/assets/figma_logo.png" + ) + .addText( + "Tap the button to learn about new plugins + integration options", + { color: "red", backgroundColor: "blue" } + ) + .addLinkButton("https://www.figma.com/community/plugins", "🚀 Let's go"), + "appcard-rtl": Bot.appCard( + "ڈیزائن پر اپ ڈیٹ", + "https://raw.githubusercontent.com/valgaze/speedybot-mini/deploy/docs/assets/figma_logo.png", + { rtl: true } + ) + .addText( + "نئے پلگ ان + انضمام کے اختیارات کے بارے میں جاننے کے لیے بٹن کو تھپتھپائیں۔", + { color: "red", backgroundColor: "blue", align: "Right" } + ) + .addLinkButton("https://www.figma.com/community/plugins", "اورجانیے 🚀"), + acai: Bot.card() + .addTitle("AcaiTruck 🍇🚚 - The Bowl-istic Adventure Catering") + .addSubtitle("Customize Your Acai Bowl Experience!") + .addText( + "Welcome to our Acai Bowl Food Truck catering service. Let's make your event delicious!" + ) + .addPickerDropdown(["Select Bowl Size", "Mini", "Midi", "Grande"]) + .addPickerDropdown(["Number of People", "1-10", "11-25", "26-50", "50+"]) + .addTextInput("Anything else we should know?") + .addText("Choose toppings for the bar:") + .addMultiSelect([ + "Granola", + "Peanut Butter", + "Coconut", + "Goji Berries", + "Chia Seeds", + "Almonds", + "Cashews", + "Honey", + "Cacao Nibs", + "Strawberries", + "Blueberries", + "Almond Butter", + ]) + .addText("Additional Catering Essentials:") + .addMultiSelect([ + "Utensils", + "Napkins", + "To-Go Covers", + "Fruit Juice", + "Smoothie Bar", + "Event Staff", + "Custom Branding", + ]) + .addText("Any special requests or dietary preferences?") + .addTextarea("Special Requests or Dietary Preferences") + .setSubmitButtonTitle("Book AcaiTruck 🚀"), + "red-danger": Bot.card() + .addTitle("🚨 DANGER 🚨") + .addText("Attention, this is a very severe and important warning") + .setBackgroundImage( + "data:image/png;base64,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" + ), + "green-success": Bot.card() + .addTitle("🏆 You did it! 🏆") + .addText("Whatever you did, good at job at doing it") + .setBackgroundImage( + "data:image/png;base64,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" + ), + "yellow-warning": Bot.card() + .addTitle("⚠️ You're about to do it! ⚠️") + .addText("Whatever you're about to do, give it a think") + .setBackgroundImage( + "data:image/png;base64,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" + ), + "banner-yellow": Bot.card() + .addTitle("🏝️ SpeedyBot") + .setBackgroundImage( + "data:image/png;base64,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" + ), + confirm: Bot.card() + .addTitle("Do you want to proceed") + .addButton("❌ Cancel", "shouldProceed", { data: false }) + .addButton("✅ OK", "shouldProceed", { data: true }), + "table-card": Bot.card() + .addTitle( + "Ribbit! Check out the hop-tastic details below from FrogBot industries" + ) + .addTable([ + ["Frog Species", "Population"], + ["Green Tree Frog", "2,500"], + ["Red-eyed Tree Frog", "1,800"], + ["Poison Dart Frog", "700"], + ["Fire-bellied Toad", "1,200"], + ]) + .addLinkButton( + "http://allaboutfrogs.org/froglnd.shtml", + "🐸 Explore Frogs" + ), + image: Bot.card() + .addTitle("Images") + .addSubtitle("Cards can have images too") + .addText("Small") + .addImage( + "https://raw.githubusercontent.com/valgaze/speedybot-utils/main/assets/memes/logo4.jpeg", + { size: "Small" } + ) + .addText("Medium") + .addImage( + "https://raw.githubusercontent.com/valgaze/speedybot-utils/main/assets/memes/logo4.jpeg", + { size: "Medium" } + ) + .addText("Large") + .addImage( + "https://raw.githubusercontent.com/valgaze/speedybot-utils/main/assets/memes/logo4.jpeg", + { size: "Large" } + ) + .addText("ExtraLarge") + .addImage( + "https://raw.githubusercontent.com/valgaze/speedybot-utils/main/assets/memes/logo4.jpeg", + { size: "ExtraLarge" } + ) + .addText("Stretch") + .addImage( + "https://raw.githubusercontent.com/valgaze/speedybot-utils/main/assets/memes/logo4.jpeg", + { size: "Stretch" } + ) + .addText("TIP: Images can be links too", { color: "Attention" }) + .addImage( + "https://raw.githubusercontent.com/valgaze/speedybot-utils/main/assets/memes/logo4.jpeg", + { + targetURL: "https://speedybot.js.org", + size: "ExtraLarge", + } + ), + "old-survey": Bot.card() + .addTitle("Business Improvement Survey 📈") + .addSubtitle("Help Us Enhance Our Business Operations!") + .addText( + "Your insights are crucial for our continuous improvement. Please take a moment to complete this survey." + ) + .addText("1. Company Name:") + .addTextInput("Enter Your Company's Name") + .addText("2. Your Position/Role:") + .addTextInput("Enter Your Position/Role") + .addText("3. Please select your department:") + .addPickerDropdown( + ["Select Department"].concat([ + "Sales", + "Marketing", + "Customer Support", + "Finance", + "Product Development", + ]) + ) + .addText( + "4. On a scale of 1-5, how satisfied are you with our products/services? (1 being very dissatisfied, 5 being very satisfied)" + ) + .addSingleSelect([ + "1 (Very Dissatisfied)", + "2", + "3", + "4", + "5 (Very Satisfied)", + ]) + .addText( + "5. What aspects of our products/services do you appreciate the most?" + ) + .addTextarea( + "Please share what you appreciate the most about our offerings." + ) + .addText( + "6. Are there any specific areas where you believe we can improve?" + ) + .addTextarea( + "Please provide details on areas where we can enhance our products/services." + ) + .addText( + "7. How likely are you to recommend our company to others? (1 being highly unlikely, 5 being highly likely)" + ) + .addSingleSelect([ + "1 (Highly Unlikely)", + "2", + "3", + "4", + "5 (Highly Likely)", + ]) + .addText("8. Any additional comments or suggestions?") + .addTextarea( + "Feel free to share any additional comments or suggestions you may have." + ) + .setSubmitButtonTitle("Submit Survey"), +}; + +export const makeHTML = (prefix: string, trigger: any) => { + return ` + + + ${prefix} + + +
+ +
+
+
+${JSON.stringify(trigger, null, 2)}
+          
+ + `; +}; + +Bot.exact("$survey", async ($) => { + const companyNameQuestion: SurveyQuestion = { + type: "text", + question: "What is the name of your company?", + id: "company_name", + }; + + const serviceTypeQuestion: SurveyQuestion = { + type: "text", + question: "Describe the service performed by the vendor.", + id: "service_type", + }; + + const serviceDateQuestion: SurveyQuestion = { + type: "picker-date", + question: "When was the service provided?", + id: "service_date", + }; + + const serviceQualityQuestion: SurveyQuestion = { + type: "single-select", + question: "How would you rate the quality of service?", + choices: ["Excellent", "Good", "Average", "Poor", "Very poor"], + id: "service_quality", + }; + + const highlightsQuestion: SurveyQuestion = { + type: "multi-select", + question: "What were the highlights of the service?", + choices: [ + "Communication", + "Punctuality", + "Time to Resolution", + "Friendliness", + "Cost", + ], + id: "service_highlights", + }; + + const futureUseQuestion: SurveyQuestion = { + type: "single-select", + question: "Would you consider using our services again in the future?", + choices: [ + "Definitely", + "Probably", + "Not sure", + "Probably not", + "Definitely not", + ], + id: "future_use", + }; + + const otherCommentsQuestion: SurveyQuestion = { + type: "textarea", + question: + "Please provide any other comments or suggestions for improvement.", + id: "other_comments", + }; + + const preferredContactTimeQuestion: SurveyQuestion = { + type: "picker-time", + question: "What time of day is preferable for future contact?", + id: "preferred_contact_time", + }; + + const communicationMethodQuestion: SurveyQuestion = { + type: "picker-dropdown", + question: "Preferred method of communication for future updates?", + choices: ["Email", "Phone", "Text"], + id: "communication_method", + }; + + const surveyCard = $.card().survey([ + companyNameQuestion, + serviceTypeQuestion, + serviceDateQuestion, + serviceQualityQuestion, + highlightsQuestion, + futureUseQuestion, + otherCommentsQuestion, + preferredContactTimeQuestion, + communicationMethodQuestion, + ]); + + await $.send(surveyCard); + return $.end; +}); diff --git a/examples/lambda/packages/functions/src/validate_webhook.ts b/examples/lambda/packages/functions/src/validate_webhook.ts new file mode 100644 index 0000000..b96d91d --- /dev/null +++ b/examples/lambda/packages/functions/src/validate_webhook.ts @@ -0,0 +1,15 @@ +import crypto from "crypto"; +export const validateSignature = ( + signature: string, + secret: string, + requestBody: T +): boolean => { + const hmac = crypto.createHmac("sha1", secret); + if (typeof requestBody === "string") { + hmac.update(requestBody); + } else { + hmac.update(JSON.stringify(requestBody)); + } + const isValid = hmac.digest("hex") === signature; + return isValid; +}; diff --git a/examples/lambda/packages/functions/sst-env.d.ts b/examples/lambda/packages/functions/sst-env.d.ts new file mode 100644 index 0000000..a9187e8 --- /dev/null +++ b/examples/lambda/packages/functions/sst-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/examples/lambda/packages/functions/tsconfig.json b/examples/lambda/packages/functions/tsconfig.json new file mode 100644 index 0000000..82e917d --- /dev/null +++ b/examples/lambda/packages/functions/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "@tsconfig/node16/tsconfig.json", + "compilerOptions": { + "module": "esnext", + "moduleResolution": "node", + "baseUrl": ".", + "paths": { + "@my-sst-app/core/*": ["../core/src/*"] + } + } +} diff --git a/examples/lambda/pnpm-workspace.yaml b/examples/lambda/pnpm-workspace.yaml new file mode 100644 index 0000000..a4e134d --- /dev/null +++ b/examples/lambda/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +packages: + - "packages/**/*" diff --git a/examples/lambda/sst.config.ts b/examples/lambda/sst.config.ts new file mode 100644 index 0000000..c0589c8 --- /dev/null +++ b/examples/lambda/sst.config.ts @@ -0,0 +1,14 @@ +import { SSTConfig } from "sst"; +import { API } from "./stacks/MyStack"; + +export default { + config(_input) { + return { + name: "lambda", + region: "us-east-1", + }; + }, + stacks(app) { + app.stack(API); + } +} satisfies SSTConfig; diff --git a/examples/lambda/stacks/MyStack.ts b/examples/lambda/stacks/MyStack.ts new file mode 100644 index 0000000..fb1b6a3 --- /dev/null +++ b/examples/lambda/stacks/MyStack.ts @@ -0,0 +1,23 @@ +import { StackContext, Api } from "sst/constructs"; + +export function API({ stack }: StackContext) { + const api = new Api(stack, "api", { + defaults: { + function: { + runtime: "nodejs18.x", + timeout: 20, + environment: { + WEBHOOK_SECRET: process.env.WEBHOOK_SECRET as string, + BOT_TOKEN: process.env.BOT_TOKEN as string, // bot token, make one here: https://developer.webex.com/my-apps/new + }, + }, + }, + routes: { + "POST /speedybot": "packages/functions/src/lambda.handler", + }, + }); + + stack.addOutputs({ + ApiEndpoint: api.url, + }); +} diff --git a/examples/lambda/stacks/index.ts b/examples/lambda/stacks/index.ts new file mode 100644 index 0000000..e6cf337 --- /dev/null +++ b/examples/lambda/stacks/index.ts @@ -0,0 +1,9 @@ +import { API } from "./MyStack"; +import { App } from "sst/constructs"; + +export default function (app: App) { + // app.setDefaultFunctionProps({ + // runtime: "nodejs18.x", + // }); + app.stack(API); +} diff --git a/examples/lambda/tsconfig.json b/examples/lambda/tsconfig.json new file mode 100644 index 0000000..d7374a6 --- /dev/null +++ b/examples/lambda/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "@tsconfig/node16/tsconfig.json", + "exclude": ["packages"], + "compilerOptions": { + "moduleResolution": "node" + } +} diff --git a/examples/llm-stream/.env.example b/examples/llm-stream/.env.example new file mode 100644 index 0000000..c280ff4 --- /dev/null +++ b/examples/llm-stream/.env.example @@ -0,0 +1,2 @@ +OPEN_AI_KEY=__REPLACE__ME__ +BOT_TOKEN=__REPLACE__ME__ \ No newline at end of file diff --git a/examples/llm-stream/README.md b/examples/llm-stream/README.md new file mode 100644 index 0000000..8ed9423 --- /dev/null +++ b/examples/llm-stream/README.md @@ -0,0 +1,66 @@ +## LLM-Stream + +This was the major inspiration for SpeedyBot 2.0-- how to efficiently allocate the edits to "stream in" responses from an LLM eendpoint. + +- You can make up to 10 edits on a WebEx message which can approximate the "stream-in" effect on some LLM applications (otherwise the latency involved with forcing a "just wait-it-out" for a generation is an awful experience) + +- With unknown chunk-length & an unknown number of chunks, we need a reasonable way to "smoothly" stream in edits so the user isn't left hanging but also not use up our precious 10 edits + +- Streaming is implemented using: https://github.com/axflow/axflow (from https://axflow.dev), although **[vercel](https://sdk.vercel.ai/docs/concepts/streaming)** and others have libraries that could work + +- This is a bare-bones example which can be easily extended-- To see a reference (which depends a storage/state mechanism) which will manage conversational context + swap personas, handle file-uploads (.doc, xlsx files, and other) and inject into prompt, see here: https://github.com/valgaze/speedybot-gpt4 + +Example Stream: + + + +## Setup + +## 1) Clone repo & install dependencies + +``` +git clone https://github.com/valgaze/speedybot +cd examples/llm-steam +npm install +``` + +## 2) Set your bot access token + +- Make a new bot and note its access token from here: **[https://developer.webex.com/my-apps/new/bot](https://developer.webex.com/my-apps/new/bot)** + +You can set your `BOT_TOKEN` by running this script in the project directory: + +`npm run bot:setup ` + +
Set token by hand + +Copy the file **[.env.example](.env.example)** as `.env` in the root of your project and save your access token under the `BOT_TOKEN` field, ex + +``` +BOT_TOKEN=__REPLACE__ME__ +``` + +
+ +## 3) Set your OpenAI api Key + +- Grab an OpenAI API key from here: https://platform.openai.com/api-keys + +Add it to your .env file manually or by running the following command: + +``` +npm run bot:addsecret OPEN_AI_KEY=sk-abcdefhg73624429defghijkl5 +``` + +Your .env file should look like this: + +``` +OPEN_AI_KEY=__REPLACE__ME__ +BOT_TOKEN=__REPLACE__ME__ +``` + +## Boot it up + +Greet your agent and attempt a generation + +Note: this example happens to use OpenAI, but you can swap-in HuggingFace, **[Anthropic](https://docs.axflow.dev/documentation/models/anthropic-completion.html)** or **[roll your own](https://docs.axflow.dev/guides/models/bring-your-own-models.html)** diff --git a/examples/llm-stream/index.ts b/examples/llm-stream/index.ts new file mode 100644 index 0000000..809785d --- /dev/null +++ b/examples/llm-stream/index.ts @@ -0,0 +1,68 @@ +import { OpenAIChat } from "@axflow/models/openai/chat"; +import { StreamToIterable } from "@axflow/models/shared"; +import { SpeedyBot } from "../../src/index"; +const Bot = new SpeedyBot(process.env.BOT_TOKEN); +const apiKey = process.env.OPEN_AI_KEY; +type Chunk = any; +const stream = await OpenAIChat.stream( + { + model: "gpt-4", + messages: [ + { + role: "user", + content: "explain how llms (large language models) work", + }, + ], + }, + + { apiKey: apiKey } +); + +class ChatResponseEditor { + private editsDone: number = 0; + private maxEdits = 8; + private minWords = 5; + private _subCharBuffer = ""; + private charBuffer = ""; + private isFinished = false; + + constructor(config?: { maxEdits?: number; minWords?: number }) { + this.maxEdits = config?.maxEdits ?? 8; + this.minWords = config?.minWords ?? 5; + } + + public incomingChunkHandler = ( + chunk: Chunk, + callback: (chunk: string, isFinished?: boolean) => void + ) => { + const content = chunk.choices[0]?.delta?.content || ""; + this.charBuffer += content; + this._subCharBuffer += content; + if (!this.isFinished) { + this.isFinished = chunk.choices[0]?.finish_reason === "stop"; + } + + const numWords = this._subCharBuffer.split(" ").length; + if ( + this.isFinished || + (this.editsDone < this.maxEdits && + content.length && + numWords >= this.minWords) + ) { + callback(this.charBuffer, this.isFinished); + this.editsDone++; + this._subCharBuffer = ""; + } + }; +} +const chatEditor = new ChatResponseEditor({ minWords: 15 }); + +const rootMsg = await Bot.sendTo("valgaze@cisco.com", "Thinking..."); +for await (const chunk of StreamToIterable(stream)) { + chatEditor.incomingChunkHandler(chunk, async (currentChunk, finalString) => { + await Bot.editMessage(rootMsg.roomId, rootMsg.id, currentChunk); + if (finalString) { + await Bot.editMessage(rootMsg.roomId, rootMsg.id, currentChunk); + } + }); +} diff --git a/examples/llm-stream/package-lock.json b/examples/llm-stream/package-lock.json new file mode 100644 index 0000000..66caacb --- /dev/null +++ b/examples/llm-stream/package-lock.json @@ -0,0 +1,17746 @@ +{ + "name": "llm-stream", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "llm-stream", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@axflow/models": "^0.0.25", + "speedybot": "^2.0.0-beta.72" + }, + "devDependencies": { + "@babel/runtime-corejs2": "^7.20.1", + "@types/express": "^4.17.21", + "@types/node": "^16.18.3", + "cross-fetch": "^3.1.5", + "dotenv": "^16.0.3", + "tsx": "^4.7.0", + "typescript": "^3.8.3", + "webex": "^2.31.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@axflow/models": { + "version": "0.0.25", + "resolved": "https://registry.npmjs.org/@axflow/models/-/models-0.0.25.tgz", + "integrity": "sha512-EYv+g7dtXBmrNmX4Ktz6ajwKok+D2N8u34G6j4AzAbnVuiVurNSbhhpv+ZDjyhj0quKA2e76jN4T1GS5hfEh2Q==", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "react": "^18.2.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + } + } + }, + "node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/highlight": "^7.10.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==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@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", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/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==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/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, + "optional": true, + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/core/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, + "optional": true, + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/core/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, + "optional": true, + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/core/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, + "optional": true, + "peer": true + }, + "node_modules/@babel/core/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, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/core/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, + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/core/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, + "optional": true, + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/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, + "optional": true, + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.9.tgz", + "integrity": "sha512-B2L9neXTIyPQoXDm+NtovPvG6VOLWnaXu3BIeVDWwdKFgG30oNa6CqVGiJPDWQwIAK49t9gnQI9c6K6RzabiKw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "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", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "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==", + "dev": true, + "optional": 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" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.22.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==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.22.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==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz", + "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9" + }, + "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==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@babel/highlight/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, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", + "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", + "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz", + "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead.", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.9.tgz", + "integrity": "sha512-hJhBCb0+NnTWybvWq2WpbCYDOcflSbx0t+BYP65e5R9GVnukiDTi+on5bFkk4p7QGuv190H6KfNiV9Knf/3cZA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.23.9", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-decorators": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-default-from": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.23.3.tgz", + "integrity": "sha512-Q23MpLZfSGZL1kU7fWqV262q65svLSCIP5kZ/JCW/rKTCm/FrLjpvEd2kfUYMVeHh4QhV/xzyoRAHWrAZJrE3Q==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-default-from": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead.", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.23.3.tgz", + "integrity": "sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-default-from": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.23.3.tgz", + "integrity": "sha512-KeENO5ck1IeZ/l2lFZNy+mpobV3D2Zy5C1YFnWm+YuY5mQiAWc4yAp13dqgguwsBsFVLh4LPCEqCa5qW13N+hw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.23.3.tgz", + "integrity": "sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", + "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", + "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-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==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", + "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz", + "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", + "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", + "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", + "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", + "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", + "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", + "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", + "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", + "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", + "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", + "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", + "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", + "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", + "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.23.3.tgz", + "integrity": "sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-flow": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", + "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", + "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", + "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", + "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", + "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", + "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", + "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", + "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz", + "integrity": "sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", + "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", + "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", + "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", + "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", + "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/compat-data": "^7.23.3", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", + "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", + "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", + "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", + "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", + "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", + "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", + "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz", + "integrity": "sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", + "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/types": "^7.23.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", + "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz", + "integrity": "sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.23.3.tgz", + "integrity": "sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz", + "integrity": "sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", + "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", + "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.9.tgz", + "integrity": "sha512-A7clW3a0aSjm3ONU9o2HAILSegJCYlEZmOhmBRReVtIpY/Z/p7yIZ+wR41Z+UipwdGuqwtID/V/dOdZXjwi9gQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.8", + "babel-plugin-polyfill-corejs3": "^0.9.0", + "babel-plugin-polyfill-regenerator": "^0.5.5", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", + "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", + "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", + "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", + "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", + "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz", + "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.23.6", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", + "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", + "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", + "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", + "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/polyfill": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz", + "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==", + "deprecated": "🚨 This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information.", + "dev": true, + "dependencies": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.4" + } + }, + "node_modules/@babel/polyfill/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "node_modules/@babel/preset-env": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.9.tgz", + "integrity": "sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.23.3", + "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.23.3", + "@babel/plugin-transform-async-generator-functions": "^7.23.9", + "@babel/plugin-transform-async-to-generator": "^7.23.3", + "@babel/plugin-transform-block-scoped-functions": "^7.23.3", + "@babel/plugin-transform-block-scoping": "^7.23.4", + "@babel/plugin-transform-class-properties": "^7.23.3", + "@babel/plugin-transform-class-static-block": "^7.23.4", + "@babel/plugin-transform-classes": "^7.23.8", + "@babel/plugin-transform-computed-properties": "^7.23.3", + "@babel/plugin-transform-destructuring": "^7.23.3", + "@babel/plugin-transform-dotall-regex": "^7.23.3", + "@babel/plugin-transform-duplicate-keys": "^7.23.3", + "@babel/plugin-transform-dynamic-import": "^7.23.4", + "@babel/plugin-transform-exponentiation-operator": "^7.23.3", + "@babel/plugin-transform-export-namespace-from": "^7.23.4", + "@babel/plugin-transform-for-of": "^7.23.6", + "@babel/plugin-transform-function-name": "^7.23.3", + "@babel/plugin-transform-json-strings": "^7.23.4", + "@babel/plugin-transform-literals": "^7.23.3", + "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", + "@babel/plugin-transform-member-expression-literals": "^7.23.3", + "@babel/plugin-transform-modules-amd": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-modules-systemjs": "^7.23.9", + "@babel/plugin-transform-modules-umd": "^7.23.3", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.23.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", + "@babel/plugin-transform-numeric-separator": "^7.23.4", + "@babel/plugin-transform-object-rest-spread": "^7.23.4", + "@babel/plugin-transform-object-super": "^7.23.3", + "@babel/plugin-transform-optional-catch-binding": "^7.23.4", + "@babel/plugin-transform-optional-chaining": "^7.23.4", + "@babel/plugin-transform-parameters": "^7.23.3", + "@babel/plugin-transform-private-methods": "^7.23.3", + "@babel/plugin-transform-private-property-in-object": "^7.23.4", + "@babel/plugin-transform-property-literals": "^7.23.3", + "@babel/plugin-transform-regenerator": "^7.23.3", + "@babel/plugin-transform-reserved-words": "^7.23.3", + "@babel/plugin-transform-shorthand-properties": "^7.23.3", + "@babel/plugin-transform-spread": "^7.23.3", + "@babel/plugin-transform-sticky-regex": "^7.23.3", + "@babel/plugin-transform-template-literals": "^7.23.3", + "@babel/plugin-transform-typeof-symbol": "^7.23.3", + "@babel/plugin-transform-unicode-escapes": "^7.23.3", + "@babel/plugin-transform-unicode-property-regex": "^7.23.3", + "@babel/plugin-transform-unicode-regex": "^7.23.3", + "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.8", + "babel-plugin-polyfill-corejs3": "^0.9.0", + "babel-plugin-polyfill-regenerator": "^0.5.5", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-flow": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.23.3.tgz", + "integrity": "sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-transform-flow-strip-types": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.23.3.tgz", + "integrity": "sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-transform-react-display-name": "^7.23.3", + "@babel/plugin-transform-react-jsx": "^7.22.15", + "@babel/plugin-transform-react-jsx-development": "^7.22.5", + "@babel/plugin-transform-react-pure-annotations": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz", + "integrity": "sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-typescript": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.23.7.tgz", + "integrity": "sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.6", + "source-map-support": "^0.5.16" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true, + "optional": true, + "peer": true + }, + "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, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs2": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.23.9.tgz", + "integrity": "sha512-lwwDy5QfMkO2rmSz9AvLj6j2kWt5a4ulMi1t21vWQEO0kNCFslHoszat8reU/uigIQSUDF31zraZG/qMkcqAlw==", + "dev": true, + "dependencies": { + "core-js": "^2.6.12", + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template/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==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template/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, + "optional": true, + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/template/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, + "optional": true, + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/template/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, + "optional": true, + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/template/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, + "optional": true, + "peer": true + }, + "node_modules/@babel/template/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, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/template/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, + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/template/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, + "optional": true, + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@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", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/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==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/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, + "optional": true, + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/traverse/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, + "optional": true, + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/traverse/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, + "optional": true, + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/traverse/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, + "optional": true, + "peer": true + }, + "node_modules/@babel/traverse/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, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/traverse/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, + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/traverse/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, + "optional": true, + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@ciscospark/test-users-legacy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ciscospark/test-users-legacy/-/test-users-legacy-1.2.0.tgz", + "integrity": "sha512-WEAe6ntEZOk3TPzk7BGyattgh9OZnKPYNb9idfZnI3Dkb9iO3zUB3AlCqrAMp1I6dQ5+RTkgTuSGdgWP4Toluw==", + "dev": true, + "optional": true, + "dependencies": { + "btoa": "^1.1.2", + "lodash": "^4.17.4", + "node-random-name": "^1.0.1", + "request": "^2.81.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@expo/bunyan": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.0.tgz", + "integrity": "sha512-Ydf4LidRB/EBI+YrB+cVLqIseiRfjUI/AeHBgjGMtq3GroraDu81OV7zqophRgupngoL3iS3JUMDMnxO7g39qA==", + "dev": true, + "engines": [ + "node >=0.10.0" + ], + "optional": true, + "peer": true, + "dependencies": { + "uuid": "^8.0.0" + }, + "optionalDependencies": { + "mv": "~2", + "safe-json-stringify": "~1" + } + }, + "node_modules/@expo/bunyan/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@expo/cli": { + "version": "0.17.3", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.17.3.tgz", + "integrity": "sha512-lIK8igsEQxTh4WuDlcEhE0wAJcDrAyjWDF00phdmwuSCpE5SaEXNlddOXvGxEVKPhUxHZUFo9NbfoQC+JVmkfA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/runtime": "^7.20.0", + "@expo/code-signing-certificates": "0.0.5", + "@expo/config": "~8.5.0", + "@expo/config-plugins": "~7.8.0", + "@expo/devcert": "^1.0.0", + "@expo/env": "~0.2.0", + "@expo/image-utils": "^0.4.0", + "@expo/json-file": "^8.2.37", + "@expo/metro-config": "~0.17.0", + "@expo/osascript": "^2.0.31", + "@expo/package-manager": "^1.1.1", + "@expo/plist": "^0.1.0", + "@expo/prebuild-config": "6.7.4", + "@expo/rudder-sdk-node": "1.1.1", + "@expo/spawn-async": "1.5.0", + "@expo/xcpretty": "^4.3.0", + "@react-native/dev-middleware": "^0.73.6", + "@urql/core": "2.3.6", + "@urql/exchange-retry": "0.3.0", + "accepts": "^1.3.8", + "arg": "5.0.2", + "better-opn": "~3.0.2", + "bplist-parser": "^0.3.1", + "cacache": "^15.3.0", + "chalk": "^4.0.0", + "ci-info": "^3.3.0", + "connect": "^3.7.0", + "debug": "^4.3.4", + "env-editor": "^0.4.1", + "find-yarn-workspace-root": "~2.0.0", + "form-data": "^3.0.1", + "freeport-async": "2.0.0", + "fs-extra": "~8.1.0", + "getenv": "^1.0.0", + "glob": "^7.1.7", + "graphql": "15.8.0", + "graphql-tag": "^2.10.1", + "https-proxy-agent": "^5.0.1", + "internal-ip": "4.3.0", + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1", + "js-yaml": "^3.13.1", + "json-schema-deref-sync": "^0.13.0", + "lodash.debounce": "^4.0.8", + "md5hex": "^1.0.0", + "minimatch": "^3.0.4", + "minipass": "3.3.6", + "node-fetch": "^2.6.7", + "node-forge": "^1.3.1", + "npm-package-arg": "^7.0.0", + "open": "^8.3.0", + "ora": "3.4.0", + "picomatch": "^3.0.1", + "pretty-bytes": "5.6.0", + "progress": "2.0.3", + "prompts": "^2.3.2", + "qrcode-terminal": "0.11.0", + "require-from-string": "^2.0.2", + "requireg": "^0.2.2", + "resolve": "^1.22.2", + "resolve-from": "^5.0.0", + "resolve.exports": "^2.0.2", + "semver": "^7.5.3", + "send": "^0.18.0", + "slugify": "^1.3.4", + "source-map-support": "~0.5.21", + "structured-headers": "^0.4.1", + "tar": "^6.0.5", + "temp-dir": "^2.0.0", + "tempy": "^0.7.1", + "terminal-link": "^2.1.1", + "text-table": "^0.2.0", + "url-join": "4.0.0", + "wrap-ansi": "^7.0.0", + "ws": "^8.12.1" + }, + "bin": { + "expo-internal": "build/bin/cli" + } + }, + "node_modules/@expo/cli/node_modules/@expo/prebuild-config": { + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-6.7.4.tgz", + "integrity": "sha512-x8EUdCa8DTMZ/dtEXjHAdlP+ljf6oSeSKNzhycXiHhpMSMG9jEhV28ocCwc6cKsjK5GziweEiHwvrj6+vsBlhA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@expo/config": "~8.5.0", + "@expo/config-plugins": "~7.8.0", + "@expo/config-types": "^50.0.0-alpha.1", + "@expo/image-utils": "^0.4.0", + "@expo/json-file": "^8.2.37", + "debug": "^4.3.1", + "fs-extra": "^9.0.0", + "resolve-from": "^5.0.0", + "semver": "7.5.3", + "xml2js": "0.6.0" + }, + "peerDependencies": { + "expo-modules-autolinking": ">=0.8.1" + } + }, + "node_modules/@expo/cli/node_modules/@expo/prebuild-config/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/cli/node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@expo/cli/node_modules/expo-modules-autolinking": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-1.10.2.tgz", + "integrity": "sha512-OEeoz0+zGx5EJwGtDm9pSywCr+gUCaisZV0mNkK7V3fuRl+EVPBSsI+957JwAc4ZxVps95jy28eLcRRtQ33yVg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@expo/config": "~8.5.0", + "chalk": "^4.1.0", + "commander": "^7.2.0", + "fast-glob": "^3.2.5", + "find-up": "^5.0.0", + "fs-extra": "^9.1.0" + }, + "bin": { + "expo-modules-autolinking": "bin/expo-modules-autolinking.js" + } + }, + "node_modules/@expo/cli/node_modules/expo-modules-autolinking/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/cli/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@expo/cli/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, + "optional": true, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/cli/node_modules/picomatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", + "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@expo/cli/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/cli/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@expo/cli/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, + "optional": true, + "peer": true + }, + "node_modules/@expo/code-signing-certificates": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz", + "integrity": "sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "node-forge": "^1.2.1", + "nullthrows": "^1.1.1" + } + }, + "node_modules/@expo/config": { + "version": "8.5.4", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-8.5.4.tgz", + "integrity": "sha512-ggOLJPHGzJSJHVBC1LzwXwR6qUn8Mw7hkc5zEKRIdhFRuIQ6s2FE4eOvP87LrNfDF7eZGa6tJQYsiHSmZKG+8Q==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "~7.10.4", + "@expo/config-plugins": "~7.8.2", + "@expo/config-types": "^50.0.0", + "@expo/json-file": "^8.2.37", + "getenv": "^1.0.0", + "glob": "7.1.6", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0", + "semver": "7.5.3", + "slugify": "^1.3.4", + "sucrase": "3.34.0" + } + }, + "node_modules/@expo/config-plugins": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-7.8.4.tgz", + "integrity": "sha512-hv03HYxb/5kX8Gxv/BTI8TLc9L06WzqAfHRRXdbar4zkLcP2oTzvsLEF4/L/TIpD3rsnYa0KU42d0gWRxzPCJg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@expo/config-types": "^50.0.0-alpha.1", + "@expo/fingerprint": "^0.6.0", + "@expo/json-file": "~8.3.0", + "@expo/plist": "^0.1.0", + "@expo/sdk-runtime-versions": "^1.0.0", + "@react-native/normalize-color": "^2.0.0", + "chalk": "^4.1.2", + "debug": "^4.3.1", + "find-up": "~5.0.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "resolve-from": "^5.0.0", + "semver": "^7.5.3", + "slash": "^3.0.0", + "slugify": "^1.6.6", + "xcode": "^3.0.1", + "xml2js": "0.6.0" + } + }, + "node_modules/@expo/config-plugins/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "optional": 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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@expo/config-types": { + "version": "50.0.0", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-50.0.0.tgz", + "integrity": "sha512-0kkhIwXRT6EdFDwn+zTg9R2MZIAEYGn1MVkyRohAd+C9cXOb5RA8WLQi7vuxKF9m1SMtNAUrf0pO+ENK0+/KSw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@expo/config/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "optional": 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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@expo/config/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, + "optional": true, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/config/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/config/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, + "optional": true, + "peer": true + }, + "node_modules/@expo/devcert": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.1.0.tgz", + "integrity": "sha512-ghUVhNJQOCTdQckSGTHctNp/0jzvVoMMkVh+6SHn+TZj8sU15U/npXIDt8NtQp0HedlPaCgkVdMu8Sacne0aEA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "application-config-path": "^0.1.0", + "command-exists": "^1.2.4", + "debug": "^3.1.0", + "eol": "^0.9.1", + "get-port": "^3.2.0", + "glob": "^7.1.2", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "password-prompt": "^1.0.4", + "rimraf": "^2.6.2", + "sudo-prompt": "^8.2.0", + "tmp": "^0.0.33", + "tslib": "^2.4.0" + } + }, + "node_modules/@expo/devcert/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@expo/devcert/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/@expo/env": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.2.1.tgz", + "integrity": "sha512-deZmRS7Dvp18VM8s559dq/ZjPlV1D9vtLoLXwHmCK/JYOvtNptdKsfxcWjI7ewmo6ln2PqgNI9HRI74q6Wk2eA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "chalk": "^4.0.0", + "debug": "^4.3.4", + "dotenv": "~16.0.3", + "dotenv-expand": "~10.0.0", + "getenv": "^1.0.0" + } + }, + "node_modules/@expo/env/node_modules/dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@expo/fingerprint": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.6.0.tgz", + "integrity": "sha512-KfpoVRTMwMNJ/Cf5o+Ou8M/Y0EGSTqK+rbi70M2Y0K2qgWNfMJ1gm6sYO9uc8lcTr7YSYM1Rme3dk7QXhpScNA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@expo/spawn-async": "^1.5.0", + "chalk": "^4.1.2", + "debug": "^4.3.4", + "find-up": "^5.0.0", + "minimatch": "^3.0.4", + "p-limit": "^3.1.0", + "resolve-from": "^5.0.0" + }, + "bin": { + "fingerprint": "bin/cli.js" + } + }, + "node_modules/@expo/image-utils": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.4.1.tgz", + "integrity": "sha512-EZb+VHSmw+a5s2hS9qksTcWylY0FDaIAVufcxoaRS9tHIXLjW5zcKW7Rhj9dSEbZbRVy9yXXdHKa3GQdUQIOFw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@expo/spawn-async": "1.5.0", + "chalk": "^4.0.0", + "fs-extra": "9.0.0", + "getenv": "^1.0.0", + "jimp-compact": "0.16.1", + "node-fetch": "^2.6.0", + "parse-png": "^2.1.0", + "resolve-from": "^5.0.0", + "semver": "7.3.2", + "tempy": "0.3.0" + } + }, + "node_modules/@expo/image-utils/node_modules/crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@expo/image-utils/node_modules/fs-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/image-utils/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@expo/image-utils/node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@expo/image-utils/node_modules/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/image-utils/node_modules/temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@expo/image-utils/node_modules/tempy": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", + "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "temp-dir": "^1.0.0", + "type-fest": "^0.3.1", + "unique-string": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/image-utils/node_modules/type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@expo/image-utils/node_modules/unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "crypto-random-string": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@expo/image-utils/node_modules/universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@expo/json-file": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.0.tgz", + "integrity": "sha512-yROUeXJXR5goagB8c3muFLCzLmdGOvoPpR5yDNaXrnTp4euNykr9yW0wWhJx4YVRTNOPtGBnEbbJBW+a9q+S6g==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "~7.10.4", + "json5": "^2.2.2", + "write-file-atomic": "^2.3.0" + } + }, + "node_modules/@expo/metro-config": { + "version": "0.17.3", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.17.3.tgz", + "integrity": "sha512-YW8ixbaz6yL7/Mg1rJJejiAAVQQKjGY1wXvT2Dh487r/r9/j1yE1YRS/oRY1yItYzbnHvO0p0jMnEGfiFYL3Tg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/generator": "^7.20.5", + "@babel/parser": "^7.20.0", + "@babel/types": "^7.20.0", + "@expo/config": "~8.5.0", + "@expo/env": "~0.2.0", + "@expo/json-file": "~8.3.0", + "@expo/spawn-async": "^1.7.2", + "babel-preset-fbjs": "^3.4.0", + "chalk": "^4.1.0", + "debug": "^4.3.2", + "find-yarn-workspace-root": "~2.0.0", + "fs-extra": "^9.1.0", + "getenv": "^1.0.0", + "glob": "^7.2.3", + "jsc-safe-url": "^0.2.4", + "lightningcss": "~1.19.0", + "postcss": "~8.4.32", + "resolve-from": "^5.0.0", + "sucrase": "3.34.0" + }, + "peerDependencies": { + "@react-native/babel-preset": "*" + } + }, + "node_modules/@expo/metro-config/node_modules/@expo/spawn-async": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.7.2.tgz", + "integrity": "sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "cross-spawn": "^7.0.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@expo/metro-config/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@expo/metro-config/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/metro-config/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@expo/metro-config/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/metro-config/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@expo/metro-config/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@expo/osascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.1.0.tgz", + "integrity": "sha512-bOhuFnlRaS7CU33+rFFIWdcET/Vkyn1vsN8BYFwCDEF5P1fVVvYN7bFOsQLTMD3nvi35C1AGmtqUr/Wfv8Xaow==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@expo/spawn-async": "^1.5.0", + "exec-async": "^2.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@expo/package-manager": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.4.2.tgz", + "integrity": "sha512-LKdo/6y4W7llZ6ghsg1kdx2CeH/qR/c6QI/JI8oPUvppsZoeIYjSkdflce978fAMfR8IXoi0wt0jA2w0kWpwbg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@expo/json-file": "^8.2.37", + "@expo/spawn-async": "^1.5.0", + "ansi-regex": "^5.0.0", + "chalk": "^4.0.0", + "find-up": "^5.0.0", + "find-yarn-workspace-root": "~2.0.0", + "js-yaml": "^3.13.1", + "micromatch": "^4.0.2", + "npm-package-arg": "^7.0.0", + "ora": "^3.4.0", + "split": "^1.0.1", + "sudo-prompt": "9.1.1" + } + }, + "node_modules/@expo/package-manager/node_modules/sudo-prompt": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.1.1.tgz", + "integrity": "sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@expo/plist": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.1.0.tgz", + "integrity": "sha512-xWD+8vIFif0wKyuqe3fmnmnSouXYucciZXFzS0ZD5OV9eSAS1RGQI5FaGGJ6zxJ4mpdy/4QzbLdBjnYE5vxA0g==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@xmldom/xmldom": "~0.7.7", + "base64-js": "^1.2.3", + "xmlbuilder": "^14.0.0" + } + }, + "node_modules/@expo/rudder-sdk-node": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@expo/rudder-sdk-node/-/rudder-sdk-node-1.1.1.tgz", + "integrity": "sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@expo/bunyan": "^4.0.0", + "@segment/loosely-validate-event": "^2.0.0", + "fetch-retry": "^4.1.1", + "md5": "^2.2.1", + "node-fetch": "^2.6.1", + "remove-trailing-slash": "^0.1.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@expo/rudder-sdk-node/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@expo/sdk-runtime-versions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz", + "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@expo/spawn-async": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.5.0.tgz", + "integrity": "sha512-LB7jWkqrHo+5fJHNrLAFdimuSXQ2MQ4lA7SQW5bf/HbsXuV2VrT/jN/M8f/KoWt0uJMGN4k/j7Opx4AvOOxSew==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "cross-spawn": "^6.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@expo/spawn-async/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, + "optional": 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/@expo/spawn-async/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, + "optional": true, + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@expo/spawn-async/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==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@expo/spawn-async/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, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@expo/vector-icons": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-14.0.0.tgz", + "integrity": "sha512-5orm59pdnBQlovhU9k4DbjMUZBHNlku7IRgFY56f7pcaaCnXq9yaLJoOQl9sMwNdFzf4gnkTyHmR5uN10mI9rA==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@expo/xcpretty": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.3.1.tgz", + "integrity": "sha512-sqXgo1SCv+j4VtYEwl/bukuOIBrVgx6euIoCat3Iyx5oeoXwEA2USCoeL0IPubflMxncA2INkqJ/Wr3NGrSgzw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "7.10.4", + "chalk": "^4.1.0", + "find-up": "^5.0.0", + "js-yaml": "^4.1.0" + }, + "bin": { + "excpretty": "build/cli.js" + } + }, + "node_modules/@expo/xcpretty/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@expo/xcpretty/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "dev": true, + "optional": true, + "peer": true, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@isaacs/ttlcache": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz", + "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jest/create-cache-key-function": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz", + "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "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, + "optional": true, + "peer": 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, + "optional": true, + "peer": 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, + "optional": true, + "peer": 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, + "optional": true, + "peer": 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, + "optional": true, + "peer": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "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, + "optional": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "optional": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@peculiar/asn1-schema": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.3.8.tgz", + "integrity": "sha512-ULB1XqHKx1WBU/tTFIA+uARuRoBVZ4pNdOA878RDrRbBfBGcSzi5HBkdScC6ZbHn8z7L8gmKCgPC1LHRrP46tA==", + "dev": true, + "dependencies": { + "asn1js": "^3.0.5", + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2" + } + }, + "node_modules/@peculiar/asn1-schema/node_modules/asn1js": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.5.tgz", + "integrity": "sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==", + "dev": true, + "dependencies": { + "pvtsutils": "^1.3.2", + "pvutils": "^1.1.3", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@peculiar/json-schema": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", + "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", + "dev": true, + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@peculiar/webcrypto": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.4.5.tgz", + "integrity": "sha512-oDk93QCDGdxFRM8382Zdminzs44dg3M2+E5Np+JWkpqLDyJC9DviMh8F8mEJkYuUcUOGA5jHO5AJJ10MFWdbZw==", + "dev": true, + "dependencies": { + "@peculiar/asn1-schema": "^2.3.8", + "@peculiar/json-schema": "^1.1.12", + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2", + "webcrypto-core": "^1.7.8" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/@react-native-community/cli": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-12.3.0.tgz", + "integrity": "sha512-XeQohi2E+S2+MMSz97QcEZ/bWpi8sfKiQg35XuYeJkc32Til2g0b97jRpn0/+fV0BInHoG1CQYWwHA7opMsrHg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@react-native-community/cli-clean": "12.3.0", + "@react-native-community/cli-config": "12.3.0", + "@react-native-community/cli-debugger-ui": "12.3.0", + "@react-native-community/cli-doctor": "12.3.0", + "@react-native-community/cli-hermes": "12.3.0", + "@react-native-community/cli-plugin-metro": "12.3.0", + "@react-native-community/cli-server-api": "12.3.0", + "@react-native-community/cli-tools": "12.3.0", + "@react-native-community/cli-types": "12.3.0", + "chalk": "^4.1.2", + "commander": "^9.4.1", + "deepmerge": "^4.3.0", + "execa": "^5.0.0", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0", + "graceful-fs": "^4.1.3", + "prompts": "^2.4.2", + "semver": "^7.5.2" + }, + "bin": { + "react-native": "build/bin.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native-community/cli-clean": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-12.3.0.tgz", + "integrity": "sha512-iAgLCOWYRGh9ukr+eVQnhkV/OqN3V2EGd/in33Ggn/Mj4uO6+oUncXFwB+yjlyaUNz6FfjudhIz09yYGSF+9sg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@react-native-community/cli-tools": "12.3.0", + "chalk": "^4.1.2", + "execa": "^5.0.0" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "optional": 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/@react-native-community/cli-clean/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, + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-clean/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, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-clean/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, + "optional": true, + "peer": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@react-native-community/cli-config": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-12.3.0.tgz", + "integrity": "sha512-BrTn5ndFD9uOxO8kxBQ32EpbtOvAsQExGPI7SokdI4Zlve70FziLtTq91LTlTUgMq1InVZn/jJb3VIDk6BTInQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@react-native-community/cli-tools": "12.3.0", + "chalk": "^4.1.2", + "cosmiconfig": "^5.1.0", + "deepmerge": "^4.3.0", + "glob": "^7.1.3", + "joi": "^17.2.1" + } + }, + "node_modules/@react-native-community/cli-debugger-ui": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-12.3.0.tgz", + "integrity": "sha512-w3b0iwjQlk47GhZWHaeTG8kKH09NCMUJO729xSdMBXE8rlbm4kHpKbxQY9qKb6NlfWSJN4noGY+FkNZS2rRwnQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "serve-static": "^1.13.1" + } + }, + "node_modules/@react-native-community/cli-doctor": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-12.3.0.tgz", + "integrity": "sha512-BPCwNNesoQMkKsxB08Ayy6URgGQ8Kndv6mMhIvJSNdST3J1+x3ehBHXzG9B9Vfi+DrTKRb8lmEl/b/7VkDlPkA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@react-native-community/cli-config": "12.3.0", + "@react-native-community/cli-platform-android": "12.3.0", + "@react-native-community/cli-platform-ios": "12.3.0", + "@react-native-community/cli-tools": "12.3.0", + "chalk": "^4.1.2", + "command-exists": "^1.2.8", + "deepmerge": "^4.3.0", + "envinfo": "^7.10.0", + "execa": "^5.0.0", + "hermes-profile-transformer": "^0.0.6", + "ip": "^1.1.5", + "node-stream-zip": "^1.9.1", + "ora": "^5.4.1", + "semver": "^7.5.2", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1", + "yaml": "^2.2.1" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "optional": 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/@react-native-community/cli-doctor/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, + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-doctor/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, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-doctor/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, + "optional": true, + "peer": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/ora/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@react-native-community/cli-hermes": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-12.3.0.tgz", + "integrity": "sha512-G6FxpeZBO4AimKZwtWR3dpXRqTvsmEqlIkkxgwthdzn3LbVjDVIXKpVYU9PkR5cnT+KuAUxO0WwthrJ6Nmrrlg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@react-native-community/cli-platform-android": "12.3.0", + "@react-native-community/cli-tools": "12.3.0", + "chalk": "^4.1.2", + "hermes-profile-transformer": "^0.0.6", + "ip": "^1.1.5" + } + }, + "node_modules/@react-native-community/cli-platform-android": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-12.3.0.tgz", + "integrity": "sha512-VU1NZw63+GLU2TnyQ919bEMThpHQ/oMFju9MCfrd3pyPJz4Sn+vc3NfnTDUVA5Z5yfLijFOkHIHr4vo/C9bjnw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@react-native-community/cli-tools": "12.3.0", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "fast-xml-parser": "^4.2.4", + "glob": "^7.1.3", + "logkitty": "^0.7.1" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "optional": 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/@react-native-community/cli-platform-android/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, + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-platform-android/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, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-platform-android/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, + "optional": true, + "peer": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@react-native-community/cli-platform-ios": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-12.3.0.tgz", + "integrity": "sha512-H95Sgt3wT7L8V75V0syFJDtv4YgqK5zbu69ko4yrXGv8dv2EBi6qZP0VMmkqXDamoPm9/U7tDTdbcf26ctnLfg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@react-native-community/cli-tools": "12.3.0", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "fast-xml-parser": "^4.0.12", + "glob": "^7.1.3", + "ora": "^5.4.1" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "optional": 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/@react-native-community/cli-platform-ios/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, + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-platform-ios/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, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-platform-ios/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, + "optional": true, + "peer": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@react-native-community/cli-plugin-metro": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-12.3.0.tgz", + "integrity": "sha512-tYNHIYnNmxrBcsqbE2dAnLMzlKI3Cp1p1xUgTrNaOMsGPDN1epzNfa34n6Nps3iwKElSL7Js91CzYNqgTalucA==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@react-native-community/cli-server-api": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-12.3.0.tgz", + "integrity": "sha512-Rode8NrdyByC+lBKHHn+/W8Zu0c+DajJvLmOWbe2WY/ECvnwcd9MHHbu92hlT2EQaJ9LbLhGrSbQE3cQy9EOCw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@react-native-community/cli-debugger-ui": "12.3.0", + "@react-native-community/cli-tools": "12.3.0", + "compression": "^1.7.1", + "connect": "^3.6.5", + "errorhandler": "^1.5.1", + "nocache": "^3.0.1", + "pretty-format": "^26.6.2", + "serve-static": "^1.13.1", + "ws": "^7.5.1" + } + }, + "node_modules/@react-native-community/cli-server-api/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@react-native-community/cli-tools": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-12.3.0.tgz", + "integrity": "sha512-2GafnCr8D88VdClwnm9KZfkEb+lzVoFdr/7ybqhdeYM0Vnt/tr2N+fM1EQzwI1DpzXiBzTYemw8GjRq+Utcz2Q==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "appdirsjs": "^1.2.4", + "chalk": "^4.1.2", + "find-up": "^5.0.0", + "mime": "^2.4.1", + "node-fetch": "^2.6.0", + "open": "^6.2.0", + "ora": "^5.4.1", + "semver": "^7.5.2", + "shell-quote": "^1.7.3", + "sudo-prompt": "^9.0.0" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/sudo-prompt": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", + "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@react-native-community/cli-types": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-12.3.0.tgz", + "integrity": "sha512-MgOkmrXH4zsGxhte4YqKL7d+N8ZNEd3w1wo56MZlhu5WabwCJh87wYpU5T8vyfujFLYOFuFK5jjlcbs8F4/WDw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "joi": "^17.2.1" + } + }, + "node_modules/@react-native-community/cli/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/@react-native-community/cli/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@react-native-community/cli/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "optional": 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/@react-native-community/cli/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli/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, + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli/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, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli/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, + "optional": true, + "peer": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@react-native/assets-registry": { + "version": "0.73.1", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.73.1.tgz", + "integrity": "sha512-2FgAbU7uKM5SbbW9QptPPZx8N9Ke2L7bsHb+EhAanZjFZunA9PaYtyjUQ1s7HD+zDVqOQIvjkpXSv7Kejd2tqg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/babel-plugin-codegen": { + "version": "0.73.3", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.73.3.tgz", + "integrity": "sha512-+zQrDDbz6lB48LyzFHxNCgXDCBHH+oTRdXAjikRcBUdeG9St9ABbYFLtb799zSxLOrCqFVyXqhJR2vlgLLEbcg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@react-native/codegen": "0.73.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/babel-preset": { + "version": "0.73.20", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.73.20.tgz", + "integrity": "sha512-fU9NqkusbfFq71l4BWQfqqD/lLcLC0MZ++UYgieA3j8lIEppJTLVauv2RwtD2yltBkjebgYEC5Rwvt1l0MUBXw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/plugin-proposal-async-generator-functions": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.18.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", + "@babel/plugin-proposal-numeric-separator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.20.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.18.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.20.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.20.0", + "@babel/plugin-transform-flow-strip-types": "^7.20.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "@react-native/babel-plugin-codegen": "0.73.3", + "babel-plugin-transform-flow-enums": "^0.0.2", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/@react-native/codegen": { + "version": "0.73.2", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.73.2.tgz", + "integrity": "sha512-lfy8S7umhE3QLQG5ViC4wg5N1Z+E6RnaeIw8w1voroQsXXGPB72IBozh8dAHR3+ceTxIU0KX3A8OpJI8e1+HpQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/parser": "^7.20.0", + "flow-parser": "^0.206.0", + "glob": "^7.1.1", + "invariant": "^2.2.4", + "jscodeshift": "^0.14.0", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/@react-native/codegen/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/@react-native/community-cli-plugin": { + "version": "0.73.12", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.73.12.tgz", + "integrity": "sha512-xWU06OkC1cX++Duh/cD/Wv+oZ0oSY3yqbtxAqQA2H3Q+MQltNNJM6MqIHt1VOZSabRf/LVlR1JL6U9TXJirkaw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@react-native-community/cli-server-api": "12.3.0", + "@react-native-community/cli-tools": "12.3.0", + "@react-native/dev-middleware": "0.73.7", + "@react-native/metro-babel-transformer": "0.73.13", + "chalk": "^4.0.0", + "execa": "^5.1.1", + "metro": "^0.80.3", + "metro-config": "^0.80.3", + "metro-core": "^0.80.3", + "node-fetch": "^2.2.0", + "readline": "^1.3.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "optional": 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/@react-native/community-cli-plugin/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, + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native/community-cli-plugin/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, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native/community-cli-plugin/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, + "optional": true, + "peer": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@react-native/debugger-frontend": { + "version": "0.73.3", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.73.3.tgz", + "integrity": "sha512-RgEKnWuoo54dh7gQhV7kvzKhXZEhpF9LlMdZolyhGxHsBqZ2gXdibfDlfcARFFifPIiaZ3lXuOVVa4ei+uPgTw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/dev-middleware": { + "version": "0.73.7", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.73.7.tgz", + "integrity": "sha512-BZXpn+qKp/dNdr4+TkZxXDttfx8YobDh8MFHsMk9usouLm22pKgFIPkGBV0X8Do4LBkFNPGtrnsKkWk/yuUXKg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@isaacs/ttlcache": "^1.4.1", + "@react-native/debugger-frontend": "0.73.3", + "chrome-launcher": "^0.15.2", + "chromium-edge-launcher": "^1.0.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "node-fetch": "^2.2.0", + "open": "^7.0.3", + "serve-static": "^1.13.1", + "temp-dir": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@react-native/dev-middleware/node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native/gradle-plugin": { + "version": "0.73.4", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.73.4.tgz", + "integrity": "sha512-PMDnbsZa+tD55Ug+W8CfqXiGoGneSSyrBZCMb5JfiB3AFST3Uj5e6lw8SgI/B6SKZF7lG0BhZ6YHZsRZ5MlXmg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/js-polyfills": { + "version": "0.73.1", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.73.1.tgz", + "integrity": "sha512-ewMwGcumrilnF87H4jjrnvGZEaPFCAC4ebraEK+CurDDmwST/bIicI4hrOAv+0Z0F7DEK4O4H7r8q9vH7IbN4g==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/metro-babel-transformer": { + "version": "0.73.13", + "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.73.13.tgz", + "integrity": "sha512-k9AQifogQfgUXPlqQSoMtX2KUhniw4XvJl+nZ4hphCH7qiMDAwuP8OmkJbz5E/N+Ro9OFuLE7ax4GlwxaTsAWg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.20.0", + "@react-native/babel-preset": "0.73.19", + "hermes-parser": "0.15.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/babel-plugin-codegen": { + "version": "0.73.2", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.73.2.tgz", + "integrity": "sha512-PadyFZWVaWXIBP7Q5dgEL7eAd7tnsgsLjoHJB1hIRZZuVUg1Zqe3nULwC7RFAqOtr5Qx7KXChkFFcKQ3WnZzGw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@react-native/codegen": "0.73.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/babel-preset": { + "version": "0.73.19", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.73.19.tgz", + "integrity": "sha512-ujon01uMOREZecIltQxPDmJ6xlVqAUFGI/JCSpeVYdxyXBoBH5dBb0ihj7h6LKH1q1jsnO9z4MxfddtypKkIbg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/plugin-proposal-async-generator-functions": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.18.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", + "@babel/plugin-proposal-numeric-separator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.20.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.18.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.20.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.20.0", + "@babel/plugin-transform-flow-strip-types": "^7.20.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "@react-native/babel-plugin-codegen": "0.73.2", + "babel-plugin-transform-flow-enums": "^0.0.2", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/@react-native/normalize-color": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-2.1.0.tgz", + "integrity": "sha512-Z1jQI2NpdFJCVgpY+8Dq/Bt3d+YUi1928Q+/CZm/oh66fzM0RUl54vvuXlPJKybH4pdCZey1eDTPaLHkMPNgWA==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@react-native/normalize-colors": { + "version": "0.73.2", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.73.2.tgz", + "integrity": "sha512-bRBcb2T+I88aG74LMVHaKms2p/T8aQd8+BZ7LuuzXlRfog1bMWWn/C5i0HVuvW4RPtXQYgIlGiXVDy9Ir1So/w==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@react-native/virtualized-lists": { + "version": "0.73.4", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.73.4.tgz", + "integrity": "sha512-HpmLg1FrEiDtrtAbXiwCgXFYyloK/dOIPIuWW3fsqukwJEWAiTzm1nXGJ7xPU5XTHiWZ4sKup5Ebaj8z7iyWog==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "invariant": "^2.2.4", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "react-native": "*" + } + }, + "node_modules/@segment/loosely-validate-event": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz", + "integrity": "sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "component-type": "^1.2.1", + "join-component": "^1.1.0" + } + }, + "node_modules/@sideway/address": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "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 + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "node_modules/@types/node": { + "version": "16.18.76", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.76.tgz", + "integrity": "sha512-/GsO2uv1Z6R42lBr59dtem56gVF/yHKQaScggwU+gLU6DXE25sDmOar4c4IfWb3h+X/7OYZznPOFk7oGF3jQSA==", + "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==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "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==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@unimodules/core": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@unimodules/core/-/core-7.1.2.tgz", + "integrity": "sha512-lY+e2TAFuebD3vshHMIRqru3X4+k7Xkba4Wa7QsDBd+ex4c4N2dHAO61E2SrGD9+TRBD8w/o7mzK6ljbqRnbyg==", + "deprecated": "replaced by the 'expo' package, learn more: https://blog.expo.dev/whats-new-in-expo-modules-infrastructure-7a7cdda81ebc", + "dev": true, + "optional": true, + "dependencies": { + "compare-versions": "^3.4.0" + } + }, + "node_modules/@unimodules/react-native-adapter": { + "version": "6.3.9", + "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-6.3.9.tgz", + "integrity": "sha512-i9/9Si4AQ8awls+YGAKkByFbeAsOPgUNeLoYeh2SQ3ddjxJ5ZJDtq/I74clDnpDcn8zS9pYlcDJ9fgVJa39Glw==", + "deprecated": "replaced by the 'expo' package, learn more: https://blog.expo.dev/whats-new-in-expo-modules-infrastructure-7a7cdda81ebc", + "dev": true, + "optional": true, + "dependencies": { + "expo-modules-autolinking": "^0.0.3", + "invariant": "^2.2.4" + } + }, + "node_modules/@urql/core": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/@urql/core/-/core-2.3.6.tgz", + "integrity": "sha512-PUxhtBh7/8167HJK6WqBv6Z0piuiaZHQGYbhwpNL9aIQmLROPEdaUYkY4wh45wPQXcTpnd11l0q3Pw+TI11pdw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.0", + "wonka": "^4.0.14" + }, + "peerDependencies": { + "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@urql/exchange-retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@urql/exchange-retry/-/exchange-retry-0.3.0.tgz", + "integrity": "sha512-hHqer2mcdVC0eYnVNbWyi28AlGOPb2vjH3lP3/Bc8Lc8BjhMsDwFMm7WhoP5C1+cfbr/QJ6Er3H/L08wznXxfg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@urql/core": ">=2.3.1", + "wonka": "^4.0.14" + }, + "peerDependencies": { + "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" + } + }, + "node_modules/@webex/common": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/common/-/common-2.60.0.tgz", + "integrity": "sha512-o6dbes91uqxLO9gjafIl46ycQVpzFmsENTldFh0uFb0LbT2ONX9DRO6599nS6Jd9xa4g+R2DoNHMJSwvj2Zjgw==", + "dev": true, + "dependencies": { + "backoff": "^2.5.0", + "bowser": "^2.11.0", + "core-decorators": "^0.20.0", + "global": "^4.4.0", + "lodash": "^4.17.21", + "safe-buffer": "^5.2.0", + "urlsafe-base64": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/common-timers": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/common-timers/-/common-timers-2.60.0.tgz", + "integrity": "sha512-DvxvEYGuqM80sH1y+YdB+u4Bl7dqle6FIP0FsE+N5k4bCWbred+yDy7ZmuLZ4a1SK/SSLxSBTo+VzIWk6Oithw==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/helper-html": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/helper-html/-/helper-html-2.60.0.tgz", + "integrity": "sha512-qyKsajx8gNZkZnp21LasfTiKoxqaIYzYgT9XvEL0QRmQOJZWxZIzYFQQVDOa2UgULC721xTLfdnCriSL5Qfn3w==", + "dev": true, + "dependencies": { + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/helper-image": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/helper-image/-/helper-image-2.60.0.tgz", + "integrity": "sha512-2q0ZZyDegBeMv5DIW0VORf8WYmTNgAAv7MeRAzM+kvurBDE+yJabqoBXYj+nf5lSUjEOUnWwWtgFOELnN+YwbQ==", + "dev": true, + "dependencies": { + "@webex/http-core": "2.60.0", + "@webex/test-helper-chai": "2.60.0", + "@webex/test-helper-file": "2.60.0", + "@webex/test-helper-mocha": "2.60.0", + "exifr": "^5.0.3", + "gm": "^1.23.1", + "lodash": "^4.17.21", + "mime": "^2.4.4", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/http-core": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/http-core/-/http-core-2.60.0.tgz", + "integrity": "sha512-z+GHjx3d4Q0exVIfLex2iS1wYpkYscctIHiK1CPInivubpgtvt04E/qETtDV1iCo8wxhyzG2eAW/n0FcA7rdJQ==", + "dev": true, + "dependencies": { + "@webex/common": "2.60.0", + "@webex/internal-plugin-device": "2.60.0", + "@webex/test-helper-test-users": "2.60.0", + "@webex/webex-core": "2.60.0", + "file-type": "^16.0.1", + "global": "^4.4.0", + "is-function": "^1.0.1", + "lodash": "^4.17.21", + "parse-headers": "^2.0.2", + "qs": "^6.7.3", + "request": "^2.88.0", + "safe-buffer": "^5.2.0", + "xtend": "^4.0.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/internal-media-core": { + "version": "0.0.7-beta", + "resolved": "https://registry.npmjs.org/@webex/internal-media-core/-/internal-media-core-0.0.7-beta.tgz", + "integrity": "sha512-GxSRFKDdvL/gzZ67aIO2378kbVWAeGUQk5/pUprPcdY0cC4T6aoXa7AiLV+HiFmJSChPzBYZbOlFY49oSndgww==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.18.9", + "@webex/ts-sdp": "^1.0.1", + "detectrtc": "^1.4.1", + "events": "^3.3.0", + "sdp-transform": "^2.14.1", + "typed-emitter": "^2.1.0", + "uuid": "^8.3.2", + "webrtc-adapter": "^8.1.1", + "xstate": "^4.30.6" + }, + "engines": { + "node": ">=14.x" + } + }, + "node_modules/@webex/internal-media-core/node_modules/sdp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/sdp/-/sdp-3.2.0.tgz", + "integrity": "sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw==", + "dev": true + }, + "node_modules/@webex/internal-media-core/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@webex/internal-media-core/node_modules/webrtc-adapter": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-8.2.3.tgz", + "integrity": "sha512-gnmRz++suzmvxtp3ehQts6s2JtAGPuDPjA1F3a9ckNpG1kYdYuHWYpazoAnL9FS5/B21tKlhkorbdCXat0+4xQ==", + "dev": true, + "dependencies": { + "sdp": "^3.2.0" + }, + "engines": { + "node": ">=6.0.0", + "npm": ">=3.10.0" + } + }, + "node_modules/@webex/internal-plugin-calendar": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/internal-plugin-calendar/-/internal-plugin-calendar-2.60.0.tgz", + "integrity": "sha512-xcT60Q2TKXvDJ6szQeXOAP5fygtZR6i2Ol5TOtqla3n9tpEGBSdUz8WTjVr/3A1TPkyLHRBcC1wxCKkWuuYDWQ==", + "dev": true, + "dependencies": { + "@webex/internal-plugin-conversation": "2.60.0", + "@webex/internal-plugin-device": "2.60.0", + "@webex/internal-plugin-encryption": "2.60.0", + "@webex/webex-core": "2.60.0", + "lodash": "^4.17.21", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/internal-plugin-conversation": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/internal-plugin-conversation/-/internal-plugin-conversation-2.60.0.tgz", + "integrity": "sha512-1VzUBMLcdw/dBC8BjARHsHr+guOuSgIRYksHVGa63nk0b3yQskP0jWTigYv0/G1TdBGzYB0UCrtpYgNYdd06ww==", + "dev": true, + "dependencies": { + "@webex/common": "2.60.0", + "@webex/helper-html": "2.60.0", + "@webex/helper-image": "2.60.0", + "@webex/internal-plugin-encryption": "2.60.0", + "@webex/internal-plugin-user": "2.60.0", + "@webex/webex-core": "2.60.0", + "crypto-js": "^4.1.1", + "lodash": "^4.17.21", + "node-scr": "^0.3.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/internal-plugin-device": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/internal-plugin-device/-/internal-plugin-device-2.60.0.tgz", + "integrity": "sha512-FmrRARGLGvb276LQpTG5u8mKo8mGrrHG+UcXvzu2sU7+p/7Wgm+z/izshJJC55SFWF77gV8oR3sAcTYwZMnqKw==", + "dev": true, + "dependencies": { + "@webex/common": "2.60.0", + "@webex/common-timers": "2.60.0", + "@webex/http-core": "2.60.0", + "@webex/internal-plugin-metrics": "2.60.0", + "@webex/webex-core": "2.60.0", + "ampersand-collection": "^2.0.2", + "ampersand-state": "^5.0.3", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/internal-plugin-encryption": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/internal-plugin-encryption/-/internal-plugin-encryption-2.60.0.tgz", + "integrity": "sha512-NvKJUvoRhV2b737nuYq/mWkvqD8ZOM3rCVqY+MhxXXqantHu3jqxfvZ86O3r++Mfyob201C8N0HtwzdupCM4yg==", + "dev": true, + "dependencies": { + "@webex/common": "2.60.0", + "@webex/common-timers": "2.60.0", + "@webex/http-core": "2.60.0", + "@webex/internal-plugin-device": "2.60.0", + "@webex/internal-plugin-mercury": "2.60.0", + "@webex/test-helper-file": "2.60.0", + "@webex/webex-core": "2.60.0", + "asn1js": "^2.0.26", + "debug": "^4.3.4", + "isomorphic-webcrypto": "^2.3.8", + "lodash": "^4.17.21", + "node-jose": "^2.2.0", + "node-kms": "^0.4.0", + "node-scr": "^0.3.0", + "pkijs": "^2.1.84", + "safe-buffer": "^5.2.0", + "uuid": "^3.3.2", + "valid-url": "^1.0.9" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/internal-plugin-feature": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/internal-plugin-feature/-/internal-plugin-feature-2.60.0.tgz", + "integrity": "sha512-ble2sAAveXbGdee1QboU3ZCoDT71iWwaGNld/5WSdEpsNKO9sV5WC5Neo3oq8SmKiYSdLoEEYFC5J+9B26Bkdg==", + "dev": true, + "dependencies": { + "@webex/internal-plugin-device": "2.60.0", + "@webex/internal-plugin-mercury": "2.60.0", + "@webex/webex-core": "2.60.0", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/internal-plugin-locus": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/internal-plugin-locus/-/internal-plugin-locus-2.60.0.tgz", + "integrity": "sha512-r0LSnwk+9dDMp/pGflx+c+gX1CPDo06j4dMhRbkLkJTqqhC+uAnvHREVIQuITViwY9cf+Izm9On3xh6SDqHglw==", + "dev": true, + "dependencies": { + "@webex/internal-plugin-mercury": "2.60.0", + "@webex/test-helper-chai": "2.60.0", + "@webex/test-helper-mock-webex": "2.60.0", + "@webex/webex-core": "2.60.0", + "lodash": "^4.17.21", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/internal-plugin-lyra": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/internal-plugin-lyra/-/internal-plugin-lyra-2.60.0.tgz", + "integrity": "sha512-OSMl+sh2hvWMHw0kd+MdVeJa2coKCPlzk89+BLU51DYrgc+6DvBGOFegNNqRa+a1Z5iJtKB7Q5gI5Xq/baZmtg==", + "dev": true, + "dependencies": { + "@webex/common": "2.60.0", + "@webex/internal-plugin-conversation": "2.60.0", + "@webex/internal-plugin-encryption": "2.60.0", + "@webex/internal-plugin-feature": "2.60.0", + "@webex/internal-plugin-locus": "2.60.0", + "@webex/internal-plugin-mercury": "2.60.0", + "@webex/webex-core": "2.60.0", + "bowser": "^2.11.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/internal-plugin-mercury": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/internal-plugin-mercury/-/internal-plugin-mercury-2.60.0.tgz", + "integrity": "sha512-TMKhtWsuC+glUDWEtiTRJTPF/1IS9MVV7zEAP1bqgVsdI9b6iV1k+p72il5Q2i+ynksdbuzg0Pd4cM28pO7hwA==", + "dev": true, + "dependencies": { + "@webex/common": "2.60.0", + "@webex/common-timers": "2.60.0", + "@webex/internal-plugin-device": "2.60.0", + "@webex/internal-plugin-feature": "2.60.0", + "@webex/internal-plugin-metrics": "2.60.0", + "@webex/test-helper-chai": "2.60.0", + "@webex/test-helper-mocha": "2.60.0", + "@webex/test-helper-mock-web-socket": "2.60.0", + "@webex/test-helper-mock-webex": "2.60.0", + "@webex/test-helper-refresh-callback": "2.60.0", + "@webex/test-helper-test-users": "2.60.0", + "@webex/webex-core": "2.60.0", + "backoff": "^2.5.0", + "lodash": "^4.17.21", + "uuid": "^3.3.2", + "ws": "^8.2.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/internal-plugin-metrics": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/internal-plugin-metrics/-/internal-plugin-metrics-2.60.0.tgz", + "integrity": "sha512-AKTUnVoGtP2ib3ui5cY00f61TVRtsNwfg2QXJ0uIRHU9w1FbC0rY4M3eJ+ssOJAGtrSa1InmDO5KFdmHuvHP8g==", + "dev": true, + "dependencies": { + "@webex/common": "2.60.0", + "@webex/common-timers": "2.60.0", + "@webex/test-helper-chai": "2.60.0", + "@webex/test-helper-mock-webex": "2.60.0", + "@webex/webex-core": "2.60.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/internal-plugin-presence": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/internal-plugin-presence/-/internal-plugin-presence-2.60.0.tgz", + "integrity": "sha512-3dd+JdGFvVUrPugDD2KhhhzjHGsg/lhXOsndPf7kZNPq9a1si0EX70R3ig4RyXostsmunRtNp9DaSlBKmg8J6g==", + "dev": true, + "dependencies": { + "@webex/internal-plugin-device": "2.60.0", + "@webex/internal-plugin-mercury": "2.60.0", + "@webex/test-helper-chai": "2.60.0", + "@webex/test-helper-mocha": "2.60.0", + "@webex/test-helper-mock-webex": "2.60.0", + "@webex/test-helper-test-users": "2.60.0", + "@webex/webex-core": "2.60.0", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/internal-plugin-search": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/internal-plugin-search/-/internal-plugin-search-2.60.0.tgz", + "integrity": "sha512-e4lXYHPdl1Qa+lA5ojjhWZWT1avakjGUK42OU5j9kQfi1IQ/sbdpyAlISwjTvm0qJ2G8ImcQJUwddxaGv991nA==", + "dev": true, + "dependencies": { + "@webex/common": "2.60.0", + "@webex/internal-plugin-conversation": "2.60.0", + "@webex/internal-plugin-device": "2.60.0", + "@webex/internal-plugin-encryption": "2.60.0", + "@webex/webex-core": "2.60.0", + "lodash": "^4.17.21", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/internal-plugin-support": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/internal-plugin-support/-/internal-plugin-support-2.60.0.tgz", + "integrity": "sha512-eiiH8Pr/HaCvhdQy66mmIqES8/096xyBYWCLvxleWJ32PfJ/TFZcDJbaC+odSKb3dCQyqBcx4QsNa1JFLYRW+w==", + "dev": true, + "dependencies": { + "@webex/internal-plugin-device": "2.60.0", + "@webex/internal-plugin-search": "2.60.0", + "@webex/test-helper-chai": "2.60.0", + "@webex/test-helper-file": "2.60.0", + "@webex/test-helper-mock-webex": "2.60.0", + "@webex/test-helper-test-users": "2.60.0", + "@webex/webex-core": "2.60.0", + "lodash": "^4.17.21", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/internal-plugin-user": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/internal-plugin-user/-/internal-plugin-user-2.60.0.tgz", + "integrity": "sha512-kl6IP4NxQ3EJI8CCIF4lY5OJM6M+sTaUadFdvMlZqOaG1zNbXIH9BuClB3xXdJVlO9Cmkbew1iuRabASODFoKg==", + "dev": true, + "dependencies": { + "@webex/common": "2.60.0", + "@webex/internal-plugin-device": "2.60.0", + "@webex/test-helper-chai": "2.60.0", + "@webex/test-helper-mock-webex": "2.60.0", + "@webex/test-helper-test-users": "2.60.0", + "@webex/webex-core": "2.60.0", + "lodash": "^4.17.21", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/plugin-attachment-actions": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/plugin-attachment-actions/-/plugin-attachment-actions-2.60.0.tgz", + "integrity": "sha512-qeR+B/RwXpCIVB967NmSEKBzqhvB6jN8FyYI5MySNZ76KG/nsH9Ys9zsWi4I7ilj8AsRVuxc7+YwY/B1wMXHIA==", + "dev": true, + "dependencies": { + "@webex/common": "2.60.0", + "@webex/internal-plugin-conversation": "2.60.0", + "@webex/internal-plugin-mercury": "2.60.0", + "@webex/plugin-logger": "2.60.0", + "@webex/plugin-messages": "2.60.0", + "@webex/plugin-people": "2.60.0", + "@webex/test-helper-chai": "2.60.0", + "@webex/test-helper-test-users": "2.60.0", + "@webex/webex-core": "2.60.0", + "debug": "^4.3.4", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/plugin-authorization": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/plugin-authorization/-/plugin-authorization-2.60.0.tgz", + "integrity": "sha512-WqijIyG1Fy4LOOa31hcTtzzbK9xM2eFOG+2YBbPxPCsjJBGeS2PTyt/c3kvmaufTpFKbB8NGYF96PWL03NIgrQ==", + "dev": true, + "dependencies": { + "@webex/plugin-authorization-browser": "2.60.0", + "@webex/plugin-authorization-node": "2.60.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/plugin-authorization-browser": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/plugin-authorization-browser/-/plugin-authorization-browser-2.60.0.tgz", + "integrity": "sha512-OdG6o0w/kUiJPPGPZR0PYWmEAJxESN3YcgiLFCsT1/LU2iZjtwQ3Hk8SxtGw4ueG7zxlsIKI9uHYKLIDlflkAg==", + "dev": true, + "dependencies": { + "@webex/common": "2.60.0", + "@webex/internal-plugin-device": "2.60.0", + "@webex/plugin-authorization-node": "2.60.0", + "@webex/storage-adapter-local-storage": "2.60.0", + "@webex/storage-adapter-spec": "2.60.0", + "@webex/webex-core": "2.60.0", + "jose": "^4.13.1", + "lodash": "^4.17.21", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/plugin-authorization-node": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/plugin-authorization-node/-/plugin-authorization-node-2.60.0.tgz", + "integrity": "sha512-Kd8EnG3eQ8fdogjr0S/wCGPsY8rY37nM2kFuPtzv6d8YjzUcNMaW/3yhLMr2BbOx3o9JKptQHUNx5q7dm1CnnA==", + "dev": true, + "dependencies": { + "@webex/common": "2.60.0", + "@webex/internal-plugin-device": "2.60.0", + "@webex/webex-core": "2.60.0", + "jsonwebtoken": "^9.0.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/plugin-device-manager": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/plugin-device-manager/-/plugin-device-manager-2.60.0.tgz", + "integrity": "sha512-Q3GpsS9RLx5KUfU8I+9QXbD2OVY5aEdkXDRW80IYavFgm//vWynw5/yNtHF/Er1JyhHJY2jJepk2bsoMoyNoug==", + "dev": true, + "dependencies": { + "@webex/internal-plugin-calendar": "2.60.0", + "@webex/internal-plugin-device": "2.60.0", + "@webex/internal-plugin-lyra": "2.60.0", + "@webex/internal-plugin-search": "2.60.0", + "@webex/plugin-authorization": "2.60.0", + "@webex/plugin-logger": "2.60.0", + "@webex/test-helper-chai": "2.60.0", + "@webex/webex-core": "2.60.0", + "lodash": "^4.17.21", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/plugin-logger": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/plugin-logger/-/plugin-logger-2.60.0.tgz", + "integrity": "sha512-0FtUyW3T53tO7DBkSRZpKfugR2nSE1nklg4p1JWZIGRASAjCCBmShE0J0eedTO9zhiWtNuABdRUph5HfxxM32A==", + "dev": true, + "dependencies": { + "@webex/common": "2.60.0", + "@webex/test-helper-chai": "2.60.0", + "@webex/test-helper-mocha": "2.60.0", + "@webex/test-helper-mock-webex": "2.60.0", + "@webex/webex-core": "2.60.0", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/plugin-meetings": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/plugin-meetings/-/plugin-meetings-2.60.0.tgz", + "integrity": "sha512-DjUNzL4wni1Q5UcyaO66gXOLnfF2e69zulwxGPAUuvfjUQ2kn08gWymKE0YNw0PwbvM5RjMF5matYQI7NvhlnA==", + "dev": true, + "dependencies": { + "@webex/common": "2.60.0", + "@webex/internal-media-core": "0.0.7-beta", + "@webex/internal-plugin-device": "2.60.0", + "@webex/internal-plugin-metrics": "2.60.0", + "@webex/internal-plugin-support": "2.60.0", + "@webex/internal-plugin-user": "2.60.0", + "@webex/plugin-people": "2.60.0", + "@webex/ts-sdp": "1.0.1", + "@webex/webex-core": "2.60.0", + "bowser": "^2.11.0", + "btoa": "^1.2.1", + "dotenv": "^4.0.0", + "global": "^4.4.0", + "ip-anonymize": "^0.1.0", + "javascript-state-machine": "^3.1.0", + "lodash": "^4.17.21", + "sdp-transform": "^2.12.0", + "uuid": "^3.3.2", + "webrtc-adapter": "^7.7.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/plugin-meetings/node_modules/dotenv": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", + "integrity": "sha512-XcaMACOr3JMVcEv0Y/iUM2XaOsATRZ3U1In41/1jjK6vJZ2PZbQ1bzCG8uvaByfaBpl9gqc9QWJovpUGBXLLYQ==", + "dev": true, + "engines": { + "node": ">=4.6.0" + } + }, + "node_modules/@webex/plugin-memberships": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/plugin-memberships/-/plugin-memberships-2.60.0.tgz", + "integrity": "sha512-b0Vmxtx++wkSjg/BpmUYGFcTqs+5ULxgG3YVHf6ttB0Fsr4U1AGHGwXoVNDIgxnpqP9S23lcDPgAYL47EKdsNA==", + "dev": true, + "dependencies": { + "@webex/common": "2.60.0", + "@webex/internal-plugin-conversation": "2.60.0", + "@webex/internal-plugin-mercury": "2.60.0", + "@webex/plugin-logger": "2.60.0", + "@webex/plugin-messages": "2.60.0", + "@webex/plugin-people": "2.60.0", + "@webex/plugin-rooms": "2.60.0", + "@webex/webex-core": "2.60.0", + "debug": "^4.3.4", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/plugin-messages": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/plugin-messages/-/plugin-messages-2.60.0.tgz", + "integrity": "sha512-iZI5edGSUc7CAheMtkUCZHnqRs5oB3DKKznkcRfob3dY6uemop1wEv6PsWYdrHAu3Aage74cJ5p7XcAkHHxLsw==", + "dev": true, + "dependencies": { + "@webex/common": "2.60.0", + "@webex/internal-plugin-conversation": "2.60.0", + "@webex/internal-plugin-device": "2.60.0", + "@webex/internal-plugin-mercury": "2.60.0", + "@webex/plugin-logger": "2.60.0", + "@webex/plugin-people": "2.60.0", + "@webex/plugin-rooms": "2.60.0", + "@webex/webex-core": "2.60.0", + "debug": "^4.3.4", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/plugin-people": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/plugin-people/-/plugin-people-2.60.0.tgz", + "integrity": "sha512-nr+FuF4mnV8vfAQeqzJguu5c7rHjEd0G86f9dyS0EHdZoHr41ggNK1QDcxuguZHSB5fdkn7tLqC5vpKdj8fmMA==", + "dev": true, + "dependencies": { + "@webex/common": "2.60.0", + "@webex/internal-plugin-mercury": "2.60.0", + "@webex/webex-core": "2.60.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/plugin-rooms": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/plugin-rooms/-/plugin-rooms-2.60.0.tgz", + "integrity": "sha512-nv5UAomq1NWpO8beoLP6YOd5l5Tj7CO2ShJ/F0d7t6StOIUmoJZtEV8KGytaEwmxB2mI/ppXrU6Sb0SrNGoY/g==", + "dev": true, + "dependencies": { + "@webex/common": "2.60.0", + "@webex/internal-plugin-conversation": "2.60.0", + "@webex/internal-plugin-mercury": "2.60.0", + "@webex/plugin-logger": "2.60.0", + "@webex/plugin-memberships": "2.60.0", + "@webex/plugin-messages": "2.60.0", + "@webex/plugin-people": "2.60.0", + "@webex/webex-core": "2.60.0", + "debug": "^4.3.4", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/plugin-team-memberships": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/plugin-team-memberships/-/plugin-team-memberships-2.60.0.tgz", + "integrity": "sha512-XLfH7NZvuOOqsZ5ghNGAxoAlDaCRap1uOqCCpDhJkDdM57S9jAKmdYReXH6ucJun4KNdV05h0sDOM5NGvbxzqg==", + "dev": true, + "dependencies": { + "@webex/internal-plugin-device": "2.60.0", + "@webex/plugin-logger": "2.60.0", + "@webex/plugin-rooms": "2.60.0", + "@webex/plugin-teams": "2.60.0", + "@webex/webex-core": "2.60.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/plugin-teams": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/plugin-teams/-/plugin-teams-2.60.0.tgz", + "integrity": "sha512-tLQD56T393OROG2rLJAaaVZVmy0tZeMNJkJTQypwO3d8u/anMHeypgTqINrpD/B+QB7sO+F5IsP3HT+70MVbQg==", + "dev": true, + "dependencies": { + "@webex/internal-plugin-device": "2.60.0", + "@webex/plugin-logger": "2.60.0", + "@webex/plugin-memberships": "2.60.0", + "@webex/plugin-rooms": "2.60.0", + "@webex/test-helper-chai": "2.60.0", + "@webex/test-helper-test-users": "2.60.0", + "@webex/webex-core": "2.60.0", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/plugin-webhooks": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/plugin-webhooks/-/plugin-webhooks-2.60.0.tgz", + "integrity": "sha512-NCiiXPudHh6X+MkGnRAumFgqadMGQ5t6k8h+DE1lGME3ujVp7dO0L+ujbiA8K3ylywk8f6AN0vRim3wvN4wPDQ==", + "dev": true, + "dependencies": { + "@webex/internal-plugin-device": "2.60.0", + "@webex/plugin-logger": "2.60.0", + "@webex/plugin-rooms": "2.60.0", + "@webex/webex-core": "2.60.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/storage-adapter-local-storage": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/storage-adapter-local-storage/-/storage-adapter-local-storage-2.60.0.tgz", + "integrity": "sha512-1L48cIY0IyEzR2pqVhJAFwjBKP7ZiY/Dfs9xeFQ25l9d2Qa1n4uFBorA9v7JYSjpU61/APIIdUuciHfEWFvtOQ==", + "dev": true, + "dependencies": { + "@webex/storage-adapter-spec": "2.60.0", + "@webex/test-helper-mocha": "2.60.0", + "@webex/webex-core": "2.60.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/storage-adapter-spec": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/storage-adapter-spec/-/storage-adapter-spec-2.60.0.tgz", + "integrity": "sha512-ovd2YB85qEPnKWjoKj9OcZlefhdWBSlDCD6TSD31zM3kPJ8P85yIG8Cg9z7fSi5eB7zKHRIJii8Kh1M90Au72w==", + "dev": true, + "dependencies": { + "@webex/test-helper-chai": "2.60.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/test-helper-chai": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/test-helper-chai/-/test-helper-chai-2.60.0.tgz", + "integrity": "sha512-PM75a1rqP7O8IE/1IwosSL4UsND6bNClZzFNi8PGnW11BTCdzjlOz9zbUGiVtB5IO218CZ2KUAum6w2cWjHp0A==", + "dev": true, + "dependencies": { + "@webex/test-helper-file": "2.60.0", + "check-error": "^1.0.2", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/test-helper-file": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/test-helper-file/-/test-helper-file-2.60.0.tgz", + "integrity": "sha512-YVH+s3qqU0KWWDqu2kWsDbVX1cq11WB5j5H/x6+o8v19mbVO5ttqwiMaBEHBZ0t3xz0eo7EUfsL1QUlI/VcJJQ==", + "dev": true, + "dependencies": { + "@webex/common": "2.60.0", + "@webex/test-helper-make-local-url": "2.60.0", + "es6-promise": "^4.2.8", + "file-type": "^16.0.1", + "xhr": "^2.5.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/test-helper-make-local-url": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/test-helper-make-local-url/-/test-helper-make-local-url-2.60.0.tgz", + "integrity": "sha512-uwk9tlrGaHqTi24F/Cpp4fUJKqAAH3+AiQ+onFbZ4+KbuRG7SamDrRdU0DK/3j7r80gLeuwqc1WKglmcZLfwnw==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/test-helper-mocha": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/test-helper-mocha/-/test-helper-mocha-2.60.0.tgz", + "integrity": "sha512-d8tq9LC9TRiY6I9+TAhSRUm5WMB+7rKqj2NYp80BGnUJ1IJUSji6r9ePUbhoLQsRtESFGc5Pkz0PmDQjMi5U5Q==", + "dev": true, + "dependencies": { + "bowser": "^2.11.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/test-helper-mock-web-socket": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/test-helper-mock-web-socket/-/test-helper-mock-web-socket-2.60.0.tgz", + "integrity": "sha512-J4MZmqq1ZMtb2Gb4nBMFrh+DmTXFVl8dsqUxiD2UqIxO1sfzNvhZK7EcWUsppsp/04k+wUmBQr0zaHWIAKvEQQ==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/test-helper-mock-webex": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/test-helper-mock-webex/-/test-helper-mock-webex-2.60.0.tgz", + "integrity": "sha512-syDORTuinBRPpiBIdl+fUuUWDqB1hdctRfoTX3T7hFSK+/LNPFKJSyjQ01D7jEdMPWoqELjkBPDyf9wVI03PbA==", + "dev": true, + "dependencies": { + "ampersand-state": "^5.0.3", + "es6-promise": "^4.2.8", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/test-helper-refresh-callback": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/test-helper-refresh-callback/-/test-helper-refresh-callback-2.60.0.tgz", + "integrity": "sha512-jNHdT2rME3/xFtgJwMux+W7HIo7GX8Q7W0O41Ua8tco0/hpSRkBL7jQ8EQxcj4E1UkQyn629LCqCpPO7RlqVXA==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/test-helper-retry": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/test-helper-retry/-/test-helper-retry-2.60.0.tgz", + "integrity": "sha512-e8+LJTuvEBkgXf3SxHPA1Tv+wD7StwGBX43BUdSwVjMOPEI7FLQ5d2uJZty/FqpYu7fcmv9iHSU2Tv0uFe0Jmw==", + "dev": true, + "dependencies": { + "es6-promise": "^4.2.8" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/test-helper-test-users": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/test-helper-test-users/-/test-helper-test-users-2.60.0.tgz", + "integrity": "sha512-Duv2AJz1Pi8PN/QCt7kALxLRV57uiKpPPJYtJklphdt/VSWbkRCuEWlu6bX4XAgVxQE46WTISJ1Zox303MyD+A==", + "dev": true, + "dependencies": { + "@webex/test-helper-retry": "2.60.0", + "@webex/test-users": "2.60.0", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=14" + }, + "optionalDependencies": { + "@ciscospark/test-users-legacy": "^1.0.2" + } + }, + "node_modules/@webex/test-users": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/test-users/-/test-users-2.60.0.tgz", + "integrity": "sha512-8lE97PC0uePV/QQ8L2D2mr+kIcNLB8H9TWgMhPZlCYAk9DaAJNQcVMYLQLkjYoD/e7kPcPpmuHIID/3q2Xjedg==", + "dev": true, + "dependencies": { + "@webex/http-core": "2.60.0", + "@webex/test-helper-mocha": "2.60.0", + "btoa": "^1.2.1", + "lodash": "^4.17.21", + "node-random-name": "^1.0.1", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@webex/ts-sdp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@webex/ts-sdp/-/ts-sdp-1.0.1.tgz", + "integrity": "sha512-dRbsF/MIS2bnnnbUMQL92SUZT3v9dhLJw2ItzGxqs9xaiVfEKVbjM020Hbd4ACQZ8dJ49CZ2tDd4Se9xUR3anQ==", + "dev": true + }, + "node_modules/@webex/webex-core": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/@webex/webex-core/-/webex-core-2.60.0.tgz", + "integrity": "sha512-Tr18TdcsIsfD1TgJqF1O+BdshvNcDsFdNiHlCpVo5GhIrssOfxQr46sbLh0pCrGS9pDa4xx9YMgSEmqfFLY+6w==", + "dev": true, + "dependencies": { + "@webex/common": "2.60.0", + "@webex/common-timers": "2.60.0", + "@webex/http-core": "2.60.0", + "@webex/internal-plugin-device": "2.60.0", + "@webex/plugin-logger": "2.60.0", + "@webex/storage-adapter-spec": "2.60.0", + "ampersand-collection": "^2.0.2", + "ampersand-events": "^2.0.2", + "ampersand-state": "^5.0.3", + "core-decorators": "^0.20.0", + "crypto-js": "^4.1.1", + "jsonwebtoken": "^9.0.0", + "lodash": "^4.17.21", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@xmldom/xmldom": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.13.tgz", + "integrity": "sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "optional": true, + "peer": true, + "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", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/alea": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/alea/-/alea-0.0.9.tgz", + "integrity": "sha512-7GrAOnIHGlKtOmZm09dHL+n5tXlao4uBGeXUPRX+I5PAyZqa95CaSFC9bXpkFJpT6j5N3+UKoxDfPmmwBedg7A==", + "dev": true + }, + "node_modules/ampersand-class-extend": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ampersand-class-extend/-/ampersand-class-extend-2.0.0.tgz", + "integrity": "sha512-i8hQvA4vZz9UfQAi0A4oBASYOZzlYgjFVkw0K1xpeKNSvq+KYkFOqJKkNvHCbbuKUNJnFk3kECSKPDAJ6ocEOg==", + "dev": true, + "dependencies": { + "lodash": "^4.11.1" + } + }, + "node_modules/ampersand-collection": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ampersand-collection/-/ampersand-collection-2.0.2.tgz", + "integrity": "sha512-IjDa4HTL/tdQDDL0SGyWk4AHD02iNtUSLRWkAsJ2biPvapljW9HNgIEIdbPnnR+7Gb9BJkjesaLNjVZfAMzeuA==", + "dev": true, + "dependencies": { + "ampersand-class-extend": "^2.0.0", + "ampersand-events": "^2.0.1", + "ampersand-version": "^1.0.2", + "lodash": "^4.11.1" + } + }, + "node_modules/ampersand-events": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ampersand-events/-/ampersand-events-2.0.2.tgz", + "integrity": "sha512-pPnVEJviRxXi9YhZA9j3GwGGBTlDLi+YIoBvrpKXgce+CO1nMlZU2aOV8OJogNuR2YPbptAUHNz7SKX+MvLj8A==", + "dev": true, + "dependencies": { + "ampersand-version": "^1.0.2", + "lodash": "^4.6.1" + } + }, + "node_modules/ampersand-state": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/ampersand-state/-/ampersand-state-5.0.3.tgz", + "integrity": "sha512-sr904K5zvw6mkGjFHhTcfBIdpoJ6mn/HrFg7OleRmBpw3apLb3Z0gVrgRTb7kK1wOLI34vs4S+IXqNHUeqWCzw==", + "dev": true, + "dependencies": { + "ampersand-events": "^2.0.1", + "ampersand-version": "^1.0.0", + "array-next": "~0.0.1", + "key-tree-store": "^1.3.0", + "lodash": "^4.12.0" + } + }, + "node_modules/ampersand-version": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ampersand-version/-/ampersand-version-1.0.2.tgz", + "integrity": "sha512-FVVLY7Pghtgc8pQl0rF3A3+OS/CZ+/ILLMIYIaO1cA9v5SRkainqUMfSot3fu32svuThIsYK3q9iCsH9W5+mWQ==", + "dev": true, + "dependencies": { + "find-root": "^0.1.1", + "through2": "^0.6.3" + } + }, + "node_modules/anser": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", + "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-fragments": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", + "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "colorette": "^1.0.7", + "slice-ansi": "^2.0.0", + "strip-ansi": "^5.0.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "optional": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/appdirsjs": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.7.tgz", + "integrity": "sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/application-config-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/application-config-path/-/application-config-path-0.1.1.tgz", + "integrity": "sha512-zy9cHePtMP0YhwG+CfHm0bgwdnga2X3gZexpdCwEj//dpb+TKajtiC8REEUJUSq6Ab4f9cgNy2l8ObXzCXFkEw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-next": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-next/-/array-next-0.0.1.tgz", + "integrity": "sha512-sBOC/Iaz2hCcYi2XlyRfyZCRUxamlE5NJXEFjE9BTx23HALnWAFsPjGtfrAclt9o3G/38Het2yyeyOd3CEY7lg==", + "dev": true + }, + "node_modules/array-parallel": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/array-parallel/-/array-parallel-0.1.3.tgz", + "integrity": "sha512-TDPTwSWW5E4oiFiKmz6RGJ/a80Y91GuLgUYuLd49+XBS75tYo8PNgaT2K/OxuQYqkoI852MDGBorg9OcUSTQ8w==", + "dev": true + }, + "node_modules/array-series": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/array-series/-/array-series-0.1.5.tgz", + "integrity": "sha512-L0XlBwfx9QetHOsbLDrE/vh2t018w9462HM3iaFfxRiK83aJjAt/Ja3NMkOW7FICwWTlQBa3ZbL5FKhuQWkDrg==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/asmcrypto.js": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/asmcrypto.js/-/asmcrypto.js-0.22.0.tgz", + "integrity": "sha512-usgMoyXjMbx/ZPdzTSXExhMPur2FTdz/Vo5PVx2gIaBcdAAJNOFlsdgqveM8Cff7W0v+xrf9BwjOV26JSAF9qA==", + "dev": true + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-2.4.0.tgz", + "integrity": "sha512-PvZC0FMyMut8aOnR2jAEGSkmRtHIUYPe9amUEnGjr9TdnUmsfoOkjrvUkOEU9mzpYBR1HyO9bF+8U1cLTMMHhQ==", + "dev": true, + "dependencies": { + "pvutils": "^1.1.3" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ast-types": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", + "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "dev": true + }, + "node_modules/b64-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/b64-lite/-/b64-lite-1.4.0.tgz", + "integrity": "sha512-aHe97M7DXt+dkpa8fHlCcm1CnskAHrJqEfMI0KN7dwqlzml/aUe1AGt6lk51HzrSfVD67xOso84sOpr+0wIe2w==", + "dev": true, + "dependencies": { + "base-64": "^0.1.0" + } + }, + "node_modules/b64u-lite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/b64u-lite/-/b64u-lite-1.1.0.tgz", + "integrity": "sha512-929qWGDVCRph7gQVTC6koHqQIpF4vtVaSbwLltFQo44B1bYUquALswZdBKFfrJCPEnsCOvWkJsPdQYZ/Ukhw8A==", + "dev": true, + "dependencies": { + "b64-lite": "^1.4.0" + } + }, + "node_modules/babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", + "dev": true, + "optional": true, + "peer": true, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz", + "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.5.0", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", + "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.5.0", + "core-js-compat": "^3.34.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", + "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.5.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-react-native-web": { + "version": "0.18.12", + "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.18.12.tgz", + "integrity": "sha512-4djr9G6fMdwQoD6LQ7hOKAm39+y12flWgovAqS1k5O8f42YQ3A1FFMyV5kKfetZuGhZO5BmNmOdRRZQ1TixtDw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/babel-plugin-syntax-trailing-function-commas": { + "version": "7.0.0-beta.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", + "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/babel-plugin-transform-flow-enums": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", + "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/plugin-syntax-flow": "^7.12.1" + } + }, + "node_modules/babel-preset-expo": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-10.0.1.tgz", + "integrity": "sha512-uWIGmLfbP3dS5+8nesxaW6mQs41d4iP7X82ZwRdisB/wAhKQmuJM9Y1jQe4006uNYkw6Phf2TT03ykLVro7KuQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/plugin-proposal-decorators": "^7.12.9", + "@babel/plugin-transform-export-namespace-from": "^7.22.11", + "@babel/plugin-transform-object-rest-spread": "^7.12.13", + "@babel/plugin-transform-parameters": "^7.22.15", + "@babel/preset-env": "^7.20.0", + "@babel/preset-react": "^7.22.15", + "@react-native/babel-preset": "^0.73.18", + "babel-plugin-react-native-web": "~0.18.10", + "react-refresh": "0.14.0" + } + }, + "node_modules/babel-preset-fbjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz", + "integrity": "sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-syntax-class-properties": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoped-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-member-expression-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-super": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-property-literals": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/backoff": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", + "integrity": "sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA==", + "dev": true, + "dependencies": { + "precond": "0.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/base-64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", + "integrity": "sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==", + "dev": true + }, + "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", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/better-opn": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", + "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "open": "^8.0.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true, + "peer": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/blueimp-md5": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", + "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", + "dev": true + }, + "node_modules/bplist-creator": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", + "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "stream-buffers": "2.2.x" + } + }, + "node_modules/bplist-parser": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz", + "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "big-integer": "1.6.x" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "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, + "optional": true, + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "optional": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.22.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", + "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "optional": true, + "peer": true, + "dependencies": { + "caniuse-lite": "^1.0.30001580", + "electron-to-chromium": "^1.4.648", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", + "dev": true, + "bin": { + "btoa": "bin/btoa.js" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "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" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "dev": true + }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/bytestreamjs": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/bytestreamjs/-/bytestreamjs-1.1.3.tgz", + "integrity": "sha512-JDGoiJ+yt+4Ui1e/vMWx5TRvmnErBBbsOkprXgbe1fRp2XZzI8MoknoiR/ZVCya9aWJbOhrJ5Heon1wrAdftkg==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cacache/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, + "optional": true, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cacache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/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, + "optional": true, + "peer": true + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001580", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001580.tgz", + "integrity": "sha512-mtj5ur2FFPZcCEpXFy8ADXbDACuNFXg6mxVDqp7tqooX6l3zwm+d8EPoeOSIFRDvHs8qu7/SLFOGniULkcH2iA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "optional": true, + "peer": true + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": "*" + } + }, + "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==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-launcher": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", + "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" + }, + "bin": { + "print-chrome-path": "bin/print-chrome-path.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/chromium-edge-launcher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/chromium-edge-launcher/-/chromium-edge-launcher-1.0.0.tgz", + "integrity": "sha512-pgtgjNKZ7i5U++1g1PWv75umkHvhVTDOQIZ+sjeUX9483S7Y6MUvO0lrd7ShGlQlFHMN4SwKTCq/X8hWrbv2KA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0", + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "node_modules/chromium-edge-launcher/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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" + } + ], + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "optional": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "optional": true + }, + "node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true, + "optional": true, + "peer": true + }, + "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==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", + "dev": true, + "optional": true + }, + "node_modules/component-type": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/component-type/-/component-type-1.2.2.tgz", + "integrity": "sha512-99VUHREHiN5cLeHm3YLq312p6v+HUEcwtLCAtelvUDI6+SH5g5Cr85oNR2S1o6ywzL0ykMbuwLzM2ANocjEOIA==", + "dev": true, + "optional": true, + "peer": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/compression/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==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/core-decorators": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/core-decorators/-/core-decorators-0.20.0.tgz", + "integrity": "sha512-7cp/Pz3AmQXjRwhAsFN+8ndRiBNyLxtZgC/fhKvrwQTf2ZlZma6LnimoJPrOqgxZ0tIeI9VvSs+QKe0OPJ0SuA==", + "dev": true + }, + "node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true, + "hasInstallScript": true + }, + "node_modules/core-js-compat": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.1.tgz", + "integrity": "sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "browserslist": "^4.22.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "dev": true, + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/cross-spawn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha512-yAXz/pA1tD8Gtg2S98Ekf/sewp3Lcp3YoFKJ4Hkp5h5yLWnKVTDU0kwjKJ8NDCYcfTLfyGkzTikst+jWypT1iA==", + "dev": true, + "dependencies": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", + "dev": true + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dag-map": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz", + "integrity": "sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defaults/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/del/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/deprecated-react-native-prop-types": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-5.0.0.tgz", + "integrity": "sha512-cIK8KYiiGVOFsKdPMmm1L3tA/Gl+JopXL6F5+C7x39MyPsQYnP57Im/D6bNUzcborD7fcMwiwZqcBdBXXZucYQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@react-native/normalize-colors": "^0.73.0", + "invariant": "^2.2.4", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/detectrtc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/detectrtc/-/detectrtc-1.4.1.tgz", + "integrity": "sha512-lxvyNN6/dSnwoVj1VstVFHel7S0BTmkfv1+01IBEy42D20pue27eB/MfphUOQz78jJ7WcQJDo6ZybhgBlUDi0Q==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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 + }, + "node_modules/dotenv": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.648", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.648.tgz", + "integrity": "sha512-EmFMarXeqJp9cUKu/QEciEApn0S/xRcpZWuAm32U7NgoZCimjsilKXHRO9saeEW55eHZagIDg6XTUOv32w9pjg==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/env-editor": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/env-editor/-/env-editor-0.4.2.tgz", + "integrity": "sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/envinfo": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz", + "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eol": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", + "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/errorhandler": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", + "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "accepts": "~1.3.7", + "escape-html": "~1.0.3" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "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==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/exec-async": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/exec-async/-/exec-async-2.2.0.tgz", + "integrity": "sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==", + "dev": true, + "optional": true, + "peer": true + }, + "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, + "optional": 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, + "optional": 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/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "optional": 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==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "shebang-regex": "^1.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, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/exifr": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/exifr/-/exifr-5.0.6.tgz", + "integrity": "sha512-iDB4IhKoKVF+uDDrHRlyNxWqGaTxYluVWqvBWVG54HkQZe8qkFYl9eQrjEP3d8Q4UMBZ9rWu3Pa+mfC+o4CZuw==", + "dev": true + }, + "node_modules/expo": { + "version": "50.0.4", + "resolved": "https://registry.npmjs.org/expo/-/expo-50.0.4.tgz", + "integrity": "sha512-8QWBvYZyKFd7pHxbtri8/ZITBR19QbrW2IkezAhs3ZOHR2kluSgNfyo9ojAe7GnOnE8hCB6Xe83Dbm0R3Ealhw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/runtime": "^7.20.0", + "@expo/cli": "0.17.3", + "@expo/config": "8.5.4", + "@expo/config-plugins": "7.8.4", + "@expo/metro-config": "0.17.3", + "@expo/vector-icons": "^14.0.0", + "babel-preset-expo": "~10.0.1", + "expo-asset": "~9.0.2", + "expo-file-system": "~16.0.5", + "expo-font": "~11.10.2", + "expo-keep-awake": "~12.8.2", + "expo-modules-autolinking": "1.10.2", + "expo-modules-core": "1.11.8", + "fbemitter": "^3.0.0", + "whatwg-url-without-unicode": "8.0.0-3" + }, + "bin": { + "expo": "bin/cli" + } + }, + "node_modules/expo-asset": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-9.0.2.tgz", + "integrity": "sha512-PzYKME1MgUOoUvwtdzhAyXkjXOXGiSYqGKG/MsXwWr0Ef5wlBaBm2DCO9V6KYbng5tBPFu6hTjoRNil1tBOSow==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@react-native/assets-registry": "~0.73.1", + "blueimp-md5": "^2.10.0", + "expo-constants": "~15.4.0", + "expo-file-system": "~16.0.0", + "invariant": "^2.2.4", + "md5-file": "^3.2.3" + } + }, + "node_modules/expo-constants": { + "version": "15.4.5", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-15.4.5.tgz", + "integrity": "sha512-1pVVjwk733hbbIjtQcvUFCme540v4gFemdNlaxM2UXKbfRCOh2hzgKN5joHMOysoXQe736TTUrRj7UaZI5Yyhg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@expo/config": "~8.5.0" + }, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-file-system": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-16.0.5.tgz", + "integrity": "sha512-JpKMbKfwTaMCbwUwq7MwcSbPR7r+IqZEL3RFam3ClPHDtKLnlEoywREeaDsWjSZb7dS25hG3WqXspfTuugCDvg==", + "dev": true, + "optional": true, + "peer": true, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-font": { + "version": "11.10.2", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-11.10.2.tgz", + "integrity": "sha512-AE0Q0LiWiVosQ/jlKUPoWoob7p3GwYM2xmLoUkuopO9RYh9NL1hZKHiMKcWBZyDG8Gww1GtBQwh7ZREST8+jjQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "fontfaceobserver": "^2.1.0" + }, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-keep-awake": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-12.8.2.tgz", + "integrity": "sha512-uiQdGbSX24Pt8nGbnmBtrKq6xL/Tm3+DuDRGBk/3ZE/HlizzNosGRIufIMJ/4B4FRw4dw8KU81h2RLuTjbay6g==", + "dev": true, + "optional": true, + "peer": true, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-modules-autolinking": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.0.3.tgz", + "integrity": "sha512-azkCRYj/DxbK4udDuDxA9beYzQTwpJ5a9QA0bBgha2jHtWdFGF4ZZWSY+zNA5mtU3KqzYt8jWHfoqgSvKyu1Aw==", + "dev": true, + "optional": true, + "dependencies": { + "chalk": "^4.1.0", + "commander": "^7.2.0", + "fast-glob": "^3.2.5", + "find-up": "~5.0.0", + "fs-extra": "^9.1.0" + }, + "bin": { + "expo-modules-autolinking": "bin/expo-modules-autolinking.js" + } + }, + "node_modules/expo-modules-autolinking/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "optional": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/expo-modules-autolinking/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "optional": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/expo-modules-autolinking/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/expo-modules-core": { + "version": "1.11.8", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-1.11.8.tgz", + "integrity": "sha512-rlctE3nCNLCGv3LosGQNaTuwGrr2SyQA+hOgci/0l+VRc0gFNtvl0gskph9C0tnN1jzBeb8rRZQYVj5ih1yxcA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "invariant": "^2.2.4" + } + }, + "node_modules/expo-random": { + "version": "13.6.0", + "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-13.6.0.tgz", + "integrity": "sha512-c4Ikio+a2sUyJC0386K6JplqjVDelsyqQfjiy4yCx+0epEu44AP99ipF+HsmZVOvsWsWkd/lkpq5kGnJON5EfA==", + "dev": true, + "optional": true, + "dependencies": { + "base64-js": "^1.3.0" + }, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo/node_modules/expo-modules-autolinking": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-1.10.2.tgz", + "integrity": "sha512-OEeoz0+zGx5EJwGtDm9pSywCr+gUCaisZV0mNkK7V3fuRl+EVPBSsI+957JwAc4ZxVps95jy28eLcRRtQ33yVg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@expo/config": "~8.5.0", + "chalk": "^4.1.0", + "commander": "^7.2.0", + "fast-glob": "^3.2.5", + "find-up": "^5.0.0", + "fs-extra": "^9.1.0" + }, + "bin": { + "expo-modules-autolinking": "bin/expo-modules-autolinking.js" + } + }, + "node_modules/expo/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/expo/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/expo/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "optional": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-xml-parser": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.3.tgz", + "integrity": "sha512-coV/D1MhrShMvU6D0I+VAK3umz6hUaxxhL0yp/9RjfiYUfAv14rDhGQL+PLForhMdr0wq3PiV07WtkkNjJjNHg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], + "optional": true, + "peer": true, + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fastq": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.0.tgz", + "integrity": "sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==", + "dev": true, + "optional": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fbemitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", + "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "fbjs": "^3.0.0" + } + }, + "node_modules/fbjs": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", + "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "cross-fetch": "^3.1.5", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^1.0.35" + } + }, + "node_modules/fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/fetch-retry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-4.1.1.tgz", + "integrity": "sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA==", + "dev": true, + "optional": true, + "peer": true + }, + "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, + "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/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "optional": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-root": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-0.1.2.tgz", + "integrity": "sha512-GyDxVgA61TZcrgDJPqOqGBpi80Uf2yIstubgizi7AjC9yPdRrqBR+Y0MvK4kXnYlaoz3d+SGxDHMYVkwI/yd2w==", + "dev": true + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "optional": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "micromatch": "^4.0.2" + } + }, + "node_modules/flow-enums-runtime": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz", + "integrity": "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/flow-parser": { + "version": "0.206.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.206.0.tgz", + "integrity": "sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/fontfaceobserver": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz", + "integrity": "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/freeport-async": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/freeport-async/-/freeport-async-2.0.0.tgz", + "integrity": "sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "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, + "optional": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-tsconfig": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", + "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/getenv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/getenv/-/getenv-1.0.0.tgz", + "integrity": "sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "optional": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "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, + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gm": { + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/gm/-/gm-1.25.0.tgz", + "integrity": "sha512-4kKdWXTtgQ4biIo7hZA396HT062nDVVHPjQcurNZ3o/voYN+o5FUC5kOwuORbpExp3XbTJ3SU7iRipiIhQtovw==", + "dev": true, + "dependencies": { + "array-parallel": "~0.1.3", + "array-series": "~0.1.5", + "cross-spawn": "^4.0.0", + "debug": "^3.1.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/gm/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "optional": true + }, + "node_modules/graphql": { + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", + "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/graphql-tag": { + "version": "2.12.6", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", + "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dev": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "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==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hermes-estree": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.15.0.tgz", + "integrity": "sha512-lLYvAd+6BnOqWdnNbP/Q8xfl8LOGw4wVjfrNd9Gt8eoFzhNBRVD95n4l2ksfMVOoxuVyegs85g83KS9QOsxbVQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/hermes-parser": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.15.0.tgz", + "integrity": "sha512-Q1uks5rjZlE9RjMMjSUCkGrEIPI5pKJILeCtK1VmTj7U4pf3wVPoo+cxfu+s4cBAPy2JzikIIdCZgBoR6x7U1Q==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "hermes-estree": "0.15.0" + } + }, + "node_modules/hermes-profile-transformer": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz", + "integrity": "sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/hermes-profile-transformer/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, + "optional": true, + "peer": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/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, + "optional": true, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/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, + "optional": true, + "peer": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", + "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=16.x" + } + }, + "node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "optional": true, + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/ip-anonymize": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ip-anonymize/-/ip-anonymize-0.1.0.tgz", + "integrity": "sha512-cZJu+N5JKKFGMK0eEQWNaQMn2EhCysciVM6eotCJwfqotj16BTfVchKsJCH6mQAT9N0GC7oWRcsZ6Lb8dDiwTA==", + "dev": true + }, + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "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 + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "optional": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-invalid-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", + "integrity": "sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-invalid-path/node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-invalid-path/node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-valid-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", + "integrity": "sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "is-invalid-path": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "optional": true, + "peer": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isomorphic-webcrypto": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/isomorphic-webcrypto/-/isomorphic-webcrypto-2.3.8.tgz", + "integrity": "sha512-XddQSI0WYlSCjxtm1AI8kWQOulf7hAN3k3DclF1sxDJZqOe0pcsOt675zvWW91cZH9hYs3nlA3Ev8QK5i80SxQ==", + "dev": true, + "dependencies": { + "@peculiar/webcrypto": "^1.0.22", + "asmcrypto.js": "^0.22.0", + "b64-lite": "^1.3.1", + "b64u-lite": "^1.0.1", + "msrcrypto": "^1.5.6", + "str2buf": "^1.3.0", + "webcrypto-shim": "^0.1.4" + }, + "optionalDependencies": { + "@unimodules/core": "*", + "@unimodules/react-native-adapter": "*", + "expo-random": "*", + "react-native-securerandom": "^0.1.1" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "node_modules/javascript-state-machine": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/javascript-state-machine/-/javascript-state-machine-3.1.0.tgz", + "integrity": "sha512-BwhYxQ1OPenBPXC735RgfB+ZUG8H3kjsx8hrYTgWnoy6TPipEy4fiicyhT2lxRKAXq9pG7CfFT8a2HLr6Hmwxg==", + "dev": true + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/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==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/jest-message-util/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, + "optional": true, + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/jest-message-util/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, + "optional": true, + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/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, + "optional": true, + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/jest-message-util/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, + "optional": true, + "peer": true + }, + "node_modules/jest-message-util/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, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/jest-message-util/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, + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/jest-message-util/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/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==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/jest-message-util/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, + "optional": true, + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "optional": 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" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/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==", + "dev": true, + "optional": true, + "peer": true + }, + "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, + "optional": 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-worker/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, + "optional": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jimp-compact": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/jimp-compact/-/jimp-compact-0.16.1.tgz", + "integrity": "sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/joi": { + "version": "17.12.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.12.0.tgz", + "integrity": "sha512-HSLsmSmXz+PV9PYoi3p7cgIbj06WnEBNT28n+bbBNcPZXZFqCzzvGqpTBPujx/Z0nh1+KNQPDrNgdmQ8dq0qYw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.4", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/join-component": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/join-component/-/join-component-1.1.0.tgz", + "integrity": "sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/jose": { + "version": "4.15.4", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.4.tgz", + "integrity": "sha512-W+oqK4H+r5sITxfxpSU+MMdr/YSWGvgZMQDIsNoBDGGy4i7GBPTtvFKibQzW06n3U3TqHjhvBJsirShsEJ6eeQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "optional": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "node_modules/jsc-android": { + "version": "250231.0.0", + "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-250231.0.0.tgz", + "integrity": "sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/jsc-safe-url": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz", + "integrity": "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/jscodeshift": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", + "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.13.16", + "@babel/parser": "^7.13.16", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/preset-flow": "^7.13.13", + "@babel/preset-typescript": "^7.13.0", + "@babel/register": "^7.13.16", + "babel-core": "^7.0.0-bridge.0", + "chalk": "^4.1.2", + "flow-parser": "0.*", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.4", + "neo-async": "^2.5.0", + "node-dir": "^0.1.17", + "recast": "^0.21.0", + "temp": "^0.8.4", + "write-file-atomic": "^2.3.0" + }, + "bin": { + "jscodeshift": "bin/jscodeshift.js" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-deref-sync": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/json-schema-deref-sync/-/json-schema-deref-sync-0.13.0.tgz", + "integrity": "sha512-YBOEogm5w9Op337yb6pAT6ZXDqlxAsQCanM3grid8lMWNxRJO/zWEJi3ZzqDL8boWfwhTFym5EFrNgWwpqcBRg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "clone": "^2.1.2", + "dag-map": "~1.0.0", + "is-valid-path": "^0.1.1", + "lodash": "^4.17.13", + "md5": "~2.2.0", + "memory-cache": "~0.2.0", + "traverse": "~0.6.6", + "valid-url": "~1.0.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/json-schema-deref-sync/node_modules/md5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", + "integrity": "sha512-PlGG4z5mBANDGCKsYQe0CaUYHdZYZt8ZPZLmEt+Urf0W4GlpTX4HescwHU+dc9+Z/G/vZKYZYFrwgm9VxK6QOQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "charenc": "~0.0.1", + "crypt": "~0.0.1", + "is-buffer": "~1.1.1" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optional": true, + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dev": true, + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dev": true, + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dev": true, + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/key-tree-store": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/key-tree-store/-/key-tree-store-1.3.0.tgz", + "integrity": "sha512-qXk+lR+LXvGos3wqMxIMWweKDgCx8ZKWM6BEPm7iZkOKug5ggi66vUt+3vbtKJLBrAyOxQ4S8JRwK++Q4XZRmw==", + "dev": true + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lighthouse-logger": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", + "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "debug": "^2.6.9", + "marky": "^1.2.2" + } + }, + "node_modules/lighthouse-logger/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/lighthouse-logger/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/lightningcss": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.19.0.tgz", + "integrity": "sha512-yV5UR7og+Og7lQC+70DA7a8ta1uiOPnWPJfxa0wnxylev5qfo4P+4iMpzWAdYWOca4jdNQZii+bDL/l+4hUXIA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.19.0", + "lightningcss-darwin-x64": "1.19.0", + "lightningcss-linux-arm-gnueabihf": "1.19.0", + "lightningcss-linux-arm64-gnu": "1.19.0", + "lightningcss-linux-arm64-musl": "1.19.0", + "lightningcss-linux-x64-gnu": "1.19.0", + "lightningcss-linux-x64-musl": "1.19.0", + "lightningcss-win32-x64-msvc": "1.19.0" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.19.0.tgz", + "integrity": "sha512-wIJmFtYX0rXHsXHSr4+sC5clwblEMji7HHQ4Ub1/CznVRxtCFha6JIt5JZaNf8vQrfdZnBxLLC6R8pC818jXqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.19.0.tgz", + "integrity": "sha512-Lif1wD6P4poaw9c/4Uh2z+gmrWhw/HtXFoeZ3bEsv6Ia4tt8rOJBdkfVaUJ6VXmpKHALve+iTyP2+50xY1wKPw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.19.0.tgz", + "integrity": "sha512-P15VXY5682mTXaiDtbnLYQflc8BYb774j2R84FgDLJTN6Qp0ZjWEFyN1SPqyfTj2B2TFjRHRUvQSSZ7qN4Weig==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.19.0.tgz", + "integrity": "sha512-zwXRjWqpev8wqO0sv0M1aM1PpjHz6RVIsBcxKszIG83Befuh4yNysjgHVplF9RTU7eozGe3Ts7r6we1+Qkqsww==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.19.0.tgz", + "integrity": "sha512-vSCKO7SDnZaFN9zEloKSZM5/kC5gbzUjoJQ43BvUpyTFUX7ACs/mDfl2Eq6fdz2+uWhUh7vf92c4EaaP4udEtA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.19.0.tgz", + "integrity": "sha512-0AFQKvVzXf9byrXUq9z0anMGLdZJS+XSDqidyijI5njIwj6MdbvX2UZK/c4FfNmeRa2N/8ngTffoIuOUit5eIQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.19.0.tgz", + "integrity": "sha512-SJoM8CLPt6ECCgSuWe+g0qo8dqQYVcPiW2s19dxkmSI5+Uu1GIRzyKA0b7QqmEXolA+oSJhQqCmJpzjY4CuZAg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.19.0.tgz", + "integrity": "sha512-C+VuUTeSUOAaBZZOPT7Etn/agx/MatzJzGRkeV+zEABmPuntv1zihncsi+AyGmjkkzq3wVedEy7h0/4S84mUtg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "optional": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash._arraycopy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz", + "integrity": "sha512-RHShTDnPKP7aWxlvXKiDT6IX2jCs6YZLCtNhOru/OX2Q/tzX295vVBK5oX1ECtN+2r86S0Ogy8ykP1sgCZAN0A==", + "dev": true + }, + "node_modules/lodash._arrayeach": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz", + "integrity": "sha512-Mn7HidOVcl3mkQtbPsuKR0Fj0N6Q6DQB77CtYncZcJc0bx5qv2q4Gl6a0LC1AN+GSxpnBDNnK3CKEm9XNA4zqQ==", + "dev": true + }, + "node_modules/lodash._baseassign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha512-t3N26QR2IdSN+gqSy9Ds9pBu/J1EAFEshKlUHpJG3rvyJOYgcELIxcIeKKfZk7sjOz11cFfzJRsyFry/JyabJQ==", + "dev": true, + "dependencies": { + "lodash._basecopy": "^3.0.0", + "lodash.keys": "^3.0.0" + } + }, + "node_modules/lodash._baseclone": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz", + "integrity": "sha512-1K0dntf2dFQ5my0WoGKkduewR6+pTNaqX03kvs45y7G5bzl4B3kTR4hDfJIc2aCQDeLyQHhS280tc814m1QC1Q==", + "dev": true, + "dependencies": { + "lodash._arraycopy": "^3.0.0", + "lodash._arrayeach": "^3.0.0", + "lodash._baseassign": "^3.0.0", + "lodash._basefor": "^3.0.0", + "lodash.isarray": "^3.0.0", + "lodash.keys": "^3.0.0" + } + }, + "node_modules/lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha512-rFR6Vpm4HeCK1WPGvjZSJ+7yik8d8PVUdCJx5rT2pogG4Ve/2ZS7kfmO5l5T2o5V2mqlNIfSF5MZlr1+xOoYQQ==", + "dev": true + }, + "node_modules/lodash._basefor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz", + "integrity": "sha512-6bc3b8grkpMgDcVJv9JYZAk/mHgcqMljzm7OsbmcE2FGUMmmLQTPHlh/dFqR8LA0GQ7z4K67JSotVKu5058v1A==", + "dev": true + }, + "node_modules/lodash._bindcallback": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", + "integrity": "sha512-2wlI0JRAGX8WEf4Gm1p/mv/SZ+jLijpj0jyaE/AXeuQphzCgD8ZQW4oSpoN8JAopujOFGU3KMuq7qfHBWlGpjQ==", + "dev": true + }, + "node_modules/lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==", + "dev": true + }, + "node_modules/lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha512-De+ZbrMu6eThFti/CSzhRvTKMgQToLxbij58LMfM8JnYDNSOjkjTCIaa8ixglOeGh2nyPlakbt5bJWJ7gvpYlQ==", + "dev": true + }, + "node_modules/lodash.clone": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-3.0.3.tgz", + "integrity": "sha512-yVYPpFTdZDCLG2p07gVRTvcwN5X04oj2hu4gG6r0fer58JA08wAVxXzWM+CmmxO2bzOH8u8BkZTZqgX6juVF7A==", + "dev": true, + "dependencies": { + "lodash._baseclone": "^3.0.0", + "lodash._bindcallback": "^3.0.0", + "lodash._isiterateecall": "^3.0.0" + } + }, + "node_modules/lodash.clonedeep": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz", + "integrity": "sha512-I8MpGh5z+6OixDAAb21teLSZDmqVPjlq02Q7ZFrbn2xnQHYYuJf6on/94SWpF/p0s3p/cEv/53ro4AhDOfCR0g==", + "dev": true, + "dependencies": { + "lodash._baseclone": "^3.0.0", + "lodash._bindcallback": "^3.0.0" + } + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "dev": true + }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", + "dev": true + }, + "node_modules/lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==", + "dev": true + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "dev": true + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "dev": true + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "dev": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "dev": true + }, + "node_modules/lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==", + "dev": true, + "dependencies": { + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" + } + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true + }, + "node_modules/lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/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, + "optional": true, + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/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, + "optional": true, + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/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, + "optional": true, + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/log-symbols/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, + "optional": true, + "peer": true + }, + "node_modules/log-symbols/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, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/log-symbols/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, + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/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, + "optional": true, + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/logkitty": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", + "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-fragments": "^0.2.1", + "dayjs": "^1.8.15", + "yargs": "^15.1.0" + }, + "bin": { + "logkitty": "bin/logkitty.js" + } + }, + "node_modules/logkitty/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/logkitty/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/logkitty/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/logkitty/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/logkitty/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", + "dev": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "optional": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/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, + "optional": true, + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/marky": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", + "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/md5-file": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-3.2.3.tgz", + "integrity": "sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "buffer-alloc": "^1.1.0" + }, + "bin": { + "md5-file": "cli.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/md5hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/md5hex/-/md5hex-1.0.0.tgz", + "integrity": "sha512-c2YOUbp33+6thdCUi34xIyOU/a7bvGKj/3DB1iaPMTuPHf/Q2d5s4sn1FaCOO43XkXggnb08y5W2PU8UNYNLKQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/memory-cache": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", + "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/metro": { + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.5.tgz", + "integrity": "sha512-OE/CGbOgbi8BlTN1QqJgKOBaC27dS0JBQw473JcivrpgVnqIsluROA7AavEaTVUrB9wPUZvoNVDROn5uiM2jfw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@babel/core": "^7.20.0", + "@babel/generator": "^7.20.0", + "@babel/parser": "^7.20.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "accepts": "^1.3.7", + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "denodeify": "^1.2.1", + "error-stack-parser": "^2.0.6", + "graceful-fs": "^4.2.4", + "hermes-parser": "0.18.2", + "image-size": "^1.0.2", + "invariant": "^2.2.4", + "jest-worker": "^29.6.3", + "jsc-safe-url": "^0.2.2", + "lodash.throttle": "^4.1.1", + "metro-babel-transformer": "0.80.5", + "metro-cache": "0.80.5", + "metro-cache-key": "0.80.5", + "metro-config": "0.80.5", + "metro-core": "0.80.5", + "metro-file-map": "0.80.5", + "metro-resolver": "0.80.5", + "metro-runtime": "0.80.5", + "metro-source-map": "0.80.5", + "metro-symbolicate": "0.80.5", + "metro-transform-plugins": "0.80.5", + "metro-transform-worker": "0.80.5", + "mime-types": "^2.1.27", + "node-fetch": "^2.2.0", + "nullthrows": "^1.1.1", + "rimraf": "^3.0.2", + "serialize-error": "^2.1.0", + "source-map": "^0.5.6", + "strip-ansi": "^6.0.0", + "throat": "^5.0.0", + "ws": "^7.5.1", + "yargs": "^17.6.2" + }, + "bin": { + "metro": "src/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-babel-transformer": { + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.5.tgz", + "integrity": "sha512-sxH6hcWCorhTbk4kaShCWsadzu99WBL4Nvq4m/sDTbp32//iGuxtAnUK+ZV+6IEygr2u9Z0/4XoZ8Sbcl71MpA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.20.0", + "hermes-parser": "0.18.2", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-babel-transformer/node_modules/hermes-estree": { + "version": "0.18.2", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.18.2.tgz", + "integrity": "sha512-KoLsoWXJ5o81nit1wSyEZnWUGy9cBna9iYMZBR7skKh7okYAYKqQ9/OczwpMHn/cH0hKDyblulGsJ7FknlfVxQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/metro-babel-transformer/node_modules/hermes-parser": { + "version": "0.18.2", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.18.2.tgz", + "integrity": "sha512-1eQfvib+VPpgBZ2zYKQhpuOjw1tH+Emuib6QmjkJWJMhyjM8xnXMvA+76o9LhF0zOAJDZgPfQhg43cyXEyl5Ew==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "hermes-estree": "0.18.2" + } + }, + "node_modules/metro-cache": { + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.5.tgz", + "integrity": "sha512-2u+dQ4PZwmC7eZo9uMBNhQQMig9f+w4QWBZwXCdVy/RYOHM0eObgGdMEOwODo73uxie82T9lWzxr3aZOZ+Nqtw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "metro-core": "0.80.5", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-cache-key": { + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.5.tgz", + "integrity": "sha512-fr3QLZUarsB3tRbVcmr34kCBsTHk0Sh9JXGvBY/w3b2lbre+Lq5gtgLyFElHPecGF7o4z1eK9r3ubxtScHWcbA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/metro-config": { + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.5.tgz", + "integrity": "sha512-elqo/lwvF+VjZ1OPyvmW/9hSiGlmcqu+rQvDKw5F5WMX48ZC+ySTD1WcaD7e97pkgAlJHVYqZ98FCjRAYOAFRQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "connect": "^3.6.5", + "cosmiconfig": "^5.0.5", + "jest-validate": "^29.6.3", + "metro": "0.80.5", + "metro-cache": "0.80.5", + "metro-core": "0.80.5", + "metro-runtime": "0.80.5" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-core": { + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.5.tgz", + "integrity": "sha512-vkLuaBhnZxTVpaZO8ZJVEHzjaqSXpOdpAiztSZ+NDaYM6jEFgle3/XIbLW91jTSf2+T8Pj5yB1G7KuOX+BcVwg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "lodash.throttle": "^4.1.1", + "metro-resolver": "0.80.5" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-file-map": { + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.5.tgz", + "integrity": "sha512-bKCvJ05drjq6QhQxnDUt3I8x7bTcHo3IIKVobEr14BK++nmxFGn/BmFLRzVBlghM6an3gqwpNEYxS5qNc+VKcg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "anymatch": "^3.0.3", + "debug": "^2.2.0", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "invariant": "^2.2.4", + "jest-worker": "^29.6.3", + "micromatch": "^4.0.4", + "node-abort-controller": "^3.1.1", + "nullthrows": "^1.1.1", + "walker": "^1.0.7" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/metro-file-map/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/metro-file-map/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/metro-minify-terser": { + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.5.tgz", + "integrity": "sha512-S7oZLLcab6YXUT6jYFX/ZDMN7Fq6xBGGAG8liMFU1UljX6cTcEC2u+UIafYgCLrdVexp/+ClxrIetVPZ5LtL/g==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "terser": "^5.15.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-resolver": { + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.5.tgz", + "integrity": "sha512-haJ/Hveio3zv/Fr4eXVdKzjUeHHDogYok7OpRqPSXGhTXisNXB+sLN7CpcUrCddFRUDLnVaqQOYwhYsFndgUwA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-runtime": { + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.5.tgz", + "integrity": "sha512-L0syTWJUdWzfUmKgkScr6fSBVTh6QDr8eKEkRtn40OBd8LPagrJGySBboWSgbyn9eIb4ayW3Y347HxgXBSAjmg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/runtime": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-source-map": { + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.5.tgz", + "integrity": "sha512-DwSF4l03mKPNqCtyQ6K23I43qzU1BViAXnuH81eYWdHglP+sDlPpY+/7rUahXEo6qXEHXfAJgVoo1sirbXbmsQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "invariant": "^2.2.4", + "metro-symbolicate": "0.80.5", + "nullthrows": "^1.1.1", + "ob1": "0.80.5", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-source-map/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro-symbolicate": { + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.5.tgz", + "integrity": "sha512-IsM4mTYvmo9JvIqwEkCZ5+YeDVPST78Q17ZgljfLdHLSpIivOHp9oVoiwQ/YGbLx0xRHRIS/tKiXueWBnj3UWA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "invariant": "^2.2.4", + "metro-source-map": "0.80.5", + "nullthrows": "^1.1.1", + "source-map": "^0.5.6", + "through2": "^2.0.1", + "vlq": "^1.0.0" + }, + "bin": { + "metro-symbolicate": "src/index.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-symbolicate/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/metro-symbolicate/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==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/metro-symbolicate/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro-symbolicate/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/metro-symbolicate/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/metro-transform-plugins": { + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.5.tgz", + "integrity": "sha512-7IdlTqK/k5+qE3RvIU5QdCJUPk4tHWEqgVuYZu8exeW+s6qOJ66hGIJjXY/P7ccucqF+D4nsbAAW5unkoUdS6g==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/generator": "^7.20.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.20.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-transform-worker": { + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.5.tgz", + "integrity": "sha512-Q1oM7hfP+RBgAtzRFBDjPhArELUJF8iRCZ8OidqCpYzQJVGuJZ7InSnIf3hn1JyqiUQwv2f1LXBO78i2rAjzyA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/generator": "^7.20.0", + "@babel/parser": "^7.20.0", + "@babel/types": "^7.20.0", + "metro": "0.80.5", + "metro-babel-transformer": "0.80.5", + "metro-cache": "0.80.5", + "metro-cache-key": "0.80.5", + "metro-minify-terser": "0.80.5", + "metro-source-map": "0.80.5", + "metro-transform-plugins": "0.80.5", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/metro/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/metro/node_modules/hermes-estree": { + "version": "0.18.2", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.18.2.tgz", + "integrity": "sha512-KoLsoWXJ5o81nit1wSyEZnWUGy9cBna9iYMZBR7skKh7okYAYKqQ9/OczwpMHn/cH0hKDyblulGsJ7FknlfVxQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/metro/node_modules/hermes-parser": { + "version": "0.18.2", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.18.2.tgz", + "integrity": "sha512-1eQfvib+VPpgBZ2zYKQhpuOjw1tH+Emuib6QmjkJWJMhyjM8xnXMvA+76o9LhF0zOAJDZgPfQhg43cyXEyl5Ew==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "hermes-estree": "0.18.2" + } + }, + "node_modules/metro/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/metro/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/metro/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/metro/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "optional": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "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, + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "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, + "optional": true, + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "optional": true, + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass/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, + "optional": true, + "peer": true + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/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, + "optional": true, + "peer": true + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/msrcrypto": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/msrcrypto/-/msrcrypto-1.5.8.tgz", + "integrity": "sha512-ujZ0TRuozHKKm6eGbKHfXef7f+esIhEckmThVnz7RNyiOJd7a6MXj2JGBoL9cnPDW+JMG16MoTUh5X+XXjI66Q==", + "dev": true + }, + "node_modules/mv": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/mv/node_modules/glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mv/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mv/node_modules/rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "glob": "^6.0.1" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "optional": true, + "peer": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "ncp": "bin/ncp" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/nested-error-stacks": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz", + "integrity": "sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==", + "dev": true, + "optional": true, + "peer": true + }, + "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, + "optional": true, + "peer": true + }, + "node_modules/nocache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/nocache/-/nocache-3.0.4.tgz", + "integrity": "sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/node-abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/node-dir": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "minimatch": "^3.0.2" + }, + "engines": { + "node": ">= 0.10.5" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/node-jose": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-jose/-/node-jose-2.2.0.tgz", + "integrity": "sha512-XPCvJRr94SjLrSIm4pbYHKLEaOsDvJCpyFw/6V/KK/IXmyZ6SFBzAUDO9HQf4DB/nTEFcRGH87mNciOP23kFjw==", + "dev": true, + "dependencies": { + "base64url": "^3.0.1", + "buffer": "^6.0.3", + "es6-promise": "^4.2.8", + "lodash": "^4.17.21", + "long": "^5.2.0", + "node-forge": "^1.2.1", + "pako": "^2.0.4", + "process": "^0.11.10", + "uuid": "^9.0.0" + } + }, + "node_modules/node-jose/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/node-kms": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-kms/-/node-kms-0.4.0.tgz", + "integrity": "sha512-Tvhs7XTvBgWLZUrAeLKDqzvlomaZWwMoIXWImMc/IbvTijLoOrkovZo+PeW0ivf/8fBlg5EihPCwKg/dy9r+sA==", + "dev": true, + "dependencies": { + "es6-promise": "^2.0.1", + "lodash.clone": "^3.0.2", + "lodash.clonedeep": "^3.0.1", + "node-jose": "^2.0.0", + "uuid": "^2.0.1" + } + }, + "node_modules/node-kms/node_modules/es6-promise": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz", + "integrity": "sha512-oyOjMhyKMLEjOOtvkwg0G4pAzLQ9WdbbeX7WdqKzvYXu+UFgD0Zo/Brq5Q49zNmnGPPzV5rmYvrr0jz1zWx8Iw==", + "dev": true + }, + "node_modules/node-kms/node_modules/uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha512-FULf7fayPdpASncVy4DLh3xydlXEJJpvIELjYjNeQWYUZ9pclcpvCZSr2gkmN2FrrGcI7G/cJsIEwk5/8vfXpg==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true + }, + "node_modules/node-random-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/node-random-name/-/node-random-name-1.0.1.tgz", + "integrity": "sha512-7+IpyBRtbHvTWXjdZxjxyaafdggIvA3IpNf2W3ZRe+ok3UyE32Qb8PCb4fKKPdZCCjoAk358yQZWywAimw8KCw==", + "dev": true, + "dependencies": { + "alea": "0.0.9" + } + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/node-scr": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/node-scr/-/node-scr-0.3.0.tgz", + "integrity": "sha512-Hb0ykojynSbt7ra6eml6NX39WAumFfU3G81XvLpp2H7y8KjQc29oEIf2TlgZQCfA+pyxbY5t4a1xBqPpyrbpvw==", + "dev": true, + "dependencies": { + "es6-promise": "^2.0.1", + "lodash.clone": "^3.0.2", + "node-jose": "^2.0.0" + } + }, + "node_modules/node-scr/node_modules/es6-promise": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz", + "integrity": "sha512-oyOjMhyKMLEjOOtvkwg0G4pAzLQ9WdbbeX7WdqKzvYXu+UFgD0Zo/Brq5Q49zNmnGPPzV5rmYvrr0jz1zWx8Iw==", + "dev": true + }, + "node_modules/node-stream-zip": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", + "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.12.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/antelle" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-package-arg": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-7.0.0.tgz", + "integrity": "sha512-xXxr8y5U0kl8dVkz2oK7yZjPBvqM2fwaO5l3Yg13p03v8+E3qQcD0JNhHzjL1vyGgxcKkD0cco+NLR72iuPk3g==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "hosted-git-info": "^3.0.2", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "node_modules/npm-package-arg/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, + "optional": true, + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "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==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/ob1": { + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.5.tgz", + "integrity": "sha512-zYDMnnNrFi/1Tqh0vo3PE4p97Tpl9/4MP2k2ECvkbLOZzQuAYZJLTUYVLZb7hJhbhjT+JJxAwBGS8iu5hCSd1w==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ora/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, + "optional": true, + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/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, + "optional": true, + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/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, + "optional": true, + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/ora/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, + "optional": true, + "peer": true + }, + "node_modules/ora/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, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ora/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, + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/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, + "optional": true, + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "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, + "optional": 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", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "optional": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "optional": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", + "dev": true + }, + "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 + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse-png": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-png/-/parse-png-2.1.0.tgz", + "integrity": "sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "pngjs": "^3.3.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/password-prompt": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.3.tgz", + "integrity": "sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-escapes": "^4.3.2", + "cross-spawn": "^7.0.3" + } + }, + "node_modules/password-prompt/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/password-prompt/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/password-prompt/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkijs": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/pkijs/-/pkijs-2.4.0.tgz", + "integrity": "sha512-cjJP/mYuGyMrjJ49jI04khId5Oufd3nFTUYBzQTIIVNI7/oAWdwXEfpwTF8HELFV/gz+WGYUBHCe3KHWD8rYvg==", + "dev": true, + "dependencies": { + "asn1js": "^3.0.3", + "bytestreamjs": "^1.0.29", + "pvutils": "^1.1.3" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pkijs/node_modules/asn1js": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.5.tgz", + "integrity": "sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==", + "dev": true, + "dependencies": { + "pvtsutils": "^1.3.2", + "pvutils": "^1.1.3", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/plist": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", + "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + }, + "engines": { + "node": ">=10.4.0" + } + }, + "node_modules/plist/node_modules/@xmldom/xmldom": { + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", + "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/plist/node_modules/xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss": { + "version": "8.4.33", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", + "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "optional": true, + "peer": true, + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/precond": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", + "integrity": "sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/pretty-format/node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/pretty-format/node_modules/@types/yargs": { + "version": "15.0.19", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", + "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/process": { + "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, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pvtsutils": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.5.tgz", + "integrity": "sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==", + "dev": true, + "dependencies": { + "tslib": "^2.6.1" + } + }, + "node_modules/pvutils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", + "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/qrcode-terminal": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz", + "integrity": "sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/qs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "inherits": "~2.0.3" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "optional": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-devtools-core": { + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.28.5.tgz", + "integrity": "sha512-cq/o30z9W2Wb4rzBefjv5fBalHU0rJGZCHAkf/RHSBWSSYwh8PlQTqqOJmgIIbBtpj27T6FIPXeomIjZtCNVqA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "shell-quote": "^1.6.1", + "ws": "^7" + } + }, + "node_modules/react-devtools-core/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/react-native": { + "version": "0.73.2", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.73.2.tgz", + "integrity": "sha512-7zj9tcUYpJUBdOdXY6cM8RcXYWkyql4kMyGZflW99E5EuFPoC7Ti+ZQSl7LP9ZPzGD0vMfslwyDW0I4tPWUCFw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jest/create-cache-key-function": "^29.6.3", + "@react-native-community/cli": "12.3.0", + "@react-native-community/cli-platform-android": "12.3.0", + "@react-native-community/cli-platform-ios": "12.3.0", + "@react-native/assets-registry": "0.73.1", + "@react-native/codegen": "0.73.2", + "@react-native/community-cli-plugin": "0.73.12", + "@react-native/gradle-plugin": "0.73.4", + "@react-native/js-polyfills": "0.73.1", + "@react-native/normalize-colors": "0.73.2", + "@react-native/virtualized-lists": "0.73.4", + "abort-controller": "^3.0.0", + "anser": "^1.4.9", + "ansi-regex": "^5.0.0", + "base64-js": "^1.5.1", + "deprecated-react-native-prop-types": "^5.0.0", + "event-target-shim": "^5.0.1", + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "jest-environment-node": "^29.6.3", + "jsc-android": "^250231.0.0", + "memoize-one": "^5.0.0", + "metro-runtime": "^0.80.3", + "metro-source-map": "^0.80.3", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1", + "pretty-format": "^26.5.2", + "promise": "^8.3.0", + "react-devtools-core": "^4.27.7", + "react-refresh": "^0.14.0", + "react-shallow-renderer": "^16.15.0", + "regenerator-runtime": "^0.13.2", + "scheduler": "0.24.0-canary-efb381bbf-20230505", + "stacktrace-parser": "^0.1.10", + "whatwg-fetch": "^3.0.0", + "ws": "^6.2.2", + "yargs": "^17.6.2" + }, + "bin": { + "react-native": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "react": "18.2.0" + } + }, + "node_modules/react-native-securerandom": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/react-native-securerandom/-/react-native-securerandom-0.1.1.tgz", + "integrity": "sha512-CozcCx0lpBLevxiXEb86kwLRalBCHNjiGPlw3P7Fi27U6ZLdfjOCNRHD1LtBKcvPvI3TvkBXB3GOtLvqaYJLGw==", + "dev": true, + "optional": true, + "dependencies": { + "base64-js": "*" + }, + "peerDependencies": { + "react-native": "*" + } + }, + "node_modules/react-native/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/react-native/node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/react-native/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, + "optional": true, + "peer": true + }, + "node_modules/react-native/node_modules/ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-shallow-renderer": { + "version": "16.15.0", + "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz", + "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "object-assign": "^4.1.1", + "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "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, + "dependencies": { + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/readline": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", + "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/recast": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz", + "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ast-types": "0.15.2", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "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 + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/remove-trailing-slash": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz", + "integrity": "sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/requireg": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/requireg/-/requireg-0.2.2.tgz", + "integrity": "sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "nested-error-stacks": "~2.0.1", + "rc": "~1.2.7", + "resolve": "~1.7.1" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/requireg/node_modules/resolve": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "path-parse": "^1.0.5" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "optional": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rtcpeerconnection-shim": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/rtcpeerconnection-shim/-/rtcpeerconnection-shim-1.2.15.tgz", + "integrity": "sha512-C6DxhXt7bssQ1nHb154lqeL0SXz5Dx4RczXZu2Aa/L1NJFnEVDxFwCBo3fqtuljhHIGceg5JKBV4XJ0gW5JKyw==", + "dev": true, + "dependencies": { + "sdp": "^2.6.0" + }, + "engines": { + "node": ">=6.0.0", + "npm": ">=3.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true, + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-json-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/scheduler": { + "version": "0.24.0-canary-efb381bbf-20230505", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.24.0-canary-efb381bbf-20230505.tgz", + "integrity": "sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/sdp": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/sdp/-/sdp-2.12.0.tgz", + "integrity": "sha512-jhXqQAQVM+8Xj5EjJGVweuEzgtGWb3tmEEpl3CLP3cStInSbVHSg0QWOGQzNq8pSID4JkpeV2mPqlMDLrm0/Vw==", + "dev": true + }, + "node_modules/sdp-transform": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/sdp-transform/-/sdp-transform-2.14.1.tgz", + "integrity": "sha512-RjZyX3nVwJyCuTo5tGPx+PZWkDMCg7oOLpSlhjDdZfwUoNqG1mM8nyj31IGHyaPWXhjbP7cdK3qZ2bmkJ1GzRw==", + "dev": true, + "bin": { + "sdp-verify": "checker.js" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "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/semver/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 + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/send/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", + "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/set-function-length": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", + "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.1", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.2", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "optional": true, + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/simple-plist": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz", + "integrity": "sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "bplist-creator": "0.1.0", + "bplist-parser": "0.3.1", + "plist": "^3.0.5" + } + }, + "node_modules/simple-plist/node_modules/bplist-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz", + "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "big-integer": "1.6.x" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/slice-ansi/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, + "optional": true, + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/slice-ansi/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, + "optional": true, + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/slice-ansi/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, + "optional": true, + "peer": true + }, + "node_modules/slugify": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", + "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8.0.0" + } + }, + "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/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==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "optional": true, + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/speedybot": { + "version": "2.0.0-beta.72", + "resolved": "https://registry.npmjs.org/speedybot/-/speedybot-2.0.0-beta.72.tgz", + "integrity": "sha512-7+AasY13X00mGtqOOjWOClAXGB8mUR2D601/zuYbuCke6Z8tRvfwKPBVSHkEdUSggRJ6DQcRsWG/LchXZEQUjA==", + "bin": { + "speedybot": "bin/cli.js" + }, + "engines": { + "node": ">=18.11.0" + } + }, + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "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, + "optional": true, + "peer": true + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "type-fest": "^0.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/str2buf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/str2buf/-/str2buf-1.3.0.tgz", + "integrity": "sha512-xIBmHIUHYZDP4HyoXGHYNVmxlXLXDrtFHYT0eV6IOdEj3VO9ccaF1Ejl9Oq8iFjITllpT8FhaXb4KsNmw+3EuA==", + "dev": true + }, + "node_modules/stream-buffers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "integrity": "sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "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, + "optional": 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", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/strtok3": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz", + "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==", + "dev": 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/structured-headers": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/structured-headers/-/structured-headers-0.4.1.tgz", + "integrity": "sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/sucrase": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "optional": 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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sudo-prompt": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-8.2.5.tgz", + "integrity": "sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "optional": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tar": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/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, + "optional": true, + "peer": true + }, + "node_modules/temp": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", + "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "rimraf": "~2.6.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/temp/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/tempy": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.7.1.tgz", + "integrity": "sha512-vXPxwOyaNVi9nyczO16mxmHGpl6ASC5/TVhRRHpqeYHvKQm58EaWNvZXxAhR0lYYnBOQFjXjhzeLsaXdjxLjRg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "del": "^6.0.0", + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/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, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz", + "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/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, + "optional": true, + "peer": true + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", + "dev": true, + "dependencies": { + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + }, + "node_modules/through2/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "optional": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "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, + "dependencies": { + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/traverse": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.8.tgz", + "integrity": "sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "optional": true, + "peer": true + }, + "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 + }, + "node_modules/tsx": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.7.0.tgz", + "integrity": "sha512-I+t79RYPlEYlHn9a+KzwrvEwhJg35h/1zHsLC2JXvhC2mdynMv6Zxzvhv5EMV6VF5qJlLlkSnMVvdZV3PSIGcg==", + "dev": true, + "dependencies": { + "esbuild": "~0.19.10", + "get-tsconfig": "^4.7.2" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-2.1.0.tgz", + "integrity": "sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==", + "dev": true, + "optionalDependencies": { + "rxjs": "*" + } + }, + "node_modules/typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ua-parser-js": { + "version": "1.0.37", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz", + "integrity": "sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "optional": true, + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "optional": true, + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "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==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "optional": true, + "peer": true, + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-join": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", + "integrity": "sha512-EGXjXJZhIHiQMK2pQukuFcL303nskqIRzWvPvV5O8miOfwoUb9G+a/Cld60kUyeaybEI94wvVClT10DtfeAExA==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/urlsafe-base64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/urlsafe-base64/-/urlsafe-base64-1.0.0.tgz", + "integrity": "sha512-RtuPeMy7c1UrHwproMZN9gN6kiZ0SvJwRaEzwZY0j9MypEkFqyBaKv176jvlPtg58Zh36bOkS0NFABXMHvvGCA==", + "dev": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/valid-url": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", + "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==", + "dev": true + }, + "node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "builtins": "^1.0.3" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vlq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", + "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webcrypto-core": { + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.7.8.tgz", + "integrity": "sha512-eBR98r9nQXTqXt/yDRtInszPMjTaSAMJAFDg2AHsgrnczawT1asx9YNBX6k5p+MekbPF4+s/UJJrr88zsTqkSg==", + "dev": true, + "dependencies": { + "@peculiar/asn1-schema": "^2.3.8", + "@peculiar/json-schema": "^1.1.12", + "asn1js": "^3.0.1", + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2" + } + }, + "node_modules/webcrypto-core/node_modules/asn1js": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.5.tgz", + "integrity": "sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==", + "dev": true, + "dependencies": { + "pvtsutils": "^1.3.2", + "pvutils": "^1.1.3", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/webcrypto-shim": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/webcrypto-shim/-/webcrypto-shim-0.1.7.tgz", + "integrity": "sha512-JAvAQR5mRNRxZW2jKigWMjCMkjSdmP5cColRP1U/pTg69VgHXEi1orv5vVpJ55Zc5MIaPc1aaurzd9pjv2bveg==", + "dev": true + }, + "node_modules/webex": { + "version": "2.60.0", + "resolved": "https://registry.npmjs.org/webex/-/webex-2.60.0.tgz", + "integrity": "sha512-lE/OTtxS9YG1jOVQFdFf8mcCRupyFfCHaLDMeJa32KdIi5oZAY5viYxiRnqpoQSpy3s66VbL8v1Dcv1TCiaDzg==", + "dev": true, + "dependencies": { + "@babel/polyfill": "^7.12.1", + "@babel/runtime-corejs2": "^7.14.8", + "@webex/common": "2.60.0", + "@webex/internal-plugin-calendar": "2.60.0", + "@webex/internal-plugin-device": "2.60.0", + "@webex/internal-plugin-presence": "2.60.0", + "@webex/internal-plugin-support": "2.60.0", + "@webex/plugin-attachment-actions": "2.60.0", + "@webex/plugin-authorization": "2.60.0", + "@webex/plugin-device-manager": "2.60.0", + "@webex/plugin-logger": "2.60.0", + "@webex/plugin-meetings": "2.60.0", + "@webex/plugin-memberships": "2.60.0", + "@webex/plugin-messages": "2.60.0", + "@webex/plugin-people": "2.60.0", + "@webex/plugin-rooms": "2.60.0", + "@webex/plugin-team-memberships": "2.60.0", + "@webex/plugin-teams": "2.60.0", + "@webex/plugin-webhooks": "2.60.0", + "@webex/storage-adapter-local-storage": "2.60.0", + "@webex/webex-core": "2.60.0", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/webrtc-adapter": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-7.7.1.tgz", + "integrity": "sha512-TbrbBmiQBL9n0/5bvDdORc6ZfRY/Z7JnEj+EYOD1ghseZdpJ+nF2yx14k3LgQKc7JZnG7HAcL+zHnY25So9d7A==", + "dev": true, + "dependencies": { + "rtcpeerconnection-shim": "^1.2.15", + "sdp": "^2.12.0" + }, + "engines": { + "node": ">=6.0.0", + "npm": ">=3.10.0" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/whatwg-url-without-unicode": { + "version": "8.0.0-3", + "resolved": "https://registry.npmjs.org/whatwg-url-without-unicode/-/whatwg-url-without-unicode-8.0.0-3.tgz", + "integrity": "sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "buffer": "^5.4.3", + "punycode": "^2.1.1", + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/whatwg-url-without-unicode/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true, + "peer": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/whatwg-url-without-unicode/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/wonka": { + "version": "4.0.15", + "resolved": "https://registry.npmjs.org/wonka/-/wonka-4.0.15.tgz", + "integrity": "sha512-U0IUQHKXXn6PFo9nqsHphVCE5m3IntqZNB9Jjn7EB1lrR7YTDY3YWgFvEvwniTzXSvOH/XMzAZaIfJF/LvHYXg==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/ws": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xcode": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz", + "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "simple-plist": "^1.1.0", + "uuid": "^7.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/xcode/node_modules/uuid": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", + "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "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, + "dependencies": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/xml2js": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.0.tgz", + "integrity": "sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xml2js/node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlbuilder": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-14.0.0.tgz", + "integrity": "sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/xstate": { + "version": "4.38.3", + "resolved": "https://registry.npmjs.org/xstate/-/xstate-4.38.3.tgz", + "integrity": "sha512-SH7nAaaPQx57dx6qvfcIgqKRXIh4L0A1iYEqim4s1u7c9VoCgzZc+63FY90AKU4ZzOC2cfJzTnpO4zK7fCUzzw==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/xstate" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true + }, + "node_modules/yaml": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/examples/llm-stream/package.json b/examples/llm-stream/package.json new file mode 100644 index 0000000..b4f2689 --- /dev/null +++ b/examples/llm-stream/package.json @@ -0,0 +1,32 @@ +{ + "name": "llm-stream", + "version": "1.0.0", + "description": "", + "scripts": { + "bot:dev": "tsx watch settings/launch", + "serve": "npm run bot:dev", + "start": "npm run bot:dev", + "dev": "npm run bot:dev", + "bot:setup": "tsx util/cli setup", + "bot:debug": "npx envinfo@7.11.0", + "bot:addsecret": "tsx util/cli addsecret", + "bot:help": "tsx util/cli help" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "@axflow/models": "^0.0.25", + "speedybot": "latest" + }, + "devDependencies": { + "@types/express": "^4.17.21", + "@babel/runtime-corejs2": "^7.20.1", + "@types/node": "^16.18.3", + "cross-fetch": "^3.1.5", + "dotenv": "^16.0.3", + "tsx": "^4.7.0", + "typescript": "^3.8.3", + "webex": "^2.31.0" + } +} diff --git a/examples/llm-stream/settings/bot.ts b/examples/llm-stream/settings/bot.ts new file mode 100644 index 0000000..dd658b2 --- /dev/null +++ b/examples/llm-stream/settings/bot.ts @@ -0,0 +1,98 @@ +import { SpeedyBot } from "../../../src"; + +import { OpenAIStream } from "./llm-stream"; +const Bot = new SpeedyBot(); + +const showDebug = false; + +Bot.exact("$clear", async ($) => { + await $.clearScreen(); + return $.end; +}); + +Bot.addStep(async ($) => { + const email = $.author.email; + + const allowed = ["valgaze@cisco.com"]; + if (allowed.includes(email)) { + return $.next; + } else { + const card = await $.card() + .addTitle("No access :/") + .addText(`Sorry, you don't have access to this agent, request below`, { + backgroundColor: "red", + color: "green", + }) + .addTextarea("Request for access", "access_request"); + await $.send(card); + } + + return $.end; +}); + +Bot.addStep(async ($) => { + if ($.text) { + const rootMsg = await $.reply("Thinking..."); + OpenAIStream( + $.text, + async (curr, isFinal) => { + await $.edit(rootMsg, curr); + }, + {}, + 15 + ); + } + return $.next; +}); + +Bot.addStep(async ($) => { + if ($.data) { + if ($.data["access_request"]) { + console.log("##ACCESS REQUEST", $.data["access_request"]); + console.log("meta data:", JSON.stringify($.debug(), null, 2)); + await $.send(`Request received`); + } + } + return $.next; +}); + +Bot.addStep(async ($) => { + $.ctx.showDebug = showDebug; + if ($.ctx.showDebug) { + await $.send($.buildDataSnippet($.debug())); + } + return $.next; +}); + +export default Bot; + +// Bogus in-memory, just for one-off testing, disposable/volatile +// Swap out with a proper database +export class BozoStorage { + private storage: { [key: string]: any }; + constructor() { + this.storage = {}; + } + async get(storageKey: string, key: string): Promise { + return this.storage[storageKey]?.[key]; + } + + async save(storageKey: string, key: string, value: any): Promise { + if (!this.storage[storageKey]) { + this.storage[storageKey] = {}; + } + this.storage[storageKey][key] = value; + } + + async deleteData(storageKey: string, key: string): Promise { + if (this.storage[storageKey]) { + delete this.storage[storageKey][key]; + } + } + + async listKeys(storageKey: string): Promise { + return this.storage[storageKey] + ? Object.keys(this.storage[storageKey]) + : []; + } +} diff --git a/examples/llm-stream/settings/launch.ts b/examples/llm-stream/settings/launch.ts new file mode 100644 index 0000000..848bb3e --- /dev/null +++ b/examples/llm-stream/settings/launch.ts @@ -0,0 +1,13 @@ +// npm i cross-fetch dotenv +import "cross-fetch/polyfill"; +import { config } from "dotenv"; +import { resolve } from "path"; +config({ path: resolve(__dirname, "..", ".env") }); +import { websocketLauncher } from "../../speedybot-starter/util"; + +import Bot from "./bot"; + +Bot.setToken(process.env.BOT_TOKEN as string); + +// Pass in your SpeedyBot +websocketLauncher(Bot).catch((e) => console.log("##", e)); diff --git a/examples/llm-stream/settings/llm-stream.ts b/examples/llm-stream/settings/llm-stream.ts new file mode 100644 index 0000000..5b65bcd --- /dev/null +++ b/examples/llm-stream/settings/llm-stream.ts @@ -0,0 +1,87 @@ +import { OpenAIChat } from "@axflow/models/openai/chat"; +import { StreamToIterable } from "@axflow/models/shared"; +import { OpenAIChatTypes } from "@axflow/models/openai/chat"; + +// could easily swap w/ Anthropic +type Chunk = { + id: string; + object: "chat.completion.chunk"; + created: number; + model: string; + choices: { + index: number; + delta: { + content: string; + }; + finish_reason: null | string; // Assuming finish_reason can be null or a string + }[]; +}; + +export const OpenAIStream = async ( + prompt: string, + cb: (currentChunk: string, isFinale: boolean) => void, + config: Partial = {}, + minWords = 15 +) => { + const stream = await OpenAIChat.stream( + { + model: config.model ?? "gpt-4", + ...(config ? { ...config } : {}), + messages: (config.messages ?? []).concat({ + role: "user", + content: prompt, + }), + }, + { apiKey: process.env.OPEN_AI_KEY } + ); + + // type handler = (chunk: string, isFinished?: boolean) => void; + const chatEditor = new ChatResponseEditor({ minWords }); + for await (const chunk of StreamToIterable(stream)) { + chatEditor.incomingChunkHandler( + //@ts-ignore + chunk, + async (currentChunk: string, isFinale: boolean) => { + cb(currentChunk, isFinale); + } + ); + } +}; + +class ChatResponseEditor { + private editsDone: number = 0; + private maxEdits = 8; + private minWords = 5; + private _subCharBuffer = ""; + private charBuffer = ""; + private isFinished = false; + + constructor(config?: { maxEdits?: number; minWords?: number }) { + this.maxEdits = config?.maxEdits ?? 8; + this.minWords = config?.minWords ?? 5; + } + + public incomingChunkHandler = ( + chunk: Chunk, + callback: (chunk: string, isFinished?: boolean) => unknown + ) => { + const content = chunk.choices[0]?.delta?.content || ""; + this.charBuffer += content; + this._subCharBuffer += content; + if (!this.isFinished) { + this.isFinished = chunk.choices[0]?.finish_reason === "stop"; + } + + const numWords = this._subCharBuffer.split(" ").length; + if ( + this.isFinished || + (this.editsDone < this.maxEdits && + content.length && + numWords >= this.minWords) + ) { + callback(this.charBuffer, this.isFinished); + this.editsDone++; + this._subCharBuffer = ""; + } + }; +} diff --git a/examples/llm-stream/util/cli.ts b/examples/llm-stream/util/cli.ts new file mode 100644 index 0000000..0fe81d5 --- /dev/null +++ b/examples/llm-stream/util/cli.ts @@ -0,0 +1,144 @@ +// #!/usr/bin/env node +import * as fs from "fs/promises"; +import * as readline from "readline"; +import { resetDevices } from "./utils"; +import { resolve } from "path"; +import * as dotenv from "dotenv"; + +import { botTokenKey, logoRoll } from "../../../src"; + +// Expects .env to get token on BOT_TOKEN +dotenv.config({ path: resolve(__dirname, "..", ".env") }); + +async function writeEnvFile(envObject, append = true) { + try { + const envContents = Object.entries(envObject) + .map(([key, value]) => `${key}=${value}`) + .join("\n"); + const flag = append ? "a" : "w"; // Use "a" for append, "w" for write (overwrite) + await fs.writeFile(".env", append ? `\n${envContents}` : envContents, { + flag, + }); + } catch (error) { + console.error("Error writing to .env:", error); + process.exit(1); + } +} + +async function promptUser(msg) { + return new Promise((resolve) => { + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, + }); + + rl.question(`${msg}: `, (answer) => { + rl.close(); + resolve(answer); + }); + }); +} + +async function resetBot(token) { + let finalToken = token || process.env[botTokenKey]; + if (!finalToken) { + finalToken = await promptUser( + "Enter your token, [Usage: npm run bot:reset ]" + ); + } + await resetDevices(finalToken); + console.log("Reset attempted"); +} + +async function writeToken(token) { + let finalToken = token; + if (!token) { + finalToken = await promptUser( + `Enter your token, [Usage: npm run bot:setup ]` + ); + } + // destructively overwrites .env as BOT_TOKEN=xxxxxxxx + const envObject = { [botTokenKey]: finalToken }; + await writeEnvFile(envObject, false); + console.log( + `[✅ SpeedyBot] .env written to ${resolve(__dirname, "..", ".env")} ` + ); +} + +/** + * + * @param keyValue: keyName=TheValue + */ +async function writeSecret(keyValue: string) { + if (!keyValue || (keyValue && !keyValue.includes("="))) { + console.log(`❌[ERROR] You need to add a secret, ex`); + console.log(` + npm run bot:addsecret SECRETNAME=secret12345678 + `); + process.exit(1); + } + // appends .env as key=value + const [key, value] = keyValue.split("="); + const envObject = { [key]: value }; + await writeEnvFile(envObject, true); + console.log( + `[✅ SpeedyBot] .env written to ${resolve(__dirname, "..", ".env")} ` + ); +} +async function run(command, ...args) { + switch (command) { + case "reset": + await resetBot(args[0]); + break; + case "setup": + await writeToken(args[0]); + break; + case "addsecret": + await writeSecret(args[0]); + break; + case "help": + console.log(await logoRoll()); + console.log("Project Path:", process.cwd()); + console.log(` +Usage: + $ npm run bot:debug + $ npm run bot:dev + $ npm run bot:on + $ npm run bot:reset + $ npm run bot:setup + $ npm run bot:addsecret MYKEY=THE_VALUE + +Commands: + 1. Debug Command: + $ npm run bot:debug + Display debug information about your system + + 2. Development Command: + $ npm run bot:dev + Start your bot locally (using websockets) with live-reload on code-changes + + 3. Online Command: + $ npm run bot:on + "Turn on" your bot locally (over websockets) but without live-reload on code-changes, CTRL-C to exit + + 4. Reset Command: + $ npm run bot:reset + Reset any devices, useful for rate limit situations + + 5. Setup Command: + $ npm run bot:setup + Overwrite (delete all other values) in .env file with BOT_TOKEN= + + 6. Add Secret + $ npm run bot:addsecret MYKEY=THE_VALUE + Append an .env file with MYKEY=THE_VALUE +`); + break; + default: + console.error(`Unknown command: ${command}`); + break; + } +} + +const [, , command, ...args] = process.argv; +run(command, ...args); diff --git a/examples/llm-stream/util/index.ts b/examples/llm-stream/util/index.ts new file mode 100644 index 0000000..c2988d5 --- /dev/null +++ b/examples/llm-stream/util/index.ts @@ -0,0 +1,52 @@ +import { SpeedyBot } from "../../../src"; // REPLACE W/ SPEEDYBOT IMPORT +import { logoRoll } from "../../../src"; // REPLACE W/ SPEEDYBOT IMPORT +import { Websocket } from "./utils"; + +export const websocketLauncher = async ( + BotRef: SpeedyBot, + cb?: (data?: { email: string; name?: string }) => any +) => { + const token = BotRef.getToken(); + if (!token) { + throw new Error( + `SpeedyBot must have token specified before launching websockets, set with Bot.setToken()` + ); + } + + const inst = new Websocket(token); + try { + await inst.start(); + + inst.on("message", (websocketEvent: any) => { + BotRef.runMiddleware(websocketEvent); + }); + + inst.on("submit", (websocketSubmitEvent: any) => { + BotRef.runMiddleware(websocketSubmitEvent); + }); + + const data = await BotRef.getSelf(); + const { displayName } = data; + const [email] = data.emails; + + if (!cb) { + announceWebsockets(email, displayName); + } else { + return cb({ email, name: displayName }); + } + } catch (e) { + throw e; + } +}; + +export const announceWebsockets = (email: string, name = "Your bot") => { + const isColorSupported = process.stdout.isTTY; + console.log(logoRoll()); + if (isColorSupported) { + const WEBSOCKETS_READY = `\x1b[1m\x1b[7m\x1b[32m 🌐 CONNECTED \x1b[0m\x1b[32m Websockets active, listening...\x1b[0m`; + process.stdout.write(WEBSOCKETS_READY + "\n"); + } else { + console.log("Websockets Registered. Listening..."); + } + console.log(`You can reach ${name} here: ${email}`); +}; diff --git a/examples/llm-stream/util/utils.ts b/examples/llm-stream/util/utils.ts new file mode 100644 index 0000000..579d5e9 --- /dev/null +++ b/examples/llm-stream/util/utils.ts @@ -0,0 +1,146 @@ +import { init } from "webex"; + +export class Websocket { + public webexRef!: StubbedWebEx; + public me: any; + public listeners: Listeners = {}; + constructor(public token: string) {} + on(eventName: Events, handler: Function) { + this.listeners[eventName] = handler; + } + + async getSelf() { + const { id } = await this.webexRef.people.get("me"); + this.me = id; + } + + async init() { + const config = { + credentials: { + access_token: this.token, + }, + }; + try { + this.webexRef = await init(config); + } catch (e) { + throw e; + } + } + + async start() { + try { + await this.init(); + await Promise.all([ + this.getSelf(), + this.webexRef.messages.listen(), + this.webexRef.attachmentActions.listen(), + ]); + + // messages + this.webexRef.messages.on("created", (event: any) => { + if (event.data.personId !== this.me) { + this.onMessage({ ...event, targetUrl: "websocket" }); + } + }); + + this.webexRef.attachmentActions.on("created", (event: any) => { + this.onSubmit({ ...event, targetUrl: "websocket" }); + }); + } catch (e) { + throw e; + } + } + + onMessage(event: any) { + if (this.listeners.message) { + this.listeners.message(event); + } + } + + onSubmit(event: any) { + if (this.listeners.submit) { + this.listeners.submit(event); + } + } + + async stop() { + await this.webexRef.internal.device.unregister(); + await this.webexRef.messages.stopListening(); + } + + async resetDevices() { + return resetDevices(this.token); + } +} + +export const resetDevices = async (token: string) => { + type Device = { + url: string; + webSocketUrl: string; + services: unknown; + }; + // Get devices + const deviceList: Response = await fetch( + "https://wdm-a.wbx2.com/wdm/api/v1/devices", + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + + if (!deviceList.ok) { + if (deviceList.status === 401) { + console.log( + `[❌ SpeedyBot] Token invalid-- double check the token is correct or you can regenerate a new one here: https://developer.webex.com/my-apps + ` + ); + process.exit(1); + } + } + const { devices = [] }: { devices: Device[] } = await deviceList.json(); + + for (const device of devices) { + const { url } = device; + if (url) { + await fetch(url, { + method: "DELETE", + headers: { + Authorization: `Bearer ${token}`, + }, + }); + } + } + return true; +}; +export type Listeners = { + [key: string]: Function; +}; + +export type AbbreviatedEvent = { + data: { + personId: string; + }; +}; + +export type EventCb = (evt: AbbreviatedEvent) => any; +export type StubbedWebEx = { + internal: { + services: { waitForService(...args): Promise }; + device: { unregister(...args): Promise }; + }; + request(...args): void; + people: { + get(id: string): Promise<{ id: string }>; + }; + messages: { + stopListening(): Promise; + listen(): Promise; + on(event: string, callback: EventCb): any; + }; + attachmentActions: { + listen(): Promise; + on(event: string, callback: EventCb): any; + }; +}; +export type Events = "message" | "submit" | "file" | "camera"; diff --git a/examples/speedybot-starter/.env.example b/examples/speedybot-starter/.env.example new file mode 100644 index 0000000..62e2abc --- /dev/null +++ b/examples/speedybot-starter/.env.example @@ -0,0 +1,7 @@ +BOT_TOKEN=__REPLACE__ME__ + +# $ npm run bot:setup to write token to above + +# OR: +# Save this file as .env with: $ cp .env.example .env +# Replace BOT_TOKEN with your Bot Access token (if you don't have one get one here: https://developer.webex.com/my-apps/new/bot \ No newline at end of file diff --git a/examples/speedybot-starter/README.md b/examples/speedybot-starter/README.md new file mode 100644 index 0000000..9cb8224 --- /dev/null +++ b/examples/speedybot-starter/README.md @@ -0,0 +1,76 @@ +## Speedybot Starter + +## 1) Clone repo & install dependencies + +``` +git clone https://github.com/valgaze/speedybot +cd examples/speedybot-starter +npm install +``` + +## 2) Set your bot access token + +- Make a new bot and note its access token from here: **[https://developer.webex.com/my-apps/new/bot](https://developer.webex.com/my-apps/new/bot)** + +You can set your `BOT_TOKEN` by running this script in the project directory: + +`npm run bot:setup ` + +
Set token by hand +Copy the file **[.env.example](.env.example)** as `.env` in the root of your project and save your access token under the `BOT_TOKEN` field, ex + +``` +BOT_TOKEN=__REPLACE__ME__ +``` + +
+ +## 3) Boot it up! + +- Start up your agent + +Note: By default your agent will communicate using websockets, so you won't need to worry about details like deployment or webhooks. Later down the line if you need to deploy your agent on a traditional server or ephemeral/serverless function infrastructure **[see the examples](https://speedybot.js.org/examples)** + +``` +npm run bot:dev +``` + +## NPM Run Scripts + +All you'll probably need are `npm run bot:dev` + maybe `npm run bot:reset` + +| Script | Description | +| ----------------------- | ---------------------------------------------- | +| `npm run bot:on` | Launches the SpeedyBot | +| `npm run serve` | Alias for npm run bot:dev | +| `npm run dev` | Alias for npm run bot:dev | +| `npm run bot:debug` | Displays environment information for debugging | +| `npm run bot:dev` | Launches the bot in development mode | +| `npm run bot:reset` | Resets the bot's configuration | +| `npm run bot:setup` | Sets up the bot for the first time | +| `npm run bot:token` | Alias for npm run bot:setup | +| `npm run bot:help` | Displays help information for the bot | +| `npm run help` | Alias for npm run bot:help | +| `npm run bot:addsecret` | Adds a secret to the bot's configuration | + +
Getting errors? + +If you see an error like `npm: command not found` you probably need to install node or compatible runtime (like **[bun](https://bun.sh)** or **[deno](https://deno.com)**) onto your system. + +There are many ways to do this, but two easy ways: + +Option 1. Download + install Node from the official site: **[https://nodejs.org/en/download](https://nodejs.org/en/download)** + +Option 2. Download with **[Volta](https://docs.volta.sh/guide/)** in the terminal + +```sh +curl https://get.volta.sh | bash + +volta install node +``` + +However you set up your system, make sure to run `node -v` in your terminal to verify node is correctly installed and you can take advantage of its rich ecoysten + +
+ +If you see an error that reads somnething like `Forbidden: User has excessive device registrations` you can run `npm run bot:reset`, wait a few minutes and try again diff --git a/examples/speedybot-starter/bun.lockb b/examples/speedybot-starter/bun.lockb new file mode 100755 index 0000000..4d93395 Binary files /dev/null and b/examples/speedybot-starter/bun.lockb differ diff --git a/examples/speedybot-starter/package.json b/examples/speedybot-starter/package.json new file mode 100644 index 0000000..777d8e1 --- /dev/null +++ b/examples/speedybot-starter/package.json @@ -0,0 +1,48 @@ +{ + "name": "speedybot-starter", + "version": "2.0.0", + "description": "The speedy and easy way to build rich bots + conversation experiences", + "main": "index.ts", + "scripts": { + "bot:on": "tsx settings/launch", + "serve": "npm run bot:dev", + "dev": "npm run bot:dev", + "bot:debug": "npx -y envinfo@7.11.0", + "bot:serve": "npm run bot:dev", + "bot:dev": "tsx watch settings/launch", + "bot:reset": "tsx util/cli reset", + "bot:setup": "tsx util/cli setup", + "bot:token": "npm run bot:setup", + "bot:help": "tsx util/cli help", + "help": "npm run bot:help", + "bot:addsecret": "tsx util/cli addsecret" + }, + "repository": { + "type": "git", + "url": "https://github.com/valgaze/speedybot-local-server.git" + }, + "keywords": [ + "bot", + "scaffold", + "continerless", + "speedybot", + "serverless" + ], + "author": "valgaze@gmail.com", + "license": "MIT", + "devDependencies": { + "@babel/runtime-corejs2": "^7.20.1", + "@types/node": "^16.18.3", + "cross-fetch": "^3.1.5", + "dotenv": "^16.0.3", + "tsx": "^4.7.0", + "typescript": "^3.8.3", + "webex": "^2.31.0" + }, + "dependencies": { + "speedybot": "latest" + }, + "engines": { + "node": ">=18.0.0" + } +} diff --git a/examples/speedybot-starter/settings/bot.ts b/examples/speedybot-starter/settings/bot.ts new file mode 100644 index 0000000..30f5a7a --- /dev/null +++ b/examples/speedybot-starter/settings/bot.ts @@ -0,0 +1,718 @@ +import { SpeedyBot, SpeedyCard, SurveyQuestion } from "speedybot"; + +const Bot = new SpeedyBot(); + +Bot.addStep(async ($) => { + // handle text + if ($.text) { + if ($.text.toLowerCase() === "showcard") { + const card = $.card() + .addTitle("Capture data") + .addTextarea("Submit data") + .addPickerDropdown(["option 1", "option 2", "option 3", "option 4"]); + await $.send(card); + } + } + + // file handler + if ($.file) { + const { name, extension, contentType } = $.file; + await $.send( + `You uploaded "${name}", a *.${extension} file [${contentType}]` + ); + // Fetch raw bytes (which you can pass onto other systems) + // const TheData = await $.file.getData(); // do something w/ the contents/bytes + } + + // adaptive card/form submissions + if ($.data && !$.data.showCard && !$.data.randomSpeedyBot) { + const dataSnippet = $.buildDataSnippet($.data); + await $.send(`This data was submitted:`); + await $.send(dataSnippet); + } + + return $.next; +}); + +Bot.addStep(async ($) => { + if ($.data && $.data.randomSpeedyBot) { + const randomImage = `https://raw.githubusercontent.com/valgaze/speedybot-utils/main/assets/memes/logo${$.pickRandom( + 1, + 33 + )}.jpeg`; + + await $.send( + $.card() + .addHeader("\u{1F916} SpeedyBot") + .addImage(randomImage, { + targetURL: "https://speedybot.js.org", + size: "ExtraLarge", + }) + .addButton("🤖 Show another SpeedyBot", "randomSpeedyBot") + ); + return $.end; + } + return $.next; +}); + +// ## File upload handler +Bot.addStep(async ($) => { + if ($.file) { + const { name, extension, contentType } = $.file; + await $.send( + `You uploaded "${name}", a *.${extension} file [${contentType}]` + ); + // Fetch raw bytes (which you can send to database or send to external system) + // const TheData = await $.file.getData(); // do something w/ the contents/bytes + } + return $.next; +}); + +// ## "ping/pong", run logic on inputs +Bot.addStep(async ($) => { + if ($.text) { + const lowered = $.text.toLowerCase(); + if (lowered === "ping") { + await $.send("pong"); + return $.end; + } else if (lowered === "pong") { + await $.send("ping"); + return $.end; + } + } + return $.next; // pass through to rest of steps +}); + +// ## "show-cards, show adaptive cards +Bot.addStep(async ($) => { + if ($.text) { + const lowered = $.text.toLowerCase(); + if (lowered === "show-cards") { + await $.send( + "SpeedyCards make it easy to send rich, interactive cards to the user" + ); + const { value } = Bot.pickRandom(cardChoices); + const card = cardHash[value].addSubcard( + $.card() + .addLink( + "https://speedybot.js.org/docs/speedycard?card=${value}", + "See the source for this card" + ) + .addText("Pick a new card") + .addPickerDropdown(cardChoices, "showCard"), + "Learn more" + ); + await $.send(card); + return $.end; + } + } + return $.next; // pass through to rest of steps +}); + +// ## "files", show file capabilities (not upload file-- different idea-- but sending data to the user as a file) +Bot.addStep(async ($) => { + if ($.text && $.text.toLowerCase() === "files") { + await $.send( + `You can of course upload files but SpeedyBot also provides handy features to send data to the user as files` + ); + + // send a *.json file + const fileData = $.debug(); + await $.sendFile(fileData, "json"); + + // Send HTML w/ dynamic data + await $.sendFile( + makeHTML(`Here's your generated file, ${$.author.name}`, fileData), + "html" + ); + return $.end; + } else { + return $.next; + } +}); + +// ## "kitchensink", show everything +Bot.addStep(async ($) => { + $.author; + if ($.text && ["kitchen", "kitchensink"].includes($.text)) { + await $.clearScreen(); + await $.send(`## Kitchen Sink`); + + await $.thread([ + $.card({ + title: `This is a 'thread'`, + subTitle: "You can have many entries after the 1st", + chips: [ + { + title: "Go Again 🔄", + value: "kitchensink", + }, + ], + }) + .addText("Pick an entry from the list to preview a SpeedyCard") + .addPickerDropdown(cardChoices, "showCard"), + "thread item 1", + "thread item 2", + "thread item 3", + "thread item 4", + "thread item 5", + ]); + + await $.send(`-----------`); + await $.send($.buildDMLink("speedybot@webex.bot", "🤖 Talk to SpeedyBot")); + await $.send(`-----------`); + + await $.send(`## Files`); + + // Send data as a *.json file + await $.send(`Send data to user (here as *.json or *.html)`); + const fileData = $.debug(); + await $.sendFile(fileData, "json"); + await $.sendFile( + makeHTML(`Here's your generated file, ${$.author.name}`, fileData), + "html" + ); + return $.end; + } + return $.next; +}); + +// ## Main greeting +Bot.addStep(async ($) => { + if ($.text && !$.file) { + const utterances = [ + `Heya how's it going $[name]?`, + `Hi there, $[name]!`, + `Hiya $[name]!`, + `What's new $[name]?`, + `Helllooo $[name]!`, + ]; + const template = { + name: $.author.name, + }; + await $.send($.fillTemplate(utterances, template)); + + const randomImage = `https://raw.githubusercontent.com/valgaze/speedybot-utils/main/assets/memes/logo${$.pickRandom( + 1, + 33 + )}.jpeg`; + + const introCard = $.card() + .addHeader("🤖 SpeedyBot") + .addImage(randomImage, { + targetURL: "https://speedybot.js.org", + size: "ExtraLarge", + }) + .addChips([ + { title: "SpeedyCards 🌠", value: "show-cards" }, + { title: "ping 🏓", value: "ping" }, + { title: "🏓 pong", value: "pong" }, + { title: "🗂 files", value: "files" }, + { title: "🗂 Everything (warning: fast)", value: "kitchensink" }, + ]) + .addButton("🤖 random", "randomSpeedyBot") + .addSubcard( + $.card() + .addTitle("SpeedyCards") + .addText( + "**SpeedyCards** make it easy to build cards that deliver information in a visually attractive way or craft or cards with interactive forms that will let you capture structured data submitted from users" + ) + .addText("Pick a new card template") + .addPickerDropdown(cardChoices, "showCard"), + "See More " + ); + await $.send(introCard); + return $.next; + } + return $.next; +}); + +// ## Card utilities +// SpeedyCard form submissions, check for $.data, can add generics for type assurance + +// handle card picks from dropdown, attach preview, this can happen from multiple cards + locations +Bot.addStep>(async ($) => { + type CardKey = keyof typeof cardHash; + const isCardKey = (key: CardKey | undefined): key is CardKey => { + return key !== undefined && key in cardHash; + }; + + if ($.data && isCardKey($.data.showCard)) { + const card = cardHash[$.data.showCard].addSubcard( + $.card() + .addLink( + `https://speedybot.js.org/speedycard?card=${$.data.showCard}`, + "See the source for this card" + ) + .addText("Pick a new card") + .addPickerDropdown(cardChoices, "showCard"), + "Learn more" + ); + await $.send(card); + } + + return $.next; +}); + +// ## ex. pass data/flags between steps during runs +Bot.addStep(($) => { + $.ctx.isDev = true; // set to true on debug mode to trace incoming messages + return $.next; +}); + +// ## read flags +Bot.addStep(async ($) => { + // if ($.ctx.isDev) { + // await $.send($.buildDataSnippet($.debug())); + // } + return $.next; +}); + +// short-hand for exact match +Bot.exact("$clear", async ($) => { + await $.clearScreen(); + return $.end; +}); + +// ## Don't leave users hanging +Bot.captureError(async (payload) => { + const { roomId } = payload; + if (roomId) + await Bot.sendTo(roomId, `Whoops, there was a problem: ${payload.message}`); +}); +// export the Bot +export default Bot; + +// Bunch of cards +export const cardChoices = [ + { title: "Text Formatting 📄", value: "format-card" }, + { title: "Tabular Data 🐸", value: "table-card" }, + { title: "Survey 📝", value: "survey" }, + { title: "Acai 🍇", value: "acai" }, + { title: "Appcard 💳", value: "appcard" }, + { title: "Appcard RTL ⬅️", value: "appcard-rtl" }, + { title: "Red Danger 🔴", value: "red-danger" }, + { title: "Green Success ✅", value: "green-success" }, + { title: "Yellow Warning ⚠️", value: "yellow-warning" }, + { title: "Banner Yellow 🟡", value: "banner-yellow" }, + { title: "Confirm ✔️", value: "confirm" }, + { title: "Image 🖼️", value: "image" }, + { title: "Old Survey", value: "old-survey" }, +]; + +export const cardHash: { [key: string]: SpeedyCard } = { + survey: Bot.card().survey([ + { + type: "text", + question: "What is the name of your company?", + id: "company_name", + }, + { + type: "text", + question: "Describe the service performed by the vendor.", + id: "service_type", + }, + { + type: "picker-date", + question: "When was the service provided?", + id: "service_date", + }, + { + type: "single-select", + question: "How would you rate the quality of service?", + choices: ["Excellent", "Good", "Average", "Poor", "Very poor"], + id: "service_quality", + }, + { + type: "multi-select", + question: "What were the highlights of the service?", + choices: [ + "Communication", + "Punctuality", + "Time to Resolution", + "Friendliness", + "Cost", + ], + id: "service_highlights", + }, + { + type: "single-select", + question: "Would you consider using our services again in the future?", + choices: [ + "Definitely", + "Probably", + "Not sure", + "Probably not", + "Definitely not", + ], + id: "future_use", + }, + { + type: "textarea", + question: + "Please provide any other comments or suggestions for improvement.", + id: "other_comments", + }, + { + type: "picker-time", + question: "What time of day is preferable for future contact?", + id: "preferred_contact_time", + }, + { + type: "picker-dropdown", + question: "Preferred method of communication for future updates?", + choices: ["Email", "Phone", "Text"], + id: "communication_method", + }, + ]), + "format-card": Bot.card() + .addHeader("🌟 Formatted Card 🌟") + .addTitle("SpeedyCards can fit a lot of text + visual formatting") + .addText("You do lots of fun things with text", { size: "Large" }) + .addText("You can change colors", { size: "Large", color: "green" }) + .addText("...also mess with alignment + sizes", { + size: "Stretch", + color: "red", + align: "Right", + }) + .addText("Change background colors", { + size: "Medium", + color: "red", + backgroundColor: "blue", + }) + .addText("Change background + foreground", { + size: "Medium", + align: "Right", + color: "green", + backgroundColor: "yellow", + }) + .addText("Align in the middle", { + size: "Medium", + align: "Center", + backgroundColor: "red", + }) + .addText("More fun like other colors + images", { + size: "Large", + color: "red", + backgroundColor: "yellow", + }) + .addText( + "By the way, text blocks support simple markdown like **bolding**, *italics*, and even **[links](https://speedybot.js.org/new)**" + ) + .addImage( + "https://raw.githubusercontent.com/valgaze/speedybot-utils/main/assets/memes/logo4.jpeg", + { align: "Center" } + ), + appcard: Bot.appCard( + "Design News", + "https://raw.githubusercontent.com/valgaze/speedybot-mini/deploy/docs/assets/figma_logo.png" + ) + .addText( + "Tap the button to learn about new plugins + integration options", + { color: "red", backgroundColor: "blue" } + ) + .addLinkButton("https://www.figma.com/community/plugins", "🚀 Let's go"), + "appcard-rtl": Bot.appCard( + "ڈیزائن پر اپ ڈیٹ", + "https://raw.githubusercontent.com/valgaze/speedybot-mini/deploy/docs/assets/figma_logo.png", + { rtl: true } + ) + .addText( + "نئے پلگ ان + انضمام کے اختیارات کے بارے میں جاننے کے لیے بٹن کو تھپتھپائیں۔", + { color: "red", backgroundColor: "blue", align: "Right" } + ) + .addLinkButton("https://www.figma.com/community/plugins", "اورجانیے 🚀"), + acai: Bot.card() + .addTitle("AcaiTruck 🍇🚚 - The Bowl-istic Adventure Catering") + .addSubtitle("Customize Your Acai Bowl Experience!") + .addText( + "Welcome to our Acai Bowl Food Truck catering service. Let's make your event delicious!" + ) + .addPickerDropdown(["Select Bowl Size", "Mini", "Midi", "Grande"]) + .addPickerDropdown(["Number of People", "1-10", "11-25", "26-50", "50+"]) + .addTextInput("Anything else we should know?") + .addText("Choose toppings for the bar:") + .addMultiSelect([ + "Granola", + "Peanut Butter", + "Coconut", + "Goji Berries", + "Chia Seeds", + "Almonds", + "Cashews", + "Honey", + "Cacao Nibs", + "Strawberries", + "Blueberries", + "Almond Butter", + ]) + .addText("Additional Catering Essentials:") + .addMultiSelect([ + "Utensils", + "Napkins", + "To-Go Covers", + "Fruit Juice", + "Smoothie Bar", + "Event Staff", + "Custom Branding", + ]) + .addText("Any special requests or dietary preferences?") + .addTextarea("Special Requests or Dietary Preferences") + .setSubmitButtonTitle("Book AcaiTruck 🚀"), + "red-danger": Bot.card() + .addTitle("🚨 DANGER 🚨") + .addText("Attention, this is a very severe and important warning") + .setBackgroundImage( + "data:image/png;base64,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" + ), + "green-success": Bot.card() + .addTitle("🏆 You did it! 🏆") + .addText("Whatever you did, good at job at doing it") + .setBackgroundImage( + "data:image/png;base64,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" + ), + "yellow-warning": Bot.card() + .addTitle("⚠️ You're about to do it! ⚠️") + .addText("Whatever you're about to do, give it a think") + .setBackgroundImage( + "data:image/png;base64,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" + ), + "banner-yellow": Bot.card() + .addTitle("🏝️ SpeedyBot") + .setBackgroundImage( + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAmCAYAAACsyDmTAAAMbWlDQ1BJQ0MgUHJvZmlsZQAASImVVwdYU8kWnluSkJDQAghICb0jUgNICaEFkF4EGyEJJJQYE4KKvSwquHYRxYquiii2lWYBsSuLYu+LBRVlXdTFhsqbkICu+8r3zvfNvX/OnPlPuTO59wCg+YErkeShWgDkiwukCeHBjDFp6QzSU4AAIiADZ+DF5ckkrLi4aABl8P53eXcDWkO56qzg+uf8fxUdvkDGAwAZB3EmX8bLh7gZAHwDTyItAICo0FtOKZAo8ByIdaUwQIhXK3C2Eu9S4EwlPjpgk5TAhvgyAGpULleaDYDGPahnFPKyIY/GZ4hdxXyRGABNJ4gDeEIuH2JF7E75+ZMUuBxiO2gvgRjGA5iZ33Fm/40/c4ify80ewsq8BkQtRCST5HGn/Z+l+d+Snycf9GEDB1UojUhQ5A9reCt3UpQCUyHuFmfGxCpqDfEHEV9ZdwBQilAekay0R415MjasH9CH2JXPDYmC2BjiMHFeTLRKn5klCuNADHcLOlVUwEmC2ADiRQJZaKLKZot0UoLKF1qbJWWzVPpzXOmAX4WvB/LcZJaK/41QwFHxYxpFwqRUiCkQWxWKUmIg1oDYRZabGKWyGVUkZMcM2kjlCYr4rSBOEIjDg5X8WGGWNCxBZV+SLxvMF9siFHFiVPhggTApQlkf7BSPOxA/zAW7LBCzkgd5BLIx0YO58AUhocrcsecCcXKiiueDpCA4QbkWp0jy4lT2uIUgL1yht4DYQ1aYqFqLpxTAzankx7MkBXFJyjjxohxuZJwyHnw5iAZsEAIYQA5HJpgEcoCorbuuG/5SzoQBLpCCbCCAJ1SpGVyROjAjhtdEUAT+gEgAZEPrggdmBaAQ6r8MaZVXZ5A1MFs4sCIXPIU4H0SBPPhbPrBKPOQtBTyBGtE/vHPh4MF48+BQzP97/aD2m4YFNdEqjXzQI0Nz0JIYSgwhRhDDiPa4ER6A++HR8BoEhxvOxH0G8/hmT3hKaCc8IlwndBBuTxTNk/4Q5WjQAfnDVLXI/L4WuA3k9MSDcX/IDplxfdwIOOMe0A8LD4SePaGWrYpbURXGD9x/y+C7p6GyI7uSUfIwchDZ7seVGg4ankMsilp/Xx9lrJlD9WYPzfzon/1d9fnwHvWjJbYIO4SdxU5g57GjWB1gYE1YPdaKHVPgod31ZGB3DXpLGIgnF/KI/uGPq/KpqKTMtdq1y/Wzcq5AMLVAcfDYkyTTpKJsYQGDBd8OAgZHzHNxYri5urkBoHjXKP++3sYPvEMQ/dZvuvm/A+Df1N/ff+SbLrIJgAPe8Pg3fNPZMQHQVgfgXANPLi1U6nDFhQD/JTThSTMEpsAS2MF83IAX8ANBIBREgliQBNLABFhlIdznUjAFzABzQTEoBcvBGrAebAbbwC6wFxwEdeAoOAHOgIvgMrgO7sLd0wlegh7wDvQhCEJCaAgdMUTMEGvEEXFDmEgAEopEIwlIGpKBZCNiRI7MQOYjpchKZD2yFalCDiANyAnkPNKO3EYeIl3IG+QTiqFUVBc1QW3QESgTZaFRaBI6Hs1GJ6NF6AJ0KVqOVqJ70Fr0BHoRvY52oC/RXgxg6pg+Zo45Y0yMjcVi6VgWJsVmYSVYGVaJ1WCN8DlfxTqwbuwjTsTpOAN3hjs4Ak/GefhkfBa+BF+P78Jr8VP4Vfwh3oN/JdAIxgRHgi+BQxhDyCZMIRQTygg7CIcJp+FZ6iS8IxKJ+kRbojc8i2nEHOJ04hLiRuI+YjOxnfiY2EsikQxJjiR/UiyJSyogFZPWkfaQmkhXSJ2kD2rqamZqbmphaulqYrV5amVqu9WOq11Re6bWR9YiW5N9ybFkPnkaeRl5O7mRfIncSe6jaFNsKf6UJEoOZS6lnFJDOU25R3mrrq5uoe6jHq8uUp+jXq6+X/2c+kP1j1QdqgOVTR1HlVOXUndSm6m3qW9pNJoNLYiWTiugLaVV0U7SHtA+aNA1XDQ4GnyN2RoVGrUaVzReaZI1rTVZmhM0izTLNA9pXtLs1iJr2Wixtbhas7QqtBq0bmr1atO1R2rHaudrL9HerX1e+7kOScdGJ1SHr7NAZ5vOSZ3HdIxuSWfTefT59O300/ROXaKurS5HN0e3VHevbptuj56Onodeit5UvQq9Y3od+pi+jT5HP09/mf5B/Rv6n4aZDGMNEwxbPKxm2JVh7w2GGwQZCAxKDPYZXDf4ZMgwDDXMNVxhWGd43wg3cjCKN5pitMnotFH3cN3hfsN5w0uGHxx+xxg1djBOMJ5uvM241bjXxNQk3ERiss7kpEm3qb5pkGmO6WrT46ZdZnSzADOR2WqzJrMXDD0Gi5HHKGecYvSYG5tHmMvNt5q3mfdZ2FokW8yz2Gdx35JiybTMslxt2WLZY2VmNdpqhlW11R1rsjXTWmi91vqs9XsbW5tUm4U2dTbPbQ1sObZFttW29+xodoF2k+0q7a7ZE+2Z9rn2G+0vO6AOng5ChwqHS46oo5ejyHGjY7sTwcnHSexU6XTTmerMci50rnZ+6KLvEu0yz6XO5dUIqxHpI1aMODviq6una57rdte7I3VGRo6cN7Jx5Bs3BzeeW4XbNXeae5j7bPd699cejh4Cj00etzzpnqM9F3q2eH7x8vaSetV4dXlbeWd4b/C+ydRlxjGXMM/5EHyCfWb7HPX56OvlW+B70PdPP2e/XL/dfs9H2Y4SjNo+6rG/hT/Xf6t/RwAjICNgS0BHoHkgN7Ay8FGQZRA/aEfQM5Y9K4e1h/Uq2DVYGnw4+D3blz2T3RyChYSHlIS0heqEJoeuD30QZhGWHVYd1hPuGT49vDmCEBEVsSLiJseEw+NUcXoivSNnRp6KokYlRq2PehTtEC2NbhyNjo4cvWr0vRjrGHFMXSyI5cSuir0fZxs3Oe5IPDE+Lr4i/mnCyIQZCWcT6YkTE3cnvksKTlqWdDfZLlme3JKimTIupSrlfWpI6srUjjEjxswcczHNKE2UVp9OSk9J35HeOzZ07JqxneM8xxWPuzHedvzU8ecnGE3Im3BsouZE7sRDGYSM1IzdGZ+5sdxKbm8mJ3NDZg+PzVvLe8kP4q/mdwn8BSsFz7L8s1ZmPc/2z16V3SUMFJYJu0Vs0XrR65yInM0573Njc3fm9uel5u3LV8vPyG8Q64hzxacmmU6aOqld4igplnRM9p28ZnKPNEq6Q4bIxsvqC3ThR32r3E7+k/xhYUBhReGHKSlTDk3Vniqe2jrNYdriac+Kwop+mY5P501vmWE+Y+6MhzNZM7fOQmZlzmqZbTl7wezOOeFzds2lzM2d+9s813kr5/01P3V+4wKTBXMWPP4p/KfqYo1iafHNhX4LNy/CF4kWtS12X7xu8dcSfsmFUtfSstLPS3hLLvw88ufyn/uXZi1tW+a1bNNy4nLx8hsrAlfsWqm9smjl41WjV9WuZqwuWf3Xmolrzpd5lG1eS1krX9tRHl1ev85q3fJ1n9cL11+vCK7Yt8F4w+IN7zfyN17ZFLSpZrPJ5tLNn7aIttzaGr61ttKmsmwbcVvhtqfbU7af/YX5S9UOox2lO77sFO/s2JWw61SVd1XVbuPdy6rRanl1155xey7vDdlbX+Ncs3Wf/r7S/WC/fP+LAxkHbhyMOthyiHmo5lfrXzccph8uqUVqp9X21AnrOurT6tsbIhtaGv0aDx9xObLzqPnRimN6x5YdpxxfcLy/qaipt1nS3H0i+8Tjloktd0+OOXntVPypttNRp8+dCTtz8izrbNM5/3NHz/ueb7jAvFB30etibatn6+HfPH873ObVVnvJ+1L9ZZ/Lje2j2o9fCbxy4mrI1TPXONcuXo+53n4j+catm+Nudtzi33p+O+/26zuFd/ruzrlHuFdyX+t+2QPjB5W/2/++r8Or49jDkIetjxIf3X3Me/zyiezJ584FT2lPy56ZPat67vb8aFdY1+UXY190vpS87Osu/kP7jw2v7F79+mfQn609Y3o6X0tf979Z8tbw7c6/PP5q6Y3rffAu/13f+5IPhh92fWR+PPsp9dOzvimfSZ/Lv9h/afwa9fVef35/v4Qr5Q58CmBwoFlZALzZCQAtDQA67NsoY5W94IAgyv51AIH/hJX94oB4AVADv9/ju+HXzU0A9m+H7Rfk14S9ahwNgCQfgLq7Dw2VyLLc3ZRcVNinEB7097+FPRtpFQBflvf391X293/ZBoOFvWOzWNmDKoQIe4YtnC+Z+Zng34iyP/0uxx/vQBGBB/jx/i/zoZDc6xYYDgAAAIplWElmTU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAAAAAAAACQAAAAAQAAAJAAAAABAAOShgAHAAAAEgAAAHigAgAEAAAAAQAAACSgAwAEAAAAAQAAACYAAAAAQVNDSUkAAABTY3JlZW5zaG90JS99ZAAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAAdRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDYuMC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+Mzg8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MzY8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpVc2VyQ29tbWVudD5TY3JlZW5zaG90PC9leGlmOlVzZXJDb21tZW50PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KFcjjjAAAABxpRE9UAAAAAgAAAAAAAAATAAAAKAAAABMAAAATAAAAcerJp6AAAAA9SURBVFgJ7NKxFQAABANR9raicdSMcK3itGm8n+R0bTy69CFoQyEACoUUIgHK3ZBCJEC5G1KIBCh3QyR0AAAA//++LyCxAAAAOklEQVTt0rEVAAAEA1H2tqJx1IxwreK0abyf5HRtPLr0IWhDIQAKhRQiAcrdkEIkQLkbUogEKHdDJHT6I3s1kBzd4gAAAABJRU5ErkJggg==" + ), + confirm: Bot.card() + .addTitle("Do you want to proceed") + .addButton("❌ Cancel", "shouldProceed", { data: false }) + .addButton("✅ OK", "shouldProceed", { data: true }), + "table-card": Bot.card() + .addTitle( + "Ribbit! Check out the hop-tastic details below from FrogBot industries" + ) + .addTable([ + ["Frog Species", "Population"], + ["Green Tree Frog", "2,500"], + ["Red-eyed Tree Frog", "1,800"], + ["Poison Dart Frog", "700"], + ["Fire-bellied Toad", "1,200"], + ]) + .addLinkButton( + "http://allaboutfrogs.org/froglnd.shtml", + "🐸 Explore Frogs" + ), + image: Bot.card() + .addTitle("Images") + .addSubtitle("Cards can have images too") + .addText("Small") + .addImage( + "https://raw.githubusercontent.com/valgaze/speedybot-utils/main/assets/memes/logo4.jpeg", + { size: "Small" } + ) + .addText("Medium") + .addImage( + "https://raw.githubusercontent.com/valgaze/speedybot-utils/main/assets/memes/logo4.jpeg", + { size: "Medium" } + ) + .addText("Large") + .addImage( + "https://raw.githubusercontent.com/valgaze/speedybot-utils/main/assets/memes/logo4.jpeg", + { size: "Large" } + ) + .addText("ExtraLarge") + .addImage( + "https://raw.githubusercontent.com/valgaze/speedybot-utils/main/assets/memes/logo4.jpeg", + { size: "ExtraLarge" } + ) + .addText("Stretch") + .addImage( + "https://raw.githubusercontent.com/valgaze/speedybot-utils/main/assets/memes/logo4.jpeg", + { size: "Stretch" } + ) + .addText("TIP: Images can be links too", { color: "Attention" }) + .addImage( + "https://raw.githubusercontent.com/valgaze/speedybot-utils/main/assets/memes/logo4.jpeg", + { + targetURL: "https://speedybot.js.org", + size: "ExtraLarge", + } + ), + "old-survey": Bot.card() + .addTitle("Business Improvement Survey 📈") + .addSubtitle("Help Us Enhance Our Business Operations!") + .addText( + "Your insights are crucial for our continuous improvement. Please take a moment to complete this survey." + ) + .addText("1. Company Name:") + .addTextInput("Enter Your Company's Name") + .addText("2. Your Position/Role:") + .addTextInput("Enter Your Position/Role") + .addText("3. Please select your department:") + .addPickerDropdown( + ["Select Department"].concat([ + "Sales", + "Marketing", + "Customer Support", + "Finance", + "Product Development", + ]) + ) + .addText( + "4. On a scale of 1-5, how satisfied are you with our products/services? (1 being very dissatisfied, 5 being very satisfied)" + ) + .addSingleSelect([ + "1 (Very Dissatisfied)", + "2", + "3", + "4", + "5 (Very Satisfied)", + ]) + .addText( + "5. What aspects of our products/services do you appreciate the most?" + ) + .addTextarea( + "Please share what you appreciate the most about our offerings." + ) + .addText( + "6. Are there any specific areas where you believe we can improve?" + ) + .addTextarea( + "Please provide details on areas where we can enhance our products/services." + ) + .addText( + "7. How likely are you to recommend our company to others? (1 being highly unlikely, 5 being highly likely)" + ) + .addSingleSelect([ + "1 (Highly Unlikely)", + "2", + "3", + "4", + "5 (Highly Likely)", + ]) + .addText("8. Any additional comments or suggestions?") + .addTextarea( + "Feel free to share any additional comments or suggestions you may have." + ) + .setSubmitButtonTitle("Submit Survey"), +}; + +export const makeHTML = (prefix: string, trigger: any) => { + return ` + + + ${prefix} + + +
+ +
+
+
+${JSON.stringify(trigger, null, 2)}
+          
+ + `; +}; + +Bot.exact("$survey", async ($) => { + const companyNameQuestion: SurveyQuestion = { + type: "text", + question: "What is the name of your company?", + id: "company_name", + }; + + const serviceTypeQuestion: SurveyQuestion = { + type: "text", + question: "Describe the service performed by the vendor.", + id: "service_type", + }; + + const serviceDateQuestion: SurveyQuestion = { + type: "picker-date", + question: "When was the service provided?", + id: "service_date", + }; + + const serviceQualityQuestion: SurveyQuestion = { + type: "single-select", + question: "How would you rate the quality of service?", + choices: ["Excellent", "Good", "Average", "Poor", "Very poor"], + id: "service_quality", + }; + + const highlightsQuestion: SurveyQuestion = { + type: "multi-select", + question: "What were the highlights of the service?", + choices: [ + "Communication", + "Punctuality", + "Time to Resolution", + "Friendliness", + "Cost", + ], + id: "service_highlights", + }; + + const futureUseQuestion: SurveyQuestion = { + type: "single-select", + question: "Would you consider using our services again in the future?", + choices: [ + "Definitely", + "Probably", + "Not sure", + "Probably not", + "Definitely not", + ], + id: "future_use", + }; + + const otherCommentsQuestion: SurveyQuestion = { + type: "textarea", + question: + "Please provide any other comments or suggestions for improvement.", + id: "other_comments", + }; + + const preferredContactTimeQuestion: SurveyQuestion = { + type: "picker-time", + question: "What time of day is preferable for future contact?", + id: "preferred_contact_time", + }; + + const communicationMethodQuestion: SurveyQuestion = { + type: "picker-dropdown", + question: "Preferred method of communication for future updates?", + choices: ["Email", "Phone", "Text"], + id: "communication_method", + }; + + const surveyCard = $.card().survey([ + companyNameQuestion, + serviceTypeQuestion, + serviceDateQuestion, + serviceQualityQuestion, + highlightsQuestion, + futureUseQuestion, + otherCommentsQuestion, + preferredContactTimeQuestion, + communicationMethodQuestion, + ]); + + await $.send(surveyCard); + return $.end; +}); + +// "ping"/"pong" +Bot.addStep(async ($) => { + if ($.text) { + const lower = $.text.toLowerCase(); + if (lower === "pong") { + await $.send("ping"); + } else if (lower === "ping") { + await $.send("pong"); + } + } + return $.next; +}); diff --git a/examples/speedybot-starter/settings/launch.ts b/examples/speedybot-starter/settings/launch.ts new file mode 100644 index 0000000..b9160e0 --- /dev/null +++ b/examples/speedybot-starter/settings/launch.ts @@ -0,0 +1,13 @@ +// npm i cross-fetch dotenv +import "cross-fetch/polyfill"; +import { config } from "dotenv"; +import { resolve } from "path"; +config({ path: resolve(__dirname, "..", ".env") }); +import { websocketLauncher } from "../util"; + +import Bot from "./bot"; + +Bot.setToken(process.env.BOT_TOKEN as string); + +// Pass in your SpeedyBot +websocketLauncher(Bot).catch((e) => console.log("##", e)); diff --git a/examples/speedybot-starter/tsconfig.json b/examples/speedybot-starter/tsconfig.json new file mode 100644 index 0000000..7a2427c --- /dev/null +++ b/examples/speedybot-starter/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "declaration": true, + "resolveJsonModule": true, + "module": "commonjs", + "target": "ES2016", + "noImplicitAny": false, + "moduleResolution": "node", + "removeComments": true, + "sourceMap": true, + "skipLibCheck": true, + "strict": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": false, + "noUnusedLocals": true, + "outDir": "dist", + "baseUrl": ".", + "forceConsistentCasingInFileNames": true, + "paths": { + "*": ["node_modules/*"] + } + }, + "include": ["util/**/*", "package.json"], + "exclude": ["node_modules", "dist", "@vitest"] +} diff --git a/examples/speedybot-starter/util/cli.ts b/examples/speedybot-starter/util/cli.ts new file mode 100644 index 0000000..0fe81d5 --- /dev/null +++ b/examples/speedybot-starter/util/cli.ts @@ -0,0 +1,144 @@ +// #!/usr/bin/env node +import * as fs from "fs/promises"; +import * as readline from "readline"; +import { resetDevices } from "./utils"; +import { resolve } from "path"; +import * as dotenv from "dotenv"; + +import { botTokenKey, logoRoll } from "../../../src"; + +// Expects .env to get token on BOT_TOKEN +dotenv.config({ path: resolve(__dirname, "..", ".env") }); + +async function writeEnvFile(envObject, append = true) { + try { + const envContents = Object.entries(envObject) + .map(([key, value]) => `${key}=${value}`) + .join("\n"); + const flag = append ? "a" : "w"; // Use "a" for append, "w" for write (overwrite) + await fs.writeFile(".env", append ? `\n${envContents}` : envContents, { + flag, + }); + } catch (error) { + console.error("Error writing to .env:", error); + process.exit(1); + } +} + +async function promptUser(msg) { + return new Promise((resolve) => { + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, + }); + + rl.question(`${msg}: `, (answer) => { + rl.close(); + resolve(answer); + }); + }); +} + +async function resetBot(token) { + let finalToken = token || process.env[botTokenKey]; + if (!finalToken) { + finalToken = await promptUser( + "Enter your token, [Usage: npm run bot:reset ]" + ); + } + await resetDevices(finalToken); + console.log("Reset attempted"); +} + +async function writeToken(token) { + let finalToken = token; + if (!token) { + finalToken = await promptUser( + `Enter your token, [Usage: npm run bot:setup ]` + ); + } + // destructively overwrites .env as BOT_TOKEN=xxxxxxxx + const envObject = { [botTokenKey]: finalToken }; + await writeEnvFile(envObject, false); + console.log( + `[✅ SpeedyBot] .env written to ${resolve(__dirname, "..", ".env")} ` + ); +} + +/** + * + * @param keyValue: keyName=TheValue + */ +async function writeSecret(keyValue: string) { + if (!keyValue || (keyValue && !keyValue.includes("="))) { + console.log(`❌[ERROR] You need to add a secret, ex`); + console.log(` + npm run bot:addsecret SECRETNAME=secret12345678 + `); + process.exit(1); + } + // appends .env as key=value + const [key, value] = keyValue.split("="); + const envObject = { [key]: value }; + await writeEnvFile(envObject, true); + console.log( + `[✅ SpeedyBot] .env written to ${resolve(__dirname, "..", ".env")} ` + ); +} +async function run(command, ...args) { + switch (command) { + case "reset": + await resetBot(args[0]); + break; + case "setup": + await writeToken(args[0]); + break; + case "addsecret": + await writeSecret(args[0]); + break; + case "help": + console.log(await logoRoll()); + console.log("Project Path:", process.cwd()); + console.log(` +Usage: + $ npm run bot:debug + $ npm run bot:dev + $ npm run bot:on + $ npm run bot:reset + $ npm run bot:setup + $ npm run bot:addsecret MYKEY=THE_VALUE + +Commands: + 1. Debug Command: + $ npm run bot:debug + Display debug information about your system + + 2. Development Command: + $ npm run bot:dev + Start your bot locally (using websockets) with live-reload on code-changes + + 3. Online Command: + $ npm run bot:on + "Turn on" your bot locally (over websockets) but without live-reload on code-changes, CTRL-C to exit + + 4. Reset Command: + $ npm run bot:reset + Reset any devices, useful for rate limit situations + + 5. Setup Command: + $ npm run bot:setup + Overwrite (delete all other values) in .env file with BOT_TOKEN= + + 6. Add Secret + $ npm run bot:addsecret MYKEY=THE_VALUE + Append an .env file with MYKEY=THE_VALUE +`); + break; + default: + console.error(`Unknown command: ${command}`); + break; + } +} + +const [, , command, ...args] = process.argv; +run(command, ...args); diff --git a/examples/speedybot-starter/util/index.ts b/examples/speedybot-starter/util/index.ts new file mode 100644 index 0000000..c2988d5 --- /dev/null +++ b/examples/speedybot-starter/util/index.ts @@ -0,0 +1,52 @@ +import { SpeedyBot } from "../../../src"; // REPLACE W/ SPEEDYBOT IMPORT +import { logoRoll } from "../../../src"; // REPLACE W/ SPEEDYBOT IMPORT +import { Websocket } from "./utils"; + +export const websocketLauncher = async ( + BotRef: SpeedyBot, + cb?: (data?: { email: string; name?: string }) => any +) => { + const token = BotRef.getToken(); + if (!token) { + throw new Error( + `SpeedyBot must have token specified before launching websockets, set with Bot.setToken()` + ); + } + + const inst = new Websocket(token); + try { + await inst.start(); + + inst.on("message", (websocketEvent: any) => { + BotRef.runMiddleware(websocketEvent); + }); + + inst.on("submit", (websocketSubmitEvent: any) => { + BotRef.runMiddleware(websocketSubmitEvent); + }); + + const data = await BotRef.getSelf(); + const { displayName } = data; + const [email] = data.emails; + + if (!cb) { + announceWebsockets(email, displayName); + } else { + return cb({ email, name: displayName }); + } + } catch (e) { + throw e; + } +}; + +export const announceWebsockets = (email: string, name = "Your bot") => { + const isColorSupported = process.stdout.isTTY; + console.log(logoRoll()); + if (isColorSupported) { + const WEBSOCKETS_READY = `\x1b[1m\x1b[7m\x1b[32m 🌐 CONNECTED \x1b[0m\x1b[32m Websockets active, listening...\x1b[0m`; + process.stdout.write(WEBSOCKETS_READY + "\n"); + } else { + console.log("Websockets Registered. Listening..."); + } + console.log(`You can reach ${name} here: ${email}`); +}; diff --git a/examples/speedybot-starter/util/utils.ts b/examples/speedybot-starter/util/utils.ts new file mode 100644 index 0000000..579d5e9 --- /dev/null +++ b/examples/speedybot-starter/util/utils.ts @@ -0,0 +1,146 @@ +import { init } from "webex"; + +export class Websocket { + public webexRef!: StubbedWebEx; + public me: any; + public listeners: Listeners = {}; + constructor(public token: string) {} + on(eventName: Events, handler: Function) { + this.listeners[eventName] = handler; + } + + async getSelf() { + const { id } = await this.webexRef.people.get("me"); + this.me = id; + } + + async init() { + const config = { + credentials: { + access_token: this.token, + }, + }; + try { + this.webexRef = await init(config); + } catch (e) { + throw e; + } + } + + async start() { + try { + await this.init(); + await Promise.all([ + this.getSelf(), + this.webexRef.messages.listen(), + this.webexRef.attachmentActions.listen(), + ]); + + // messages + this.webexRef.messages.on("created", (event: any) => { + if (event.data.personId !== this.me) { + this.onMessage({ ...event, targetUrl: "websocket" }); + } + }); + + this.webexRef.attachmentActions.on("created", (event: any) => { + this.onSubmit({ ...event, targetUrl: "websocket" }); + }); + } catch (e) { + throw e; + } + } + + onMessage(event: any) { + if (this.listeners.message) { + this.listeners.message(event); + } + } + + onSubmit(event: any) { + if (this.listeners.submit) { + this.listeners.submit(event); + } + } + + async stop() { + await this.webexRef.internal.device.unregister(); + await this.webexRef.messages.stopListening(); + } + + async resetDevices() { + return resetDevices(this.token); + } +} + +export const resetDevices = async (token: string) => { + type Device = { + url: string; + webSocketUrl: string; + services: unknown; + }; + // Get devices + const deviceList: Response = await fetch( + "https://wdm-a.wbx2.com/wdm/api/v1/devices", + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + + if (!deviceList.ok) { + if (deviceList.status === 401) { + console.log( + `[❌ SpeedyBot] Token invalid-- double check the token is correct or you can regenerate a new one here: https://developer.webex.com/my-apps + ` + ); + process.exit(1); + } + } + const { devices = [] }: { devices: Device[] } = await deviceList.json(); + + for (const device of devices) { + const { url } = device; + if (url) { + await fetch(url, { + method: "DELETE", + headers: { + Authorization: `Bearer ${token}`, + }, + }); + } + } + return true; +}; +export type Listeners = { + [key: string]: Function; +}; + +export type AbbreviatedEvent = { + data: { + personId: string; + }; +}; + +export type EventCb = (evt: AbbreviatedEvent) => any; +export type StubbedWebEx = { + internal: { + services: { waitForService(...args): Promise }; + device: { unregister(...args): Promise }; + }; + request(...args): void; + people: { + get(id: string): Promise<{ id: string }>; + }; + messages: { + stopListening(): Promise; + listen(): Promise; + on(event: string, callback: EventCb): any; + }; + attachmentActions: { + listen(): Promise; + on(event: string, callback: EventCb): any; + }; +}; +export type Events = "message" | "submit" | "file" | "camera"; diff --git a/examples/standard-server/.env.example b/examples/standard-server/.env.example new file mode 100644 index 0000000..62e2abc --- /dev/null +++ b/examples/standard-server/.env.example @@ -0,0 +1,7 @@ +BOT_TOKEN=__REPLACE__ME__ + +# $ npm run bot:setup to write token to above + +# OR: +# Save this file as .env with: $ cp .env.example .env +# Replace BOT_TOKEN with your Bot Access token (if you don't have one get one here: https://developer.webex.com/my-apps/new/bot \ No newline at end of file diff --git a/examples/standard-server/README.md b/examples/standard-server/README.md new file mode 100644 index 0000000..044a396 --- /dev/null +++ b/examples/standard-server/README.md @@ -0,0 +1,69 @@ +## Standard Server + +## 1) Clone repo & install dependencies + +``` +git clone https://github.com/valgaze/speedybot +cd examples/standard-server +npm install +``` + +## 2) Set your bot access token + +- Make a new bot and note its access token from here: **[https://developer.webex.com/my-apps/new/bot](https://developer.webex.com/my-apps/new/bot)** + +You can set your `BOT_TOKEN` by running this script in the project directory: + +`npm run bot:setup ` + +
Set token by hand + +Copy the file **[.env.example](.env.example)** as `.env` in the root of your project and save your access token under the `BOT_TOKEN` field, ex + +``` +BOT_TOKEN=__REPLACE__ME__ +``` + +
+ +## 3) Boot it up! + +- Start up your agent w/ `npm run bot:dev` + +``` +npm run bot:dev +``` + +## 4) Run a test + +To test just the incoming webhook, edit the **[/incoming_webhook](./src/index.ts)** route & run this command to send a test paylaod + +``` +curl -X POST -H "Content-Type: application/json" -d '{"id": 1234567890987654321}' http://localhost:8000/incoming_webhook +``` + +Unlike the **[websockets example](https://speedybot.js.org/examples/speedybot-starter/README)**, you will need to deploy this serve or use a secure mechanism to expose it to the internet and then register the webhooks + +You can register webhooks with: + +```sh +npm init speedybot webhook create +``` + +## NPM Run Scripts + +All you'll probably need are `npm run bot:dev` + maybe `npm run bot:reset` + +| Script | Description | +| ----------------------- | ---------------------------------------------- | +| `npm run bot:on` | Launches the SpeedyBot | +| `npm run serve` | Alias for npm run bot:dev | +| `npm run dev` | Alias for npm run bot:dev | +| `npm run bot:debug` | Displays environment information for debugging | +| `npm run bot:dev` | Launches the bot in development mode | +| `npm run bot:reset` | Resets the bot's configuration | +| `npm run bot:setup` | Sets up the bot for the first time | +| `npm run bot:token` | Alias for npm run bot:setup | +| `npm run bot:help` | Displays help information for the bot | +| `npm run help` | Alias for npm run bot:help | +| `npm run bot:addsecret` | Adds a secret to the bot's configuration | diff --git a/examples/standard-server/bun.lockb b/examples/standard-server/bun.lockb new file mode 100755 index 0000000..85432bd Binary files /dev/null and b/examples/standard-server/bun.lockb differ diff --git a/examples/standard-server/package.json b/examples/standard-server/package.json new file mode 100644 index 0000000..89ff6a4 --- /dev/null +++ b/examples/standard-server/package.json @@ -0,0 +1,43 @@ +{ + "name": "speedybot-standard-server", + "version": "2.0.0", + "description": "The speedy and easy way to build rich bots + conversation experiences", + "scripts": { + "bot:on": "tsx settings/launch", + "serve": "npm run bot:dev", + "dev": "npm run bot:dev", + "bot:debug": "npx -y envinfo@7.11.0", + "bot:serve": "npm run bot:dev", + "bot:dev": "tsx watch settings/launch", + "bot:reset": "tsx util/cli reset", + "bot:setup": "tsx util/cli setup", + "bot:token": "npm run bot:setup", + "bot:help": "tsx util/cli help", + "help": "npm run bot:help", + "bot:addsecret": "tsx util/cli addsecret" + }, + "keywords": [ + "bot", + "scaffold", + "continerless", + "speedybot", + "serverless" + ], + "author": "valgaze@gmail.com", + "license": "ISC", + "devDependencies": { + "tsx": "^4.7.0", + "@types/express": "^4.17.21", + "@types/node": "^20.10.1", + "typescript": "^3.9.10" + }, + "dependencies": { + "body-parser": "^1.19.0", + "dotenv": "^16.0.3", + "express": "^4.17.1", + "speedybot": "latest" + }, + "engines": { + "node": ">=18.0.0" + } +} diff --git a/examples/standard-server/settings/bot.ts b/examples/standard-server/settings/bot.ts new file mode 100644 index 0000000..d23c0e7 --- /dev/null +++ b/examples/standard-server/settings/bot.ts @@ -0,0 +1,652 @@ +import { SpeedyBot, SpeedyCard, SurveyQuestion } from "speedybot"; +const Bot = new SpeedyBot(); + +// ## File upload handler +Bot.addStep(async ($) => { + if ($.file) { + const { name, extension, contentType } = $.file; + await $.send( + `You uploaded "${name}", a *.${extension} file [${contentType}]` + ); + + // Fetch raw bytes (which you can send to database or send to external system) + // const TheData = await $.file.getData(); // do something w/ the contents/bytes + } + return $.next; +}); + +// ## "ping/pong", run logic on inputs +Bot.addStep(async ($) => { + if ($.text) { + const lowered = $.text.toLowerCase(); + if (lowered === "ping") { + await $.send("pong"); + return $.end; + } else if (lowered === "pong") { + await $.send("ping"); + return $.end; + } + } + return $.next; // pass through to rest of steps +}); + +// ## "show-cards, show adaptive cards +Bot.addStep(async ($) => { + if ($.text) { + const lowered = $.text.toLowerCase(); + if (lowered === "show-cards") { + await $.send( + "SpeedyCards make it easy to send rich, interactive cards to the user" + ); + const { value } = Bot.pickRandom(cardChoices); + const card = cardHash[value].addSubcard( + $.card() + .addLink( + "https://speedybot.js.org/docs/speedybot?card=${value}", + "See the source for this card" + ) + .addText("Pick a new card") + .addPickerDropdown(cardChoices, "showCard"), + "Learn more" + ); + await $.send(card); + return $.end; + } + } + return $.next; // pass through to rest of steps +}); + +// ## "files", show file capabilities (not upload file-- different idea-- but sending data to the user as a file) +Bot.addStep(async ($) => { + if ($.text && $.text.toLowerCase() === "files") { + await $.send( + `You can of course upload files but SpeedyBot also provides handy features to send data to the user as files` + ); + + // send a *.json file + const fileData = $.debug(); + await $.sendFile(fileData, "json"); + + // Send HTML w/ dynamic data + await $.sendFile( + makeHTML(`Here's your generated file, ${$.author.name}`, fileData), + "html" + ); + return $.end; + } else { + return $.next; + } +}); + +// ## "kitchensink", show everything +Bot.addStep(async ($) => { + if ($.text && ["kitchen", "kitchensink"].includes($.text)) { + await $.clearScreen(); + await $.send(`## Kitchen Sink`); + + await $.thread([ + $.card({ + title: `This is a 'thread'`, + subTitle: "You can have many entries after the 1st", + chips: [ + { + title: "Go Again 🔄", + value: "kitchensink", + }, + ], + }) + .addText("Pick an entry from the list to preview a SpeedyCard") + .addPickerDropdown(cardChoices, "showCard"), + "thread item 1", + "thread item 2", + "thread item 3", + "thread item 4", + "thread item 5", + ]); + + await $.send(`## Files`); + // send URL as file + await $.sendURL("https://speedybot.valgaze.com", "Send URL as a file"); + + // Send data as a *.json file + await $.send(`Send data to user (here as *.json or *.html)`); + const fileData = $.debug(); + await $.sendFile(fileData, "json"); + await $.sendFile( + makeHTML(`Here's your generated file, ${$.author.name}`, fileData), + "html" + ); + return $.end; + } + return $.next; +}); + +// ## Main greeting +Bot.addStep(async ($) => { + if ($.text && !$.file) { + const utterances = [ + `Heya how's it going $[name]?`, + `Hi there, $[name]!`, + `Hiya $[name]!`, + `What's new $[name]?`, + `Helllooo $[name]!`, + ]; + const template = { + name: $.author.name, + }; + await $.send($.fillTemplate(utterances, template)); + const randomImage = `https://raw.githubusercontent.com/valgaze/speedybot-mini/deploy/docs/assets/memes/${Bot.pickRandom( + [ + "logo.jpeg", + "logo2.jpeg", + "logo3.jpeg", + "logo4.jpeg", + "logo5.jpeg", + "logo6.jpeg", + "logo7.jpeg", + "logo8.jpeg", + "logo9.jpeg", + ] + )}`; + + const introCard = $.card() + .addHeader("🤖 SpeedyBot") + .addImage(randomImage, { + targetURL: "https://speedybot.js.org", + size: "ExtraLarge", + }) + .addChips([ + { title: "SpeedyCards 🌠", value: "show-cards" }, + { title: "ping 🏓", value: "ping" }, + { title: "🏓 pong", value: "pong" }, + { title: "🗂 files", value: "files" }, + { title: "🗂 Everything (warning: fast)", value: "kitchensink" }, + ]) + .addSubcard( + $.card() + .addTitle("SpeedyCards") + .addText( + "**SpeedyCards** make it easy to build cards that deliver information in a visually attractive way or craft or cards with interactive forms that will let you capture structured data submitted from users" + ) + .addText("Pick a new card template") + .addPickerDropdown(cardChoices, "showCard"), + "See More " + ); + await $.send(introCard); + return $.next; + } + return $.next; +}); + +// ## Card utilities +// SpeedyCard form submissions, check for $.data, can add generics for type assurance +Bot.addStep(async ($) => { + if ($.data && !$.data.showCard) { + const dataSnippet = $.buildDataSnippet($.data); + await $.send(`This data was submitted:`); + await $.send(dataSnippet); + } + return $.next; +}); + +// handle card picks from dropdown, attach preview, this can happen from multiple cards + locations +Bot.addStep>(async ($) => { + type CardKey = keyof typeof cardHash; + const isCardKey = (key: CardKey | undefined): key is CardKey => { + return key !== undefined && key in cardHash; + }; + + if ($.data && isCardKey($.data.showCard)) { + cardHash[$.data.showCard].addSubcard( + $.card() + .addLink( + $.ctx.isDev + ? `http://localhost:5173/vitepresspublish/docs/speedycard?card=${$.data.showCard}` + : `https://speedybot.js.org/docs/speedybot?card=${$.data.showCard}`, + "See the source for this card" + ) + .addText("Pick a new card") + .addPickerDropdown(cardChoices, "showCard"), + "Learn more" + ); + + const card = cardHash[$.data.showCard] as SpeedyCard; + await $.send(card); + } + return $.next; +}); + +// ## ex. pass data/flags between steps during runs +Bot.addStep(($) => { + $.ctx.isDev = false; // set to true on debug mode to trace incoming messages + return $.next; +}); + +// ## read flags +Bot.addStep(async ($) => { + if ($.ctx.isDev) { + await $.send($.buildDataSnippet($.debug())); + } + return $.next; +}); + +// short-hand for exact match +Bot.exact("$clear", async ($) => { + await $.clearScreen(); + return $.end; +}); + +// ## Don't leave users hanging +Bot.captureError(async (payload) => { + const { roomId } = payload; + if (roomId) + await Bot.sendTo(roomId, `Whoops, there was a problem: ${payload.message}`); +}); +// export the Bot +export default Bot; + +// Bunch of cards +export const cardChoices = [ + { title: "Text Formatting 📄", value: "format-card" }, + { title: "Survey 📝", value: "survey" }, + { title: "Acai 🍇", value: "acai" }, + { title: "Appcard 💳", value: "appcard" }, + { title: "Appcard RTL ⬅️", value: "appcard-rtl" }, + { title: "Red Danger 🔴", value: "red-danger" }, + { title: "Green Success ✅", value: "green-success" }, + { title: "Yellow Warning ⚠️", value: "yellow-warning" }, + { title: "Banner Yellow 🟡", value: "banner-yellow" }, + { title: "Confirm ✔️", value: "confirm" }, + { title: "Image 🖼️", value: "image" }, + { title: "Chips 🍟", value: "chips" }, + { title: "Old Survey", value: "old-survey" }, +]; + +export const cardHash: { [key: string]: SpeedyCard } = { + survey: Bot.card().survey([ + { + type: "text", + question: "What is the name of your company?", + id: "company_name", + }, + { + type: "text", + question: "Describe the service performed by the vendor.", + id: "service_type", + }, + { + type: "picker-date", + question: "When was the service provided?", + id: "service_date", + }, + { + type: "single-select", + question: "How would you rate the quality of service?", + choices: ["Excellent", "Good", "Average", "Poor", "Very poor"], + id: "service_quality", + }, + { + type: "multi-select", + question: "What were the highlights of the service?", + choices: [ + "Communication", + "Punctuality", + "Time to Resolution", + "Friendliness", + "Cost", + ], + id: "service_highlights", + }, + { + type: "single-select", + question: "Would you consider using our services again in the future?", + choices: [ + "Definitely", + "Probably", + "Not sure", + "Probably not", + "Definitely not", + ], + id: "future_use", + }, + { + type: "textarea", + question: + "Please provide any other comments or suggestions for improvement.", + id: "other_comments", + }, + { + type: "picker-time", + question: "What time of day is preferable for future contact?", + id: "preferred_contact_time", + }, + { + type: "picker-dropdown", + question: "Preferred method of communication for future updates?", + choices: ["Email", "Phone", "Text"], + id: "communication_method", + }, + ]), + "format-card": Bot.card() + .addHeader("🌟 Formatted Card 🌟") + .addTitle("SpeedyCards can fit a lot of text + visual formatting") + .addText("You do lots of fun things with text", { size: "Large" }) + .addText("You can change colors", { size: "Large", color: "green" }) + .addText("...also mess with alignment + sizes", { + size: "Stretch", + color: "red", + align: "Right", + }) + .addText("Change background colors", { + size: "Medium", + color: "red", + backgroundColor: "blue", + }) + .addText("Change background + foreground", { + size: "Medium", + align: "Right", + color: "green", + backgroundColor: "yellow", + }) + .addText("Align in the middle", { + size: "Medium", + align: "Center", + backgroundColor: "red", + }) + .addText("More fun like other colors + images", { + size: "Large", + color: "red", + backgroundColor: "yellow", + }) + .addText( + "By the way, text blocks support simple markdown like **bolding**, *italics*, and even **[links](https://speedybot.js.org/new)**" + ) + .addImage( + "https://raw.githubusercontent.com/valgaze/speedybot-mini/deploy/docs/assets/memes/logo4.jpeg", + { align: "Center" } + ), + appcard: Bot.appCard( + "Design News", + "https://raw.githubusercontent.com/valgaze/speedybot-mini/deploy/docs/assets/figma_logo.png" + ) + .addText( + "Tap the button to learn about new plugins + integration options", + { color: "red", backgroundColor: "blue" } + ) + .addLinkButton("https://www.figma.com/community/plugins", "🚀 Let's go"), + "appcard-rtl": Bot.appCard( + "ڈیزائن پر اپ ڈیٹ", + "https://raw.githubusercontent.com/valgaze/speedybot-mini/deploy/docs/assets/figma_logo.png", + { rtl: true } + ) + .addText( + "نئے پلگ ان + انضمام کے اختیارات کے بارے میں جاننے کے لیے بٹن کو تھپتھپائیں۔", + { color: "red", backgroundColor: "blue", align: "Right" } + ) + .addLinkButton("https://www.figma.com/community/plugins", "اورجانیے 🚀"), + acai: Bot.card() + .addTitle("AcaiTruck 🍇🚚 - The Bowl-istic Adventure Catering") + .addSubtitle("Customize Your Acai Bowl Experience!") + .addText( + "Welcome to our Acai Bowl Food Truck catering service. Let's make your event delicious!" + ) + .addPickerDropdown(["Select Bowl Size", "Mini", "Midi", "Grande"]) + .addPickerDropdown(["Number of People", "1-10", "11-25", "26-50", "50+"]) + .addTextInput("Anything else we should know?") + .addText("Choose toppings for the bar:") + .addMultiSelect([ + "Granola", + "Peanut Butter", + "Coconut", + "Goji Berries", + "Chia Seeds", + "Almonds", + "Cashews", + "Honey", + "Cacao Nibs", + "Strawberries", + "Blueberries", + "Almond Butter", + ]) + .addText("Additional Catering Essentials:") + .addMultiSelect([ + "Utensils", + "Napkins", + "To-Go Covers", + "Fruit Juice", + "Smoothie Bar", + "Event Staff", + "Custom Branding", + ]) + .addText("Any special requests or dietary preferences?") + .addTextarea("Special Requests or Dietary Preferences") + .setSubmitButtonTitle("Book AcaiTruck 🚀"), + "red-danger": Bot.card() + .addTitle("🚨 DANGER 🚨") + .addText("Attention, this is a very severe and important warning") + .setBackgroundImage( + "data:image/png;base64,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" + ), + "green-success": Bot.card() + .addTitle("🏆 You did it! 🏆") + .addText("Whatever you did, good at job at doing it") + .setBackgroundImage( + "data:image/png;base64,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" + ), + "yellow-warning": Bot.card() + .addTitle("⚠️ You're about to do it! ⚠️") + .addText("Whatever you're about to do, give it a think") + .setBackgroundImage( + "data:image/png;base64,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" + ), + "banner-yellow": Bot.card() + .addTitle("🏝️ SpeedyBot") + .setBackgroundImage( + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAmCAYAAACsyDmTAAAMbWlDQ1BJQ0MgUHJvZmlsZQAASImVVwdYU8kWnluSkJDQAghICb0jUgNICaEFkF4EGyEJJJQYE4KKvSwquHYRxYquiii2lWYBsSuLYu+LBRVlXdTFhsqbkICu+8r3zvfNvX/OnPlPuTO59wCg+YErkeShWgDkiwukCeHBjDFp6QzSU4AAIiADZ+DF5ckkrLi4aABl8P53eXcDWkO56qzg+uf8fxUdvkDGAwAZB3EmX8bLh7gZAHwDTyItAICo0FtOKZAo8ByIdaUwQIhXK3C2Eu9S4EwlPjpgk5TAhvgyAGpULleaDYDGPahnFPKyIY/GZ4hdxXyRGABNJ4gDeEIuH2JF7E75+ZMUuBxiO2gvgRjGA5iZ33Fm/40/c4ify80ewsq8BkQtRCST5HGn/Z+l+d+Snycf9GEDB1UojUhQ5A9reCt3UpQCUyHuFmfGxCpqDfEHEV9ZdwBQilAekay0R415MjasH9CH2JXPDYmC2BjiMHFeTLRKn5klCuNADHcLOlVUwEmC2ADiRQJZaKLKZot0UoLKF1qbJWWzVPpzXOmAX4WvB/LcZJaK/41QwFHxYxpFwqRUiCkQWxWKUmIg1oDYRZabGKWyGVUkZMcM2kjlCYr4rSBOEIjDg5X8WGGWNCxBZV+SLxvMF9siFHFiVPhggTApQlkf7BSPOxA/zAW7LBCzkgd5BLIx0YO58AUhocrcsecCcXKiiueDpCA4QbkWp0jy4lT2uIUgL1yht4DYQ1aYqFqLpxTAzankx7MkBXFJyjjxohxuZJwyHnw5iAZsEAIYQA5HJpgEcoCorbuuG/5SzoQBLpCCbCCAJ1SpGVyROjAjhtdEUAT+gEgAZEPrggdmBaAQ6r8MaZVXZ5A1MFs4sCIXPIU4H0SBPPhbPrBKPOQtBTyBGtE/vHPh4MF48+BQzP97/aD2m4YFNdEqjXzQI0Nz0JIYSgwhRhDDiPa4ER6A++HR8BoEhxvOxH0G8/hmT3hKaCc8IlwndBBuTxTNk/4Q5WjQAfnDVLXI/L4WuA3k9MSDcX/IDplxfdwIOOMe0A8LD4SePaGWrYpbURXGD9x/y+C7p6GyI7uSUfIwchDZ7seVGg4ankMsilp/Xx9lrJlD9WYPzfzon/1d9fnwHvWjJbYIO4SdxU5g57GjWB1gYE1YPdaKHVPgod31ZGB3DXpLGIgnF/KI/uGPq/KpqKTMtdq1y/Wzcq5AMLVAcfDYkyTTpKJsYQGDBd8OAgZHzHNxYri5urkBoHjXKP++3sYPvEMQ/dZvuvm/A+Df1N/ff+SbLrIJgAPe8Pg3fNPZMQHQVgfgXANPLi1U6nDFhQD/JTThSTMEpsAS2MF83IAX8ANBIBREgliQBNLABFhlIdznUjAFzABzQTEoBcvBGrAebAbbwC6wFxwEdeAoOAHOgIvgMrgO7sLd0wlegh7wDvQhCEJCaAgdMUTMEGvEEXFDmEgAEopEIwlIGpKBZCNiRI7MQOYjpchKZD2yFalCDiANyAnkPNKO3EYeIl3IG+QTiqFUVBc1QW3QESgTZaFRaBI6Hs1GJ6NF6AJ0KVqOVqJ70Fr0BHoRvY52oC/RXgxg6pg+Zo45Y0yMjcVi6VgWJsVmYSVYGVaJ1WCN8DlfxTqwbuwjTsTpOAN3hjs4Ak/GefhkfBa+BF+P78Jr8VP4Vfwh3oN/JdAIxgRHgi+BQxhDyCZMIRQTygg7CIcJp+FZ6iS8IxKJ+kRbojc8i2nEHOJ04hLiRuI+YjOxnfiY2EsikQxJjiR/UiyJSyogFZPWkfaQmkhXSJ2kD2rqamZqbmphaulqYrV5amVqu9WOq11Re6bWR9YiW5N9ybFkPnkaeRl5O7mRfIncSe6jaFNsKf6UJEoOZS6lnFJDOU25R3mrrq5uoe6jHq8uUp+jXq6+X/2c+kP1j1QdqgOVTR1HlVOXUndSm6m3qW9pNJoNLYiWTiugLaVV0U7SHtA+aNA1XDQ4GnyN2RoVGrUaVzReaZI1rTVZmhM0izTLNA9pXtLs1iJr2Wixtbhas7QqtBq0bmr1atO1R2rHaudrL9HerX1e+7kOScdGJ1SHr7NAZ5vOSZ3HdIxuSWfTefT59O300/ROXaKurS5HN0e3VHevbptuj56Onodeit5UvQq9Y3od+pi+jT5HP09/mf5B/Rv6n4aZDGMNEwxbPKxm2JVh7w2GGwQZCAxKDPYZXDf4ZMgwDDXMNVxhWGd43wg3cjCKN5pitMnotFH3cN3hfsN5w0uGHxx+xxg1djBOMJ5uvM241bjXxNQk3ERiss7kpEm3qb5pkGmO6WrT46ZdZnSzADOR2WqzJrMXDD0Gi5HHKGecYvSYG5tHmMvNt5q3mfdZ2FokW8yz2Gdx35JiybTMslxt2WLZY2VmNdpqhlW11R1rsjXTWmi91vqs9XsbW5tUm4U2dTbPbQ1sObZFttW29+xodoF2k+0q7a7ZE+2Z9rn2G+0vO6AOng5ChwqHS46oo5ejyHGjY7sTwcnHSexU6XTTmerMci50rnZ+6KLvEu0yz6XO5dUIqxHpI1aMODviq6una57rdte7I3VGRo6cN7Jx5Bs3BzeeW4XbNXeae5j7bPd699cejh4Cj00etzzpnqM9F3q2eH7x8vaSetV4dXlbeWd4b/C+ydRlxjGXMM/5EHyCfWb7HPX56OvlW+B70PdPP2e/XL/dfs9H2Y4SjNo+6rG/hT/Xf6t/RwAjICNgS0BHoHkgN7Ay8FGQZRA/aEfQM5Y9K4e1h/Uq2DVYGnw4+D3blz2T3RyChYSHlIS0heqEJoeuD30QZhGWHVYd1hPuGT49vDmCEBEVsSLiJseEw+NUcXoivSNnRp6KokYlRq2PehTtEC2NbhyNjo4cvWr0vRjrGHFMXSyI5cSuir0fZxs3Oe5IPDE+Lr4i/mnCyIQZCWcT6YkTE3cnvksKTlqWdDfZLlme3JKimTIupSrlfWpI6srUjjEjxswcczHNKE2UVp9OSk9J35HeOzZ07JqxneM8xxWPuzHedvzU8ecnGE3Im3BsouZE7sRDGYSM1IzdGZ+5sdxKbm8mJ3NDZg+PzVvLe8kP4q/mdwn8BSsFz7L8s1ZmPc/2z16V3SUMFJYJu0Vs0XrR65yInM0573Njc3fm9uel5u3LV8vPyG8Q64hzxacmmU6aOqld4igplnRM9p28ZnKPNEq6Q4bIxsvqC3ThR32r3E7+k/xhYUBhReGHKSlTDk3Vniqe2jrNYdriac+Kwop+mY5P501vmWE+Y+6MhzNZM7fOQmZlzmqZbTl7wezOOeFzds2lzM2d+9s813kr5/01P3V+4wKTBXMWPP4p/KfqYo1iafHNhX4LNy/CF4kWtS12X7xu8dcSfsmFUtfSstLPS3hLLvw88ufyn/uXZi1tW+a1bNNy4nLx8hsrAlfsWqm9smjl41WjV9WuZqwuWf3Xmolrzpd5lG1eS1krX9tRHl1ev85q3fJ1n9cL11+vCK7Yt8F4w+IN7zfyN17ZFLSpZrPJ5tLNn7aIttzaGr61ttKmsmwbcVvhtqfbU7af/YX5S9UOox2lO77sFO/s2JWw61SVd1XVbuPdy6rRanl1155xey7vDdlbX+Ncs3Wf/r7S/WC/fP+LAxkHbhyMOthyiHmo5lfrXzccph8uqUVqp9X21AnrOurT6tsbIhtaGv0aDx9xObLzqPnRimN6x5YdpxxfcLy/qaipt1nS3H0i+8Tjloktd0+OOXntVPypttNRp8+dCTtz8izrbNM5/3NHz/ueb7jAvFB30etibatn6+HfPH873ObVVnvJ+1L9ZZ/Lje2j2o9fCbxy4mrI1TPXONcuXo+53n4j+catm+Nudtzi33p+O+/26zuFd/ruzrlHuFdyX+t+2QPjB5W/2/++r8Or49jDkIetjxIf3X3Me/zyiezJ584FT2lPy56ZPat67vb8aFdY1+UXY190vpS87Osu/kP7jw2v7F79+mfQn609Y3o6X0tf979Z8tbw7c6/PP5q6Y3rffAu/13f+5IPhh92fWR+PPsp9dOzvimfSZ/Lv9h/afwa9fVef35/v4Qr5Q58CmBwoFlZALzZCQAtDQA67NsoY5W94IAgyv51AIH/hJX94oB4AVADv9/ju+HXzU0A9m+H7Rfk14S9ahwNgCQfgLq7Dw2VyLLc3ZRcVNinEB7097+FPRtpFQBflvf391X293/ZBoOFvWOzWNmDKoQIe4YtnC+Z+Zng34iyP/0uxx/vQBGBB/jx/i/zoZDc6xYYDgAAAIplWElmTU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAAAAAAAACQAAAAAQAAAJAAAAABAAOShgAHAAAAEgAAAHigAgAEAAAAAQAAACSgAwAEAAAAAQAAACYAAAAAQVNDSUkAAABTY3JlZW5zaG90JS99ZAAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAAdRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDYuMC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+Mzg8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MzY8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpVc2VyQ29tbWVudD5TY3JlZW5zaG90PC9leGlmOlVzZXJDb21tZW50PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KFcjjjAAAABxpRE9UAAAAAgAAAAAAAAATAAAAKAAAABMAAAATAAAAcerJp6AAAAA9SURBVFgJ7NKxFQAABANR9raicdSMcK3itGm8n+R0bTy69CFoQyEACoUUIgHK3ZBCJEC5G1KIBCh3QyR0AAAA//++LyCxAAAAOklEQVTt0rEVAAAEA1H2tqJx1IxwreK0abyf5HRtPLr0IWhDIQAKhRQiAcrdkEIkQLkbUogEKHdDJHT6I3s1kBzd4gAAAABJRU5ErkJggg==" + ), + confirm: Bot.card() + .addTitle("Do you want to proceed") + .addButton("❌ Cancel", "shouldProceed", { data: false }) + .addButton("✅ OK", "shouldProceed", { data: true }), + image: Bot.card() + .addTitle("Images") + .addSubtitle("Cards can have images too") + .addText("Small") + .addImage( + "https://raw.githubusercontent.com/valgaze/speedybot-mini/deploy/docs/assets/speedybot_logo.png", + { size: "Small" } + ) + .addText("Medium") + .addImage( + "https://raw.githubusercontent.com/valgaze/speedybot-mini/deploy/docs/assets/speedybot_logo.png", + { size: "Medium" } + ) + .addText("Large") + .addImage( + "https://raw.githubusercontent.com/valgaze/speedybot-mini/deploy/docs/assets/speedybot_logo.png", + { size: "Large" } + ) + .addText("ExtraLarge") + .addImage( + "https://raw.githubusercontent.com/valgaze/speedybot-mini/deploy/docs/assets/speedybot_logo.png", + { size: "ExtraLarge" } + ) + .addText("Stretch") + .addImage( + "https://raw.githubusercontent.com/valgaze/speedybot-mini/deploy/docs/assets/speedybot_logo.png", + { size: "Stretch" } + ) + .addText("TIP: Images can be links too", { color: "Attention" }) + .addImage( + "https://raw.githubusercontent.com/valgaze/speedybot-mini/deploy/docs/assets/speedybot_logo.png", + { + targetURL: "https://speedybot.js.org", + size: "ExtraLarge", + } + ), + "old-survey": Bot.card() + .addTitle("Business Improvement Survey 📈") + .addSubtitle("Help Us Enhance Our Business Operations!") + .addText( + "Your insights are crucial for our continuous improvement. Please take a moment to complete this survey." + ) + .addText("1. Company Name:") + .addTextInput("Enter Your Company's Name") + .addText("2. Your Position/Role:") + .addTextInput("Enter Your Position/Role") + .addText("3. Please select your department:") + .addPickerDropdown( + ["Select Department"].concat([ + "Sales", + "Marketing", + "Customer Support", + "Finance", + "Product Development", + ]) + ) + .addText( + "4. On a scale of 1-5, how satisfied are you with our products/services? (1 being very dissatisfied, 5 being very satisfied)" + ) + .addSingleSelect([ + "1 (Very Dissatisfied)", + "2", + "3", + "4", + "5 (Very Satisfied)", + ]) + .addText( + "5. What aspects of our products/services do you appreciate the most?" + ) + .addTextarea( + "Please share what you appreciate the most about our offerings." + ) + .addText( + "6. Are there any specific areas where you believe we can improve?" + ) + .addTextarea( + "Please provide details on areas where we can enhance our products/services." + ) + .addText( + "7. How likely are you to recommend our company to others? (1 being highly unlikely, 5 being highly likely)" + ) + .addSingleSelect([ + "1 (Highly Unlikely)", + "2", + "3", + "4", + "5 (Highly Likely)", + ]) + .addText("8. Any additional comments or suggestions?") + .addTextarea( + "Feel free to share any additional comments or suggestions you may have." + ) + .setSubmitButtonTitle("Submit Survey"), +}; + +export const makeHTML = (prefix: string, trigger: any) => { + return ` + + + ${prefix} + + +
+ +
+
+
+${JSON.stringify(trigger, null, 2)}
+          
+ + `; +}; + +Bot.exact("$survey", async ($) => { + const companyNameQuestion: SurveyQuestion = { + type: "text", + question: "What is the name of your company?", + id: "company_name", + }; + + const serviceTypeQuestion: SurveyQuestion = { + type: "text", + question: "Describe the service performed by the vendor.", + id: "service_type", + }; + + const serviceDateQuestion: SurveyQuestion = { + type: "picker-date", + question: "When was the service provided?", + id: "service_date", + }; + + const serviceQualityQuestion: SurveyQuestion = { + type: "single-select", + question: "How would you rate the quality of service?", + choices: ["Excellent", "Good", "Average", "Poor", "Very poor"], + id: "service_quality", + }; + + const highlightsQuestion: SurveyQuestion = { + type: "multi-select", + question: "What were the highlights of the service?", + choices: [ + "Communication", + "Punctuality", + "Time to Resolution", + "Friendliness", + "Cost", + ], + id: "service_highlights", + }; + + const futureUseQuestion: SurveyQuestion = { + type: "single-select", + question: "Would you consider using our services again in the future?", + choices: [ + "Definitely", + "Probably", + "Not sure", + "Probably not", + "Definitely not", + ], + id: "future_use", + }; + + const otherCommentsQuestion: SurveyQuestion = { + type: "textarea", + question: + "Please provide any other comments or suggestions for improvement.", + id: "other_comments", + }; + + const preferredContactTimeQuestion: SurveyQuestion = { + type: "picker-time", + question: "What time of day is preferable for future contact?", + id: "preferred_contact_time", + }; + + const communicationMethodQuestion: SurveyQuestion = { + type: "picker-dropdown", + question: "Preferred method of communication for future updates?", + choices: ["Email", "Phone", "Text"], + id: "communication_method", + }; + + const surveyCard = $.card().survey([ + companyNameQuestion, + serviceTypeQuestion, + serviceDateQuestion, + serviceQualityQuestion, + highlightsQuestion, + futureUseQuestion, + otherCommentsQuestion, + preferredContactTimeQuestion, + communicationMethodQuestion, + ]); + + await $.send(surveyCard); + return $.next; +}); diff --git a/examples/standard-server/settings/launch.ts b/examples/standard-server/settings/launch.ts new file mode 100644 index 0000000..f2d2df5 --- /dev/null +++ b/examples/standard-server/settings/launch.ts @@ -0,0 +1,10 @@ +import { config } from "dotenv"; +import { startServer } from "../src"; +import { resolve } from "path"; +config({ path: resolve(__dirname, "..", ".env") }); + +import Bot from "./bot"; +Bot.setToken(process.env.BOT_TOKEN as string); + +// Pass in your SpeedyBot +startServer(Bot).catch((e) => console.log("##", e)); diff --git a/examples/standard-server/src/index.ts b/examples/standard-server/src/index.ts new file mode 100644 index 0000000..e97ce33 --- /dev/null +++ b/examples/standard-server/src/index.ts @@ -0,0 +1,110 @@ +import * as bodyParser from "body-parser"; +import { config } from "dotenv"; +import * as express from "express"; +import { resolve } from "path"; +import Bot from "./../settings/bot"; +import { validateWebhook } from "./validateWebhook"; +import { announceReady } from "../util"; +import { SpeedyBot } from "../../../src"; + +// Expects .env to get token on BOT_TOKEN +config({ path: resolve(__dirname, "..", ".env") }); + +const app = express(); +const port = process.env.PORT || 8000; +app.use(bodyParser.json()); + +const token = process.env.BOT_TOKEN as string; +if (!token) { + console.log("\n## Token missing (check .env file)"); + process.exit(0); +} +Bot.setToken(token); + +// Replace TARGET below with an email address of room id +const TARGET = "joe@joe.com"; + +app.post("/speedybot", async (req, res) => { + const json = req.body; + // Here could check headers for X-Spark-Signature and hash with a secret to verify envelope is authentic + // For more info see: https://github.com/valgaze/speedybot-mini/blob/deploy/docs/webhooks.md#secrets + + const signature = req.header("x-spark-signature"); + const webhookSecret = process.env.WEBHOOK_SECRET; + + // Validate webhook & other checks you might need + if (webhookSecret && signature) { + const proceed = validateWebhook(json, webhookSecret, signature); + if (proceed === false) { + return res.send("Webhook Secret Rejected"); + } + } + + await Bot.runMiddleware(json); + + res.status(200).send("ok"); +}); + +app.post("/incoming_webhook", async (req, res) => { + const data = req.body; + + // here you could validate on the req, req.body, etc + // Send text + Bot.sendTo(TARGET, "A webhook just hit the server!"); + + // Send a card + Bot.sendTo( + TARGET, + Bot.card() + .addTitle("Attention!") + .addText(`Data submitted: ${JSON.stringify(data)}`) + ); + + // Send a file with data + Bot.sendFileTo( + TARGET, + { + message: "Data report", + id: data.id, + stamp: new Date().toISOString(), + }, + "json" + ); + + res.send(`ok`); +}); + +app.get("/", (_, res) => { + res.send( + "Register your bot's with Speedybot Garage: https://codepen.io/valgaze/full/MWVjEZV" + ); +}); + +export async function startServer( + BotRef: SpeedyBot, + cb?: (data?: { email: string; name?: string }) => any +) { + return app.listen(port, async () => { + const token = BotRef.getToken(); + if (!token) { + throw new Error( + `SpeedyBot must have token specified before launching websockets, set with Bot.setToken()` + ); + } + + try { + const data = await Bot.getSelf(); + const { displayName } = data; + const [email] = data.emails; + if (!cb) { + announceReady(String(port), email, displayName); + } else { + return cb({ email, name: displayName }); + } + } catch (e) { + throw e; + } + }); +} + +export { app }; diff --git a/examples/standard-server/src/validateWebhook.ts b/examples/standard-server/src/validateWebhook.ts new file mode 100644 index 0000000..deced0d --- /dev/null +++ b/examples/standard-server/src/validateWebhook.ts @@ -0,0 +1,15 @@ +import { createHmac } from "crypto"; +export const validateWebhook = ( + signature: string, + secret: string, + requestBody: T +): boolean => { + const hmac = createHmac("sha1", secret); + if (typeof requestBody === "string") { + hmac.update(requestBody); + } else { + hmac.update(JSON.stringify(requestBody)); + } + const isValid = hmac.digest("hex") === signature; + return isValid; +}; diff --git a/examples/standard-server/tsconfig.json b/examples/standard-server/tsconfig.json new file mode 100644 index 0000000..7a2427c --- /dev/null +++ b/examples/standard-server/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "declaration": true, + "resolveJsonModule": true, + "module": "commonjs", + "target": "ES2016", + "noImplicitAny": false, + "moduleResolution": "node", + "removeComments": true, + "sourceMap": true, + "skipLibCheck": true, + "strict": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": false, + "noUnusedLocals": true, + "outDir": "dist", + "baseUrl": ".", + "forceConsistentCasingInFileNames": true, + "paths": { + "*": ["node_modules/*"] + } + }, + "include": ["util/**/*", "package.json"], + "exclude": ["node_modules", "dist", "@vitest"] +} diff --git a/examples/standard-server/util/cli.ts b/examples/standard-server/util/cli.ts new file mode 100644 index 0000000..206206c --- /dev/null +++ b/examples/standard-server/util/cli.ts @@ -0,0 +1,123 @@ +// #!/usr/bin/env node +import * as fs from "fs/promises"; +import * as readline from "readline"; +import { resolve } from "path"; +import * as dotenv from "dotenv"; +import "cross-fetch/polyfill"; // for non-tech environment for reset devices + +import { botTokenKey, logoRoll } from "../../../src"; + +// Expects .env to get token on BOT_TOKEN +dotenv.config({ path: resolve(__dirname, "..", ".env") }); + +async function writeEnvFile(envObject, append = true) { + try { + const envContents = Object.entries(envObject) + .map(([key, value]) => `${key}=${value}`) + .join("\n"); + const flag = append ? "a" : "w"; // Use "a" for append, "w" for write (overwrite) + await fs.writeFile(".env", append ? `\n${envContents}` : envContents, { + flag, + }); + } catch (error) { + console.error("Error writing to .env:", error); + process.exit(1); + } +} + +async function promptUser(msg) { + return new Promise((resolve) => { + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, + }); + + rl.question(`${msg}: `, (answer) => { + rl.close(); + resolve(answer); + }); + }); +} + +async function writeToken(token) { + let finalToken = token; + if (!token) { + finalToken = await promptUser( + `Enter your token, [Usage: npm run bot:setup ]` + ); + } + // destructively overwrites .env as BOT_TOKEN=xxxxxxxx + const envObject = { [botTokenKey]: finalToken }; + await writeEnvFile(envObject, false); + console.log( + `[✅ SpeedyBot] .env written to ${resolve(__dirname, "..", ".env")} ` + ); +} + +/** + * + * @param keyValue: keyName=TheValue + */ +async function writeSecret(keyValue: string) { + // appends .env as key=value + const [key, value] = keyValue.split("="); + const envObject = { [key]: value }; + await writeEnvFile(envObject, true); + console.log( + `[✅ SpeedyBot] .env written to ${resolve(__dirname, "..", ".env")} ` + ); +} +async function run(command, ...args) { + switch (command) { + case "setup": + await writeToken(args[0]); + break; + case "addsecret": + await writeSecret(args[0]); + break; + case "help": + console.log(await logoRoll()); + console.log("Project Path:", process.cwd()); + console.log(` +Usage: + $ npm run bot:debug + $ npm run bot:dev + $ npm run bot:on + $ npm run bot:reset + $ npm run bot:setup + $ npm run bot:addsecret MYKEY=THE_VALUE + +Commands: + 1. Debug Command: + $ npm run bot:debug + Display debug information about your system + + 2. Development Command: + $ npm run bot:dev + Start your bot locally (using websockets) with live-reload on code-changes + + 3. Online Command: + $ npm run bot:on + "Turn on" your bot locally (over websockets) but without live-reload on code-changes, CTRL-C to exit + + 4. Reset Command: + $ npm run bot:reset + Reset any devices, useful for rate limit situations + + 5. Setup Command: + $ npm run bot:setup + Overwrite (delete all other values) in .env file with BOT_TOKEN= + + 6. Add Secret + $ npm run bot:addsecret MYKEY=THE_VALUE + Append an .env file with MYKEY=THE_VALUE +`); + break; + default: + console.error(`Unknown command: ${command}`); + break; + } +} + +const [, , command, ...args] = process.argv; +run(command, ...args); diff --git a/examples/standard-server/util/index.ts b/examples/standard-server/util/index.ts new file mode 100644 index 0000000..33ad033 --- /dev/null +++ b/examples/standard-server/util/index.ts @@ -0,0 +1,17 @@ +import { logoRoll } from "../../../src"; + +export const announceReady = ( + port: number | string, + email: string, + name = "Your bot" +) => { + const isColorSupported = process.stdout.isTTY; + console.log(logoRoll()); + if (isColorSupported) { + const ServerReady = `\x1b[1m\x1b[7m\x1b[32m 🌐 CONNECTED \x1b[0m\x1b[32m Server active on ${port}, listening...\x1b[0m`; + process.stdout.write(ServerReady + "\n"); + } else { + console.log("Websockets Registered. Listening..."); + } + console.log(`You can reach ${name} here: ${email}`); +}; diff --git a/examples/worker/.editorconfig b/examples/worker/.editorconfig new file mode 100644 index 0000000..64ab260 --- /dev/null +++ b/examples/worker/.editorconfig @@ -0,0 +1,13 @@ +# http://editorconfig.org +root = true + +[*] +indent_style = tab +tab_width = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.yml] +indent_style = space diff --git a/examples/worker/.gitignore b/examples/worker/.gitignore new file mode 100644 index 0000000..3b0fe33 --- /dev/null +++ b/examples/worker/.gitignore @@ -0,0 +1,172 @@ +# Logs + +logs +_.log +npm-debug.log_ +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) + +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# Runtime data + +pids +_.pid +_.seed +\*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover + +lib-cov + +# Coverage directory used by tools like istanbul + +coverage +\*.lcov + +# nyc test coverage + +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) + +.grunt + +# Bower dependency directory (https://bower.io/) + +bower_components + +# node-waf configuration + +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) + +build/Release + +# Dependency directories + +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) + +web_modules/ + +# TypeScript cache + +\*.tsbuildinfo + +# Optional npm cache directory + +.npm + +# Optional eslint cache + +.eslintcache + +# Optional stylelint cache + +.stylelintcache + +# Microbundle cache + +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history + +.node_repl_history + +# Output of 'npm pack' + +\*.tgz + +# Yarn Integrity file + +.yarn-integrity + +# dotenv environment variable files + +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) + +.cache +.parcel-cache + +# Next.js build output + +.next +out + +# Nuxt.js build / generate output + +.nuxt +dist + +# Gatsby files + +.cache/ + +# Comment in the public line in if your project uses Gatsby and not Next.js + +# https://nextjs.org/blog/next-9-1#public-directory-support + +# public + +# vuepress build output + +.vuepress/dist + +# vuepress v2.x temp and cache directory + +.temp +.cache + +# Docusaurus cache and generated files + +.docusaurus + +# Serverless directories + +.serverless/ + +# FuseBox cache + +.fusebox/ + +# DynamoDB Local files + +.dynamodb/ + +# TernJS port file + +.tern-port + +# Stores VSCode versions used for testing VSCode extensions + +.vscode-test + +# yarn v2 + +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.\* + +# wrangler project + +.dev.vars +.wrangler/ diff --git a/examples/worker/.prettierrc b/examples/worker/.prettierrc new file mode 100644 index 0000000..5c7b5d3 --- /dev/null +++ b/examples/worker/.prettierrc @@ -0,0 +1,6 @@ +{ + "printWidth": 140, + "singleQuote": true, + "semi": true, + "useTabs": true +} diff --git a/examples/worker/README.md b/examples/worker/README.md new file mode 100644 index 0000000..70068fe --- /dev/null +++ b/examples/worker/README.md @@ -0,0 +1,71 @@ +# Add your bot on a Workers + +Note: The steps below assume you have a working WebEx account + a Cloudflare account with permission to create Workers + +## 1) Fetch repo & install deps + +``` +git clone https://github.com/valgaze/speedybot +cd speedybot/examples/worker +npm i +``` + +## 2) Get + Set your bot access token + +- Create a bot from scratch here + cpo the token: **[https://developer.webex.com/my-apps/new/bot](https://developer.webex.com/my-apps/new/bot)** + +- If you have an existing bot, get its token her (regenerate): **[https://developer.webex.com/my-apps](https://developer.webex.com/my-apps)** + +## 3) Get your bot URL + +- If you don't have one already, get a **[cloudflare account](https://dash.cloudflare.com/sign-up)** + +- Authenticate your machine with `npx wrangler login` + +- Create a new "worker" from the **[cloudflare dashboard](https://dash.cloudflare.com)** & note its URL (you can name it something like https://speedybot1234.username.workers.dev) + +## 4) Add your bot token + +From the same directory as the repo run the following command to add a secret called `BOT_TOKEN` and enter your info using **[secrets manager](https://blog.cloudflare.com/workers-secrets-environment/#supporting-secrets)** + +```sh +npx wrangler secret put BOT_TOKEN +``` + +To secure your webhooks with a secret set a secret: + +```sh +npx wrangler secret put WEBHOOK_SECRET +``` + +![image](https://raw.githubusercontent.com/valgaze/speedybot-utils/main/assets/various/worker_secret.gif) + +## 5) Deploy your agent + +From the same directory as the repo run this command to deploy your agent (now bound with your `BOT_TOKEN` secret) + +``` +npm run deploy +``` + +## 6) Register your webhooks + +- Make a note the URL of the deployed function (ie http://speedybot-mini.username.workers.dev) + +Unlike the **[websockets example](https://speedybot.js.org/examples/speedybot-starter/README)**, you will need to deploy this serve or use a secure mechanism to expose it to the internet and then register the webhooks + +Hop on over to the **[Webhooks Section](https://speedybot.js.org/webhooks)** to register your webhooks and secret + +## 7) Take it for a spin + +- After connecting webhooks, take it for a spin + + + +## Webhook secrets + +- From the same directory as the repo run the following command to add a secret called `WEBHOOK_SECRET` and use the same secret value used when registering webhooks: + +```sh +npx wrangler secret put WEBHOOK_SECRET +``` diff --git a/examples/worker/package-lock.json b/examples/worker/package-lock.json new file mode 100644 index 0000000..afe47df --- /dev/null +++ b/examples/worker/package-lock.json @@ -0,0 +1,1946 @@ +{ + "name": "worker-testbed", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "worker-testbed", + "version": "0.0.0", + "devDependencies": { + "@cloudflare/workers-types": "^4.20230419.0", + "typescript": "^5.0.4", + "wrangler": "^3.0.0" + } + }, + "node_modules/@cloudflare/kv-asset-handler": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.2.0.tgz", + "integrity": "sha512-MVbXLbTcAotOPUj0pAMhVtJ+3/kFkwJqc5qNOleOZTv6QkZZABDMS21dSrSlVswEHwrpWC03e4fWytjqKvuE2A==", + "dev": true, + "dependencies": { + "mime": "^3.0.0" + } + }, + "node_modules/@cloudflare/workerd-darwin-64": { + "version": "1.20231025.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20231025.0.tgz", + "integrity": "sha512-MYRYTbSl+tjGg6su7savlLIb8cOcKJfdGpA+WdtgqT2OF7O+89Lag0l1SA/iyVlUkT31Jc6OLHqvzsXgmg+niQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-darwin-arm64": { + "version": "1.20231025.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20231025.0.tgz", + "integrity": "sha512-BszjtBDR84TVa6oWe74dePJSAukWlTmLw9zR4KeWuwZLJGV7RMm6AmwGStetjnwZrecZaaOFELfBCAHtsebV0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-linux-64": { + "version": "1.20231025.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20231025.0.tgz", + "integrity": "sha512-AT9dxgKXOa9xZxZ3k2a432axPJJ58KpoNWnPiPYGpuAuLoWnfcYwwh6mr9sZVcTdAdTAK9Xu9c81tp0YABanUw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-linux-arm64": { + "version": "1.20231025.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20231025.0.tgz", + "integrity": "sha512-EIjex5o2k80YZWPix1btGybL/vNZ3o6vqKX9ptS0JcFkHV5aFX5/kcMwSBRjiIC+w04zVjmGQx3N1Vh3njuncg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-windows-64": { + "version": "1.20231025.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20231025.0.tgz", + "integrity": "sha512-7vtq0mO22A2v0OOsKXa760r9a84Gg8CK0gDu5uNWlj6hojmt011iz7jJt76I7oo/XrVwVlVfu69GnA3ljx6U8w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workers-types": { + "version": "4.20231025.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20231025.0.tgz", + "integrity": "sha512-TkcZkntUTOcvJ4vgmwpNfLTclpMbmbClZCe62B25/VTukmyv91joRa4eKzSjzCZUXTbFHNmVdOpmGaaJU2U3+A==", + "dev": true + }, + "node_modules/@esbuild-plugins/node-globals-polyfill": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.2.3.tgz", + "integrity": "sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==", + "dev": true, + "peerDependencies": { + "esbuild": "*" + } + }, + "node_modules/@esbuild-plugins/node-modules-polyfill": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.2.2.tgz", + "integrity": "sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^4.0.0", + "rollup-plugin-node-polyfills": "^0.2.1" + }, + "peerDependencies": { + "esbuild": "*" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@fastify/busboy": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.0.0.tgz", + "integrity": "sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@types/node": { + "version": "20.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz", + "integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.9.tgz", + "integrity": "sha512-meK88cx/sTalPSLSoCzkiUB4VPIFHmxtXm5FaaqRDqBX2i/Sy8bJ4odsan0b20RBjPh06dAQ+OTTdnyQyhJZyQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", + "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/as-table": { + "version": "1.0.55", + "resolved": "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz", + "integrity": "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==", + "dev": true, + "dependencies": { + "printable-characters": "^1.0.42" + } + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/blake3-wasm": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", + "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", + "dev": true + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/capnp-ts": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/capnp-ts/-/capnp-ts-0.7.0.tgz", + "integrity": "sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==", + "dev": true, + "dependencies": { + "debug": "^4.3.1", + "tslib": "^2.2.0" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz", + "integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "node_modules/exit-hook": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", + "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-source": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz", + "integrity": "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==", + "dev": true, + "dependencies": { + "data-uri-to-buffer": "^2.0.0", + "source-map": "^0.6.1" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/miniflare": { + "version": "3.20231025.0", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20231025.0.tgz", + "integrity": "sha512-pFcr2BRaGIQ26UfdDo8BMJ6kkd/Jo/FkQ/4K7UG/eORlDepsLrR/sTJddcSSIGl07MA+MGjhzopFTPpFskkS+g==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-walk": "^8.2.0", + "capnp-ts": "^0.7.0", + "exit-hook": "^2.2.1", + "glob-to-regexp": "^0.4.1", + "source-map-support": "0.5.21", + "stoppable": "^1.1.0", + "undici": "^5.22.1", + "workerd": "1.20231025.0", + "ws": "^8.11.0", + "youch": "^3.2.2", + "zod": "^3.20.6" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "dev": true, + "bin": { + "mustache": "bin/mustache" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-to-regexp": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", + "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/printable-characters": { + "version": "1.0.42", + "resolved": "https://registry.npmjs.org/printable-characters/-/printable-characters-1.0.42.tgz", + "integrity": "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==", + "dev": true + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/rollup-plugin-inject": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", + "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.", + "dev": true, + "dependencies": { + "estree-walker": "^0.6.1", + "magic-string": "^0.25.3", + "rollup-pluginutils": "^2.8.1" + } + }, + "node_modules/rollup-plugin-node-polyfills": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", + "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", + "dev": true, + "dependencies": { + "rollup-plugin-inject": "^3.0.0" + } + }, + "node_modules/rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "dependencies": { + "estree-walker": "^0.6.1" + } + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "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/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/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true + }, + "node_modules/stacktracey": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/stacktracey/-/stacktracey-2.1.8.tgz", + "integrity": "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==", + "dev": true, + "dependencies": { + "as-table": "^1.0.36", + "get-source": "^2.0.12" + } + }, + "node_modules/stoppable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", + "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", + "dev": true, + "engines": { + "node": ">=4", + "npm": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "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 + }, + "node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici": { + "version": "5.27.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.27.2.tgz", + "integrity": "sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ==", + "dev": true, + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/workerd": { + "version": "1.20231025.0", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20231025.0.tgz", + "integrity": "sha512-W1PFtpMFfvmm+ozBf+u70TE3Pviv7WA4qzDeejHDC4z+PFDq4+3KJCkgffaGBO86h+akWO0hSsc0uXL2zAqofQ==", + "dev": true, + "hasInstallScript": true, + "bin": { + "workerd": "bin/workerd" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "@cloudflare/workerd-darwin-64": "1.20231025.0", + "@cloudflare/workerd-darwin-arm64": "1.20231025.0", + "@cloudflare/workerd-linux-64": "1.20231025.0", + "@cloudflare/workerd-linux-arm64": "1.20231025.0", + "@cloudflare/workerd-windows-64": "1.20231025.0" + } + }, + "node_modules/wrangler": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.15.0.tgz", + "integrity": "sha512-kxzK62rD+LRrDeZZzw8cP6FBub71vJCbfAAb594XobXajgXYh3pFjv18Vm8YLxHzoGMhmAOJPA5b4DHq4HEUCw==", + "dev": true, + "dependencies": { + "@cloudflare/kv-asset-handler": "^0.2.0", + "@esbuild-plugins/node-globals-polyfill": "^0.2.3", + "@esbuild-plugins/node-modules-polyfill": "^0.2.2", + "blake3-wasm": "^2.1.5", + "chokidar": "^3.5.3", + "esbuild": "0.17.19", + "miniflare": "3.20231025.0", + "nanoid": "^3.3.3", + "path-to-regexp": "^6.2.0", + "resolve.exports": "^2.0.2", + "selfsigned": "^2.0.1", + "source-map": "0.6.1", + "source-map-support": "0.5.21", + "xxhash-wasm": "^1.0.1" + }, + "bin": { + "wrangler": "bin/wrangler.js", + "wrangler2": "bin/wrangler.js" + }, + "engines": { + "node": ">=16.17.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/ws": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xxhash-wasm": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.0.2.tgz", + "integrity": "sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==", + "dev": true + }, + "node_modules/youch": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/youch/-/youch-3.3.3.tgz", + "integrity": "sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==", + "dev": true, + "dependencies": { + "cookie": "^0.5.0", + "mustache": "^4.2.0", + "stacktracey": "^2.1.8" + } + }, + "node_modules/zod": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", + "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + }, + "dependencies": { + "@cloudflare/kv-asset-handler": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.2.0.tgz", + "integrity": "sha512-MVbXLbTcAotOPUj0pAMhVtJ+3/kFkwJqc5qNOleOZTv6QkZZABDMS21dSrSlVswEHwrpWC03e4fWytjqKvuE2A==", + "dev": true, + "requires": { + "mime": "^3.0.0" + } + }, + "@cloudflare/workerd-darwin-64": { + "version": "1.20231025.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20231025.0.tgz", + "integrity": "sha512-MYRYTbSl+tjGg6su7savlLIb8cOcKJfdGpA+WdtgqT2OF7O+89Lag0l1SA/iyVlUkT31Jc6OLHqvzsXgmg+niQ==", + "dev": true, + "optional": true + }, + "@cloudflare/workerd-darwin-arm64": { + "version": "1.20231025.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20231025.0.tgz", + "integrity": "sha512-BszjtBDR84TVa6oWe74dePJSAukWlTmLw9zR4KeWuwZLJGV7RMm6AmwGStetjnwZrecZaaOFELfBCAHtsebV0Q==", + "dev": true, + "optional": true + }, + "@cloudflare/workerd-linux-64": { + "version": "1.20231025.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20231025.0.tgz", + "integrity": "sha512-AT9dxgKXOa9xZxZ3k2a432axPJJ58KpoNWnPiPYGpuAuLoWnfcYwwh6mr9sZVcTdAdTAK9Xu9c81tp0YABanUw==", + "dev": true, + "optional": true + }, + "@cloudflare/workerd-linux-arm64": { + "version": "1.20231025.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20231025.0.tgz", + "integrity": "sha512-EIjex5o2k80YZWPix1btGybL/vNZ3o6vqKX9ptS0JcFkHV5aFX5/kcMwSBRjiIC+w04zVjmGQx3N1Vh3njuncg==", + "dev": true, + "optional": true + }, + "@cloudflare/workerd-windows-64": { + "version": "1.20231025.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20231025.0.tgz", + "integrity": "sha512-7vtq0mO22A2v0OOsKXa760r9a84Gg8CK0gDu5uNWlj6hojmt011iz7jJt76I7oo/XrVwVlVfu69GnA3ljx6U8w==", + "dev": true, + "optional": true + }, + "@cloudflare/workers-types": { + "version": "4.20231025.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20231025.0.tgz", + "integrity": "sha512-TkcZkntUTOcvJ4vgmwpNfLTclpMbmbClZCe62B25/VTukmyv91joRa4eKzSjzCZUXTbFHNmVdOpmGaaJU2U3+A==", + "dev": true + }, + "@esbuild-plugins/node-globals-polyfill": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.2.3.tgz", + "integrity": "sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==", + "dev": true, + "requires": {} + }, + "@esbuild-plugins/node-modules-polyfill": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.2.2.tgz", + "integrity": "sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==", + "dev": true, + "requires": { + "escape-string-regexp": "^4.0.0", + "rollup-plugin-node-polyfills": "^0.2.1" + } + }, + "@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "dev": true, + "optional": true + }, + "@fastify/busboy": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.0.0.tgz", + "integrity": "sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==", + "dev": true + }, + "@types/node": { + "version": "20.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz", + "integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==", + "dev": true, + "requires": { + "undici-types": "~5.26.4" + } + }, + "@types/node-forge": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.9.tgz", + "integrity": "sha512-meK88cx/sTalPSLSoCzkiUB4VPIFHmxtXm5FaaqRDqBX2i/Sy8bJ4odsan0b20RBjPh06dAQ+OTTdnyQyhJZyQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true + }, + "acorn-walk": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", + "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", + "dev": true + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "as-table": { + "version": "1.0.55", + "resolved": "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz", + "integrity": "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==", + "dev": true, + "requires": { + "printable-characters": "^1.0.42" + } + }, + "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 + }, + "blake3-wasm": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", + "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "capnp-ts": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/capnp-ts/-/capnp-ts-0.7.0.tgz", + "integrity": "sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==", + "dev": true, + "requires": { + "debug": "^4.3.1", + "tslib": "^2.2.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true + }, + "data-uri-to-buffer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz", + "integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "exit-hook": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", + "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "get-source": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz", + "integrity": "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==", + "dev": true, + "requires": { + "data-uri-to-buffer": "^2.0.0", + "source-map": "^0.6.1" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "dev": true + }, + "miniflare": { + "version": "3.20231025.0", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20231025.0.tgz", + "integrity": "sha512-pFcr2BRaGIQ26UfdDo8BMJ6kkd/Jo/FkQ/4K7UG/eORlDepsLrR/sTJddcSSIGl07MA+MGjhzopFTPpFskkS+g==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-walk": "^8.2.0", + "capnp-ts": "^0.7.0", + "exit-hook": "^2.2.1", + "glob-to-regexp": "^0.4.1", + "source-map-support": "0.5.21", + "stoppable": "^1.1.0", + "undici": "^5.22.1", + "workerd": "1.20231025.0", + "ws": "^8.11.0", + "youch": "^3.2.2", + "zod": "^3.20.6" + } + }, + "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 + }, + "mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "dev": true + }, + "nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true + }, + "node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "path-to-regexp": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", + "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "printable-characters": { + "version": "1.0.42", + "resolved": "https://registry.npmjs.org/printable-characters/-/printable-characters-1.0.42.tgz", + "integrity": "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==", + "dev": true + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true + }, + "rollup-plugin-inject": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", + "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1", + "magic-string": "^0.25.3", + "rollup-pluginutils": "^2.8.1" + } + }, + "rollup-plugin-node-polyfills": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", + "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", + "dev": true, + "requires": { + "rollup-plugin-inject": "^3.0.0" + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + } + }, + "selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "requires": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + } + }, + "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 + }, + "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, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "stacktracey": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/stacktracey/-/stacktracey-2.1.8.tgz", + "integrity": "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==", + "dev": true, + "requires": { + "as-table": "^1.0.36", + "get-source": "^2.0.12" + } + }, + "stoppable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", + "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true + }, + "undici": { + "version": "5.27.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.27.2.tgz", + "integrity": "sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ==", + "dev": true, + "requires": { + "@fastify/busboy": "^2.0.0" + } + }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "workerd": { + "version": "1.20231025.0", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20231025.0.tgz", + "integrity": "sha512-W1PFtpMFfvmm+ozBf+u70TE3Pviv7WA4qzDeejHDC4z+PFDq4+3KJCkgffaGBO86h+akWO0hSsc0uXL2zAqofQ==", + "dev": true, + "requires": { + "@cloudflare/workerd-darwin-64": "1.20231025.0", + "@cloudflare/workerd-darwin-arm64": "1.20231025.0", + "@cloudflare/workerd-linux-64": "1.20231025.0", + "@cloudflare/workerd-linux-arm64": "1.20231025.0", + "@cloudflare/workerd-windows-64": "1.20231025.0" + } + }, + "wrangler": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.15.0.tgz", + "integrity": "sha512-kxzK62rD+LRrDeZZzw8cP6FBub71vJCbfAAb594XobXajgXYh3pFjv18Vm8YLxHzoGMhmAOJPA5b4DHq4HEUCw==", + "dev": true, + "requires": { + "@cloudflare/kv-asset-handler": "^0.2.0", + "@esbuild-plugins/node-globals-polyfill": "^0.2.3", + "@esbuild-plugins/node-modules-polyfill": "^0.2.2", + "blake3-wasm": "^2.1.5", + "chokidar": "^3.5.3", + "esbuild": "0.17.19", + "fsevents": "~2.3.2", + "miniflare": "3.20231025.0", + "nanoid": "^3.3.3", + "path-to-regexp": "^6.2.0", + "resolve.exports": "^2.0.2", + "selfsigned": "^2.0.1", + "source-map": "0.6.1", + "source-map-support": "0.5.21", + "xxhash-wasm": "^1.0.1" + } + }, + "ws": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", + "dev": true, + "requires": {} + }, + "xxhash-wasm": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.0.2.tgz", + "integrity": "sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==", + "dev": true + }, + "youch": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/youch/-/youch-3.3.3.tgz", + "integrity": "sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==", + "dev": true, + "requires": { + "cookie": "^0.5.0", + "mustache": "^4.2.0", + "stacktracey": "^2.1.8" + } + }, + "zod": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", + "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", + "dev": true + } + } +} diff --git a/examples/worker/package.json b/examples/worker/package.json new file mode 100644 index 0000000..5c9e4be --- /dev/null +++ b/examples/worker/package.json @@ -0,0 +1,15 @@ +{ + "name": "worker-testbed", + "version": "0.0.0", + "private": true, + "scripts": { + "deploy": "wrangler deploy --minify", + "dev": "wrangler dev", + "start": "wrangler dev --remote" + }, + "devDependencies": { + "@cloudflare/workers-types": "^4.20230419.0", + "typescript": "^5.0.4", + "wrangler": "^3.0.0" + } +} diff --git a/examples/worker/settings/bot.ts b/examples/worker/settings/bot.ts new file mode 100644 index 0000000..7e25df5 --- /dev/null +++ b/examples/worker/settings/bot.ts @@ -0,0 +1,528 @@ +import { SpeedyBot, SpeedyCard, SurveyQuestion } from '../../../src'; + +const Bot = new SpeedyBot(); + +// ## File upload handler +Bot.addStep(async ($) => { + if ($.file) { + const { name, extension, contentType } = $.file; + await $.send(`You uploaded "${name}", a *.${extension} file [${contentType}]`); + // Fetch raw bytes (which you can send to database or send to external system) + // const TheData = await $.file.getData(); // do something w/ the contents/bytes + } + return $.next; +}); + +// ## "ping/pong", run logic on inputs +Bot.addStep(async ($) => { + if ($.text) { + const lowered = $.text.toLowerCase(); + if (lowered === 'ping') { + await $.send('pong'); + return $.end; + } else if (lowered === 'pong') { + await $.send('ping'); + return $.end; + } + } + return $.next; // pass through to rest of steps +}); + +// ## "show-cards, show adaptive cards +Bot.addStep(async ($) => { + if ($.text) { + const lowered = $.text.toLowerCase(); + if (lowered === 'show-cards') { + await $.send('SpeedyCards make it easy to send rich, interactive cards to the user'); + const { value } = Bot.pickRandom(cardChoices); + const card = cardHash[value].addSubcard( + $.card() + .addLink('https://speedybot.js.org/docs/speedybot?card=${value}', 'See the source for this card') + .addText('Pick a new card') + .addPickerDropdown(cardChoices, 'showCard'), + 'Learn more' + ); + await $.send(card); + return $.end; + } + } + return $.next; // pass through to rest of steps +}); + +// ## "files", show file capabilities (not upload file-- different idea-- but sending data to the user as a file) +Bot.addStep(async ($) => { + if ($.text && $.text.toLowerCase() === 'files') { + await $.send(`You can of course upload files but SpeedyBot also provides handy features to send data to the user as files`); + + // send a *.json file + const fileData = $.debug(); + await $.sendFile(fileData, 'json'); + + // Send HTML w/ dynamic data + await $.sendFile(makeHTML(`Here's your generated file, ${$.author.name}`, fileData), 'html'); + return $.end; + } else { + return $.next; + } +}); + +// ## "kitchensink", show everything +Bot.addStep(async ($) => { + if ($.text && ['kitchen', 'kitchensink'].includes($.text)) { + await $.clearScreen(); + await $.send(`## Kitchen Sink`); + + await $.thread([ + $.card({ + title: `This is a 'thread'`, + subTitle: 'You can have many entries after the 1st', + chips: [ + { + title: 'Go Again 🔄', + value: 'kitchensink', + }, + ], + }) + .addText('Pick an entry from the list to preview a SpeedyCard') + .addPickerDropdown(cardChoices, 'showCard'), + 'thread item 1', + 'thread item 2', + 'thread item 3', + 'thread item 4', + 'thread item 5', + ]); + + await $.send(`## Files`); + + // Send data as a *.json file + await $.send(`Send data to user (here as *.json or *.html)`); + const fileData = $.debug(); + await $.sendFile(fileData, 'json'); + await $.sendFile(makeHTML(`Here's your generated file, ${$.author.name}`, fileData), 'html'); + return $.end; + } + return $.next; +}); + +// ## Main greeting +Bot.addStep(async ($) => { + if ($.text && !$.file) { + const utterances = [`Heya how's it going $[name]?`, `Hi there, $[name]!`, `Hiya $[name]!`, `What's new $[name]?`, `Helllooo $[name]!`]; + const template = { + name: $.author.name, + }; + await $.send($.fillTemplate(utterances, template)); + const randomImage = `https://raw.githubusercontent.com/valgaze/speedybot-mini/deploy/docs/assets/memes/${Bot.pickRandom([ + 'logo.jpeg', + 'logo2.jpeg', + 'logo3.jpeg', + 'logo4.jpeg', + 'logo5.jpeg', + 'logo6.jpeg', + 'logo7.jpeg', + 'logo8.jpeg', + 'logo9.jpeg', + ])}`; + + const introCard = $.card() + .addHeader('🤖 SpeedyBot') + .addImage(randomImage, { + targetURL: 'https://speedybot.js.org', + size: 'ExtraLarge', + }) + .addChips([ + { title: 'SpeedyCards 🌠', value: 'show-cards' }, + { title: 'ping 🏓', value: 'ping' }, + { title: '🏓 pong', value: 'pong' }, + { title: '🗂 files', value: 'files' }, + { title: '🗂 Everything (warning: fast)', value: 'kitchensink' }, + ]) + .addSubcard( + $.card() + .addTitle('SpeedyCards') + .addText( + '**SpeedyCards** make it easy to build cards that deliver information in a visually attractive way or craft or cards with interactive forms that will let you capture structured data submitted from users' + ) + .addText('Pick a new card template') + .addPickerDropdown(cardChoices, 'showCard'), + 'See More ' + ); + await $.send(introCard); + return $.next; + } + return $.next; +}); + +// ## Card utilities +// SpeedyCard form submissions, check for $.data, can add generics for type assurance +Bot.addStep(async ($) => { + if ($.data && !$.data.showCard) { + const dataSnippet = $.buildDataSnippet($.data); + await $.send(`This data was submitted:`); + await $.send(dataSnippet); + } + return $.next; +}); + +// handle card picks from dropdown, attach preview, this can happen from multiple cards + locations +Bot.addStep>(async ($) => { + type CardKey = keyof typeof cardHash; + const isCardKey = (key: CardKey | undefined): key is CardKey => { + return key !== undefined && key in cardHash; + }; + + if ($.data && isCardKey($.data.showCard)) { + cardHash[$.data.showCard].addSubcard( + $.card() + .addLink( + $.ctx.isDev + ? `http://localhost:5173/vitepresspublish/docs/speedycard?card=${$.data.showCard}` + : `https://speedybot.js.org/docs/speedybot?card=${$.data.showCard}`, + 'See the source for this card' + ) + .addText('Pick a new card') + .addPickerDropdown(cardChoices, 'showCard'), + 'Learn more' + ); + + const card = cardHash[$.data.showCard] as SpeedyCard; + await $.send(card); + } + return $.next; +}); + +// ## ex. pass data/flags between steps during runs +Bot.addStep(($) => { + $.ctx.isDev = false; // set to true on debug mode to trace incoming messages + return $.next; +}); + +// ## read flags +Bot.addStep(async ($) => { + if ($.ctx.isDev) { + await $.send($.buildDataSnippet($.debug())); + } + return $.next; +}); + +// short-hand for exact match +Bot.exact('$clear', async ($) => { + await $.clearScreen(); + return $.end; +}); + +// ## Don't leave users hanging +Bot.captureError(async (payload) => { + const { roomId } = payload; + if (roomId) await Bot.sendTo(roomId, `Whoops, there was a problem: ${payload.message}`); +}); +// export the Bot +export default Bot; + +// Bunch of cards +export const cardChoices = [ + { title: 'Text Formatting 📄', value: 'format-card' }, + { title: 'Survey 📝', value: 'survey' }, + { title: 'Acai 🍇', value: 'acai' }, + { title: 'Appcard 💳', value: 'appcard' }, + { title: 'Appcard RTL ⬅️', value: 'appcard-rtl' }, + { title: 'Red Danger 🔴', value: 'red-danger' }, + { title: 'Green Success ✅', value: 'green-success' }, + { title: 'Yellow Warning ⚠️', value: 'yellow-warning' }, + { title: 'Banner Yellow 🟡', value: 'banner-yellow' }, + { title: 'Confirm ✔️', value: 'confirm' }, + { title: 'Image 🖼️', value: 'image' }, + { title: 'Chips 🍟', value: 'chips' }, + { title: 'Old Survey', value: 'old-survey' }, +]; + +export const cardHash: { [key: string]: SpeedyCard } = { + survey: Bot.card().survey([ + { + type: 'text', + question: 'What is the name of your company?', + id: 'company_name', + }, + { + type: 'text', + question: 'Describe the service performed by the vendor.', + id: 'service_type', + }, + { + type: 'picker-date', + question: 'When was the service provided?', + id: 'service_date', + }, + { + type: 'single-select', + question: 'How would you rate the quality of service?', + choices: ['Excellent', 'Good', 'Average', 'Poor', 'Very poor'], + id: 'service_quality', + }, + { + type: 'multi-select', + question: 'What were the highlights of the service?', + choices: ['Communication', 'Punctuality', 'Time to Resolution', 'Friendliness', 'Cost'], + id: 'service_highlights', + }, + { + type: 'single-select', + question: 'Would you consider using our services again in the future?', + choices: ['Definitely', 'Probably', 'Not sure', 'Probably not', 'Definitely not'], + id: 'future_use', + }, + { + type: 'textarea', + question: 'Please provide any other comments or suggestions for improvement.', + id: 'other_comments', + }, + { + type: 'picker-time', + question: 'What time of day is preferable for future contact?', + id: 'preferred_contact_time', + }, + { + type: 'picker-dropdown', + question: 'Preferred method of communication for future updates?', + choices: ['Email', 'Phone', 'Text'], + id: 'communication_method', + }, + ]), + 'format-card': Bot.card() + .addHeader('🌟 Formatted Card 🌟') + .addTitle('SpeedyCards can fit a lot of text + visual formatting') + .addText('You do lots of fun things with text', { size: 'Large' }) + .addText('You can change colors', { size: 'Large', color: 'green' }) + .addText('...also mess with alignment + sizes', { + size: 'Stretch', + color: 'red', + align: 'Right', + }) + .addText('Change background colors', { + size: 'Medium', + color: 'red', + backgroundColor: 'blue', + }) + .addText('Change background + foreground', { + size: 'Medium', + align: 'Right', + color: 'green', + backgroundColor: 'yellow', + }) + .addText('Align in the middle', { + size: 'Medium', + align: 'Center', + backgroundColor: 'red', + }) + .addText('More fun like other colors + images', { + size: 'Large', + color: 'red', + backgroundColor: 'yellow', + }) + .addText( + 'By the way, text blocks support simple markdown like **bolding**, *italics*, and even **[links](https://speedybot.js.org/new)**' + ) + .addImage('https://raw.githubusercontent.com/valgaze/speedybot-mini/deploy/docs/assets/memes/logo4.jpeg', { align: 'Center' }), + appcard: Bot.appCard('Design News', 'https://raw.githubusercontent.com/valgaze/speedybot-mini/deploy/docs/assets/figma_logo.png') + .addText('Tap the button to learn about new plugins + integration options', { color: 'red', backgroundColor: 'blue' }) + .addLinkButton('https://www.figma.com/community/plugins', "🚀 Let's go"), + 'appcard-rtl': Bot.appCard( + 'ڈیزائن پر اپ ڈیٹ', + 'https://raw.githubusercontent.com/valgaze/speedybot-mini/deploy/docs/assets/figma_logo.png', + { rtl: true } + ) + .addText('نئے پلگ ان + انضمام کے اختیارات کے بارے میں جاننے کے لیے بٹن کو تھپتھپائیں۔', { + color: 'red', + backgroundColor: 'blue', + align: 'Right', + }) + .addLinkButton('https://www.figma.com/community/plugins', 'اورجانیے 🚀'), + acai: Bot.card() + .addTitle('AcaiTruck 🍇🚚 - The Bowl-istic Adventure Catering') + .addSubtitle('Customize Your Acai Bowl Experience!') + .addText("Welcome to our Acai Bowl Food Truck catering service. Let's make your event delicious!") + .addPickerDropdown(['Select Bowl Size', 'Mini', 'Midi', 'Grande']) + .addPickerDropdown(['Number of People', '1-10', '11-25', '26-50', '50+']) + .addTextInput('Anything else we should know?') + .addText('Choose toppings for the bar:') + .addMultiSelect([ + 'Granola', + 'Peanut Butter', + 'Coconut', + 'Goji Berries', + 'Chia Seeds', + 'Almonds', + 'Cashews', + 'Honey', + 'Cacao Nibs', + 'Strawberries', + 'Blueberries', + 'Almond Butter', + ]) + .addText('Additional Catering Essentials:') + .addMultiSelect(['Utensils', 'Napkins', 'To-Go Covers', 'Fruit Juice', 'Smoothie Bar', 'Event Staff', 'Custom Branding']) + .addText('Any special requests or dietary preferences?') + .addTextarea('Special Requests or Dietary Preferences') + .setSubmitButtonTitle('Book AcaiTruck 🚀'), + 'red-danger': Bot.card() + .addTitle('🚨 DANGER 🚨') + .addText('Attention, this is a very severe and important warning') + .setBackgroundImage( + 'data:image/png;base64,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' + ), + 'green-success': Bot.card() + .addTitle('🏆 You did it! 🏆') + .addText('Whatever you did, good at job at doing it') + .setBackgroundImage( + 'data:image/png;base64,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' + ), + 'yellow-warning': Bot.card() + .addTitle("⚠️ You're about to do it! ⚠️") + .addText("Whatever you're about to do, give it a think") + .setBackgroundImage( + 'data:image/png;base64,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' + ), + 'banner-yellow': Bot.card() + .addTitle('🏝️ SpeedyBot') + .setBackgroundImage( + 'data:image/png;base64,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' + ), + confirm: Bot.card() + .addTitle('Do you want to proceed') + .addButton('❌ Cancel', 'shouldProceed', { data: false }) + .addButton('✅ OK', 'shouldProceed', { data: true }), + image: Bot.card() + .addTitle('Images') + .addSubtitle('Cards can have images too') + .addText('Small') + .addImage('https://raw.githubusercontent.com/valgaze/speedybot-mini/deploy/docs/assets/speedybot_logo.png', { size: 'Small' }) + .addText('Medium') + .addImage('https://raw.githubusercontent.com/valgaze/speedybot-mini/deploy/docs/assets/speedybot_logo.png', { size: 'Medium' }) + .addText('Large') + .addImage('https://raw.githubusercontent.com/valgaze/speedybot-mini/deploy/docs/assets/speedybot_logo.png', { size: 'Large' }) + .addText('ExtraLarge') + .addImage('https://raw.githubusercontent.com/valgaze/speedybot-mini/deploy/docs/assets/speedybot_logo.png', { size: 'ExtraLarge' }) + .addText('Stretch') + .addImage('https://raw.githubusercontent.com/valgaze/speedybot-mini/deploy/docs/assets/speedybot_logo.png', { size: 'Stretch' }) + .addText('TIP: Images can be links too', { color: 'Attention' }) + .addImage('https://raw.githubusercontent.com/valgaze/speedybot-mini/deploy/docs/assets/speedybot_logo.png', { + targetURL: 'https://speedybot.js.org', + size: 'ExtraLarge', + }), + 'old-survey': Bot.card() + .addTitle('Business Improvement Survey 📈') + .addSubtitle('Help Us Enhance Our Business Operations!') + .addText('Your insights are crucial for our continuous improvement. Please take a moment to complete this survey.') + .addText('1. Company Name:') + .addTextInput("Enter Your Company's Name") + .addText('2. Your Position/Role:') + .addTextInput('Enter Your Position/Role') + .addText('3. Please select your department:') + .addPickerDropdown(['Select Department'].concat(['Sales', 'Marketing', 'Customer Support', 'Finance', 'Product Development'])) + .addText('4. On a scale of 1-5, how satisfied are you with our products/services? (1 being very dissatisfied, 5 being very satisfied)') + .addSingleSelect(['1 (Very Dissatisfied)', '2', '3', '4', '5 (Very Satisfied)']) + .addText('5. What aspects of our products/services do you appreciate the most?') + .addTextarea('Please share what you appreciate the most about our offerings.') + .addText('6. Are there any specific areas where you believe we can improve?') + .addTextarea('Please provide details on areas where we can enhance our products/services.') + .addText('7. How likely are you to recommend our company to others? (1 being highly unlikely, 5 being highly likely)') + .addSingleSelect(['1 (Highly Unlikely)', '2', '3', '4', '5 (Highly Likely)']) + .addText('8. Any additional comments or suggestions?') + .addTextarea('Feel free to share any additional comments or suggestions you may have.') + .setSubmitButtonTitle('Submit Survey'), +}; + +export const makeHTML = (prefix: string, trigger: any) => { + return ` + + + ${prefix} + + +
+ +
+
+
+${JSON.stringify(trigger, null, 2)}
+          
+ + `; +}; + +Bot.exact('$survey', async ($) => { + const companyNameQuestion: SurveyQuestion = { + type: 'text', + question: 'What is the name of your company?', + id: 'company_name', + }; + + const serviceTypeQuestion: SurveyQuestion = { + type: 'text', + question: 'Describe the service performed by the vendor.', + id: 'service_type', + }; + + const serviceDateQuestion: SurveyQuestion = { + type: 'picker-date', + question: 'When was the service provided?', + id: 'service_date', + }; + + const serviceQualityQuestion: SurveyQuestion = { + type: 'single-select', + question: 'How would you rate the quality of service?', + choices: ['Excellent', 'Good', 'Average', 'Poor', 'Very poor'], + id: 'service_quality', + }; + + const highlightsQuestion: SurveyQuestion = { + type: 'multi-select', + question: 'What were the highlights of the service?', + choices: ['Communication', 'Punctuality', 'Time to Resolution', 'Friendliness', 'Cost'], + id: 'service_highlights', + }; + + const futureUseQuestion: SurveyQuestion = { + type: 'single-select', + question: 'Would you consider using our services again in the future?', + choices: ['Definitely', 'Probably', 'Not sure', 'Probably not', 'Definitely not'], + id: 'future_use', + }; + + const otherCommentsQuestion: SurveyQuestion = { + type: 'textarea', + question: 'Please provide any other comments or suggestions for improvement.', + id: 'other_comments', + }; + + const preferredContactTimeQuestion: SurveyQuestion = { + type: 'picker-time', + question: 'What time of day is preferable for future contact?', + id: 'preferred_contact_time', + }; + + const communicationMethodQuestion: SurveyQuestion = { + type: 'picker-dropdown', + question: 'Preferred method of communication for future updates?', + choices: ['Email', 'Phone', 'Text'], + id: 'communication_method', + }; + + const surveyCard = $.card().survey([ + companyNameQuestion, + serviceTypeQuestion, + serviceDateQuestion, + serviceQualityQuestion, + highlightsQuestion, + futureUseQuestion, + otherCommentsQuestion, + preferredContactTimeQuestion, + communicationMethodQuestion, + ]); + + await $.send(surveyCard); + return $.next; +}); diff --git a/examples/worker/src/index.ts b/examples/worker/src/index.ts new file mode 100644 index 0000000..629269a --- /dev/null +++ b/examples/worker/src/index.ts @@ -0,0 +1,51 @@ +/** + * Welcome to Cloudflare Workers! This is your first worker. + * + * - Run `wrangler dev src/index.ts` in your terminal to start a development server + * - Open a browser tab at http://localhost:8787/ to see your worker in action + * - Run `wrangler publish src/index.ts --name my-worker` to publish your worker + * + * Learn more at https://developers.cloudflare.com/workers/ + */ +import Bot from './../settings/bot'; +import { ENVELOPES, logoRoll } from '../../../../newshack/src'; +import { validateWebhook } from './validateWebhook'; +export interface Env { + BOT_TOKEN: string; + WEBHOOK_SECRET: string; +} + +export default { + async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise { + if (request.method === 'GET') { + return new Response(` +${logoRoll()} +${new Date()}`); + } + + Bot.setToken(env.BOT_TOKEN); + const json = await request.json(); + const signature = request.headers.get('x-spark-signature'); + const secret = env.WEBHOOK_SECRET; + + // Validate webhook + if (secret && signature) { + const proceed = await validateWebhook(json, secret, signature); + if (proceed === false) { + return new Response('Webhook Secret Rejected'); + } + } + + ctx.waitUntil( + new Promise(async (resolve, reject) => { + try { + await Bot.runMiddleware(json as ENVELOPES); + } catch (e) { + reject(e); + return new Response(`Something happened, but backend is up and running: ${e}`); + } + }) + ); + return new Response(logoRoll()); + }, +}; diff --git a/examples/worker/src/validateWebhook.ts b/examples/worker/src/validateWebhook.ts new file mode 100644 index 0000000..782d431 --- /dev/null +++ b/examples/worker/src/validateWebhook.ts @@ -0,0 +1,30 @@ +/** + * + * Helper to process/validate incoming webhooks + * - requestData: incoming request body + * - secret: the secret used when registering webhooks + * - signature: Obtain headers under "X-Spark-Signature" + * @param requestData: incoming request body + * @param secret: the secret used when registering webhooks + * @param signature: available as "X-Spark-Signature" on incoming request header + * @returns boolean (valid or invalid) + * + */ +export const validateWebhook = async (requestData: T, secret: string, signature: string): Promise => { + const stringyBody = typeof requestData !== 'string' ? JSON.stringify(requestData) : requestData; + const algo = { + name: 'HMAC', + hash: 'SHA-1', + }; + const enc = { + name: 'UTF-8', + }; + const hmacKey = await crypto.subtle.importKey('raw', new TextEncoder().encode(secret), algo, false, ['sign']); + const hmacData = await crypto.subtle.sign(algo, hmacKey, new TextEncoder().encode(stringyBody)); + + const bufferToHex = (buffer: ArrayBufferLike) => { + return Array.prototype.map.call(new Uint8Array(buffer), (x) => ('00' + x.toString(16)).slice(-2)).join(''); + }; + const hmacDataHex = bufferToHex(hmacData); + return hmacDataHex === signature; +}; diff --git a/examples/worker/tsconfig.json b/examples/worker/tsconfig.json new file mode 100644 index 0000000..2cb9189 --- /dev/null +++ b/examples/worker/tsconfig.json @@ -0,0 +1,101 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Projects */ + // "incremental": true, /* Enable incremental compilation */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2021" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, + "lib": ["es2021"] /* Specify a set of bundled library declaration files that describe the target runtime environment. */, + "jsx": "react" /* Specify what JSX code is generated. */, + // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ + // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + + /* Modules */ + "module": "es2022" /* Specify what module code is generated. */, + // "rootDir": "./", /* Specify the root folder within your source files. */ + "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */, + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ + "types": ["@cloudflare/workers-types"] /* Specify type package names to be included without being referenced in a source file. */, + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + "resolveJsonModule": true /* Enable importing .json files */, + // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + "allowJs": true /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */, + "checkJs": false /* Enable error reporting in type-checked JavaScript files. */, + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ + // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + "noEmit": true /* Disable emitting files from a compilation. */, + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + "isolatedModules": true /* Ensure that each file can be safely transpiled without relying on other imports. */, + "allowSyntheticDefaultImports": true /* Allow 'import x from y' when a module doesn't have a default export. */, + // "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */, + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, + + /* Type Checking */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ + // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ + // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +} diff --git a/examples/worker/wrangler.toml b/examples/worker/wrangler.toml new file mode 100644 index 0000000..059a72a --- /dev/null +++ b/examples/worker/wrangler.toml @@ -0,0 +1,3 @@ +name = "speedybot-workerv2" +main = "src/index.ts" +compatibility_date = "2023-10-30" \ No newline at end of file diff --git a/index.html b/index.html deleted file mode 100644 index 4e7cc6d..0000000 --- a/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - Speedybot-mini Documentation

Speedybot-mini

Speedybot-mini Logo

📚 API Docs | 🚀 Quickstarts | 💬 Get Help

Looking for speedybot-gpt4? 🤖Click here

Introduction

Speedybot-mini is powerful (but really easy to use!) conversation design tooling designed to help you create user-valuable bots as quickly as possible while providing a buttery-smooth developer experience. It allows you to focus on the essential aspects of your bot, such as content and powerful integrations, without getting bogged down in the details.

Features

  • 🌟 Zero External Dependencies 🌟
  • Adds support for tappable suggestion "chips"
  • Includes SpeedyCard card builder (create rich Adaptive Cards without wrangling JSON)
  • Offers a variety of utilities for alerts, cards, files, and more
  • Locale & i18n support
  • Runs on virtually any infrastructure - servers, V8 isolates, containers, container-less, edge, etc

Quickstarts

Get up and running quickly with Speedybot on various platforms:

Supported Platforms

Platform Needs server? Needs webhooks?
🔌 Deploy with websockets
💻 Deploy to Simple Express Server
λ Deploy to AWS Lamda
🔥 Deploy to Worker
🦖 Deploy to Deno

Syntax

npm install speedybot-mini

See starter bot

How to make a bot

Speedybot is built with "handlers" that trigger based on specific conditions. Depending on your needs, you'll likely only need one or two handlers in your project. These days you're probably integrating with a NLU or LLM service, so you can pass through data that way

Keywords

Keyword Description
.containsThis will match if a trigger phrase is the 1st or only word in a message sent from a user.
.fuzzyThis will match if a trigger phrase exists _anywhere_ inside a message sent from the user.
.exactThis will match if a trigger phrase is exactly (case-sensitive) a message sent from a user.
.regexThis will match if a message sent from a user passes the regex.
.everyThis will match on every message from a user.
.nluThis will match on every message from a user except if the trigger phrase is used by hard-coded handler, designed for use with natural language systems.
.onSubmitThis will trigger when data is sent from an Adaptive Card.
.onFileThis will trigger every time a file is sent to the agent and will provide file metadata.
.onCameraThis will trigger every time an image file is sent to the agent.
.noMatchThis will trigger if there are no registered handlers for the user's text.

SpeedyCard

SpeedyCard is a simple and efficient way to create rich Adaptive Cards without having to deal with JSON. It's parly inspired by SwiftUI's "builder" pattern and offers a limited subset of AdaptiveCard features with a focus on user interaction and simplicity.

Chips

Chips are tappable suggestion buttons that you can include in your Adaptive Cards. They provide a more interactive user experience and can be easily integrated into your bot. Chips are managed statelessly by your Speedybot instance and require no coordination with the chat client.

- diff --git a/nodemon.json b/nodemon.json deleted file mode 100644 index 8387a09..0000000 --- a/nodemon.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "watch": ["src/", "util", "settings/**/*"], - "ext": "ts, json", - "ignore": [""], - "exec": "npm run build" -} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 39a0e0e..1676563 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,26303 +1,7145 @@ { - "name": "speedybot", - "version": "1.1.20", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "speedybot", - "version": "1.1.20", - "license": "MIT", - "dependencies": { - "ava": "^4.1.0", - "axios": "^0.24.0", - "form-data": "^4.0.0", - "simple-log-colors": "^1.1.0" - }, - "devDependencies": { - "@types/node": "^13.13.52", - "nodemon": "^2.0.4", - "ts-node": "^8.10.1", - "typescript": "^3.8.3", - "vitepress": "^1.0.0-rc.4", - "webex-node-bot-framework": "^2.3.7" - }, - "peerDependencies": { - "webex-node-bot-framework": "*" - } - }, - "node_modules/@algolia/autocomplete-core": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", - "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", - "dev": true, - "dependencies": { - "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", - "@algolia/autocomplete-shared": "1.9.3" - } - }, - "node_modules/@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", - "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", - "dev": true, - "dependencies": { - "@algolia/autocomplete-shared": "1.9.3" - }, - "peerDependencies": { - "search-insights": ">= 1 < 3" - } - }, - "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", - "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", - "dev": true, - "dependencies": { - "@algolia/autocomplete-shared": "1.9.3" - }, - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/autocomplete-shared": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", - "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", - "dev": true, - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/cache-browser-local-storage": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.19.1.tgz", - "integrity": "sha512-FYAZWcGsFTTaSAwj9Std8UML3Bu8dyWDncM7Ls8g+58UOe4XYdlgzXWbrIgjaguP63pCCbMoExKr61B+ztK3tw==", - "dev": true, - "dependencies": { - "@algolia/cache-common": "4.19.1" - } - }, - "node_modules/@algolia/cache-common": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.19.1.tgz", - "integrity": "sha512-XGghi3l0qA38HiqdoUY+wvGyBsGvKZ6U3vTiMBT4hArhP3fOGLXpIINgMiiGjTe4FVlTa5a/7Zf2bwlIHfRqqg==", - "dev": true - }, - "node_modules/@algolia/cache-in-memory": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.19.1.tgz", - "integrity": "sha512-+PDWL+XALGvIginigzu8oU6eWw+o76Z8zHbBovWYcrtWOEtinbl7a7UTt3x3lthv+wNuFr/YD1Gf+B+A9V8n5w==", - "dev": true, - "dependencies": { - "@algolia/cache-common": "4.19.1" - } - }, - "node_modules/@algolia/client-account": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.19.1.tgz", - "integrity": "sha512-Oy0ritA2k7AMxQ2JwNpfaEcgXEDgeyKu0V7E7xt/ZJRdXfEpZcwp9TOg4TJHC7Ia62gIeT2Y/ynzsxccPw92GA==", - "dev": true, - "dependencies": { - "@algolia/client-common": "4.19.1", - "@algolia/client-search": "4.19.1", - "@algolia/transporter": "4.19.1" - } - }, - "node_modules/@algolia/client-analytics": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.19.1.tgz", - "integrity": "sha512-5QCq2zmgdZLIQhHqwl55ZvKVpLM3DNWjFI4T+bHr3rGu23ew2bLO4YtyxaZeChmDb85jUdPDouDlCumGfk6wOg==", - "dev": true, - "dependencies": { - "@algolia/client-common": "4.19.1", - "@algolia/client-search": "4.19.1", - "@algolia/requester-common": "4.19.1", - "@algolia/transporter": "4.19.1" - } - }, - "node_modules/@algolia/client-common": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.19.1.tgz", - "integrity": "sha512-3kAIVqTcPrjfS389KQvKzliC559x+BDRxtWamVJt8IVp7LGnjq+aVAXg4Xogkur1MUrScTZ59/AaUd5EdpyXgA==", - "dev": true, - "dependencies": { - "@algolia/requester-common": "4.19.1", - "@algolia/transporter": "4.19.1" - } - }, - "node_modules/@algolia/client-personalization": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.19.1.tgz", - "integrity": "sha512-8CWz4/H5FA+krm9HMw2HUQenizC/DxUtsI5oYC0Jxxyce1vsr8cb1aEiSJArQT6IzMynrERif1RVWLac1m36xw==", - "dev": true, - "dependencies": { - "@algolia/client-common": "4.19.1", - "@algolia/requester-common": "4.19.1", - "@algolia/transporter": "4.19.1" - } - }, - "node_modules/@algolia/client-search": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.19.1.tgz", - "integrity": "sha512-mBecfMFS4N+yK/p0ZbK53vrZbL6OtWMk8YmnOv1i0LXx4pelY8TFhqKoTit3NPVPwoSNN0vdSN9dTu1xr1XOVw==", - "dev": true, - "dependencies": { - "@algolia/client-common": "4.19.1", - "@algolia/requester-common": "4.19.1", - "@algolia/transporter": "4.19.1" - } - }, - "node_modules/@algolia/logger-common": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.19.1.tgz", - "integrity": "sha512-i6pLPZW/+/YXKis8gpmSiNk1lOmYCmRI6+x6d2Qk1OdfvX051nRVdalRbEcVTpSQX6FQAoyeaui0cUfLYW5Elw==", - "dev": true - }, - "node_modules/@algolia/logger-console": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.19.1.tgz", - "integrity": "sha512-jj72k9GKb9W0c7TyC3cuZtTr0CngLBLmc8trzZlXdfvQiigpUdvTi1KoWIb2ZMcRBG7Tl8hSb81zEY3zI2RlXg==", - "dev": true, - "dependencies": { - "@algolia/logger-common": "4.19.1" - } - }, - "node_modules/@algolia/requester-browser-xhr": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.19.1.tgz", - "integrity": "sha512-09K/+t7lptsweRTueHnSnmPqIxbHMowejAkn9XIcJMLdseS3zl8ObnS5GWea86mu3vy4+8H+ZBKkUN82Zsq/zg==", - "dev": true, - "dependencies": { - "@algolia/requester-common": "4.19.1" - } - }, - "node_modules/@algolia/requester-common": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.19.1.tgz", - "integrity": "sha512-BisRkcWVxrDzF1YPhAckmi2CFYK+jdMT60q10d7z3PX+w6fPPukxHRnZwooiTUrzFe50UBmLItGizWHP5bDzVQ==", - "dev": true - }, - "node_modules/@algolia/requester-node-http": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.19.1.tgz", - "integrity": "sha512-6DK52DHviBHTG2BK/Vv2GIlEw7i+vxm7ypZW0Z7vybGCNDeWzADx+/TmxjkES2h15+FZOqVf/Ja677gePsVItA==", - "dev": true, - "dependencies": { - "@algolia/requester-common": "4.19.1" - } - }, - "node_modules/@algolia/transporter": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.19.1.tgz", - "integrity": "sha512-nkpvPWbpuzxo1flEYqNIbGz7xhfhGOKGAZS7tzC+TELgEmi7z99qRyTfNSUlW7LZmB3ACdnqAo+9A9KFBENviQ==", - "dev": true, - "dependencies": { - "@algolia/cache-common": "4.19.1", - "@algolia/logger-common": "4.19.1", - "@algolia/requester-common": "4.19.1" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz", - "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/highlight": "^7.22.10", - "chalk": "^2.4.2" - }, - "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, - "optional": true, - "peer": 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, - "optional": true, - "peer": 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, - "optional": true, - "peer": 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, - "optional": true, - "peer": 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, - "optional": true, - "peer": 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, - "optional": true, - "peer": 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, - "optional": true, - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.10.tgz", - "integrity": "sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-compilation-targets": "^7.22.10", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.10", - "@babel/parser": "^7.22.10", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.10", - "@babel/types": "^7.22.10", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/core/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", - "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/types": "^7.22.10", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz", - "integrity": "sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/types": "^7.22.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", - "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.10.tgz", - "integrity": "sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", - "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", - "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", - "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", - "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/types": "^7.22.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==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz", - "integrity": "sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.10.tgz", - "integrity": "sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.10", - "@babel/types": "^7.22.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz", - "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/@babel/highlight/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, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz", - "integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-default-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.22.5.tgz", - "integrity": "sha512-UCe1X/hplyv6A5g2WnQ90tnHRvYL29dabCWww92lO7VdfMVTVReBTRrhiMrKQejHD9oVkdnRdwYuzUZkBVQisg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-default-from": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "name": "speedybot", + "version": "2.0.0-beta.73", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "speedybot", + "version": "2.0.0-beta.73", + "license": "MIT", + "bin": { + "speedybot": "bin/cli.js" + }, + "devDependencies": { + "@rollup/rollup-linux-x64-gnu": "latest", + "@types/jest": "^29.1.2", + "@types/minimist": "^1.2.5", + "@types/node": "^18.8.4", + "@vitest/coverage-v8": "^0.32.2", + "@vitest/ui": "^0.32.2", + "adaptivecards": "2.11.1", + "element-plus": "^2.3.10", + "fs-extra": "^11.2.0", + "monaco-editor": "^0.41.0", + "ts-jest": "^29.0.3", + "ts-node-dev": "^2.0.0", + "tsx": "^3.10.1", + "typedoc": "^0.22.18", + "typedoc-plugin-markdown": "3.12.1", + "typedoc-theme-hierarchy": "1.2.1", + "typescript": "^4.7.2", + "vite": "^4.3.9", + "vitepress": "^1.0.0-rc.31", + "vitest": "^0.32.2" + }, + "engines": { + "node": ">=18.11.0" + } + }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", + "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", + "dev": true, + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", + "@algolia/autocomplete-shared": "1.9.3" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", + "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", + "dev": true, + "dependencies": { + "@algolia/autocomplete-shared": "1.9.3" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", + "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", + "dev": true, + "dependencies": { + "@algolia/autocomplete-shared": "1.9.3" + }, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", + "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", + "dev": true, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/cache-browser-local-storage": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.20.0.tgz", + "integrity": "sha512-uujahcBt4DxduBTvYdwO3sBfHuJvJokiC3BP1+O70fglmE1ShkH8lpXqZBac1rrU3FnNYSUs4pL9lBdTKeRPOQ==", + "dev": true, + "dependencies": { + "@algolia/cache-common": "4.20.0" + } + }, + "node_modules/@algolia/cache-common": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.20.0.tgz", + "integrity": "sha512-vCfxauaZutL3NImzB2G9LjLt36vKAckc6DhMp05An14kVo8F1Yofb6SIl6U3SaEz8pG2QOB9ptwM5c+zGevwIQ==", + "dev": true + }, + "node_modules/@algolia/cache-in-memory": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.20.0.tgz", + "integrity": "sha512-Wm9ak/IaacAZXS4mB3+qF/KCoVSBV6aLgIGFEtQtJwjv64g4ePMapORGmCyulCFwfePaRAtcaTbMcJF+voc/bg==", + "dev": true, + "dependencies": { + "@algolia/cache-common": "4.20.0" + } + }, + "node_modules/@algolia/client-account": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.20.0.tgz", + "integrity": "sha512-GGToLQvrwo7am4zVkZTnKa72pheQeez/16sURDWm7Seyz+HUxKi3BM6fthVVPUEBhtJ0reyVtuK9ArmnaKl10Q==", + "dev": true, + "dependencies": { + "@algolia/client-common": "4.20.0", + "@algolia/client-search": "4.20.0", + "@algolia/transporter": "4.20.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.20.0.tgz", + "integrity": "sha512-EIr+PdFMOallRdBTHHdKI3CstslgLORQG7844Mq84ib5oVFRVASuuPmG4bXBgiDbcsMLUeOC6zRVJhv1KWI0ug==", + "dev": true, + "dependencies": { + "@algolia/client-common": "4.20.0", + "@algolia/client-search": "4.20.0", + "@algolia/requester-common": "4.20.0", + "@algolia/transporter": "4.20.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.20.0.tgz", + "integrity": "sha512-P3WgMdEss915p+knMMSd/fwiHRHKvDu4DYRrCRaBrsfFw7EQHon+EbRSm4QisS9NYdxbS04kcvNoavVGthyfqQ==", + "dev": true, + "dependencies": { + "@algolia/requester-common": "4.20.0", + "@algolia/transporter": "4.20.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.20.0.tgz", + "integrity": "sha512-N9+zx0tWOQsLc3K4PVRDV8GUeOLAY0i445En79Pr3zWB+m67V+n/8w4Kw1C5LlbHDDJcyhMMIlqezh6BEk7xAQ==", + "dev": true, + "dependencies": { + "@algolia/client-common": "4.20.0", + "@algolia/requester-common": "4.20.0", + "@algolia/transporter": "4.20.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.20.0.tgz", + "integrity": "sha512-zgwqnMvhWLdpzKTpd3sGmMlr4c+iS7eyyLGiaO51zDZWGMkpgoNVmltkzdBwxOVXz0RsFMznIxB9zuarUv4TZg==", + "dev": true, + "dependencies": { + "@algolia/client-common": "4.20.0", + "@algolia/requester-common": "4.20.0", + "@algolia/transporter": "4.20.0" + } + }, + "node_modules/@algolia/logger-common": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.20.0.tgz", + "integrity": "sha512-xouigCMB5WJYEwvoWW5XDv7Z9f0A8VoXJc3VKwlHJw/je+3p2RcDXfksLI4G4lIVncFUYMZx30tP/rsdlvvzHQ==", + "dev": true + }, + "node_modules/@algolia/logger-console": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.20.0.tgz", + "integrity": "sha512-THlIGG1g/FS63z0StQqDhT6bprUczBI8wnLT3JWvfAQDZX5P6fCg7dG+pIrUBpDIHGszgkqYEqECaKKsdNKOUA==", + "dev": true, + "dependencies": { + "@algolia/logger-common": "4.20.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.20.0.tgz", + "integrity": "sha512-HbzoSjcjuUmYOkcHECkVTwAelmvTlgs48N6Owt4FnTOQdwn0b8pdht9eMgishvk8+F8bal354nhx/xOoTfwiAw==", + "dev": true, + "dependencies": { + "@algolia/requester-common": "4.20.0" + } + }, + "node_modules/@algolia/requester-common": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.20.0.tgz", + "integrity": "sha512-9h6ye6RY/BkfmeJp7Z8gyyeMrmmWsMOCRBXQDs4mZKKsyVlfIVICpcSibbeYcuUdurLhIlrOUkH3rQEgZzonng==", + "dev": true + }, + "node_modules/@algolia/requester-node-http": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.20.0.tgz", + "integrity": "sha512-ocJ66L60ABSSTRFnCHIEZpNHv6qTxsBwJEPfYaSBsLQodm0F9ptvalFkHMpvj5DfE22oZrcrLbOYM2bdPJRHng==", + "dev": true, + "dependencies": { + "@algolia/requester-common": "4.20.0" + } + }, + "node_modules/@algolia/transporter": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.20.0.tgz", + "integrity": "sha512-Lsii1pGWOAISbzeyuf+r/GPhvHMPHSPrTDWNcIzOE1SG1inlJHICaVe2ikuoRjcpgxZNU54Jl+if15SUCsaTUg==", + "dev": true, + "dependencies": { + "@algolia/cache-common": "4.20.0", + "@algolia/logger-common": "4.20.0", + "@algolia/requester-common": "4.20.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "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==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.5.tgz", + "integrity": "sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==", + "dev": true, + "peer": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.5", + "@babel/parser": "^7.23.5", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.5", + "@babel/types": "^7.23.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.5.tgz", + "integrity": "sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.23.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "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==", + "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" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.22.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==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.22.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==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.5.tgz", + "integrity": "sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.5", + "@babel/types": "^7.23.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==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/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/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.5.tgz", + "integrity": "sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-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==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.5.tgz", + "integrity": "sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.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.5", + "@babel/types": "^7.23.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.5.tgz", + "integrity": "sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@docsearch/css": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.5.2.tgz", + "integrity": "sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA==", + "dev": true + }, + "node_modules/@docsearch/js": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.5.2.tgz", + "integrity": "sha512-p1YFTCDflk8ieHgFJYfmyHBki1D61+U9idwrLh+GQQMrBSP3DLGKpy0XUJtPjAOPltcVbqsTjiPFfH7JImjUNg==", + "dev": true, + "dependencies": { + "@docsearch/react": "3.5.2", + "preact": "^10.0.0" + } + }, + "node_modules/@docsearch/react": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.5.2.tgz", + "integrity": "sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng==", + "dev": true, + "dependencies": { + "@algolia/autocomplete-core": "1.9.3", + "@algolia/autocomplete-preset-algolia": "1.9.3", + "@docsearch/css": "3.5.2", + "algoliasearch": "^4.19.1" + }, + "peerDependencies": { + "@types/react": ">= 16.8.0 < 19.0.0", + "react": ">= 16.8.0 < 19.0.0", + "react-dom": ">= 16.8.0 < 19.0.0", + "search-insights": ">= 1 < 3" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "react": { + "optional": true }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "react-dom": { + "optional": true }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "search-insights": { + "optional": true + } + } + }, + "node_modules/@element-plus/icons-vue": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz", + "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==", + "dev": true, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.1.tgz", + "integrity": "sha512-QgcKYwzcc8vvZ4n/5uklchy8KVdjJwcOeI+HnnTNclJjs2nYsy23DOCf+sSV1kBwD9yDAoVKCkv/gEPzgQU3Pw==", + "dev": true, + "dependencies": { + "@floating-ui/utils": "^0.1.3" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz", + "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==", + "dev": true, + "dependencies": { + "@floating-ui/core": "^1.4.2", + "@floating-ui/utils": "^0.1.3" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz", + "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "peer": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "peer": true, + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "peer": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "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/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.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "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" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.23", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.23.tgz", + "integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==", + "dev": true + }, + "node_modules/@popperjs/core": { + "name": "@sxzz/popperjs-es", + "version": "2.11.7", + "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz", + "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.6.1.tgz", + "integrity": "sha512-cEXJQY/ZqMACb+nxzDeX9IPLAg7S94xouJJCNVE5BJM8JUEP4HeTF+ti3cmxWeSJo+5D+o8Tc0UAWUkfENdeyw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.6.1.tgz", + "integrity": "sha512-DNGZvZDO5YF7jN5fX8ZqmGLjZEXIJRdJEdTFMhiyXqyXubBa0WVLDWSNlQ5JR2PNgDbEV1VQowhVRUh+74D+RA==", + "cpu": [ + "x64" + ], + "dev": true, + "os": [ + "linux" + ] + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "peer": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "peer": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.7", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz", + "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", + "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/chai": { + "version": "4.3.11", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.11.tgz", + "integrity": "sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ==", + "dev": true + }, + "node_modules/@types/chai-subset": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.5.tgz", + "integrity": "sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A==", + "dev": true, + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.3.tgz", + "integrity": "sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.10", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.10.tgz", + "integrity": "sha512-tE4yxKEphEyxj9s4inideLHktW/x6DwesIwWZ9NN1FKf9zbJYsnhBoA9vrHA/IuIOKwPa5PcFBNV4lpMIOEzyQ==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/linkify-it": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.5.tgz", + "integrity": "sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.14.202", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", + "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==", + "dev": true + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "dev": true, + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/markdown-it": { + "version": "13.0.7", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-13.0.7.tgz", + "integrity": "sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==", + "dev": true, + "dependencies": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz", + "integrity": "sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==", + "dev": true + }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.19.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.1.tgz", + "integrity": "sha512-mZJ9V11gG5Vp0Ox2oERpeFDl+JvCwK24PGy76vVY/UgBtjwJWc5rYBThFxmbnYOm9UPZNm6wEl/sxHt2SU7x9A==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "node_modules/@types/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==", + "dev": true + }, + "node_modules/@types/strip-json-comments": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz", + "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", + "dev": true + }, + "node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz", + "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vitejs/plugin-vue": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.5.1.tgz", + "integrity": "sha512-DaUzYFr+2UGDG7VSSdShKa9sIWYBa1LL8KC0MNOf2H5LjcTPjob0x8LbkqXWmAtbANJCkpiQTj66UVcQkN2s3g==", + "dev": true, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.0.0 || ^5.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vitest/coverage-v8": { + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-0.32.4.tgz", + "integrity": "sha512-itiCYY3TmWEK+5wnFBoNr0ZA+adACp7Op1r2TeX5dPOgU2See7+Gx2NlK2lVMHVxfPsu5z9jszKa3i//eR+hqg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.1", + "@bcoe/v8-coverage": "^0.2.3", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.1.5", + "magic-string": "^0.30.0", + "picocolors": "^1.0.0", + "std-env": "^3.3.3", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": ">=0.32.0 <1" + } + }, + "node_modules/@vitest/expect": { + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.32.4.tgz", + "integrity": "sha512-m7EPUqmGIwIeoU763N+ivkFjTzbaBn0n9evsTOcde03ugy2avPs3kZbYmw3DkcH1j5mxhMhdamJkLQ6dM1bk/A==", + "dev": true, + "dependencies": { + "@vitest/spy": "0.32.4", + "@vitest/utils": "0.32.4", + "chai": "^4.3.7" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.32.4.tgz", + "integrity": "sha512-cHOVCkiRazobgdKLnczmz2oaKK9GJOw6ZyRcaPdssO1ej+wzHVIkWiCiNacb3TTYPdzMddYkCgMjZ4r8C0JFCw==", + "dev": true, + "dependencies": { + "@vitest/utils": "0.32.4", + "p-limit": "^4.0.0", + "pathe": "^1.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/runner/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/snapshot": { + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.32.4.tgz", + "integrity": "sha512-IRpyqn9t14uqsFlVI2d7DFMImGMs1Q9218of40bdQQgMePwVdmix33yMNnebXcTzDU5eiV3eUsoxxH5v0x/IQA==", + "dev": true, + "dependencies": { + "magic-string": "^0.30.0", + "pathe": "^1.1.1", + "pretty-format": "^29.5.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.32.4.tgz", + "integrity": "sha512-oA7rCOqVOOpE6rEoXuCOADX7Lla1LIa4hljI2MSccbpec54q+oifhziZIJXxlE/CvI2E+ElhBHzVu0VEvJGQKQ==", + "dev": true, + "dependencies": { + "tinyspy": "^2.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/ui": { + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-0.32.4.tgz", + "integrity": "sha512-92y7bkjf55L08nomvHHYQkDWQEIkb36dJkgi+F/zpO5cFbrmk1pv/dYiaZKQ772uP96fAWinmux6sXNMNUh16w==", + "dev": true, + "dependencies": { + "@vitest/utils": "0.32.4", + "fast-glob": "^3.2.12", + "fflate": "^0.8.0", + "flatted": "^3.2.7", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "sirv": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": ">=0.30.1 <1" + } + }, + "node_modules/@vitest/utils": { + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.32.4.tgz", + "integrity": "sha512-Gwnl8dhd1uJ+HXrYyV0eRqfmk9ek1ASE/LWfTCuWMw+d07ogHqp4hEAV28NiecimK6UY9DpSEPh+pXBA5gtTBg==", + "dev": true, + "dependencies": { + "diff-sequences": "^29.4.3", + "loupe": "^2.3.6", + "pretty-format": "^29.5.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.9.tgz", + "integrity": "sha512-+/Lf68Vr/nFBA6ol4xOtJrW+BQWv3QWKfRwGSm70jtXwfhZNF4R/eRgyVJYoxFRhdCTk/F6g99BP0ffPgZihfQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.23.3", + "@vue/shared": "3.3.9", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.9.tgz", + "integrity": "sha512-nfWubTtLXuT4iBeDSZ5J3m218MjOy42Vp2pmKVuBKo2/BLcrFUX8nCSr/bKRFiJ32R8qbdnnnBgRn9AdU5v0Sg==", + "dev": true, + "dependencies": { + "@vue/compiler-core": "3.3.9", + "@vue/shared": "3.3.9" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.9.tgz", + "integrity": "sha512-wy0CNc8z4ihoDzjASCOCsQuzW0A/HP27+0MDSSICMjVIFzk/rFViezkR3dzH+miS2NDEz8ywMdbjO5ylhOLI2A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.23.3", + "@vue/compiler-core": "3.3.9", + "@vue/compiler-dom": "3.3.9", + "@vue/compiler-ssr": "3.3.9", + "@vue/reactivity-transform": "3.3.9", + "@vue/shared": "3.3.9", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.5", + "postcss": "^8.4.31", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.9.tgz", + "integrity": "sha512-NO5oobAw78R0G4SODY5A502MGnDNiDjf6qvhn7zD7TJGc8XDeIEw4fg6JU705jZ/YhuokBKz0A5a/FL/XZU73g==", + "dev": true, + "dependencies": { + "@vue/compiler-dom": "3.3.9", + "@vue/shared": "3.3.9" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.1.tgz", + "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==", + "dev": true + }, + "node_modules/@vue/reactivity": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.9.tgz", + "integrity": "sha512-VmpIqlNp+aYDg2X0xQhJqHx9YguOmz2UxuUJDckBdQCNkipJvfk9yA75woLWElCa0Jtyec3lAAt49GO0izsphw==", + "dev": true, + "dependencies": { + "@vue/shared": "3.3.9" + } + }, + "node_modules/@vue/reactivity-transform": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.9.tgz", + "integrity": "sha512-HnUFm7Ry6dFa4Lp63DAxTixUp8opMtQr6RxQCpDI1vlh12rkGIeYqMvJtK+IKyEfEOa2I9oCkD1mmsPdaGpdVg==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.23.3", + "@vue/compiler-core": "3.3.9", + "@vue/shared": "3.3.9", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.5" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.9.tgz", + "integrity": "sha512-xxaG9KvPm3GTRuM4ZyU8Tc+pMVzcu6eeoSRQJ9IE7NmCcClW6z4B3Ij6L4EDl80sxe/arTtQ6YmgiO4UZqRc+w==", + "dev": true, + "dependencies": { + "@vue/reactivity": "3.3.9", + "@vue/shared": "3.3.9" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.9.tgz", + "integrity": "sha512-e7LIfcxYSWbV6BK1wQv9qJyxprC75EvSqF/kQKe6bdZEDNValzeRXEVgiX7AHI6hZ59HA4h7WT5CGvm69vzJTQ==", + "dev": true, + "dependencies": { + "@vue/runtime-core": "3.3.9", + "@vue/shared": "3.3.9", + "csstype": "^3.1.2" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.9.tgz", + "integrity": "sha512-w0zT/s5l3Oa3ZjtLW88eO4uV6AQFqU8X5GOgzq7SkQQu6vVr+8tfm+OI2kDBplS/W/XgCBuFXiPw6T5EdwXP0A==", + "dev": true, + "dependencies": { + "@vue/compiler-ssr": "3.3.9", + "@vue/shared": "3.3.9" + }, + "peerDependencies": { + "vue": "3.3.9" + } + }, + "node_modules/@vue/shared": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.9.tgz", + "integrity": "sha512-ZE0VTIR0LmYgeyhurPTpy4KzKsuDyQbMSdM49eKkMnT5X4VfFBLysMzjIZhLEFQYjjOVVfbvUDHckwjDFiO2eA==", + "dev": true + }, + "node_modules/@vueuse/core": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-9.13.0.tgz", + "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==", + "dev": true, + "dependencies": { + "@types/web-bluetooth": "^0.0.16", + "@vueuse/metadata": "9.13.0", + "@vueuse/shared": "9.13.0", + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "dev": true, + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/integrations": { + "version": "10.6.1", + "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-10.6.1.tgz", + "integrity": "sha512-mPDupuofMJ4DPmtX/FfP1MajmWRzYDv8WSaTCo8LQ5kFznjWgmUQ16ApjYqgMquqffNY6+IRMdMgosLDRZOSZA==", + "dev": true, + "dependencies": { + "@vueuse/core": "10.6.1", + "@vueuse/shared": "10.6.1", + "vue-demi": ">=0.14.6" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "async-validator": "*", + "axios": "*", + "change-case": "*", + "drauu": "*", + "focus-trap": "*", + "fuse.js": "*", + "idb-keyval": "*", + "jwt-decode": "*", + "nprogress": "*", + "qrcode": "*", + "sortablejs": "*", + "universal-cookie": "*" + }, + "peerDependenciesMeta": { + "async-validator": { + "optional": true }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "axios": { + "optional": true }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "change-case": { + "optional": true }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "drauu": { + "optional": true }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "focus-trap": { + "optional": true }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "fuse.js": { + "optional": true }, - "node_modules/@babel/plugin-syntax-export-default-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.22.5.tgz", - "integrity": "sha512-ODAqWWXB/yReh/jVQDag/3/tl6lgBueQkk/TcfW/59Oykm4c8a55XloX0CTk2k2VJiFWMgHby9xNX29IbCv9dQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "idb-keyval": { + "optional": true }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "jwt-decode": { + "optional": true }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz", - "integrity": "sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "nprogress": { + "optional": true }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "qrcode": { + "optional": true }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "sortablejs": { + "optional": true }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.10.tgz", - "integrity": "sha512-eueE8lvKVzq5wIObKK/7dvoeKJ+xc6TvRn6aysIjS6pSCeLy7S/eVi7pEQknZqyqvzaNKdDtem8nUNTBgDVR2g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz", - "integrity": "sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", - "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", - "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz", - "integrity": "sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", - "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", - "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz", - "integrity": "sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-flow": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", - "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", - "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", - "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", - "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", - "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", - "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.10.tgz", - "integrity": "sha512-MMkQqZAZ+MGj+jGTG3OTuhKeBpNcO+0oCEbrGNEaOmiEn+1MzRyQlYsruGiU8RTK3zV6XwrVJTmwiDOyYK6J9g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", - "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz", - "integrity": "sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz", - "integrity": "sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz", - "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz", - "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", - "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.10.tgz", - "integrity": "sha512-RchI7HePu1eu0CYNKHHHQdfenZcM4nz8rew5B1VWqeRKdcwW5aQ5HeG9eTUbWiAS1UrmHVLmoxTWHt3iLD/NhA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.5", - "babel-plugin-polyfill-corejs3": "^0.8.3", - "babel-plugin-polyfill-regenerator": "^0.5.2", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.10.tgz", - "integrity": "sha512-7++c8I/ymsDo4QQBAgbraXLzIM6jmfao11KgIBEYZRReWzNWH9NtNgJcyrZiXsOPh523FQm6LfpLyy/U5fn46A==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.10", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-typescript": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", - "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/polyfill": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz", - "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==", - "deprecated": "🚨 This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information.", - "dev": true, - "dependencies": { - "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.4" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.10.tgz", - "integrity": "sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.10", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.10", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.10", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.6", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.10", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.10", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.10", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.10", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "@babel/types": "^7.22.10", - "babel-plugin-polyfill-corejs2": "^0.4.5", - "babel-plugin-polyfill-corejs3": "^0.8.3", - "babel-plugin-polyfill-regenerator": "^0.5.2", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-flow": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.22.5.tgz", - "integrity": "sha512-ta2qZ+LSiGCrP5pgcGt8xMnnkXQrq8Sa4Ulhy06BOlF5QbLw9q5hIx7bn5MrsvyTGAfh6kTOo07Q+Pfld/8Y5Q==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-transform-flow-strip-types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz", - "integrity": "sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-typescript": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/register": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.5.tgz", - "integrity": "sha512-vV6pm/4CijSQ8Y47RH5SopXzursN35RQINfGJkmOlcpAtGuf94miFvIPhCKGQN7WGIcsgG1BHEX2KVdTYwTwUQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.5", - "source-map-support": "^0.5.16" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/register/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/@babel/runtime": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.10.tgz", - "integrity": "sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs2": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.15.4.tgz", - "integrity": "sha512-TmuTI+n5HsMesW6Ah2WjvBwix9fBMXwbMxQV3c0ETLAzlmwN4OeRVbYMYwp9P4LEOlAxwGKdd9e8pMiLMAg/Mg==", - "dev": true, - "dependencies": { - "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime/node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.10.tgz", - "integrity": "sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.10", - "@babel/types": "^7.22.10", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/traverse/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/@babel/types": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz", - "integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docsearch/css": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.5.2.tgz", - "integrity": "sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA==", - "dev": true - }, - "node_modules/@docsearch/js": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.5.2.tgz", - "integrity": "sha512-p1YFTCDflk8ieHgFJYfmyHBki1D61+U9idwrLh+GQQMrBSP3DLGKpy0XUJtPjAOPltcVbqsTjiPFfH7JImjUNg==", - "dev": true, - "dependencies": { - "@docsearch/react": "3.5.2", - "preact": "^10.0.0" - } - }, - "node_modules/@docsearch/react": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.5.2.tgz", - "integrity": "sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng==", - "dev": true, - "dependencies": { - "@algolia/autocomplete-core": "1.9.3", - "@algolia/autocomplete-preset-algolia": "1.9.3", - "@docsearch/css": "3.5.2", - "algoliasearch": "^4.19.1" - }, - "peerDependencies": { - "@types/react": ">= 16.8.0 < 19.0.0", - "react": ">= 16.8.0 < 19.0.0", - "react-dom": ">= 16.8.0 < 19.0.0", - "search-insights": ">= 1 < 3" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "search-insights": { - "optional": true - } - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@jest/create-cache-key-function": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.6.2.tgz", - "integrity": "sha512-oGVRMr8na9h1vUiem1E/Uoxb/NR9BdfKb7IBZ+pNWxJQmTYSbDF0dsVBAGqNU7MBQwYJDyRx0H7H/0itiqAgQg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/types": "^29.6.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/environment": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.2.tgz", - "integrity": "sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/fake-timers": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "jest-mock": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.2.tgz", - "integrity": "sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/types": "^29.6.1", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.6.2", - "jest-mock": "^29.6.2", - "jest-util": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", - "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.1.tgz", - "integrity": "sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/schemas": "^29.6.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "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, - "optional": true, - "peer": 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, - "optional": true, - "peer": 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, - "optional": true, - "peer": 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, - "optional": true, - "peer": 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.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", - "dev": true, - "optional": true, - "peer": 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==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@peculiar/asn1-schema": { - "version": "2.0.38", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.0.38.tgz", - "integrity": "sha512-zZ64UpCTm9me15nuCpPgJghSdbEm8atcDQPCyK+bKXjZAQ1735NCZXCSCfbckbQ4MH36Rm9403n/qMq77LFDzQ==", - "dev": true, - "dependencies": { - "@types/asn1js": "^2.0.2", - "asn1js": "^2.1.1", - "pvtsutils": "^1.2.0", - "tslib": "^2.3.0" - } - }, - "node_modules/@peculiar/json-schema": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", - "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", - "dev": true, - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@peculiar/webcrypto": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.1.7.tgz", - "integrity": "sha512-aCNLYdHZkvGH+T8/YBOY33jrVGVuLIa3bpizeHXqwN+P4ZtixhA+kxEEWM1amZwUY2nY/iuj+5jdZn/zB7EPPQ==", - "dev": true, - "dependencies": { - "@peculiar/asn1-schema": "^2.0.32", - "@peculiar/json-schema": "^1.1.12", - "pvtsutils": "^1.1.6", - "tslib": "^2.2.0", - "webcrypto-core": "^1.2.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/@react-native-community/cli": { - "version": "11.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-11.3.6.tgz", - "integrity": "sha512-bdwOIYTBVQ9VK34dsf6t3u6vOUU5lfdhKaAxiAVArjsr7Je88Bgs4sAbsOYsNK3tkE8G77U6wLpekknXcanlww==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@react-native-community/cli-clean": "11.3.6", - "@react-native-community/cli-config": "11.3.6", - "@react-native-community/cli-debugger-ui": "11.3.6", - "@react-native-community/cli-doctor": "11.3.6", - "@react-native-community/cli-hermes": "11.3.6", - "@react-native-community/cli-plugin-metro": "11.3.6", - "@react-native-community/cli-server-api": "11.3.6", - "@react-native-community/cli-tools": "11.3.6", - "@react-native-community/cli-types": "11.3.6", - "chalk": "^4.1.2", - "commander": "^9.4.1", - "execa": "^5.0.0", - "find-up": "^4.1.0", - "fs-extra": "^8.1.0", - "graceful-fs": "^4.1.3", - "prompts": "^2.4.0", - "semver": "^7.5.2" - }, - "bin": { - "react-native": "build/bin.js" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@react-native-community/cli-clean": { - "version": "11.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-11.3.6.tgz", - "integrity": "sha512-jOOaeG5ebSXTHweq1NznVJVAFKtTFWL4lWgUXl845bCGX7t1lL8xQNWHKwT8Oh1pGR2CI3cKmRjY4hBg+pEI9g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@react-native-community/cli-tools": "11.3.6", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "prompts": "^2.4.0" - } - }, - "node_modules/@react-native-community/cli-config": { - "version": "11.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-11.3.6.tgz", - "integrity": "sha512-edy7fwllSFLan/6BG6/rznOBCLPrjmJAE10FzkEqNLHowi0bckiAPg1+1jlgQ2qqAxV5kuk+c9eajVfQvPLYDA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@react-native-community/cli-tools": "11.3.6", - "chalk": "^4.1.2", - "cosmiconfig": "^5.1.0", - "deepmerge": "^4.3.0", - "glob": "^7.1.3", - "joi": "^17.2.1" - } - }, - "node_modules/@react-native-community/cli-debugger-ui": { - "version": "11.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-11.3.6.tgz", - "integrity": "sha512-jhMOSN/iOlid9jn/A2/uf7HbC3u7+lGktpeGSLnHNw21iahFBzcpuO71ekEdlmTZ4zC/WyxBXw9j2ka33T358w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "serve-static": "^1.13.1" - } - }, - "node_modules/@react-native-community/cli-doctor": { - "version": "11.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-11.3.6.tgz", - "integrity": "sha512-UT/Tt6omVPi1j6JEX+CObc85eVFghSZwy4GR9JFMsO7gNg2Tvcu1RGWlUkrbmWMAMHw127LUu6TGK66Ugu1NLA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@react-native-community/cli-config": "11.3.6", - "@react-native-community/cli-platform-android": "11.3.6", - "@react-native-community/cli-platform-ios": "11.3.6", - "@react-native-community/cli-tools": "11.3.6", - "chalk": "^4.1.2", - "command-exists": "^1.2.8", - "envinfo": "^7.7.2", - "execa": "^5.0.0", - "hermes-profile-transformer": "^0.0.6", - "ip": "^1.1.5", - "node-stream-zip": "^1.9.1", - "ora": "^5.4.1", - "prompts": "^2.4.0", - "semver": "^7.5.2", - "strip-ansi": "^5.2.0", - "sudo-prompt": "^9.0.0", - "wcwidth": "^1.0.1", - "yaml": "^2.2.1" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@react-native-community/cli-doctor/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, - "optional": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@react-native-community/cli-doctor/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, - "optional": true, - "peer": true - }, - "node_modules/@react-native-community/cli-hermes": { - "version": "11.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-11.3.6.tgz", - "integrity": "sha512-O55YAYGZ3XynpUdePPVvNuUPGPY0IJdctLAOHme73OvS80gNwfntHDXfmY70TGHWIfkK2zBhA0B+2v8s5aTyTA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@react-native-community/cli-platform-android": "11.3.6", - "@react-native-community/cli-tools": "11.3.6", - "chalk": "^4.1.2", - "hermes-profile-transformer": "^0.0.6", - "ip": "^1.1.5" - } - }, - "node_modules/@react-native-community/cli-platform-android": { - "version": "11.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-11.3.6.tgz", - "integrity": "sha512-ZARrpLv5tn3rmhZc//IuDM1LSAdYnjUmjrp58RynlvjLDI4ZEjBAGCQmgysRgXAsK7ekMrfkZgemUczfn9td2A==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@react-native-community/cli-tools": "11.3.6", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "glob": "^7.1.3", - "logkitty": "^0.7.1" - } - }, - "node_modules/@react-native-community/cli-platform-ios": { - "version": "11.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-11.3.6.tgz", - "integrity": "sha512-tZ9VbXWiRW+F+fbZzpLMZlj93g3Q96HpuMsS6DRhrTiG+vMQ3o6oPWSEEmMGOvJSYU7+y68Dc9ms2liC7VD6cw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@react-native-community/cli-tools": "11.3.6", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "fast-xml-parser": "^4.0.12", - "glob": "^7.1.3", - "ora": "^5.4.1" - } - }, - "node_modules/@react-native-community/cli-plugin-metro": { - "version": "11.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-11.3.6.tgz", - "integrity": "sha512-D97racrPX3069ibyabJNKw9aJpVcaZrkYiEzsEnx50uauQtPDoQ1ELb/5c6CtMhAEGKoZ0B5MS23BbsSZcLs2g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@react-native-community/cli-server-api": "11.3.6", - "@react-native-community/cli-tools": "11.3.6", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "metro": "0.76.7", - "metro-config": "0.76.7", - "metro-core": "0.76.7", - "metro-react-native-babel-transformer": "0.76.7", - "metro-resolver": "0.76.7", - "metro-runtime": "0.76.7", - "readline": "^1.3.0" - } - }, - "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-runtime": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.76.7.tgz", - "integrity": "sha512-MuWHubQHymUWBpZLwuKZQgA/qbb35WnDAKPo83rk7JRLIFPvzXSvFaC18voPuzJBt1V98lKQIonh6MiC9gd8Ug==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.0.0", - "react-refresh": "^0.4.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@react-native-community/cli-server-api": { - "version": "11.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-11.3.6.tgz", - "integrity": "sha512-8GUKodPnURGtJ9JKg8yOHIRtWepPciI3ssXVw5jik7+dZ43yN8P5BqCoDaq8e1H1yRer27iiOfT7XVnwk8Dueg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@react-native-community/cli-debugger-ui": "11.3.6", - "@react-native-community/cli-tools": "11.3.6", - "compression": "^1.7.1", - "connect": "^3.6.5", - "errorhandler": "^1.5.1", - "nocache": "^3.0.1", - "pretty-format": "^26.6.2", - "serve-static": "^1.13.1", - "ws": "^7.5.1" - } - }, - "node_modules/@react-native-community/cli-server-api/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@react-native-community/cli-tools": { - "version": "11.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-11.3.6.tgz", - "integrity": "sha512-JpmUTcDwAGiTzLsfMlIAYpCMSJ9w2Qlf7PU7mZIRyEu61UzEawyw83DkqfbzDPBuRwRnaeN44JX2CP/yTO3ThQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "appdirsjs": "^1.2.4", - "chalk": "^4.1.2", - "find-up": "^5.0.0", - "mime": "^2.4.1", - "node-fetch": "^2.6.0", - "open": "^6.2.0", - "ora": "^5.4.1", - "semver": "^7.5.2", - "shell-quote": "^1.7.3" - } - }, - "node_modules/@react-native-community/cli-tools/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, - "optional": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@react-native-community/cli-tools/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, - "optional": true, - "peer": true - }, - "node_modules/@react-native-community/cli-types": { - "version": "11.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-11.3.6.tgz", - "integrity": "sha512-6DxjrMKx5x68N/tCJYVYRKAtlRHbtUVBZrnAvkxbRWFD9v4vhNgsPM0RQm8i2vRugeksnao5mbnRGpS6c0awCw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "joi": "^17.2.1" - } - }, - "node_modules/@react-native-community/cli/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/@react-native-community/cli/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli/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, - "optional": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@react-native-community/cli/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optional": true, - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@react-native-community/cli/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli/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, - "optional": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@react-native-community/cli/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@react-native-community/cli/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@react-native-community/cli/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, - "optional": true, - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/@react-native-community/cli/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, - "optional": true, - "peer": true - }, - "node_modules/@react-native/assets-registry": { - "version": "0.72.0", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.72.0.tgz", - "integrity": "sha512-Im93xRJuHHxb1wniGhBMsxLwcfzdYreSZVQGDoMJgkd6+Iky61LInGEHnQCTN0fKNYF1Dvcofb4uMmE1RQHXHQ==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/@react-native/codegen": { - "version": "0.72.6", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.72.6.tgz", - "integrity": "sha512-idTVI1es/oopN0jJT/0jB6nKdvTUKE3757zA5+NPXZTeB46CIRbmmos4XBiAec8ufu9/DigLPbHTYAaMNZJ6Ig==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/parser": "^7.20.0", - "flow-parser": "^0.206.0", - "jscodeshift": "^0.14.0", - "nullthrows": "^1.1.1" - }, - "peerDependencies": { - "@babel/preset-env": "^7.1.6" - } - }, - "node_modules/@react-native/gradle-plugin": { - "version": "0.72.11", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.72.11.tgz", - "integrity": "sha512-P9iRnxiR2w7EHcZ0mJ+fmbPzMby77ZzV6y9sJI3lVLJzF7TLSdbwcQyD3lwMsiL+q5lKUHoZJS4sYmih+P2HXw==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/@react-native/js-polyfills": { - "version": "0.72.1", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.72.1.tgz", - "integrity": "sha512-cRPZh2rBswFnGt5X5EUEPs0r+pAsXxYsifv/fgy9ZLQokuT52bPH+9xjDR+7TafRua5CttGW83wP4TntRcWNDA==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/@react-native/normalize-colors": { - "version": "0.72.0", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.72.0.tgz", - "integrity": "sha512-285lfdqSXaqKuBbbtP9qL2tDrfxdOFtIMvkKadtleRQkdOxx+uzGvFr82KHmc/sSiMtfXGp7JnFYWVh4sFl7Yw==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/@react-native/virtualized-lists": { - "version": "0.72.8", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.72.8.tgz", - "integrity": "sha512-J3Q4Bkuo99k7mu+jPS9gSUSgq+lLRSI/+ahXNwV92XgJ/8UgOTxu2LPwhJnBk/sQKxq7E8WkZBnBiozukQMqrw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "invariant": "^2.2.4", - "nullthrows": "^1.1.1" - }, - "peerDependencies": { - "react-native": "*" - } - }, - "node_modules/@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, - "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "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 - }, - "node_modules/@types/asn1js": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/asn1js/-/asn1js-2.0.2.tgz", - "integrity": "sha512-t4YHCgtD+ERvH0FyxvNlYwJ2ezhqw7t+Ygh4urQ7dJER8i185JPv6oIM3ey5YQmGN6Zp9EMbpohkjZi9t3UxwA==", - "dev": true - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/node": { - "version": "13.13.52", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.52.tgz", - "integrity": "sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ==", - "dev": true - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/@types/web-bluetooth": { - "version": "0.0.17", - "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz", - "integrity": "sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==", - "dev": true - }, - "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/@unimodules/core": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@unimodules/core/-/core-7.1.2.tgz", - "integrity": "sha512-lY+e2TAFuebD3vshHMIRqru3X4+k7Xkba4Wa7QsDBd+ex4c4N2dHAO61E2SrGD9+TRBD8w/o7mzK6ljbqRnbyg==", - "deprecated": "replaced by the 'expo' package, learn more: https://blog.expo.dev/whats-new-in-expo-modules-infrastructure-7a7cdda81ebc", - "dev": true, - "optional": true, - "dependencies": { - "compare-versions": "^3.4.0" - } - }, - "node_modules/@unimodules/react-native-adapter": { - "version": "6.3.7", - "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-6.3.7.tgz", - "integrity": "sha512-kVfTje46vfc5uqILvFJCoiS49WfuWcGZUKvRBJaXd1bPgG7E8+94+9p1AsNs5eAFkFnbVWXRAvlOeiHIqrNjEA==", - "deprecated": "replaced by the 'expo' package, learn more: https://blog.expo.dev/whats-new-in-expo-modules-infrastructure-7a7cdda81ebc", - "dev": true, - "optional": true, - "dependencies": { - "expo-modules-autolinking": "^0.0.3", - "invariant": "^2.2.4" - } - }, - "node_modules/@vue/compiler-core": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz", - "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.21.3", - "@vue/shared": "3.3.4", - "estree-walker": "^2.0.2", - "source-map-js": "^1.0.2" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz", - "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==", - "dev": true, - "dependencies": { - "@vue/compiler-core": "3.3.4", - "@vue/shared": "3.3.4" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz", - "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.15", - "@vue/compiler-core": "3.3.4", - "@vue/compiler-dom": "3.3.4", - "@vue/compiler-ssr": "3.3.4", - "@vue/reactivity-transform": "3.3.4", - "@vue/shared": "3.3.4", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.0", - "postcss": "^8.1.10", - "source-map-js": "^1.0.2" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz", - "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==", - "dev": true, - "dependencies": { - "@vue/compiler-dom": "3.3.4", - "@vue/shared": "3.3.4" - } - }, - "node_modules/@vue/devtools-api": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz", - "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==", - "dev": true - }, - "node_modules/@vue/reactivity": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz", - "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==", - "dev": true, - "dependencies": { - "@vue/shared": "3.3.4" - } - }, - "node_modules/@vue/reactivity-transform": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz", - "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.15", - "@vue/compiler-core": "3.3.4", - "@vue/shared": "3.3.4", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.0" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz", - "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==", - "dev": true, - "dependencies": { - "@vue/reactivity": "3.3.4", - "@vue/shared": "3.3.4" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz", - "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==", - "dev": true, - "dependencies": { - "@vue/runtime-core": "3.3.4", - "@vue/shared": "3.3.4", - "csstype": "^3.1.1" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz", - "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==", - "dev": true, - "dependencies": { - "@vue/compiler-ssr": "3.3.4", - "@vue/shared": "3.3.4" - }, - "peerDependencies": { - "vue": "3.3.4" - } - }, - "node_modules/@vue/shared": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz", - "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==", - "dev": true - }, - "node_modules/@vueuse/core": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.3.0.tgz", - "integrity": "sha512-BEM5yxcFKb5btFjTSAFjTu5jmwoW66fyV9uJIP4wUXXU8aR5Hl44gndaaXp7dC5HSObmgbnR2RN+Un1p68Mf5Q==", - "dev": true, - "dependencies": { - "@types/web-bluetooth": "^0.0.17", - "@vueuse/metadata": "10.3.0", - "@vueuse/shared": "10.3.0", - "vue-demi": ">=0.14.5" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/core/node_modules/vue-demi": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.5.tgz", - "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, - "node_modules/@vueuse/integrations": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-10.3.0.tgz", - "integrity": "sha512-Jgiv7oFyIgC6BxmDtiyG/fxyGysIds00YaY7sefwbhCZ2/tjEx1W/1WcsISSJPNI30in28+HC2J4uuU8184ekg==", - "dev": true, - "dependencies": { - "@vueuse/core": "10.3.0", - "@vueuse/shared": "10.3.0", - "vue-demi": ">=0.14.5" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "async-validator": "*", - "axios": "*", - "change-case": "*", - "drauu": "*", - "focus-trap": "*", - "fuse.js": "*", - "idb-keyval": "*", - "jwt-decode": "*", - "nprogress": "*", - "qrcode": "*", - "sortablejs": "*", - "universal-cookie": "*" - }, - "peerDependenciesMeta": { - "async-validator": { - "optional": true - }, - "axios": { - "optional": true - }, - "change-case": { - "optional": true - }, - "drauu": { - "optional": true - }, - "focus-trap": { - "optional": true - }, - "fuse.js": { - "optional": true - }, - "idb-keyval": { - "optional": true - }, - "jwt-decode": { - "optional": true - }, - "nprogress": { - "optional": true - }, - "qrcode": { - "optional": true - }, - "sortablejs": { - "optional": true - }, - "universal-cookie": { - "optional": true - } - } - }, - "node_modules/@vueuse/integrations/node_modules/vue-demi": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.5.tgz", - "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, - "node_modules/@vueuse/metadata": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.3.0.tgz", - "integrity": "sha512-Ema3YhNOa4swDsV0V7CEY5JXvK19JI/o1szFO1iWxdFg3vhdFtCtSTP26PCvbUpnUtNHBY2wx5y3WDXND5Pvnw==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/shared": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.3.0.tgz", - "integrity": "sha512-kGqCTEuFPMK4+fNWy6dUOiYmxGcUbtznMwBZLC1PubidF4VZY05B+Oht7Jh7/6x4VOWGpvu3R37WHi81cKpiqg==", - "dev": true, - "dependencies": { - "vue-demi": ">=0.14.5" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/shared/node_modules/vue-demi": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.5.tgz", - "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, - "node_modules/@webex/common": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/common/-/common-1.141.0.tgz", - "integrity": "sha512-ju6f/iABQO3rY4q048skEFi95lg9Y1vrAM7cu8v/78h5ajMgNMjkMTaylN0yZsemvWgpvHaJYhRPfpiEHFYdwA==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "backoff": "^2.5.0", - "core-decorators": "^0.20.0", - "envify": "^4.1.0", - "lodash": "^4.17.21", - "safe-buffer": "^5.2.0", - "urlsafe-base64": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/common-timers": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/common-timers/-/common-timers-1.141.0.tgz", - "integrity": "sha512-ovcIfpJOtlP6Mhz8Ma38o/5Nlwvj0SWM9aQ0eECatA1imbq/Z/Ek3PQK/uwc7WPSeVxKUxndTi/KirYzB9XNJQ==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "envify": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/helper-html": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/helper-html/-/helper-html-1.141.0.tgz", - "integrity": "sha512-NzBAbvEkX05IuUXxDZkUwTMtYFqz08IduwMeK6XsDq+/caXQkvruMjbA1sKAcHODNW7x1pODNwWqQv+I0iDONw==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "envify": "^4.1.0", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/helper-image": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/helper-image/-/helper-image-1.141.0.tgz", - "integrity": "sha512-ReCoOq52cqI7T90mSJ/xCVw0r/Hmc8CDkFBatZyI/W/5eVYYPxu1TRUrYfbJvkvf7bGlH3mMsP5PI8faPM8w+A==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/http-core": "1.141.0", - "envify": "^4.1.0", - "exifr": "^5.0.3", - "gm": "^1.23.1", - "lodash": "^4.17.21", - "mime": "^2.4.4", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/http-core": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/http-core/-/http-core-1.141.0.tgz", - "integrity": "sha512-MI3FHXWdzQVOt9H00KTSk7WmNmF6WOv28NvYzCu2Y/6hSgnYvzyGYrDcTsRssR+fzfZYVXP8w9wBWglHQPFeeg==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "envify": "^4.1.0", - "file-type": "^16.0.1", - "global": "^4.4.0", - "is-function": "^1.0.1", - "lodash": "^4.17.21", - "parse-headers": "^2.0.2", - "qs": "^6.7.0", - "request": "^2.88.0", - "safe-buffer": "^5.2.0", - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/internal-plugin-calendar": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/internal-plugin-calendar/-/internal-plugin-calendar-1.141.0.tgz", - "integrity": "sha512-zKf8VelJ1redGwGrL5sCLID+cnkthFEkJnWzikbLn1nJahKldrtzuxGog9KXpmkprO129ooUqmEusMMIXa+V/g==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/internal-plugin-conversation": "1.141.0", - "@webex/internal-plugin-device": "1.141.0", - "@webex/internal-plugin-encryption": "1.141.0", - "@webex/webex-core": "1.141.0", - "btoa": "^1.2.1", - "envify": "^4.1.0", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/internal-plugin-conversation": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/internal-plugin-conversation/-/internal-plugin-conversation-1.141.0.tgz", - "integrity": "sha512-SDh+/WH3TjZ73jJo+wSF7ce2KtYzMUlBNAwV8MV09+HmPNUsQ1iuTFRojwuwOJw1xTzCG69+0UgAg4JydBPieQ==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/helper-html": "1.141.0", - "@webex/helper-image": "1.141.0", - "@webex/internal-plugin-encryption": "1.141.0", - "@webex/internal-plugin-user": "1.141.0", - "@webex/webex-core": "1.141.0", - "crypto-js": "^3.1.9-1", - "envify": "^4.1.0", - "lodash": "^4.17.21", - "node-scr": "^0.3.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/internal-plugin-device": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/internal-plugin-device/-/internal-plugin-device-1.141.0.tgz", - "integrity": "sha512-F6gh1vguRZwnmR5ZrkLamOgjAuFrOWcStCEF3I07bX/RDWwIxOx8V5wAkJaLOBRkrbM6xO2Vt4VxWNzVPUwfUw==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/common-timers": "1.141.0", - "@webex/http-core": "1.141.0", - "@webex/webex-core": "1.141.0", - "ampersand-collection": "^2.0.2", - "ampersand-state": "^5.0.3", - "envify": "^4.1.0", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/internal-plugin-encryption": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/internal-plugin-encryption/-/internal-plugin-encryption-1.141.0.tgz", - "integrity": "sha512-UMSba7aEgBts5SMBYYOVFn0IoORutvRabx3u+NBKXA4mbP8Mp1WzDfgB1bn+4TMfpcDWt2d6OMY7kbYEb5nxqw==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/common-timers": "1.141.0", - "@webex/http-core": "1.141.0", - "@webex/internal-plugin-device": "1.141.0", - "@webex/internal-plugin-mercury": "1.141.0", - "@webex/webex-core": "1.141.0", - "asn1js": "^2.0.26", - "debug": "^3.2.6", - "envify": "^4.1.0", - "isomorphic-webcrypto": "^2.3.8", - "lodash": "^4.17.21", - "node-jose": "^2.0.0", - "node-kms": "^0.4.0", - "node-scr": "^0.3.0", - "pkijs": "^2.1.84", - "safe-buffer": "^5.2.0", - "valid-url": "^1.0.9" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/internal-plugin-feature": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/internal-plugin-feature/-/internal-plugin-feature-1.141.0.tgz", - "integrity": "sha512-MUWsFlbWd60sB6xMbdB+0iNngmSOdKyTwN+t7F187pc2E9pKLxzVBDwc4+y3ralipPqKiHv624u8vthq5MssRQ==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/internal-plugin-device": "1.141.0", - "@webex/internal-plugin-mercury": "1.141.0", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/internal-plugin-lyra": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/internal-plugin-lyra/-/internal-plugin-lyra-1.141.0.tgz", - "integrity": "sha512-5C1uyTPWu7Ssvin7Kz0sAyC6zmMoxMUBBKOF3k7ISD2G3SQRrC4m3GyzkPQPH0cSebZEX1/yOTdmZKUza4o1Hg==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/internal-plugin-conversation": "1.141.0", - "@webex/internal-plugin-encryption": "1.141.0", - "@webex/internal-plugin-feature": "1.141.0", - "@webex/internal-plugin-mercury": "1.141.0", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/internal-plugin-mercury": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/internal-plugin-mercury/-/internal-plugin-mercury-1.141.0.tgz", - "integrity": "sha512-SqksM1vwlen5CZK3HKEcLGgMNpn9rfB9y7dwkW5uFO/ws6A0G+G1gH62CVChBWeO0sKtJYfaGSnY98Kjz98BnA==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/common-timers": "1.141.0", - "@webex/internal-plugin-device": "1.141.0", - "@webex/internal-plugin-feature": "1.141.0", - "@webex/internal-plugin-metrics": "1.141.0", - "@webex/webex-core": "1.141.0", - "backoff": "^2.5.0", - "envify": "^4.1.0", - "lodash": "^4.17.21", - "uuid": "^3.3.2", - "ws": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/internal-plugin-metrics": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/internal-plugin-metrics/-/internal-plugin-metrics-1.141.0.tgz", - "integrity": "sha512-7ZFpGnLG45wk8EzNH3VdN8HdZNkSkggxhfZUjvvF1UGM4VTGkSfEGTVhzOLwiwrv2fIJkC9ttVCw8EXXbadp/A==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/common-timers": "1.141.0", - "@webex/internal-plugin-device": "1.141.0", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/internal-plugin-presence": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/internal-plugin-presence/-/internal-plugin-presence-1.141.0.tgz", - "integrity": "sha512-P+NbuzK6WIGWAkeGiM5FqNS/RhmI4YVsE0/SOsC6Rs5EADBB+MRuqRvJRgQni+onQYGFZFyreio7C0yw/pKVvw==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/internal-plugin-device": "1.141.0", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/internal-plugin-search": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/internal-plugin-search/-/internal-plugin-search-1.141.0.tgz", - "integrity": "sha512-iEs+Wg9ueKCO8E+skYlwycyi2WPk9f7iAUeP//JZJUq/JXEeA1fx6giikuxxqZBSBT5GL4Y4tZSAsaycM8lHLg==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/internal-plugin-conversation": "1.141.0", - "@webex/internal-plugin-encryption": "1.141.0", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/internal-plugin-support": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/internal-plugin-support/-/internal-plugin-support-1.141.0.tgz", - "integrity": "sha512-+XslVCP4aySXeAv/mDol43VjD3/W6i09UMk7URqHwcGykW8JwvS9a3+Ah90HC2iR10zZ8PtITnPE/fOS/gf8LQ==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/internal-plugin-device": "1.141.0", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0", - "lodash": "^4.17.21", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/internal-plugin-user": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/internal-plugin-user/-/internal-plugin-user-1.141.0.tgz", - "integrity": "sha512-/qAFzmOSFb9lduUiJe+xhH5gtreeoru2PivbIHfj0JQdvYNLfl6T6N7XFcSfbfstqDGQ3SkOLqVG9v3v0e6ltw==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/internal-plugin-device": "1.141.0", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/plugin-attachment-actions": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/plugin-attachment-actions/-/plugin-attachment-actions-1.141.0.tgz", - "integrity": "sha512-FiNHehs/kSB6Pr0YpB2X7uFPwnIYDX3eyzgLmcwCkqS6qzIU11+c3ly6Ni0b6kvUAb6j/wWjA0y3XcHCWrYvrg==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/internal-plugin-conversation": "1.141.0", - "@webex/internal-plugin-mercury": "1.141.0", - "@webex/webex-core": "1.141.0", - "debug": "^3.2.6", - "envify": "^4.1.0", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/plugin-authorization": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/plugin-authorization/-/plugin-authorization-1.141.0.tgz", - "integrity": "sha512-u/h4KvsO4AGCtFcryWrYiM2CUTfHNyhTgXyO3tpwO+xO77g0aqyv2+/IWZ/F5atbnpvSFreaXMd+uAHvl6WeUw==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/plugin-authorization-browser": "1.141.0", - "@webex/plugin-authorization-node": "1.141.0", - "envify": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/plugin-authorization-browser": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/plugin-authorization-browser/-/plugin-authorization-browser-1.141.0.tgz", - "integrity": "sha512-wkKe2J76lUnRbxhUQKd6C5PhCv1+bxN1bckCV5VgV+dRwBpGEjkcVvsMrRRadesZrAj5Dxp7qSAso+JhiMAWmA==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/internal-plugin-device": "1.141.0", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0", - "lodash": "^4.17.21", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/plugin-authorization-node": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/plugin-authorization-node/-/plugin-authorization-node-1.141.0.tgz", - "integrity": "sha512-QV2dKAQHwknVsyg/yxUCOeeXHjq3AI7T9iGmQ2ZQ/jh1GnnfBCLAJHKYIDtmo82Yf0vbKuGDsUQEfVDNRGtP7g==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/internal-plugin-device": "1.141.0", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/plugin-device-manager": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/plugin-device-manager/-/plugin-device-manager-1.141.0.tgz", - "integrity": "sha512-gPjJV1OxV8+jQ5lsdLjLicDZ4aK2D+rXr+CSjvJJ8iIqyNIGxj3zwlOA9HHic5Gw8Izzk8T8mle7oZSusuOB4w==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/internal-plugin-device": "1.141.0", - "@webex/internal-plugin-lyra": "1.141.0", - "@webex/internal-plugin-search": "1.141.0", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0", - "lodash": "^4.17.21", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/plugin-logger": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/plugin-logger/-/plugin-logger-1.141.0.tgz", - "integrity": "sha512-XrgY3X0Caw94fb4G8hGjCYRtkxYCxn/Bot31gtXQi5w3QpkSb+a1BpF02m4phinl+SO/tv+IYXC5gwPE1ozB3Q==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/plugin-meetings": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/plugin-meetings/-/plugin-meetings-1.141.0.tgz", - "integrity": "sha512-mFEG5QSPuQzkqmY9Z15rueBy6d9NVjVWMA3LX9WnrZFIWroZpwYAS34am+giqj8cpgz0v8Xo1tFqwcUazbhEMg==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/common-timers": "1.141.0", - "@webex/internal-plugin-mercury": "1.141.0", - "@webex/webex-core": "1.141.0", - "bowser": "^2.11.0", - "btoa": "^1.2.1", - "envify": "^4.1.0", - "global": "^4.4.0", - "javascript-state-machine": "^3.1.0", - "lodash": "^4.17.21", - "readable-stream": "^3.6.0", - "sdp-transform": "^2.12.0", - "uuid": "^3.3.2", - "webrtc-adapter": "^7.7.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/plugin-meetings/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@webex/plugin-memberships": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/plugin-memberships/-/plugin-memberships-1.141.0.tgz", - "integrity": "sha512-Dn4HwpqPvbvj6wsu7Hh9KRYmmAZXIlrZd1E84au/vsiLe/ZFV7ME4TCAQ0OcA3vDcZ9XVTPA7QnJL207xRtw1A==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/internal-plugin-conversation": "1.141.0", - "@webex/internal-plugin-mercury": "1.141.0", - "@webex/webex-core": "1.141.0", - "debug": "^3.2.6", - "envify": "^4.1.0", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/plugin-messages": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/plugin-messages/-/plugin-messages-1.141.0.tgz", - "integrity": "sha512-quNgN3V/S0///fM/rPLVu4njIJ658CMeJx6IYgnO1Ii+2JzOa8BHYnQDWtlFR3FQhaa8g83aOLvRIooX/MY9Xg==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/internal-plugin-conversation": "1.141.0", - "@webex/internal-plugin-mercury": "1.141.0", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/plugin-people": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/plugin-people/-/plugin-people-1.141.0.tgz", - "integrity": "sha512-1LgvmhgWWNHEcyDhf+qhBl4125yonadNoMkQhYXBzHsWoaZQkM0qEd0FHE0MgBlcVa+V0Ik7vw2diIVyhGijIQ==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/plugin-rooms": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/plugin-rooms/-/plugin-rooms-1.141.0.tgz", - "integrity": "sha512-i99qJsURAEGHxf2mOnijoY98w22K4cJWMkB5iayt/lqwkF9uS2xKrf8A0QwUYP2dw3Q5P/RrLOlN+38IPoHX9g==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/internal-plugin-conversation": "1.141.0", - "@webex/internal-plugin-mercury": "1.141.0", - "@webex/webex-core": "1.141.0", - "debug": "^3.2.6", - "envify": "^4.1.0", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/plugin-team-memberships": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/plugin-team-memberships/-/plugin-team-memberships-1.141.0.tgz", - "integrity": "sha512-rUSPJveQnv62odb4Z+06LztwopPQglNnAxhFlYi/NLTXEIGtfuB6v4IT8ED1aUJ7oYJhMHt/j7rVHEWo8fOWow==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/plugin-teams": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/plugin-teams/-/plugin-teams-1.141.0.tgz", - "integrity": "sha512-9nRaPrcppnetfqZUWoRdddwpg5bSd3fOQWB7vMVF0UzDOVcG4HCNTD8/2yZxZqxhDK/qA0+IgcR7Crx0+rDW/g==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/plugin-webhooks": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/plugin-webhooks/-/plugin-webhooks-1.141.0.tgz", - "integrity": "sha512-AUW7lDh9iTkeGJVo1qn7R4KOhYjPS5Kti9Sc2LK3xUlwA7Yf5NnhD86LNQC6QJDiywe9BSPH3WAceNPNPyNANg==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/storage-adapter-local-storage": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/storage-adapter-local-storage/-/storage-adapter-local-storage-1.141.0.tgz", - "integrity": "sha512-YgzFej33u1/omY903yihnvzr1xREdQ8vtsa1IvMxxqEggO1iHEZxpglsctn6dgVhADRum0DtHP+rXCd8mz/QGA==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@webex/webex-core": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/webex-core/-/webex-core-1.141.0.tgz", - "integrity": "sha512-oXa8cNNWXj396xuYEnEUnN+UCjRjc4kicXYjMHIUgITqImvt/a0r0srEE1bEtoVlluE9TpupmwviP9xdUyh0OQ==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/common-timers": "1.141.0", - "@webex/http-core": "1.141.0", - "@webex/webex-core": "1.141.0", - "ampersand-collection": "^2.0.2", - "ampersand-events": "^2.0.2", - "ampersand-state": "^5.0.3", - "core-decorators": "^0.20.0", - "crypto-js": "^3.1.9-1", - "envify": "^4.1.0", - "jsonwebtoken": "^8.5.1", - "lodash": "^4.17.21", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "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==", - "dev": true, - "optional": true, - "peer": true, - "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", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/agent-base/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/aggregate-error/node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/algoliasearch": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.19.1.tgz", - "integrity": "sha512-IJF5b93b2MgAzcE/tuzW0yOPnuUyRgGAtaPv5UUywXM8kzqfdwZTO4sPJBzoGz1eOy6H9uEchsJsBFTELZSu+g==", - "dev": true, - "dependencies": { - "@algolia/cache-browser-local-storage": "4.19.1", - "@algolia/cache-common": "4.19.1", - "@algolia/cache-in-memory": "4.19.1", - "@algolia/client-account": "4.19.1", - "@algolia/client-analytics": "4.19.1", - "@algolia/client-common": "4.19.1", - "@algolia/client-personalization": "4.19.1", - "@algolia/client-search": "4.19.1", - "@algolia/logger-common": "4.19.1", - "@algolia/logger-console": "4.19.1", - "@algolia/requester-browser-xhr": "4.19.1", - "@algolia/requester-common": "4.19.1", - "@algolia/requester-node-http": "4.19.1", - "@algolia/transporter": "4.19.1" - } - }, - "node_modules/ampersand-class-extend": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ampersand-class-extend/-/ampersand-class-extend-2.0.0.tgz", - "integrity": "sha1-Uolf+lkhdjSmGI/RhLEEj12Aiv8=", - "dev": true, - "dependencies": { - "lodash": "^4.11.1" - } - }, - "node_modules/ampersand-collection": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ampersand-collection/-/ampersand-collection-2.0.2.tgz", - "integrity": "sha512-IjDa4HTL/tdQDDL0SGyWk4AHD02iNtUSLRWkAsJ2biPvapljW9HNgIEIdbPnnR+7Gb9BJkjesaLNjVZfAMzeuA==", - "dev": true, - "dependencies": { - "ampersand-class-extend": "^2.0.0", - "ampersand-events": "^2.0.1", - "ampersand-version": "^1.0.2", - "lodash": "^4.11.1" - } - }, - "node_modules/ampersand-events": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ampersand-events/-/ampersand-events-2.0.2.tgz", - "integrity": "sha1-9AK8LhgwX6vZldvc07cFe73X00c=", - "dev": true, - "dependencies": { - "ampersand-version": "^1.0.2", - "lodash": "^4.6.1" - } - }, - "node_modules/ampersand-state": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/ampersand-state/-/ampersand-state-5.0.3.tgz", - "integrity": "sha512-sr904K5zvw6mkGjFHhTcfBIdpoJ6mn/HrFg7OleRmBpw3apLb3Z0gVrgRTb7kK1wOLI34vs4S+IXqNHUeqWCzw==", - "dev": true, - "dependencies": { - "ampersand-events": "^2.0.1", - "ampersand-version": "^1.0.0", - "array-next": "~0.0.1", - "key-tree-store": "^1.3.0", - "lodash": "^4.12.0" - } - }, - "node_modules/ampersand-version": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ampersand-version/-/ampersand-version-1.0.2.tgz", - "integrity": "sha1-/489TOrE0yzNg/a9Zpc5f3tZ4sA=", - "dev": true, - "dependencies": { - "find-root": "^0.1.1", - "through2": "^0.6.3" - } - }, - "node_modules/anser": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", - "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", - "dev": true, - "dependencies": { - "string-width": "^3.0.0" - } - }, - "node_modules/ansi-align/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-align/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-align/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-fragments": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", - "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "colorette": "^1.0.7", - "slice-ansi": "^2.0.0", - "strip-ansi": "^5.0.0" - } - }, - "node_modules/ansi-fragments/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-fragments/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, - "optional": true, - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-fragments/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, - "optional": true, - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/ansi-fragments/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, - "optional": true, - "peer": true - }, - "node_modules/ansi-fragments/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-fragments/node_modules/slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-fragments/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-sequence-parser": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", - "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", - "dev": true - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/appdirsjs": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.7.tgz", - "integrity": "sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-next": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-next/-/array-next-0.0.1.tgz", - "integrity": "sha1-5eRmCkwn/agVH/d2QnXQCQAGK+E=", - "dev": true - }, - "node_modules/array-parallel": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/array-parallel/-/array-parallel-0.1.3.tgz", - "integrity": "sha1-j3hTCJJu1apHjEfmTRszS2wMlH0=", - "dev": true - }, - "node_modules/array-series": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/array-series/-/array-series-0.1.5.tgz", - "integrity": "sha1-3103v8XC7wdV4qpPkv6ufUtaly8=", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/arrgv": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arrgv/-/arrgv-1.0.2.tgz", - "integrity": "sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw==", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/arrify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", - "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/asmcrypto.js": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/asmcrypto.js/-/asmcrypto.js-0.22.0.tgz", - "integrity": "sha512-usgMoyXjMbx/ZPdzTSXExhMPur2FTdz/Vo5PVx2gIaBcdAAJNOFlsdgqveM8Cff7W0v+xrf9BwjOV26JSAF9qA==", - "dev": true - }, - "node_modules/asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/asn1js": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-2.1.1.tgz", - "integrity": "sha512-t9u0dU0rJN4ML+uxgN6VM2Z4H5jWIYm0w8LsZLzMJaQsgL3IJNbxHgmbWDvJAwspyHpDFuzUaUFh4c05UB4+6g==", - "dev": true, - "dependencies": { - "pvutils": "latest" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/ast-types": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", - "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", - "dev": true - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "optional": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/ava": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ava/-/ava-4.1.0.tgz", - "integrity": "sha512-QD6MBWHzagAwb9vxduXzVWx6Q77DUHLxvIebSY6+enL+Ri6KzSZYj0IBOFifA26wfpJPZnWKLUh3vwx1LyVh/g==", - "dependencies": { - "acorn": "^8.7.0", - "acorn-walk": "^8.2.0", - "ansi-styles": "^6.1.0", - "arrgv": "^1.0.2", - "arrify": "^3.0.0", - "callsites": "^4.0.0", - "cbor": "^8.1.0", - "chalk": "^5.0.0", - "chokidar": "^3.5.3", - "chunkd": "^2.0.1", - "ci-info": "^3.3.0", - "ci-parallel-vars": "^1.0.1", - "clean-yaml-object": "^0.1.0", - "cli-truncate": "^3.1.0", - "code-excerpt": "^4.0.0", - "common-path-prefix": "^3.0.0", - "concordance": "^5.0.4", - "currently-unhandled": "^0.4.1", - "debug": "^4.3.3", - "del": "^6.0.0", - "emittery": "^0.10.1", - "figures": "^4.0.0", - "globby": "^13.1.1", - "ignore-by-default": "^2.0.0", - "indent-string": "^5.0.0", - "is-error": "^2.2.2", - "is-plain-object": "^5.0.0", - "is-promise": "^4.0.0", - "matcher": "^5.0.0", - "mem": "^9.0.2", - "ms": "^2.1.3", - "p-event": "^5.0.1", - "p-map": "^5.3.0", - "picomatch": "^2.3.1", - "pkg-conf": "^4.0.0", - "plur": "^5.1.0", - "pretty-ms": "^7.0.1", - "resolve-cwd": "^3.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.5", - "strip-ansi": "^7.0.1", - "supertap": "^3.0.1", - "temp-dir": "^2.0.0", - "write-file-atomic": "^4.0.1", - "yargs": "^17.3.1" - }, - "bin": { - "ava": "entrypoints/cli.mjs" - }, - "engines": { - "node": ">=12.22 <13 || >=14.17 <15 || >=16.4 <17 || >=17" - }, - "peerDependencies": { - "@ava/typescript": "*" - }, - "peerDependenciesMeta": { - "@ava/typescript": { - "optional": true - } - } - }, - "node_modules/ava/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ava/node_modules/ansi-styles": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", - "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ava/node_modules/chalk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", - "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ava/node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/ava/node_modules/ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==" - }, - "node_modules/ava/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/ava/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/ava/node_modules/ignore-by-default": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-2.0.0.tgz", - "integrity": "sha512-+mQSgMRiFD3L3AOxLYOCxjIq4OnAmo5CIuC+lj5ehCJcPtV++QacEV7FdpzvYxH6DaOySWzQU6RR0lPLy37ckA==", - "engines": { - "node": ">=10 <11 || >=12 <13 || >=14" - } - }, - "node_modules/ava/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/ava/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==" - }, - "node_modules/ava/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/ava/node_modules/write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, - "node_modules/axios": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", - "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", - "dependencies": { - "follow-redirects": "^1.14.4" - } - }, - "node_modules/b64-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/b64-lite/-/b64-lite-1.4.0.tgz", - "integrity": "sha512-aHe97M7DXt+dkpa8fHlCcm1CnskAHrJqEfMI0KN7dwqlzml/aUe1AGt6lk51HzrSfVD67xOso84sOpr+0wIe2w==", - "dev": true, - "dependencies": { - "base-64": "^0.1.0" - } - }, - "node_modules/b64u-lite": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/b64u-lite/-/b64u-lite-1.1.0.tgz", - "integrity": "sha512-929qWGDVCRph7gQVTC6koHqQIpF4vtVaSbwLltFQo44B1bYUquALswZdBKFfrJCPEnsCOvWkJsPdQYZ/Ukhw8A==", - "dev": true, - "dependencies": { - "b64-lite": "^1.4.0" - } - }, - "node_modules/babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "dev": true, - "optional": true, - "peer": true, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", - "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", - "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.2", - "core-js-compat": "^3.31.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", - "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-syntax-trailing-function-commas": { - "version": "7.0.0-beta.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", - "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/babel-plugin-transform-flow-enums": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", - "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/plugin-syntax-flow": "^7.12.1" - } - }, - "node_modules/babel-preset-fbjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz", - "integrity": "sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-syntax-class-properties": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-block-scoped-functions": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-member-expression-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-object-super": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-property-literals": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/backoff": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", - "integrity": "sha1-9hbtqdPktmuMp/ynn2lXIsX44m8=", - "dev": true, - "dependencies": { - "precond": "0.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base-64": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", - "integrity": "sha1-eAqZyE59YAJgNhURxId2E78k9rs=", - "dev": true - }, - "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", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/bl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", - "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", - "dev": true, - "dependencies": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/blueimp-md5": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", - "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==" - }, - "node_modules/body-scroll-lock": { - "version": "4.0.0-beta.0", - "resolved": "https://registry.npmjs.org/body-scroll-lock/-/body-scroll-lock-4.0.0-beta.0.tgz", - "integrity": "sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ==", - "dev": true - }, - "node_modules/bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", - "dev": true - }, - "node_modules/boxen": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", - "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", - "dev": true, - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "cli-boxes": "^2.2.0", - "string-width": "^4.1.0", - "term-size": "^2.1.0", - "type-fest": "^0.8.1", - "widest-line": "^3.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "optional": true, - "peer": true, - "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/bson": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", - "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==", - "dev": true, - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/btoa": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", - "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", - "dev": true, - "bin": { - "btoa": "bin/btoa.js" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "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" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", - "dev": true - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/bytestreamjs": { - "version": "1.0.29", - "resolved": "https://registry.npmjs.org/bytestreamjs/-/bytestreamjs-1.0.29.tgz", - "integrity": "sha512-Mri3yqoo9YvdaSvD5OYl4Rdu9zCBJInW/Ez31sdlNY4ikMy//EvTTmidfLcs0e+NBvKVEpPzYvJAesjgMdjnZg==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "callsites": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-callsite/node_modules/callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "caller-callsite": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/callsites": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-4.0.0.tgz", - "integrity": "sha512-y3jRROutgpKdz5vzEhWM34TidDU8vkJppF8dszITeb1PQmSqV3DTxyV8G/lyO/DNvtE1YTedehmw9MPZsCBHxQ==", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001522", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001522.tgz", - "integrity": "sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "optional": true, - "peer": true - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "node_modules/cbor": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", - "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", - "dependencies": { - "nofilter": "^3.1.0" - }, - "engines": { - "node": ">=12.19" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chunkd": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/chunkd/-/chunkd-2.0.1.tgz", - "integrity": "sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==" - }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/ci-parallel-vars": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ci-parallel-vars/-/ci-parallel-vars-1.0.1.tgz", - "integrity": "sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==" - }, - "node_modules/clean": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/clean/-/clean-4.0.2.tgz", - "integrity": "sha1-yfAW9wonzB8aOfypW1BAR+S28VM=", - "dev": true, - "dependencies": { - "async": "^0.9.0", - "minimist": "^1.1.0", - "mix2": "^1.0.0", - "skema": "^1.0.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/clean-yaml-object": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz", - "integrity": "sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", - "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/cli-truncate/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/cli-truncate/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-deep/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - } - }, - "node_modules/code-excerpt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-4.0.0.tgz", - "integrity": "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==", - "dependencies": { - "convert-to-spaces": "^2.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", - "dev": true, - "optional": true, - "peer": true - }, - "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/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "optional": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==" - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", - "dev": true, - "optional": true - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/compression/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==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/concordance": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/concordance/-/concordance-5.0.4.tgz", - "integrity": "sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==", - "dependencies": { - "date-time": "^3.1.0", - "esutils": "^2.0.3", - "fast-diff": "^1.2.0", - "js-string-escape": "^1.0.1", - "lodash": "^4.17.15", - "md5-hex": "^3.0.1", - "semver": "^7.3.2", - "well-known-symbols": "^2.0.0" - }, - "engines": { - "node": ">=10.18.0 <11 || >=12.14.0 <13 || >=14" - } - }, - "node_modules/concordance/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/concordance/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/concordance/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/convert-to-spaces": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz", - "integrity": "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/core-decorators": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/core-decorators/-/core-decorators-0.20.0.tgz", - "integrity": "sha1-YFiWYkBTr4wo775zXCWjAaYcZcU=", - "dev": true - }, - "node_modules/core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", - "dev": true, - "hasInstallScript": true - }, - "node_modules/core-js-compat": { - "version": "3.32.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.1.tgz", - "integrity": "sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "browserslist": "^4.21.10" - }, - "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", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", - "dev": true, - "dependencies": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "node_modules/crypto-js": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz", - "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==", - "dev": true - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", - "dev": true - }, - "node_modules/currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dependencies": { - "array-find-index": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/date-time": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz", - "integrity": "sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==", - "dependencies": { - "time-zone": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/dayjs": { - "version": "1.11.9", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", - "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true - }, - "node_modules/del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/del/node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/del/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/del/node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/denodeify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", - "integrity": "sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/denque": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", - "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/deprecated-react-native-prop-types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-4.1.0.tgz", - "integrity": "sha512-WfepZHmRbbdTvhcolb8aOKEvQdcmTMn5tKLbqbXmkBvjFjRVWAYqsXk/DBsV8TZxws8SdGHLuHaJrHSQUPRdfw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@react-native/normalize-colors": "*", - "invariant": "*", - "prop-types": "*" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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 - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/electron-to-chromium": { - "version": "1.4.496", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.496.tgz", - "integrity": "sha512-qeXC3Zbykq44RCrBa4kr8v/dWzYJA8rAwpyh9Qd+NKWoJfjG5vvJqy9XOJ9H4P/lqulZBCgUWAYi+FeK5AuJ8g==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/emittery": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.1.tgz", - "integrity": "sha512-OBSS9uVXbpgqEGq2V5VnpfCu9vSnfiR9eYVJmxFYToNIcWRHkM4BAFbJe/PWjf/pQdEL7OPxd2jOW/bJiyX7gg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/envify": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/envify/-/envify-4.1.0.tgz", - "integrity": "sha512-IKRVVoAYr4pIx4yIWNsz9mOsboxlNXiu7TNBnem/K/uTHdkyzXWDzHCK7UTolqBbgaBz0tQHsD3YNls0uIIjiw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.0", - "through": "~2.3.4" - }, - "bin": { - "envify": "bin/envify" - } - }, - "node_modules/envinfo": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", - "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "stackframe": "^1.3.4" - } - }, - "node_modules/errorhandler": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", - "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "accepts": "~1.3.7", - "escape-html": "~1.0.3" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "dev": true - }, - "node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "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==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "optional": 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/execa/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/execa/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, - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/execa/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/exifr": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/exifr/-/exifr-5.0.6.tgz", - "integrity": "sha512-iDB4IhKoKVF+uDDrHRlyNxWqGaTxYluVWqvBWVG54HkQZe8qkFYl9eQrjEP3d8Q4UMBZ9rWu3Pa+mfC+o4CZuw==", - "dev": true - }, - "node_modules/expo-modules-autolinking": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.0.3.tgz", - "integrity": "sha512-azkCRYj/DxbK4udDuDxA9beYzQTwpJ5a9QA0bBgha2jHtWdFGF4ZZWSY+zNA5mtU3KqzYt8jWHfoqgSvKyu1Aw==", - "dev": true, - "optional": true, - "dependencies": { - "chalk": "^4.1.0", - "commander": "^7.2.0", - "fast-glob": "^3.2.5", - "find-up": "~5.0.0", - "fs-extra": "^9.1.0" - }, - "bin": { - "expo-modules-autolinking": "bin/expo-modules-autolinking.js" - } - }, - "node_modules/expo-random": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-11.2.0.tgz", - "integrity": "sha512-kgBJBB02iCX/kpoTHN57V7b4hWOCj4eACIQDl7bN94lycUcZu62T00P/rVZIcE/29x0GAi+Pw5ZWj0NlqBsMQQ==", - "dev": true, - "optional": true, - "dependencies": { - "base64-js": "^1.3.0" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" - }, - "node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "optional": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-xml-parser": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.7.tgz", - "integrity": "sha512-J8r6BriSLO1uj2miOk1NW0YVm8AGOOu3Si2HQp/cSmo6EA4m3fcwu2WKjJ4RK9wMLBtg69y1kS8baDiQBR41Ig==", - "dev": true, - "funding": [ - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - }, - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "optional": true, - "peer": true, - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/figures": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-4.0.0.tgz", - "integrity": "sha512-VnYcWq6H6F0qDN0QnorznBr0abEovifzUokmnezpKZBUbDmbLAt7LMryOp1TKFVxLxyNYkxEkCEADZR58U9oSw==", - "dependencies": { - "escape-string-regexp": "^5.0.0", - "is-unicode-supported": "^1.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/file-type": { - "version": "16.5.3", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.3.tgz", - "integrity": "sha512-uVsl7iFhHSOY4bEONLlTK47iAHtNsFHWP5YE4xJfZ4rnX7S1Q3wce09XgqSC7E/xh8Ncv/be1lNoyprlUH/x6A==", - "dev": 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/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-root": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-0.1.2.tgz", - "integrity": "sha1-mNImfP8ZFsyvJ0OzoO6oHXnX3NE=", - "dev": true - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "optional": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flow-enums-runtime": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/flow-enums-runtime/-/flow-enums-runtime-0.0.5.tgz", - "integrity": "sha512-PSZF9ZuaZD03sT9YaIs0FrGJ7lSUw7rHZIex+73UYVXg46eL/wxN5PaVcPJFudE2cJu5f0fezitV5aBkLHPUOQ==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/flow-parser": { - "version": "0.206.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.206.0.tgz", - "integrity": "sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/focus-trap": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.2.tgz", - "integrity": "sha512-p6vGNNWLDGwJCiEjkSK6oERj/hEyI9ITsSwIUICBoKLlWiTWXJRfQibCwcoi50rTZdbi87qDtUlMCmQwsGSgPw==", - "dev": true, - "dependencies": { - "tabbable": "^6.2.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.14.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", - "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "optional": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "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, - "dependencies": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "node_modules/global-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", - "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", - "dev": true, - "dependencies": { - "ini": "1.3.7" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.1.tgz", - "integrity": "sha512-XMzoDZbGZ37tufiv7g0N4F/zp3zkwdFtVbV3EHsVl1KQr4RPLfNoT068/97RPshz2J5xYNEjLKKBKaGHifBd3Q==", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby/node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/globby/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gm": { - "version": "1.23.1", - "resolved": "https://registry.npmjs.org/gm/-/gm-1.23.1.tgz", - "integrity": "sha1-Lt7rlYCE0PjqeYjl2ZWxx9/BR3c=", - "dev": true, - "dependencies": { - "array-parallel": "~0.1.3", - "array-series": "~0.1.5", - "cross-spawn": "^4.0.0", - "debug": "^3.1.0" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dev": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/hermes-estree": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.12.0.tgz", - "integrity": "sha512-+e8xR6SCen0wyAKrMT3UD0ZCCLymKhRgjEB5sS28rKiFir/fXgLoeRilRUssFCILmGHb+OvHDUlhxs0+IEyvQw==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/hermes-parser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.12.0.tgz", - "integrity": "sha512-d4PHnwq6SnDLhYl3LHNHvOg7nQ6rcI7QVil418REYksv0Mh3cEkHDcuhGxNQ3vgnLSLl4QSvDrFCwQNYdpWlzw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "hermes-estree": "0.12.0" - } - }, - "node_modules/hermes-profile-transformer": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz", - "integrity": "sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/hermes-profile-transformer/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, - "optional": true, - "peer": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "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" - } - ] - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true - }, - "node_modules/image-size": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", - "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", - "dev": true - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "optional": true, - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/irregular-plurals": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.3.0.tgz", - "integrity": "sha512-MVBLKUTangM3EfRPFROhmWQQKRDsrgI83J8GS3jXy+OwYqiR2/aoWndYQ5416jLE3uaGgLH7ncme3X9y09gZ3g==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-error": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-error/-/is-error-2.2.2.tgz", - "integrity": "sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg==" - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "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 - }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-installed-globally": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", - "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", - "dev": true, - "dependencies": { - "global-dirs": "^2.0.1", - "is-path-inside": "^3.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-npm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", - "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" - }, - "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, - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "node_modules/is-unicode-supported": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.2.0.tgz", - "integrity": "sha512-wH+U77omcRzevfIG8dDhTS0V9zZyweakfD01FULl97+0EHiJTTZtJqxPSkIIo/SDPv/i07k/C9jAPY+jwLLeUQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isomorphic-webcrypto": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/isomorphic-webcrypto/-/isomorphic-webcrypto-2.3.8.tgz", - "integrity": "sha512-XddQSI0WYlSCjxtm1AI8kWQOulf7hAN3k3DclF1sxDJZqOe0pcsOt675zvWW91cZH9hYs3nlA3Ev8QK5i80SxQ==", - "dev": true, - "dependencies": { - "@peculiar/webcrypto": "^1.0.22", - "asmcrypto.js": "^0.22.0", - "b64-lite": "^1.3.1", - "b64u-lite": "^1.0.1", - "msrcrypto": "^1.5.6", - "str2buf": "^1.3.0", - "webcrypto-shim": "^0.1.4" - }, - "optionalDependencies": { - "@unimodules/core": "*", - "@unimodules/react-native-adapter": "*", - "expo-random": "*", - "react-native-securerandom": "^0.1.1" - } - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "node_modules/javascript-state-machine": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/javascript-state-machine/-/javascript-state-machine-3.1.0.tgz", - "integrity": "sha512-BwhYxQ1OPenBPXC735RgfB+ZUG8H3kjsx8hrYTgWnoy6TPipEy4fiicyhT2lxRKAXq9pG7CfFT8a2HLr6Hmwxg==", - "dev": true - }, - "node_modules/jest-environment-node": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.2.tgz", - "integrity": "sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/environment": "^29.6.2", - "@jest/fake-timers": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "jest-mock": "^29.6.2", - "jest-util": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.2.tgz", - "integrity": "sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/pretty-format": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", - "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/schemas": "^29.6.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util/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==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/jest-mock": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.2.tgz", - "integrity": "sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/types": "^29.6.1", - "@types/node": "*", - "jest-util": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-util": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.2.tgz", - "integrity": "sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/types": "^29.6.1", - "@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.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.2.tgz", - "integrity": "sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/types": "^29.6.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "leven": "^3.1.0", - "pretty-format": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-validate/node_modules/pretty-format": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", - "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/schemas": "^29.6.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/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==", - "dev": true, - "optional": true, - "peer": true - }, - "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, - "optional": true, - "peer": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/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, - "optional": true, - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/joi": { - "version": "17.9.2", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.9.2.tgz", - "integrity": "sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/js-string-escape": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", - "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "optional": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "node_modules/jsc-android": { - "version": "250231.0.0", - "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-250231.0.0.tgz", - "integrity": "sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/jsc-safe-url": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz", - "integrity": "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/jscodeshift": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", - "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.13.16", - "@babel/parser": "^7.13.16", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", - "@babel/preset-flow": "^7.13.13", - "@babel/preset-typescript": "^7.13.0", - "@babel/register": "^7.13.16", - "babel-core": "^7.0.0-bridge.0", - "chalk": "^4.1.2", - "flow-parser": "0.*", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "neo-async": "^2.5.0", - "node-dir": "^0.1.17", - "recast": "^0.21.0", - "temp": "^0.8.4", - "write-file-atomic": "^2.3.0" - }, - "bin": { - "jscodeshift": "bin/jscodeshift.js" - }, - "peerDependencies": { - "@babel/preset-env": "^7.1.6" - } - }, - "node_modules/jscodeshift/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "optional": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", - "dev": true, - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=4", - "npm": ">=1.4.28" - } - }, - "node_modules/jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dev": true, - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dev": true, - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/key-tree-store": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/key-tree-store/-/key-tree-store-1.3.0.tgz", - "integrity": "sha1-XqKa/CUppCWThDfWlVtxTOapeR8=", - "dev": true - }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dev": true, - "dependencies": { - "package-json": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/load-json-file": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-7.0.1.tgz", - "integrity": "sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "optional": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash._arraycopy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz", - "integrity": "sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE=", - "dev": true - }, - "node_modules/lodash._arrayeach": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz", - "integrity": "sha1-urFWsqkNPxu9XGU0AzSeXlkz754=", - "dev": true - }, - "node_modules/lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "dev": true, - "dependencies": { - "lodash._basecopy": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "node_modules/lodash._baseclone": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz", - "integrity": "sha1-MDUZv2OT/n5C802LYw73eU41Qrc=", - "dev": true, - "dependencies": { - "lodash._arraycopy": "^3.0.0", - "lodash._arrayeach": "^3.0.0", - "lodash._baseassign": "^3.0.0", - "lodash._basefor": "^3.0.0", - "lodash.isarray": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "node_modules/lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "node_modules/lodash._basefor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz", - "integrity": "sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI=", - "dev": true - }, - "node_modules/lodash._bindcallback": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", - "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", - "dev": true - }, - "node_modules/lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "node_modules/lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true - }, - "node_modules/lodash.clone": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-3.0.3.tgz", - "integrity": "sha1-hGiMc9MrWpDKJWFpY/GJJSqZcEM=", - "dev": true, - "dependencies": { - "lodash._baseclone": "^3.0.0", - "lodash._bindcallback": "^3.0.0", - "lodash._isiterateecall": "^3.0.0" - } - }, - "node_modules/lodash.clonedeep": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz", - "integrity": "sha1-oKHkDYKl6on/WxR7hETtY9koJ9s=", - "dev": true, - "dependencies": { - "lodash._baseclone": "^3.0.0", - "lodash._bindcallback": "^3.0.0" - } - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=", - "dev": true - }, - "node_modules/lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "node_modules/lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=", - "dev": true - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=", - "dev": true - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=", - "dev": true - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", - "dev": true - }, - "node_modules/lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "dependencies": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", - "dev": true - }, - "node_modules/lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/logkitty": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", - "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ansi-fragments": "^0.2.1", - "dayjs": "^1.8.15", - "yargs": "^15.1.0" - }, - "bin": { - "logkitty": "bin/logkitty.js" - } - }, - "node_modules/logkitty/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/logkitty/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/logkitty/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/logkitty/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/logkitty/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/logkitty/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/logkitty/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/logkitty/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/logkitty/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", - "dev": true - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "optional": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/magic-string": { - "version": "0.30.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.2.tgz", - "integrity": "sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/make-array": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/make-array/-/make-array-0.1.2.tgz", - "integrity": "sha1-M14267DFpDFU0hIToeyuriobs+8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dependencies": { - "p-defer": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mark.js": { - "version": "8.11.1", - "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", - "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", - "dev": true - }, - "node_modules/matcher": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-5.0.0.tgz", - "integrity": "sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==", - "dependencies": { - "escape-string-regexp": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/md5-hex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-3.0.1.tgz", - "integrity": "sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==", - "dependencies": { - "blueimp-md5": "^2.10.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mem": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/mem/-/mem-9.0.2.tgz", - "integrity": "sha512-F2t4YIv9XQUBHt6AOJ0y7lSmP1+cY7Fm1DRh9GClTGzKST7UWLMx6ly9WZdLH/G/ppM5RL4MlQfRT71ri9t19A==", - "dependencies": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sindresorhus/mem?sponsor=1" - } - }, - "node_modules/memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/memory-pager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "dev": true, - "optional": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/metro": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.76.7.tgz", - "integrity": "sha512-67ZGwDeumEPnrHI+pEDSKH2cx+C81Gx8Mn5qOtmGUPm/Up9Y4I1H2dJZ5n17MWzejNo0XAvPh0QL0CrlJEODVQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.0", - "@babel/parser": "^7.20.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.20.0", - "@babel/types": "^7.20.0", - "accepts": "^1.3.7", - "async": "^3.2.2", - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "connect": "^3.6.5", - "debug": "^2.2.0", - "denodeify": "^1.2.1", - "error-stack-parser": "^2.0.6", - "graceful-fs": "^4.2.4", - "hermes-parser": "0.12.0", - "image-size": "^1.0.2", - "invariant": "^2.2.4", - "jest-worker": "^27.2.0", - "jsc-safe-url": "^0.2.2", - "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.76.7", - "metro-cache": "0.76.7", - "metro-cache-key": "0.76.7", - "metro-config": "0.76.7", - "metro-core": "0.76.7", - "metro-file-map": "0.76.7", - "metro-inspector-proxy": "0.76.7", - "metro-minify-terser": "0.76.7", - "metro-minify-uglify": "0.76.7", - "metro-react-native-babel-preset": "0.76.7", - "metro-resolver": "0.76.7", - "metro-runtime": "0.76.7", - "metro-source-map": "0.76.7", - "metro-symbolicate": "0.76.7", - "metro-transform-plugins": "0.76.7", - "metro-transform-worker": "0.76.7", - "mime-types": "^2.1.27", - "node-fetch": "^2.2.0", - "nullthrows": "^1.1.1", - "rimraf": "^3.0.2", - "serialize-error": "^2.1.0", - "source-map": "^0.5.6", - "strip-ansi": "^6.0.0", - "throat": "^5.0.0", - "ws": "^7.5.1", - "yargs": "^17.6.2" - }, - "bin": { - "metro": "src/cli.js" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-babel-transformer": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.76.7.tgz", - "integrity": "sha512-bgr2OFn0J4r0qoZcHrwEvccF7g9k3wdgTOgk6gmGHrtlZ1Jn3oCpklW/DfZ9PzHfjY2mQammKTc19g/EFGyOJw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.20.0", - "hermes-parser": "0.12.0", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-cache": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.76.7.tgz", - "integrity": "sha512-nWBMztrs5RuSxZRI7hgFgob5PhYDmxICh9FF8anm9/ito0u0vpPvRxt7sRu8fyeD2AHdXqE7kX32rWY0LiXgeg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "metro-core": "0.76.7", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-cache-key": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.76.7.tgz", - "integrity": "sha512-0pecoIzwsD/Whn/Qfa+SDMX2YyasV0ndbcgUFx7w1Ct2sLHClujdhQ4ik6mvQmsaOcnGkIyN0zcceMDjC2+BFQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-config": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.76.7.tgz", - "integrity": "sha512-CFDyNb9bqxZemiChC/gNdXZ7OQkIwmXzkrEXivcXGbgzlt/b2juCv555GWJHyZSlorwnwJfY3uzAFu4A9iRVfg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "connect": "^3.6.5", - "cosmiconfig": "^5.0.5", - "jest-validate": "^29.2.1", - "metro": "0.76.7", - "metro-cache": "0.76.7", - "metro-core": "0.76.7", - "metro-runtime": "0.76.7" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-config/node_modules/metro-runtime": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.76.7.tgz", - "integrity": "sha512-MuWHubQHymUWBpZLwuKZQgA/qbb35WnDAKPo83rk7JRLIFPvzXSvFaC18voPuzJBt1V98lKQIonh6MiC9gd8Ug==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.0.0", - "react-refresh": "^0.4.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-core": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.76.7.tgz", - "integrity": "sha512-0b8KfrwPmwCMW+1V7ZQPkTy2tsEKZjYG9Pu1PTsu463Z9fxX7WaR0fcHFshv+J1CnQSUTwIGGjbNvj1teKe+pw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "lodash.throttle": "^4.1.1", - "metro-resolver": "0.76.7" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-file-map": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.76.7.tgz", - "integrity": "sha512-s+zEkTcJ4mOJTgEE2ht4jIo1DZfeWreQR3tpT3gDV/Y/0UQ8aJBTv62dE775z0GLsWZApiblAYZsj7ZE8P06nw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "anymatch": "^3.0.3", - "debug": "^2.2.0", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "invariant": "^2.2.4", - "jest-regex-util": "^27.0.6", - "jest-util": "^27.2.0", - "jest-worker": "^27.2.0", - "micromatch": "^4.0.4", - "node-abort-controller": "^3.1.1", - "nullthrows": "^1.1.1", - "walker": "^1.0.7" - }, - "engines": { - "node": ">=16" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/metro-file-map/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/metro-file-map/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/metro-file-map/node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/metro-file-map/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/metro-file-map/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/metro-file-map/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/metro-inspector-proxy": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.76.7.tgz", - "integrity": "sha512-rNZ/6edTl/1qUekAhAbaFjczMphM50/UjtxiKulo6vqvgn/Mjd9hVqDvVYfAMZXqPvlusD88n38UjVYPkruLSg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "connect": "^3.6.5", - "debug": "^2.2.0", - "node-fetch": "^2.2.0", - "ws": "^7.5.1", - "yargs": "^17.6.2" - }, - "bin": { - "metro-inspector-proxy": "src/cli.js" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-inspector-proxy/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/metro-inspector-proxy/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/metro-inspector-proxy/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/metro-minify-terser": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.76.7.tgz", - "integrity": "sha512-FQiZGhIxCzhDwK4LxyPMLlq0Tsmla10X7BfNGlYFK0A5IsaVKNJbETyTzhpIwc+YFRT4GkFFwgo0V2N5vxO5HA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "terser": "^5.15.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-minify-uglify": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.76.7.tgz", - "integrity": "sha512-FuXIU3j2uNcSvQtPrAJjYWHruPiQ+EpE++J9Z+VznQKEHcIxMMoQZAfIF2IpZSrZYfLOjVFyGMvj41jQMxV1Vw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "uglify-es": "^3.1.9" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-react-native-babel-preset": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.76.7.tgz", - "integrity": "sha512-R25wq+VOSorAK3hc07NW0SmN8z9S/IR0Us0oGAsBcMZnsgkbOxu77Mduqf+f4is/wnWHc5+9bfiqdLnaMngiVw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.20.0", - "@babel/plugin-proposal-async-generator-functions": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.18.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", - "@babel/plugin-proposal-numeric-separator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.20.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.18.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-async-to-generator": "^7.20.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.20.0", - "@babel/plugin-transform-flow-strip-types": "^7.20.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "babel-plugin-transform-flow-enums": "^0.0.2", - "react-refresh": "^0.4.0" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/metro-react-native-babel-transformer": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.76.7.tgz", - "integrity": "sha512-W6lW3J7y/05ph3c2p3KKJNhH0IdyxdOCbQ5it7aM2MAl0SM4wgKjaV6EYv9b3rHklpV6K3qMH37UKVcjMooWiA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.20.0", - "babel-preset-fbjs": "^3.4.0", - "hermes-parser": "0.12.0", - "metro-react-native-babel-preset": "0.76.7", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/metro-resolver": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.76.7.tgz", - "integrity": "sha512-pC0Wgq29HHIHrwz23xxiNgylhI8Rq1V01kQaJ9Kz11zWrIdlrH0ZdnJ7GC6qA0ErROG+cXmJ0rJb8/SW1Zp2IA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-runtime": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.76.8.tgz", - "integrity": "sha512-XKahvB+iuYJSCr3QqCpROli4B4zASAYpkK+j3a0CJmokxCDNbgyI4Fp88uIL6rNaZfN0Mv35S0b99SdFXIfHjg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.0.0", - "react-refresh": "^0.4.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-source-map": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.76.8.tgz", - "integrity": "sha512-Hh0ncPsHPVf6wXQSqJqB3K9Zbudht4aUtNpNXYXSxH+pteWqGAXnjtPsRAnCsCWl38wL0jYF0rJDdMajUI3BDw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/traverse": "^7.20.0", - "@babel/types": "^7.20.0", - "invariant": "^2.2.4", - "metro-symbolicate": "0.76.8", - "nullthrows": "^1.1.1", - "ob1": "0.76.8", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-source-map/node_modules/metro-symbolicate": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.76.8.tgz", - "integrity": "sha512-LrRL3uy2VkzrIXVlxoPtqb40J6Bf1mlPNmUQewipc3qfKKFgtPHBackqDy1YL0njDsWopCKcfGtFYLn0PTUn3w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "invariant": "^2.2.4", - "metro-source-map": "0.76.8", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "through2": "^2.0.1", - "vlq": "^1.0.0" - }, - "bin": { - "metro-symbolicate": "src/index.js" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-source-map/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/metro-source-map/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/metro-symbolicate": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.76.7.tgz", - "integrity": "sha512-p0zWEME5qLSL1bJb93iq+zt5fz3sfVn9xFYzca1TJIpY5MommEaS64Va87lp56O0sfEIvh4307Oaf/ZzRjuLiQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "invariant": "^2.2.4", - "metro-source-map": "0.76.7", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "through2": "^2.0.1", - "vlq": "^1.0.0" - }, - "bin": { - "metro-symbolicate": "src/index.js" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-symbolicate/node_modules/metro-source-map": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.76.7.tgz", - "integrity": "sha512-Prhx7PeRV1LuogT0Kn5VjCuFu9fVD68eefntdWabrksmNY6mXK8pRqzvNJOhTojh6nek+RxBzZeD6MIOOyXS6w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/traverse": "^7.20.0", - "@babel/types": "^7.20.0", - "invariant": "^2.2.4", - "metro-symbolicate": "0.76.7", - "nullthrows": "^1.1.1", - "ob1": "0.76.7", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-symbolicate/node_modules/ob1": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.76.7.tgz", - "integrity": "sha512-BQdRtxxoUNfSoZxqeBGOyuT9nEYSn18xZHwGMb0mMVpn2NBcYbnyKY4BK2LIHRgw33CBGlUmE+KMaNvyTpLLtQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-symbolicate/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/metro-symbolicate/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/metro-transform-plugins": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.76.7.tgz", - "integrity": "sha512-iSmnjVApbdivjuzb88Orb0JHvcEt5veVyFAzxiS5h0QB+zV79w6JCSqZlHCrbNOkOKBED//LqtKbFVakxllnNg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.20.0", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-transform-worker": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.76.7.tgz", - "integrity": "sha512-cGvELqFMVk9XTC15CMVzrCzcO6sO1lURfcbgjuuPdzaWuD11eEyocvkTX0DPiRjsvgAmicz4XYxVzgYl3MykDw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.0", - "@babel/parser": "^7.20.0", - "@babel/types": "^7.20.0", - "babel-preset-fbjs": "^3.4.0", - "metro": "0.76.7", - "metro-babel-transformer": "0.76.7", - "metro-cache": "0.76.7", - "metro-cache-key": "0.76.7", - "metro-source-map": "0.76.7", - "metro-transform-plugins": "0.76.7", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-transform-worker/node_modules/metro-source-map": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.76.7.tgz", - "integrity": "sha512-Prhx7PeRV1LuogT0Kn5VjCuFu9fVD68eefntdWabrksmNY6mXK8pRqzvNJOhTojh6nek+RxBzZeD6MIOOyXS6w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/traverse": "^7.20.0", - "@babel/types": "^7.20.0", - "invariant": "^2.2.4", - "metro-symbolicate": "0.76.7", - "nullthrows": "^1.1.1", - "ob1": "0.76.7", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-transform-worker/node_modules/ob1": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.76.7.tgz", - "integrity": "sha512-BQdRtxxoUNfSoZxqeBGOyuT9nEYSn18xZHwGMb0mMVpn2NBcYbnyKY4BK2LIHRgw33CBGlUmE+KMaNvyTpLLtQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-transform-worker/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/metro/node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/metro/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/metro/node_modules/metro-runtime": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.76.7.tgz", - "integrity": "sha512-MuWHubQHymUWBpZLwuKZQgA/qbb35WnDAKPo83rk7JRLIFPvzXSvFaC18voPuzJBt1V98lKQIonh6MiC9gd8Ug==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.0.0", - "react-refresh": "^0.4.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro/node_modules/metro-source-map": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.76.7.tgz", - "integrity": "sha512-Prhx7PeRV1LuogT0Kn5VjCuFu9fVD68eefntdWabrksmNY6mXK8pRqzvNJOhTojh6nek+RxBzZeD6MIOOyXS6w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/traverse": "^7.20.0", - "@babel/types": "^7.20.0", - "invariant": "^2.2.4", - "metro-symbolicate": "0.76.7", - "nullthrows": "^1.1.1", - "ob1": "0.76.7", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/metro/node_modules/ob1": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.76.7.tgz", - "integrity": "sha512-BQdRtxxoUNfSoZxqeBGOyuT9nEYSn18xZHwGMb0mMVpn2NBcYbnyKY4BK2LIHRgw33CBGlUmE+KMaNvyTpLLtQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro/node_modules/serialize-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", - "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/metro/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/metro/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "dev": true, - "dependencies": { - "dom-walk": "^0.1.0" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minisearch": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-6.1.0.tgz", - "integrity": "sha512-PNxA/X8pWk+TiqPbsoIYH0GQ5Di7m6326/lwU/S4mlo4wGQddIcf/V//1f9TB0V4j59b57b+HZxt8h3iMROGvg==", - "dev": true - }, - "node_modules/mix2": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/mix2/-/mix2-1.0.5.tgz", - "integrity": "sha512-ybWz7nY+WHBBIyliND5eYaJKzkoa+qXRYNTmVqAxSLlFtL/umT2iv+pmyTu1oU7WNkrirwheqR8d9EaKVz0e5g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/mongodb": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.1.tgz", - "integrity": "sha512-iSVgexYr8ID0ieeNFUbRfQeOZxOchRck6kEDVySQRaa8VIw/1Pm+/LgcpZcl/BWV6nT0L8lP9qyl7dRPJ6mnLw==", - "dev": true, - "dependencies": { - "bl": "^2.2.1", - "bson": "^1.1.4", - "denque": "^1.4.1", - "optional-require": "^1.0.3", - "safe-buffer": "^5.1.2" - }, - "engines": { - "node": ">=4" - }, - "optionalDependencies": { - "saslprep": "^1.0.0" - }, - "peerDependenciesMeta": { - "aws4": { - "optional": true - }, - "bson-ext": { - "optional": true - }, - "kerberos": { - "optional": true - }, - "mongodb-client-encryption": { - "optional": true - }, - "mongodb-extjson": { - "optional": true - }, - "snappy": { - "optional": true - } - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/msrcrypto": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/msrcrypto/-/msrcrypto-1.5.8.tgz", - "integrity": "sha512-ujZ0TRuozHKKm6eGbKHfXef7f+esIhEckmThVnz7RNyiOJd7a6MXj2JGBoL9cnPDW+JMG16MoTUh5X+XXjI66Q==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/nocache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/nocache/-/nocache-3.0.4.tgz", - "integrity": "sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/node-abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "minimatch": "^3.0.2" - }, - "engines": { - "node": ">= 0.10.5" - } - }, - "node_modules/node-fetch": { - "version": "2.6.13", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.13.tgz", - "integrity": "sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "dev": true, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/node-jose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/node-jose/-/node-jose-2.0.0.tgz", - "integrity": "sha512-j8zoFze1gijl8+DK/dSXXqX7+o2lMYv1XS+ptnXgGV/eloQaqq1YjNtieepbKs9jBS4WTnMOqyKSaQuunJzx0A==", - "dev": true, - "dependencies": { - "base64url": "^3.0.1", - "buffer": "^5.5.0", - "es6-promise": "^4.2.8", - "lodash": "^4.17.15", - "long": "^4.0.0", - "node-forge": "^0.10.0", - "pako": "^1.0.11", - "process": "^0.11.10", - "uuid": "^3.3.3" - } - }, - "node_modules/node-kms": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-kms/-/node-kms-0.4.0.tgz", - "integrity": "sha512-Tvhs7XTvBgWLZUrAeLKDqzvlomaZWwMoIXWImMc/IbvTijLoOrkovZo+PeW0ivf/8fBlg5EihPCwKg/dy9r+sA==", - "dev": true, - "dependencies": { - "es6-promise": "^2.0.1", - "lodash.clone": "^3.0.2", - "lodash.clonedeep": "^3.0.1", - "node-jose": "^2.0.0", - "uuid": "^2.0.1" - } - }, - "node_modules/node-kms/node_modules/es6-promise": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz", - "integrity": "sha1-lu258v2wGZWCKyY92KratnSBgbw=", - "dev": true - }, - "node_modules/node-kms/node_modules/uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/node-scr": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/node-scr/-/node-scr-0.3.0.tgz", - "integrity": "sha512-Hb0ykojynSbt7ra6eml6NX39WAumFfU3G81XvLpp2H7y8KjQc29oEIf2TlgZQCfA+pyxbY5t4a1xBqPpyrbpvw==", - "dev": true, - "dependencies": { - "es6-promise": "^2.0.1", - "lodash.clone": "^3.0.2", - "node-jose": "^2.0.0" - } - }, - "node_modules/node-scr/node_modules/es6-promise": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz", - "integrity": "sha1-lu258v2wGZWCKyY92KratnSBgbw=", - "dev": true - }, - "node_modules/node-stream-zip": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", - "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.12.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/antelle" - } - }, - "node_modules/nodemon": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.12.tgz", - "integrity": "sha512-egCTmNZdObdBxUBw6ZNwvZ/xzk24CKRs5K6d+5zbmrMr7rOpPmfPeF6OxM3DDpaRx331CQRFEktn+wrFFfBSOA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "chokidar": "^3.2.2", - "debug": "^3.2.6", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.7", - "semver": "^5.7.1", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.3", - "update-notifier": "^4.1.0" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/nodemon/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/nofilter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", - "engines": { - "node": ">=12.19" - } - }, - "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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, - "optional": true, - "peer": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nullthrows": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", - "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/ob1": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.76.8.tgz", - "integrity": "sha512-dlBkJJV5M/msj9KYA9upc+nUWVwuOFFTbu28X6kZeGwcuW+JxaHSBZ70SYQnk5M+j5JbNLR6yKHmgW4M5E7X5g==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/onetime/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/open": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", - "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/optional-require": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.1.7.tgz", - "integrity": "sha512-cIeRZocXsZnZYn+SevbtSqNlLbeoS4mLzuNn4fvXRMDRNhTGg0sxuKXl0FnZCtnew85LorNxIbZp5OeliILhMw==", - "dev": true, - "dependencies": { - "require-at": "^1.0.6" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/ora/node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/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, - "optional": true, - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-event": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-5.0.1.tgz", - "integrity": "sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==", - "dependencies": { - "p-timeout": "^5.0.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "optional": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "optional": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.3.0.tgz", - "integrity": "sha512-SRbIQFoLYNezHkqZslqeg963HYUtqOrfMCxjNrFOpJ19WTYuq26rQoOXeX8QQiMLUlLqdYV/7PuDsdYJ7hLE1w==", - "dependencies": { - "aggregate-error": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map/node_modules/aggregate-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.0.tgz", - "integrity": "sha512-8DGp7zUt1E9k0NE2q4jlXHk+V3ORErmwolEdRz9iV+LKJ40WhMHh92cxAvhqV2I+zEn/gotIoqoMs0NjF3xofg==", - "dependencies": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map/node_modules/clean-stack": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.1.0.tgz", - "integrity": "sha512-dxXQYI7mfQVcaF12s6sjNFoZ6ZPDQuBBLp3QJ5156k9EvUFClUoZ11fo8HnLQO241DDVntHEug8MOuFO5PSfRg==", - "dependencies": { - "escape-string-regexp": "5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-timeout": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.0.2.tgz", - "integrity": "sha512-sEmji9Yaq+Tw+STwsGAE56hf7gMy9p0tQfJojIAamB7WHJYJKf1qlsg9jqBWG8q9VCxKPhZaP/AcXwEoBcYQhQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, - "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/package-json/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "node_modules/parse-headers": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz", - "integrity": "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw==", - "dev": true - }, - "node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/parse-ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", - "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/peek-readable": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.0.1.tgz", - "integrity": "sha512-7qmhptnR0WMSpxT5rMHG9bW/mYSR1uqaPFj2MHvT+y/aOUu6msJijpKt5SkTDKySwg65OWG2JwTMBlgcbwMHrQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-conf": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-4.0.0.tgz", - "integrity": "sha512-7dmgi4UY4qk+4mj5Cd8v/GExPo0K+SlY+hulOSdfZ/T6jVH6//y7NtzZo5WrfhDBxuQ0jCa7fLZmNaNh7EWL/w==", - "dependencies": { - "find-up": "^6.0.0", - "load-json-file": "^7.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-conf/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-conf/node_modules/locate-path": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.1.0.tgz", - "integrity": "sha512-HNx5uOnYeK4SxEoid5qnhRfprlJeGMzFRKPLCf/15N3/B4AiofNwC/yq7VBKdVk9dx7m+PiYCJOGg55JYTAqoQ==", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-conf/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-conf/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-conf/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/pkg-conf/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkijs": { - "version": "2.1.97", - "resolved": "https://registry.npmjs.org/pkijs/-/pkijs-2.1.97.tgz", - "integrity": "sha512-g/I8u//tvIYBsoIwZ9lV5U1KBqkZqsCHydv50/RN/Va8FF+jJFT4goC8oX/2Uc1TpEFeWkmpYgutk4ONiB2t9g==", - "dev": true, - "dependencies": { - "asn1js": "^2.1.1", - "bytestreamjs": "^1.0.29", - "pvutils": "^1.0.17" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/plur": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/plur/-/plur-5.1.0.tgz", - "integrity": "sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==", - "dependencies": { - "irregular-plurals": "^3.3.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/postcss": { - "version": "8.4.28", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz", - "integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/preact": { - "version": "10.17.1", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.17.1.tgz", - "integrity": "sha512-X9BODrvQ4Ekwv9GURm9AKAGaomqXmip7NQTZgY7gcNmr7XE83adOMJvd3N42id1tMFU7ojiynRsYnY6/BRFxLA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/preact" - } - }, - "node_modules/precond": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", - "integrity": "sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/pretty-format/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/pretty-format/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/pretty-ms": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", - "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", - "dependencies": { - "parse-ms": "^2.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - }, - "node_modules/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, - "dependencies": { - "escape-goat": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pvtsutils": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.2.0.tgz", - "integrity": "sha512-IDefMJEQl7HX0FP2hIKJFnAR11klP1js2ixCrOaMhe3kXFK6RQ2ABUCuwWaaD4ib0hSbh2fGTICvWJJhDfNecA==", - "dev": true, - "dependencies": { - "tslib": "^2.2.0" - } - }, - "node_modules/pvutils": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.0.17.tgz", - "integrity": "sha512-wLHYUQxWaXVQvKnwIDWFVKDJku9XDCvyhhxoq8dc5MFdIlRenyPI9eSfEtcvgHgD7FlvCyGAlWgOzRnZD99GZQ==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "inherits": "~2.0.3" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-devtools-core": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.28.0.tgz", - "integrity": "sha512-E3C3X1skWBdBzwpOUbmXG8SgH6BtsluSMe+s6rRcujNKG1DGi8uIfhdhszkgDpAsMoE55hwqRUzeXCmETDBpTg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "shell-quote": "^1.6.1", - "ws": "^7" - } - }, - "node_modules/react-devtools-core/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/react-native": { - "version": "0.72.4", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.72.4.tgz", - "integrity": "sha512-+vrObi0wZR+NeqL09KihAAdVlQ9IdplwznJWtYrjnQ4UbCW6rkzZJebRsugwUneSOKNFaHFEo1uKU89HsgtYBg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/create-cache-key-function": "^29.2.1", - "@react-native-community/cli": "11.3.6", - "@react-native-community/cli-platform-android": "11.3.6", - "@react-native-community/cli-platform-ios": "11.3.6", - "@react-native/assets-registry": "^0.72.0", - "@react-native/codegen": "^0.72.6", - "@react-native/gradle-plugin": "^0.72.11", - "@react-native/js-polyfills": "^0.72.1", - "@react-native/normalize-colors": "^0.72.0", - "@react-native/virtualized-lists": "^0.72.8", - "abort-controller": "^3.0.0", - "anser": "^1.4.9", - "base64-js": "^1.1.2", - "deprecated-react-native-prop-types": "4.1.0", - "event-target-shim": "^5.0.1", - "flow-enums-runtime": "^0.0.5", - "invariant": "^2.2.4", - "jest-environment-node": "^29.2.1", - "jsc-android": "^250231.0.0", - "memoize-one": "^5.0.0", - "metro-runtime": "0.76.8", - "metro-source-map": "0.76.8", - "mkdirp": "^0.5.1", - "nullthrows": "^1.1.1", - "pretty-format": "^26.5.2", - "promise": "^8.3.0", - "react-devtools-core": "^4.27.2", - "react-refresh": "^0.4.0", - "react-shallow-renderer": "^16.15.0", - "regenerator-runtime": "^0.13.2", - "scheduler": "0.24.0-canary-efb381bbf-20230505", - "stacktrace-parser": "^0.1.10", - "use-sync-external-store": "^1.0.0", - "whatwg-fetch": "^3.0.0", - "ws": "^6.2.2", - "yargs": "^17.6.2" - }, - "bin": { - "react-native": "cli.js" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "react": "18.2.0" - } - }, - "node_modules/react-native-securerandom": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/react-native-securerandom/-/react-native-securerandom-0.1.1.tgz", - "integrity": "sha1-8TBiOkEsM4sK+t7bwgTFy7i/IHA=", - "dev": true, - "optional": true, - "dependencies": { - "base64-js": "*" - }, - "peerDependencies": { - "react-native": "*" - } - }, - "node_modules/react-native/node_modules/ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/react-refresh": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", - "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-shallow-renderer": { - "version": "16.15.0", - "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz", - "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "object-assign": "^4.1.1", - "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependencies": { - "react": "^16.0.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "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==", - "dev": true - }, - "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, - "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.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": 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", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/readline": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", - "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/recast": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz", - "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ast-types": "0.15.2", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "dev": true, - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request/node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/require-at": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/require-at/-/require-at-1.0.6.tgz", - "integrity": "sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.28.0.tgz", - "integrity": "sha512-d7zhvo1OUY2SXSM6pfNjgD5+d0Nz87CUp4mt8l/GgVP3oBsPwzNvSzyu1me6BSG9JIgWNTVcafIXBIyM8yQ3yw==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/rtcpeerconnection-shim": { - "version": "1.2.15", - "resolved": "https://registry.npmjs.org/rtcpeerconnection-shim/-/rtcpeerconnection-shim-1.2.15.tgz", - "integrity": "sha512-C6DxhXt7bssQ1nHb154lqeL0SXz5Dx4RczXZu2Aa/L1NJFnEVDxFwCBo3fqtuljhHIGceg5JKBV4XJ0gW5JKyw==", - "dev": true, - "dependencies": { - "sdp": "^2.6.0" - }, - "engines": { - "node": ">=6.0.0", - "npm": ">=3.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/saslprep": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", - "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", - "dev": true, - "optional": true, - "dependencies": { - "sparse-bitfield": "^3.0.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/scheduler": { - "version": "0.24.0-canary-efb381bbf-20230505", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.24.0-canary-efb381bbf-20230505.tgz", - "integrity": "sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/sdp": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/sdp/-/sdp-2.12.0.tgz", - "integrity": "sha512-jhXqQAQVM+8Xj5EjJGVweuEzgtGWb3tmEEpl3CLP3cStInSbVHSg0QWOGQzNq8pSID4JkpeV2mPqlMDLrm0/Vw==", - "dev": true - }, - "node_modules/sdp-transform": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/sdp-transform/-/sdp-transform-2.14.1.tgz", - "integrity": "sha512-RjZyX3nVwJyCuTo5tGPx+PZWkDMCg7oOLpSlhjDdZfwUoNqG1mM8nyj31IGHyaPWXhjbP7cdK3qZ2bmkJ1GzRw==", - "dev": true, - "bin": { - "sdp-verify": "checker.js" - } - }, - "node_modules/search-insights": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.7.0.tgz", - "integrity": "sha512-GLbVaGgzYEKMvuJbHRhLi1qoBFnjXZGZ6l4LxOYPCp4lI2jDRB3jPU9/XNhMwv6kvnA9slTreq6pvK+b3o3aqg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8.16.0" - } - }, - "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, - "dependencies": { - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serialize-error": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", - "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", - "dependencies": { - "type-fest": "^0.13.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/serialize-error/node_modules/type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "dev": true, - "optional": true, - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/shiki": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.3.tgz", - "integrity": "sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g==", - "dev": true, - "dependencies": { - "ansi-sequence-parser": "^1.1.0", - "jsonc-parser": "^3.2.0", - "vscode-oniguruma": "^1.7.0", - "vscode-textmate": "^8.0.0" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "node_modules/simple-log-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/simple-log-colors/-/simple-log-colors-1.1.0.tgz", - "integrity": "sha512-Vwz9UQYHMeO51TxPRM5AIcajkJE6W5lwEJ6odg5zhu7dbTA8oov7W5CZhto77alVTiHVily35IgwSObG8JvRfg==" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/skema": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/skema/-/skema-1.0.2.tgz", - "integrity": "sha1-NxIc/qHK7DEHLZVlhXSMmxGfxFM=", - "dev": true, - "dependencies": { - "async": "^0.9.0", - "make-array": "^0.1.2", - "mix2": "^1.0.0" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", - "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/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==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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/sparse-bitfield": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", - "dev": true, - "optional": true, - "dependencies": { - "memory-pager": "^1.0.2" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "node_modules/sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "type-fest": "^0.7.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/stacktrace-parser/node_modules/type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/str2buf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/str2buf/-/str2buf-1.3.0.tgz", - "integrity": "sha512-xIBmHIUHYZDP4HyoXGHYNVmxlXLXDrtFHYT0eV6IOdEj3VO9ccaF1Ejl9Oq8iFjITllpT8FhaXb4KsNmw+3EuA==", - "dev": true - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string_decoder/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==", - "dev": true - }, - "node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/strtok3": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.2.4.tgz", - "integrity": "sha512-GO8IcFF9GmFDvqduIspUBwCzCbqzegyVKIsSymcMgiZKeCfrN9SowtUoi8+b59WZMAjIzVZic/Ft97+pynR3Iw==", - "dev": true, - "dependencies": { - "@tokenizer/token": "^0.3.0", - "peek-readable": "^4.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/sudo-prompt": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", - "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/supertap": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/supertap/-/supertap-3.0.1.tgz", - "integrity": "sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==", - "dependencies": { - "indent-string": "^5.0.0", - "js-yaml": "^3.14.1", - "serialize-error": "^7.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/supertap/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/supertap/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tabbable": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", - "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", - "dev": true - }, - "node_modules/temp": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", - "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "rimraf": "~2.6.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/temp/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "5.19.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", - "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/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, - "optional": true, - "peer": true - }, - "node_modules/throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "node_modules/through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "dependencies": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - }, - "node_modules/through2/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/through2/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "node_modules/time-zone": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz", - "integrity": "sha1-mcW/VZWJZq9tBtg73zgA3IL67F0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/token-types": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.1.1.tgz", - "integrity": "sha512-hD+QyuUAyI2spzsI0B7gf/jJ2ggR4RjkAo37j3StuePhApJUwcWDjnHDOFdIWYSwNR28H14hpwm4EI+V1Ted1w==", - "dev": 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/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "dependencies": { - "nopt": "~1.0.10" - }, - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tough-cookie/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/ts-node": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", - "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", - "dev": true, - "dependencies": { - "arg": "^4.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "typescript": ">=2.7" - } - }, - "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dev": true - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", - "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", - "deprecated": "support for ECMAScript is superseded by `uglify-js` as of v3.13.0", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "commander": "~2.13.0", - "source-map": "~0.6.1" - }, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/uglify-es/node_modules/commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/undefsafe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", - "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", - "dev": true, - "dependencies": { - "debug": "^2.2.0" - } - }, - "node_modules/undefsafe/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/undefsafe/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "optional": true, - "peer": true, - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/update-notifier": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", - "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", - "dev": true, - "dependencies": { - "boxen": "^4.2.0", - "chalk": "^3.0.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.3.1", - "is-npm": "^4.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.0.0", - "pupa": "^2.0.1", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/urlsafe-base64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/urlsafe-base64/-/urlsafe-base64-1.0.0.tgz", - "integrity": "sha1-I/iQaabGL0bPOh07ABac77kL4MY=", - "dev": true - }, - "node_modules/use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "dev": true, - "optional": true, - "peer": true, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/valid-url": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=", - "dev": true - }, - "node_modules/validator": { - "version": "13.6.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.6.0.tgz", - "integrity": "sha512-gVgKbdbHgtxpRyR8K0O6oFZPhhB5tT1jeEHZR0Znr9Svg03U0+r9DXWMrnRAB+HtCStDQKlaIZm42tVsVjqtjg==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/verror/node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "node_modules/vitepress": { - "version": "1.0.0-rc.4", - "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.0.0-rc.4.tgz", - "integrity": "sha512-JCQ89Bm6ECUTnyzyas3JENo00UDJeK8q1SUQyJYou+4Yz5BKEc/F3O21cu++DnUT2zXc0kvQ2Aj4BZCc/nioXQ==", - "dev": true, - "dependencies": { - "@docsearch/css": "^3.5.1", - "@docsearch/js": "^3.5.1", - "@vitejs/plugin-vue": "^4.2.3", - "@vue/devtools-api": "^6.5.0", - "@vueuse/core": "^10.3.0", - "@vueuse/integrations": "^10.3.0", - "body-scroll-lock": "4.0.0-beta.0", - "focus-trap": "^7.5.2", - "mark.js": "8.11.1", - "minisearch": "^6.1.0", - "shiki": "^0.14.3", - "vite": "^4.4.9", - "vue": "^3.3.4" - }, - "bin": { - "vitepress": "bin/vitepress.js" - } - }, - "node_modules/vitepress/node_modules/@types/node": { - "version": "20.5.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.1.tgz", - "integrity": "sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/vitepress/node_modules/@vitejs/plugin-vue": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.3.1.tgz", - "integrity": "sha512-tUBEtWcF7wFtII7ayNiLNDTCE1X1afySEo+XNVMNkFXaThENyCowIEX095QqbJZGTgoOcSVDJGlnde2NG4jtbQ==", - "dev": true, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.0.0", - "vue": "^3.2.25" - } - }, - "node_modules/vitepress/node_modules/vite": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", - "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", - "dev": true, - "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.27", - "rollup": "^3.27.1" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vlq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", - "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/vscode-oniguruma": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", - "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", - "dev": true - }, - "node_modules/vscode-textmate": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", - "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", - "dev": true - }, - "node_modules/vue": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz", - "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==", - "dev": true, - "dependencies": { - "@vue/compiler-dom": "3.3.4", - "@vue/compiler-sfc": "3.3.4", - "@vue/runtime-dom": "3.3.4", - "@vue/server-renderer": "3.3.4", - "@vue/shared": "3.3.4" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webcrypto-core": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.2.1.tgz", - "integrity": "sha512-5+h1/e/A4eegCRTg+oQ9ehTJRTMwFhZazJ2RH1FP0VC3q1/0xl7x6SzzTwPxd/VTGc7kjuSEJGnfNgoLe5jNRQ==", - "dev": true, - "dependencies": { - "@peculiar/asn1-schema": "^2.0.38", - "@peculiar/json-schema": "^1.1.12", - "asn1js": "^2.1.1", - "pvtsutils": "^1.2.0", - "tslib": "^2.3.1" - } - }, - "node_modules/webcrypto-shim": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/webcrypto-shim/-/webcrypto-shim-0.1.7.tgz", - "integrity": "sha512-JAvAQR5mRNRxZW2jKigWMjCMkjSdmP5cColRP1U/pTg69VgHXEi1orv5vVpJ55Zc5MIaPc1aaurzd9pjv2bveg==", - "dev": true - }, - "node_modules/webex": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/webex/-/webex-1.141.0.tgz", - "integrity": "sha512-b+VFuREIsI9udIZ7baKydo34+ggS4rrOl3dtTGWwZTpweRcgDN1Saxb/lhdSt+520LsHBoWuqNzS4qozjCZKeA==", - "dev": true, - "dependencies": { - "@babel/polyfill": "^7.12.1", - "@babel/runtime-corejs2": "^7.14.8", - "@webex/internal-plugin-calendar": "1.141.0", - "@webex/internal-plugin-device": "1.141.0", - "@webex/internal-plugin-presence": "1.141.0", - "@webex/internal-plugin-support": "1.141.0", - "@webex/plugin-attachment-actions": "1.141.0", - "@webex/plugin-authorization": "1.141.0", - "@webex/plugin-device-manager": "1.141.0", - "@webex/plugin-logger": "1.141.0", - "@webex/plugin-meetings": "1.141.0", - "@webex/plugin-memberships": "1.141.0", - "@webex/plugin-messages": "1.141.0", - "@webex/plugin-people": "1.141.0", - "@webex/plugin-rooms": "1.141.0", - "@webex/plugin-team-memberships": "1.141.0", - "@webex/plugin-teams": "1.141.0", - "@webex/plugin-webhooks": "1.141.0", - "@webex/storage-adapter-local-storage": "1.141.0", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/webex-node-bot-framework": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/webex-node-bot-framework/-/webex-node-bot-framework-2.3.7.tgz", - "integrity": "sha512-DzQB+PbgUOQHLiZ4d/CPxB5xRPV8cbeFObDp3TWtfUpOEw/6KufWhTIlikkbYRX3xc9kuyR/+6C1FwHAt9WAtg==", - "dev": true, - "dependencies": { - "clean": "^4.0.2", - "https-proxy-agent": "^5.0.0", - "moment": "^2.24.0", - "mongodb": "^3.5.7", - "url": "^0.11.0", - "validator": "^13.6.0", - "webex": "^1.99.0", - "when": "^3.7.8" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/webrtc-adapter": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-7.7.1.tgz", - "integrity": "sha512-TbrbBmiQBL9n0/5bvDdORc6ZfRY/Z7JnEj+EYOD1ghseZdpJ+nF2yx14k3LgQKc7JZnG7HAcL+zHnY25So9d7A==", - "dev": true, - "dependencies": { - "rtcpeerconnection-shim": "^1.2.15", - "sdp": "^2.12.0" - }, - "engines": { - "node": ">=6.0.0", - "npm": ">=3.10.0" - } - }, - "node_modules/well-known-symbols": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz", - "integrity": "sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/whatwg-fetch": { - "version": "3.6.17", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.17.tgz", - "integrity": "sha512-c4ghIvG6th0eudYwKZY5keb81wtFz9/WeAHAoy8+r18kcWlitUIrmGFQ2rWEl4UCKUilD3zCLHOIPheHx5ypRQ==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/when": { - "version": "3.7.8", - "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz", - "integrity": "sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I=", - "dev": true - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/which-module": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", - "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", - "dev": true, - "dependencies": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0" - } - }, - "node_modules/ws/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==", - "dev": true - }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "node_modules/yaml": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">= 14" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "optional": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@algolia/autocomplete-core": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", - "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", - "dev": true, - "requires": { - "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", - "@algolia/autocomplete-shared": "1.9.3" - } - }, - "@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", - "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", - "dev": true, - "requires": { - "@algolia/autocomplete-shared": "1.9.3" - } - }, - "@algolia/autocomplete-preset-algolia": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", - "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", - "dev": true, - "requires": { - "@algolia/autocomplete-shared": "1.9.3" - } - }, - "@algolia/autocomplete-shared": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", - "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", - "dev": true, - "requires": {} - }, - "@algolia/cache-browser-local-storage": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.19.1.tgz", - "integrity": "sha512-FYAZWcGsFTTaSAwj9Std8UML3Bu8dyWDncM7Ls8g+58UOe4XYdlgzXWbrIgjaguP63pCCbMoExKr61B+ztK3tw==", - "dev": true, - "requires": { - "@algolia/cache-common": "4.19.1" - } - }, - "@algolia/cache-common": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.19.1.tgz", - "integrity": "sha512-XGghi3l0qA38HiqdoUY+wvGyBsGvKZ6U3vTiMBT4hArhP3fOGLXpIINgMiiGjTe4FVlTa5a/7Zf2bwlIHfRqqg==", - "dev": true - }, - "@algolia/cache-in-memory": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.19.1.tgz", - "integrity": "sha512-+PDWL+XALGvIginigzu8oU6eWw+o76Z8zHbBovWYcrtWOEtinbl7a7UTt3x3lthv+wNuFr/YD1Gf+B+A9V8n5w==", - "dev": true, - "requires": { - "@algolia/cache-common": "4.19.1" - } - }, - "@algolia/client-account": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.19.1.tgz", - "integrity": "sha512-Oy0ritA2k7AMxQ2JwNpfaEcgXEDgeyKu0V7E7xt/ZJRdXfEpZcwp9TOg4TJHC7Ia62gIeT2Y/ynzsxccPw92GA==", - "dev": true, - "requires": { - "@algolia/client-common": "4.19.1", - "@algolia/client-search": "4.19.1", - "@algolia/transporter": "4.19.1" - } - }, - "@algolia/client-analytics": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.19.1.tgz", - "integrity": "sha512-5QCq2zmgdZLIQhHqwl55ZvKVpLM3DNWjFI4T+bHr3rGu23ew2bLO4YtyxaZeChmDb85jUdPDouDlCumGfk6wOg==", - "dev": true, - "requires": { - "@algolia/client-common": "4.19.1", - "@algolia/client-search": "4.19.1", - "@algolia/requester-common": "4.19.1", - "@algolia/transporter": "4.19.1" - } - }, - "@algolia/client-common": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.19.1.tgz", - "integrity": "sha512-3kAIVqTcPrjfS389KQvKzliC559x+BDRxtWamVJt8IVp7LGnjq+aVAXg4Xogkur1MUrScTZ59/AaUd5EdpyXgA==", - "dev": true, - "requires": { - "@algolia/requester-common": "4.19.1", - "@algolia/transporter": "4.19.1" - } - }, - "@algolia/client-personalization": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.19.1.tgz", - "integrity": "sha512-8CWz4/H5FA+krm9HMw2HUQenizC/DxUtsI5oYC0Jxxyce1vsr8cb1aEiSJArQT6IzMynrERif1RVWLac1m36xw==", - "dev": true, - "requires": { - "@algolia/client-common": "4.19.1", - "@algolia/requester-common": "4.19.1", - "@algolia/transporter": "4.19.1" - } - }, - "@algolia/client-search": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.19.1.tgz", - "integrity": "sha512-mBecfMFS4N+yK/p0ZbK53vrZbL6OtWMk8YmnOv1i0LXx4pelY8TFhqKoTit3NPVPwoSNN0vdSN9dTu1xr1XOVw==", - "dev": true, - "requires": { - "@algolia/client-common": "4.19.1", - "@algolia/requester-common": "4.19.1", - "@algolia/transporter": "4.19.1" - } - }, - "@algolia/logger-common": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.19.1.tgz", - "integrity": "sha512-i6pLPZW/+/YXKis8gpmSiNk1lOmYCmRI6+x6d2Qk1OdfvX051nRVdalRbEcVTpSQX6FQAoyeaui0cUfLYW5Elw==", - "dev": true - }, - "@algolia/logger-console": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.19.1.tgz", - "integrity": "sha512-jj72k9GKb9W0c7TyC3cuZtTr0CngLBLmc8trzZlXdfvQiigpUdvTi1KoWIb2ZMcRBG7Tl8hSb81zEY3zI2RlXg==", - "dev": true, - "requires": { - "@algolia/logger-common": "4.19.1" - } - }, - "@algolia/requester-browser-xhr": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.19.1.tgz", - "integrity": "sha512-09K/+t7lptsweRTueHnSnmPqIxbHMowejAkn9XIcJMLdseS3zl8ObnS5GWea86mu3vy4+8H+ZBKkUN82Zsq/zg==", - "dev": true, - "requires": { - "@algolia/requester-common": "4.19.1" - } - }, - "@algolia/requester-common": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.19.1.tgz", - "integrity": "sha512-BisRkcWVxrDzF1YPhAckmi2CFYK+jdMT60q10d7z3PX+w6fPPukxHRnZwooiTUrzFe50UBmLItGizWHP5bDzVQ==", - "dev": true - }, - "@algolia/requester-node-http": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.19.1.tgz", - "integrity": "sha512-6DK52DHviBHTG2BK/Vv2GIlEw7i+vxm7ypZW0Z7vybGCNDeWzADx+/TmxjkES2h15+FZOqVf/Ja677gePsVItA==", - "dev": true, - "requires": { - "@algolia/requester-common": "4.19.1" - } - }, - "@algolia/transporter": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.19.1.tgz", - "integrity": "sha512-nkpvPWbpuzxo1flEYqNIbGz7xhfhGOKGAZS7tzC+TELgEmi7z99qRyTfNSUlW7LZmB3ACdnqAo+9A9KFBENviQ==", - "dev": true, - "requires": { - "@algolia/cache-common": "4.19.1", - "@algolia/logger-common": "4.19.1", - "@algolia/requester-common": "4.19.1" - } - }, - "@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz", - "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/highlight": "^7.22.10", - "chalk": "^2.4.2" - }, - "dependencies": { - "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, - "optional": true, - "peer": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "optional": true, - "peer": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "optional": true, - "peer": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "optional": true, - "peer": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", - "dev": true, - "optional": true, - "peer": true - }, - "@babel/core": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.10.tgz", - "integrity": "sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-compilation-targets": "^7.22.10", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.10", - "@babel/parser": "^7.22.10", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.10", - "@babel/types": "^7.22.10", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "optional": true, - "peer": true - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "@babel/generator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", - "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/types": "^7.22.10", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz", - "integrity": "sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/types": "^7.22.10" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", - "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "optional": true, - "peer": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.10.tgz", - "integrity": "sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", - "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", - "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true, - "optional": true, - "peer": true - }, - "@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "optional": true, - "peer": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", - "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.9" - } - }, - "@babel/helper-replace-supers": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", - "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5" - } - }, - "@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true, - "optional": true, - "peer": true - }, - "@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", - "dev": true, - "optional": true, - "peer": true - }, - "@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true, - "optional": true, - "peer": true - }, - "@babel/helper-wrap-function": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz", - "integrity": "sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.10" - } - }, - "@babel/helpers": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.10.tgz", - "integrity": "sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.10", - "@babel/types": "^7.22.10" - } - }, - "@babel/highlight": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz", - "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "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, - "optional": true, - "peer": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "optional": true, - "peer": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "optional": true, - "peer": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "optional": true, - "peer": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz", - "integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==", - "dev": true - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-export-default-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.22.5.tgz", - "integrity": "sha512-UCe1X/hplyv6A5g2WnQ90tnHRvYL29dabCWww92lO7VdfMVTVReBTRrhiMrKQejHD9oVkdnRdwYuzUZkBVQisg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-default-from": "^7.22.5" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "optional": true, - "peer": true, - "requires": {} - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-default-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.22.5.tgz", - "integrity": "sha512-ODAqWWXB/yReh/jVQDag/3/tl6lgBueQkk/TcfW/59Oykm4c8a55XloX0CTk2k2VJiFWMgHby9xNX29IbCv9dQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-flow": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz", - "integrity": "sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-async-generator-functions": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.10.tgz", - "integrity": "sha512-eueE8lvKVzq5wIObKK/7dvoeKJ+xc6TvRn6aysIjS6pSCeLy7S/eVi7pEQknZqyqvzaNKdDtem8nUNTBgDVR2g==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz", - "integrity": "sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-class-static-block": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", - "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", - "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz", - "integrity": "sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-dynamic-import": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", - "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-export-namespace-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", - "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz", - "integrity": "sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-flow": "^7.22.5" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-json-strings": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", - "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", - "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", - "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-transform-numeric-separator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", - "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-transform-object-rest-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", - "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - } - }, - "@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", - "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-transform-optional-chaining": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.10.tgz", - "integrity": "sha512-MMkQqZAZ+MGj+jGTG3OTuhKeBpNcO+0oCEbrGNEaOmiEn+1MzRyQlYsruGiU8RTK3zV6XwrVJTmwiDOyYK6J9g==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-private-property-in-object": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", - "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz", - "integrity": "sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz", - "integrity": "sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/plugin-transform-react-jsx-self": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz", - "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-react-jsx-source": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz", - "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", - "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.10.tgz", - "integrity": "sha512-RchI7HePu1eu0CYNKHHHQdfenZcM4nz8rew5B1VWqeRKdcwW5aQ5HeG9eTUbWiAS1UrmHVLmoxTWHt3iLD/NhA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.5", - "babel-plugin-polyfill-corejs3": "^0.8.3", - "babel-plugin-polyfill-regenerator": "^0.5.2", - "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.10.tgz", - "integrity": "sha512-7++c8I/ymsDo4QQBAgbraXLzIM6jmfao11KgIBEYZRReWzNWH9NtNgJcyrZiXsOPh523FQm6LfpLyy/U5fn46A==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.10", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-typescript": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", - "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/polyfill": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz", - "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==", - "dev": true, - "requires": { - "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/preset-env": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.10.tgz", - "integrity": "sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.10", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.10", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.10", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.6", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.10", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.10", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.10", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.10", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "@babel/types": "^7.22.10", - "babel-plugin-polyfill-corejs2": "^0.4.5", - "babel-plugin-polyfill-corejs3": "^0.8.3", - "babel-plugin-polyfill-regenerator": "^0.5.2", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "@babel/preset-flow": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.22.5.tgz", - "integrity": "sha512-ta2qZ+LSiGCrP5pgcGt8xMnnkXQrq8Sa4Ulhy06BOlF5QbLw9q5hIx7bn5MrsvyTGAfh6kTOo07Q+Pfld/8Y5Q==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-transform-flow-strip-types": "^7.22.5" - } - }, - "@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz", - "integrity": "sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-typescript": "^7.22.5" - } - }, - "@babel/register": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.5.tgz", - "integrity": "sha512-vV6pm/4CijSQ8Y47RH5SopXzursN35RQINfGJkmOlcpAtGuf94miFvIPhCKGQN7WGIcsgG1BHEX2KVdTYwTwUQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.5", - "source-map-support": "^0.5.16" - }, - "dependencies": { - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - } - } - }, - "@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true, - "optional": true, - "peer": true - }, - "@babel/runtime": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.10.tgz", - "integrity": "sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "regenerator-runtime": "^0.14.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "@babel/runtime-corejs2": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.15.4.tgz", - "integrity": "sha512-TmuTI+n5HsMesW6Ah2WjvBwix9fBMXwbMxQV3c0ETLAzlmwN4OeRVbYMYwp9P4LEOlAxwGKdd9e8pMiLMAg/Mg==", - "dev": true, - "requires": { - "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/traverse": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.10.tgz", - "integrity": "sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.10", - "@babel/types": "^7.22.10", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "@babel/types": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz", - "integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - } - }, - "@docsearch/css": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.5.2.tgz", - "integrity": "sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA==", - "dev": true - }, - "@docsearch/js": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.5.2.tgz", - "integrity": "sha512-p1YFTCDflk8ieHgFJYfmyHBki1D61+U9idwrLh+GQQMrBSP3DLGKpy0XUJtPjAOPltcVbqsTjiPFfH7JImjUNg==", - "dev": true, - "requires": { - "@docsearch/react": "3.5.2", - "preact": "^10.0.0" - } - }, - "@docsearch/react": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.5.2.tgz", - "integrity": "sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng==", - "dev": true, - "requires": { - "@algolia/autocomplete-core": "1.9.3", - "@algolia/autocomplete-preset-algolia": "1.9.3", - "@docsearch/css": "3.5.2", - "algoliasearch": "^4.19.1" - } - }, - "@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", - "dev": true, - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", - "dev": true, - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", - "dev": true, - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", - "dev": true, - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", - "dev": true, - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", - "dev": true, - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", - "dev": true, - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", - "dev": true, - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", - "dev": true, - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", - "dev": true, - "optional": true - }, - "@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "dev": true, - "optional": true, - "peer": true - }, - "@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@jest/create-cache-key-function": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.6.2.tgz", - "integrity": "sha512-oGVRMr8na9h1vUiem1E/Uoxb/NR9BdfKb7IBZ+pNWxJQmTYSbDF0dsVBAGqNU7MBQwYJDyRx0H7H/0itiqAgQg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@jest/types": "^29.6.1" - } - }, - "@jest/environment": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.2.tgz", - "integrity": "sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@jest/fake-timers": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "jest-mock": "^29.6.2" - } - }, - "@jest/fake-timers": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.2.tgz", - "integrity": "sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@jest/types": "^29.6.1", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.6.2", - "jest-mock": "^29.6.2", - "jest-util": "^29.6.2" - } - }, - "@jest/schemas": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", - "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@sinclair/typebox": "^0.27.8" - } - }, - "@jest/types": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.1.tgz", - "integrity": "sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@jest/schemas": "^29.6.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@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, - "optional": true, - "peer": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@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, - "optional": true, - "peer": true - }, - "@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, - "optional": true, - "peer": true - }, - "@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, - "optional": true, - "peer": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@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 - }, - "@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "@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==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@peculiar/asn1-schema": { - "version": "2.0.38", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.0.38.tgz", - "integrity": "sha512-zZ64UpCTm9me15nuCpPgJghSdbEm8atcDQPCyK+bKXjZAQ1735NCZXCSCfbckbQ4MH36Rm9403n/qMq77LFDzQ==", - "dev": true, - "requires": { - "@types/asn1js": "^2.0.2", - "asn1js": "^2.1.1", - "pvtsutils": "^1.2.0", - "tslib": "^2.3.0" - } - }, - "@peculiar/json-schema": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", - "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", - "dev": true, - "requires": { - "tslib": "^2.0.0" - } - }, - "@peculiar/webcrypto": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.1.7.tgz", - "integrity": "sha512-aCNLYdHZkvGH+T8/YBOY33jrVGVuLIa3bpizeHXqwN+P4ZtixhA+kxEEWM1amZwUY2nY/iuj+5jdZn/zB7EPPQ==", - "dev": true, - "requires": { - "@peculiar/asn1-schema": "^2.0.32", - "@peculiar/json-schema": "^1.1.12", - "pvtsutils": "^1.1.6", - "tslib": "^2.2.0", - "webcrypto-core": "^1.2.0" - } - }, - "@react-native-community/cli": { - "version": "11.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-11.3.6.tgz", - "integrity": "sha512-bdwOIYTBVQ9VK34dsf6t3u6vOUU5lfdhKaAxiAVArjsr7Je88Bgs4sAbsOYsNK3tkE8G77U6wLpekknXcanlww==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@react-native-community/cli-clean": "11.3.6", - "@react-native-community/cli-config": "11.3.6", - "@react-native-community/cli-debugger-ui": "11.3.6", - "@react-native-community/cli-doctor": "11.3.6", - "@react-native-community/cli-hermes": "11.3.6", - "@react-native-community/cli-plugin-metro": "11.3.6", - "@react-native-community/cli-server-api": "11.3.6", - "@react-native-community/cli-tools": "11.3.6", - "@react-native-community/cli-types": "11.3.6", - "chalk": "^4.1.2", - "commander": "^9.4.1", - "execa": "^5.0.0", - "find-up": "^4.1.0", - "fs-extra": "^8.1.0", - "graceful-fs": "^4.1.3", - "prompts": "^2.4.0", - "semver": "^7.5.2" - }, - "dependencies": { - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "optional": true, - "peer": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "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, - "optional": true, - "peer": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "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, - "optional": true, - "peer": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "@react-native-community/cli-clean": { - "version": "11.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-11.3.6.tgz", - "integrity": "sha512-jOOaeG5ebSXTHweq1NznVJVAFKtTFWL4lWgUXl845bCGX7t1lL8xQNWHKwT8Oh1pGR2CI3cKmRjY4hBg+pEI9g==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@react-native-community/cli-tools": "11.3.6", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "prompts": "^2.4.0" - } - }, - "@react-native-community/cli-config": { - "version": "11.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-11.3.6.tgz", - "integrity": "sha512-edy7fwllSFLan/6BG6/rznOBCLPrjmJAE10FzkEqNLHowi0bckiAPg1+1jlgQ2qqAxV5kuk+c9eajVfQvPLYDA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@react-native-community/cli-tools": "11.3.6", - "chalk": "^4.1.2", - "cosmiconfig": "^5.1.0", - "deepmerge": "^4.3.0", - "glob": "^7.1.3", - "joi": "^17.2.1" - } - }, - "@react-native-community/cli-debugger-ui": { - "version": "11.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-11.3.6.tgz", - "integrity": "sha512-jhMOSN/iOlid9jn/A2/uf7HbC3u7+lGktpeGSLnHNw21iahFBzcpuO71ekEdlmTZ4zC/WyxBXw9j2ka33T358w==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "serve-static": "^1.13.1" - } - }, - "@react-native-community/cli-doctor": { - "version": "11.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-11.3.6.tgz", - "integrity": "sha512-UT/Tt6omVPi1j6JEX+CObc85eVFghSZwy4GR9JFMsO7gNg2Tvcu1RGWlUkrbmWMAMHw127LUu6TGK66Ugu1NLA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@react-native-community/cli-config": "11.3.6", - "@react-native-community/cli-platform-android": "11.3.6", - "@react-native-community/cli-platform-ios": "11.3.6", - "@react-native-community/cli-tools": "11.3.6", - "chalk": "^4.1.2", - "command-exists": "^1.2.8", - "envinfo": "^7.7.2", - "execa": "^5.0.0", - "hermes-profile-transformer": "^0.0.6", - "ip": "^1.1.5", - "node-stream-zip": "^1.9.1", - "ora": "^5.4.1", - "prompts": "^2.4.0", - "semver": "^7.5.2", - "strip-ansi": "^5.2.0", - "sudo-prompt": "^9.0.0", - "wcwidth": "^1.0.1", - "yaml": "^2.2.1" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "optional": true, - "peer": true - }, - "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, - "optional": true, - "peer": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "@react-native-community/cli-hermes": { - "version": "11.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-11.3.6.tgz", - "integrity": "sha512-O55YAYGZ3XynpUdePPVvNuUPGPY0IJdctLAOHme73OvS80gNwfntHDXfmY70TGHWIfkK2zBhA0B+2v8s5aTyTA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@react-native-community/cli-platform-android": "11.3.6", - "@react-native-community/cli-tools": "11.3.6", - "chalk": "^4.1.2", - "hermes-profile-transformer": "^0.0.6", - "ip": "^1.1.5" - } - }, - "@react-native-community/cli-platform-android": { - "version": "11.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-11.3.6.tgz", - "integrity": "sha512-ZARrpLv5tn3rmhZc//IuDM1LSAdYnjUmjrp58RynlvjLDI4ZEjBAGCQmgysRgXAsK7ekMrfkZgemUczfn9td2A==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@react-native-community/cli-tools": "11.3.6", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "glob": "^7.1.3", - "logkitty": "^0.7.1" - } - }, - "@react-native-community/cli-platform-ios": { - "version": "11.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-11.3.6.tgz", - "integrity": "sha512-tZ9VbXWiRW+F+fbZzpLMZlj93g3Q96HpuMsS6DRhrTiG+vMQ3o6oPWSEEmMGOvJSYU7+y68Dc9ms2liC7VD6cw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@react-native-community/cli-tools": "11.3.6", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "fast-xml-parser": "^4.0.12", - "glob": "^7.1.3", - "ora": "^5.4.1" - } - }, - "@react-native-community/cli-plugin-metro": { - "version": "11.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-11.3.6.tgz", - "integrity": "sha512-D97racrPX3069ibyabJNKw9aJpVcaZrkYiEzsEnx50uauQtPDoQ1ELb/5c6CtMhAEGKoZ0B5MS23BbsSZcLs2g==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@react-native-community/cli-server-api": "11.3.6", - "@react-native-community/cli-tools": "11.3.6", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "metro": "0.76.7", - "metro-config": "0.76.7", - "metro-core": "0.76.7", - "metro-react-native-babel-transformer": "0.76.7", - "metro-resolver": "0.76.7", - "metro-runtime": "0.76.7", - "readline": "^1.3.0" - }, - "dependencies": { - "metro-runtime": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.76.7.tgz", - "integrity": "sha512-MuWHubQHymUWBpZLwuKZQgA/qbb35WnDAKPo83rk7JRLIFPvzXSvFaC18voPuzJBt1V98lKQIonh6MiC9gd8Ug==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/runtime": "^7.0.0", - "react-refresh": "^0.4.0" - } - } - } - }, - "@react-native-community/cli-server-api": { - "version": "11.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-11.3.6.tgz", - "integrity": "sha512-8GUKodPnURGtJ9JKg8yOHIRtWepPciI3ssXVw5jik7+dZ43yN8P5BqCoDaq8e1H1yRer27iiOfT7XVnwk8Dueg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@react-native-community/cli-debugger-ui": "11.3.6", - "@react-native-community/cli-tools": "11.3.6", - "compression": "^1.7.1", - "connect": "^3.6.5", - "errorhandler": "^1.5.1", - "nocache": "^3.0.1", - "pretty-format": "^26.6.2", - "serve-static": "^1.13.1", - "ws": "^7.5.1" - }, - "dependencies": { - "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "optional": true, - "peer": true, - "requires": {} - } - } - }, - "@react-native-community/cli-tools": { - "version": "11.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-11.3.6.tgz", - "integrity": "sha512-JpmUTcDwAGiTzLsfMlIAYpCMSJ9w2Qlf7PU7mZIRyEu61UzEawyw83DkqfbzDPBuRwRnaeN44JX2CP/yTO3ThQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "appdirsjs": "^1.2.4", - "chalk": "^4.1.2", - "find-up": "^5.0.0", - "mime": "^2.4.1", - "node-fetch": "^2.6.0", - "open": "^6.2.0", - "ora": "^5.4.1", - "semver": "^7.5.2", - "shell-quote": "^1.7.3" - }, - "dependencies": { - "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, - "optional": true, - "peer": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "@react-native-community/cli-types": { - "version": "11.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-11.3.6.tgz", - "integrity": "sha512-6DxjrMKx5x68N/tCJYVYRKAtlRHbtUVBZrnAvkxbRWFD9v4vhNgsPM0RQm8i2vRugeksnao5mbnRGpS6c0awCw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "joi": "^17.2.1" - } - }, - "@react-native/assets-registry": { - "version": "0.72.0", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.72.0.tgz", - "integrity": "sha512-Im93xRJuHHxb1wniGhBMsxLwcfzdYreSZVQGDoMJgkd6+Iky61LInGEHnQCTN0fKNYF1Dvcofb4uMmE1RQHXHQ==", - "dev": true, - "optional": true, - "peer": true - }, - "@react-native/codegen": { - "version": "0.72.6", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.72.6.tgz", - "integrity": "sha512-idTVI1es/oopN0jJT/0jB6nKdvTUKE3757zA5+NPXZTeB46CIRbmmos4XBiAec8ufu9/DigLPbHTYAaMNZJ6Ig==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/parser": "^7.20.0", - "flow-parser": "^0.206.0", - "jscodeshift": "^0.14.0", - "nullthrows": "^1.1.1" - } - }, - "@react-native/gradle-plugin": { - "version": "0.72.11", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.72.11.tgz", - "integrity": "sha512-P9iRnxiR2w7EHcZ0mJ+fmbPzMby77ZzV6y9sJI3lVLJzF7TLSdbwcQyD3lwMsiL+q5lKUHoZJS4sYmih+P2HXw==", - "dev": true, - "optional": true, - "peer": true - }, - "@react-native/js-polyfills": { - "version": "0.72.1", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.72.1.tgz", - "integrity": "sha512-cRPZh2rBswFnGt5X5EUEPs0r+pAsXxYsifv/fgy9ZLQokuT52bPH+9xjDR+7TafRua5CttGW83wP4TntRcWNDA==", - "dev": true, - "optional": true, - "peer": true - }, - "@react-native/normalize-colors": { - "version": "0.72.0", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.72.0.tgz", - "integrity": "sha512-285lfdqSXaqKuBbbtP9qL2tDrfxdOFtIMvkKadtleRQkdOxx+uzGvFr82KHmc/sSiMtfXGp7JnFYWVh4sFl7Yw==", - "dev": true, - "optional": true, - "peer": true - }, - "@react-native/virtualized-lists": { - "version": "0.72.8", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.72.8.tgz", - "integrity": "sha512-J3Q4Bkuo99k7mu+jPS9gSUSgq+lLRSI/+ahXNwV92XgJ/8UgOTxu2LPwhJnBk/sQKxq7E8WkZBnBiozukQMqrw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "invariant": "^2.2.4", - "nullthrows": "^1.1.1" - } - }, - "@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "dev": true, - "optional": true, - "peer": true - }, - "@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true, - "optional": true, - "peer": true - }, - "@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true, - "optional": true, - "peer": true - }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true - }, - "@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@sinonjs/commons": "^3.0.0" - } - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "@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 - }, - "@types/asn1js": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/asn1js/-/asn1js-2.0.2.tgz", - "integrity": "sha512-t4YHCgtD+ERvH0FyxvNlYwJ2ezhqw7t+Ygh4urQ7dJER8i185JPv6oIM3ey5YQmGN6Zp9EMbpohkjZi9t3UxwA==", - "dev": true - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true, - "optional": true, - "peer": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/node": { - "version": "13.13.52", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.52.tgz", - "integrity": "sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ==", - "dev": true - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true, - "optional": true, - "peer": true - }, - "@types/web-bluetooth": { - "version": "0.0.17", - "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz", - "integrity": "sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==", - "dev": true - }, - "@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true, - "optional": true, - "peer": true - }, - "@unimodules/core": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@unimodules/core/-/core-7.1.2.tgz", - "integrity": "sha512-lY+e2TAFuebD3vshHMIRqru3X4+k7Xkba4Wa7QsDBd+ex4c4N2dHAO61E2SrGD9+TRBD8w/o7mzK6ljbqRnbyg==", - "dev": true, - "optional": true, - "requires": { - "compare-versions": "^3.4.0" - } - }, - "@unimodules/react-native-adapter": { - "version": "6.3.7", - "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-6.3.7.tgz", - "integrity": "sha512-kVfTje46vfc5uqILvFJCoiS49WfuWcGZUKvRBJaXd1bPgG7E8+94+9p1AsNs5eAFkFnbVWXRAvlOeiHIqrNjEA==", - "dev": true, - "optional": true, - "requires": { - "expo-modules-autolinking": "^0.0.3", - "invariant": "^2.2.4" - } - }, - "@vue/compiler-core": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz", - "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==", - "dev": true, - "requires": { - "@babel/parser": "^7.21.3", - "@vue/shared": "3.3.4", - "estree-walker": "^2.0.2", - "source-map-js": "^1.0.2" - } - }, - "@vue/compiler-dom": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz", - "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==", - "dev": true, - "requires": { - "@vue/compiler-core": "3.3.4", - "@vue/shared": "3.3.4" - } - }, - "@vue/compiler-sfc": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz", - "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==", - "dev": true, - "requires": { - "@babel/parser": "^7.20.15", - "@vue/compiler-core": "3.3.4", - "@vue/compiler-dom": "3.3.4", - "@vue/compiler-ssr": "3.3.4", - "@vue/reactivity-transform": "3.3.4", - "@vue/shared": "3.3.4", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.0", - "postcss": "^8.1.10", - "source-map-js": "^1.0.2" - } - }, - "@vue/compiler-ssr": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz", - "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==", - "dev": true, - "requires": { - "@vue/compiler-dom": "3.3.4", - "@vue/shared": "3.3.4" - } - }, - "@vue/devtools-api": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz", - "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==", - "dev": true - }, - "@vue/reactivity": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz", - "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==", - "dev": true, - "requires": { - "@vue/shared": "3.3.4" - } - }, - "@vue/reactivity-transform": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz", - "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==", - "dev": true, - "requires": { - "@babel/parser": "^7.20.15", - "@vue/compiler-core": "3.3.4", - "@vue/shared": "3.3.4", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.0" - } - }, - "@vue/runtime-core": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz", - "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==", - "dev": true, - "requires": { - "@vue/reactivity": "3.3.4", - "@vue/shared": "3.3.4" - } - }, - "@vue/runtime-dom": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz", - "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==", - "dev": true, - "requires": { - "@vue/runtime-core": "3.3.4", - "@vue/shared": "3.3.4", - "csstype": "^3.1.1" - } - }, - "@vue/server-renderer": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz", - "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==", - "dev": true, - "requires": { - "@vue/compiler-ssr": "3.3.4", - "@vue/shared": "3.3.4" - } - }, - "@vue/shared": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz", - "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==", - "dev": true - }, - "@vueuse/core": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.3.0.tgz", - "integrity": "sha512-BEM5yxcFKb5btFjTSAFjTu5jmwoW66fyV9uJIP4wUXXU8aR5Hl44gndaaXp7dC5HSObmgbnR2RN+Un1p68Mf5Q==", - "dev": true, - "requires": { - "@types/web-bluetooth": "^0.0.17", - "@vueuse/metadata": "10.3.0", - "@vueuse/shared": "10.3.0", - "vue-demi": ">=0.14.5" - }, - "dependencies": { - "vue-demi": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.5.tgz", - "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", - "dev": true, - "requires": {} - } - } - }, - "@vueuse/integrations": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-10.3.0.tgz", - "integrity": "sha512-Jgiv7oFyIgC6BxmDtiyG/fxyGysIds00YaY7sefwbhCZ2/tjEx1W/1WcsISSJPNI30in28+HC2J4uuU8184ekg==", - "dev": true, - "requires": { - "@vueuse/core": "10.3.0", - "@vueuse/shared": "10.3.0", - "vue-demi": ">=0.14.5" - }, - "dependencies": { - "vue-demi": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.5.tgz", - "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", - "dev": true, - "requires": {} - } - } - }, - "@vueuse/metadata": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.3.0.tgz", - "integrity": "sha512-Ema3YhNOa4swDsV0V7CEY5JXvK19JI/o1szFO1iWxdFg3vhdFtCtSTP26PCvbUpnUtNHBY2wx5y3WDXND5Pvnw==", - "dev": true - }, - "@vueuse/shared": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.3.0.tgz", - "integrity": "sha512-kGqCTEuFPMK4+fNWy6dUOiYmxGcUbtznMwBZLC1PubidF4VZY05B+Oht7Jh7/6x4VOWGpvu3R37WHi81cKpiqg==", - "dev": true, - "requires": { - "vue-demi": ">=0.14.5" - }, - "dependencies": { - "vue-demi": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.5.tgz", - "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", - "dev": true, - "requires": {} - } - } - }, - "@webex/common": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/common/-/common-1.141.0.tgz", - "integrity": "sha512-ju6f/iABQO3rY4q048skEFi95lg9Y1vrAM7cu8v/78h5ajMgNMjkMTaylN0yZsemvWgpvHaJYhRPfpiEHFYdwA==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "backoff": "^2.5.0", - "core-decorators": "^0.20.0", - "envify": "^4.1.0", - "lodash": "^4.17.21", - "safe-buffer": "^5.2.0", - "urlsafe-base64": "^1.0.0" - } - }, - "@webex/common-timers": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/common-timers/-/common-timers-1.141.0.tgz", - "integrity": "sha512-ovcIfpJOtlP6Mhz8Ma38o/5Nlwvj0SWM9aQ0eECatA1imbq/Z/Ek3PQK/uwc7WPSeVxKUxndTi/KirYzB9XNJQ==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "envify": "^4.1.0" - } - }, - "@webex/helper-html": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/helper-html/-/helper-html-1.141.0.tgz", - "integrity": "sha512-NzBAbvEkX05IuUXxDZkUwTMtYFqz08IduwMeK6XsDq+/caXQkvruMjbA1sKAcHODNW7x1pODNwWqQv+I0iDONw==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "envify": "^4.1.0", - "lodash": "^4.17.21" - } - }, - "@webex/helper-image": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/helper-image/-/helper-image-1.141.0.tgz", - "integrity": "sha512-ReCoOq52cqI7T90mSJ/xCVw0r/Hmc8CDkFBatZyI/W/5eVYYPxu1TRUrYfbJvkvf7bGlH3mMsP5PI8faPM8w+A==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/http-core": "1.141.0", - "envify": "^4.1.0", - "exifr": "^5.0.3", - "gm": "^1.23.1", - "lodash": "^4.17.21", - "mime": "^2.4.4", - "safe-buffer": "^5.2.0" - } - }, - "@webex/http-core": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/http-core/-/http-core-1.141.0.tgz", - "integrity": "sha512-MI3FHXWdzQVOt9H00KTSk7WmNmF6WOv28NvYzCu2Y/6hSgnYvzyGYrDcTsRssR+fzfZYVXP8w9wBWglHQPFeeg==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "envify": "^4.1.0", - "file-type": "^16.0.1", - "global": "^4.4.0", - "is-function": "^1.0.1", - "lodash": "^4.17.21", - "parse-headers": "^2.0.2", - "qs": "^6.7.0", - "request": "^2.88.0", - "safe-buffer": "^5.2.0", - "xtend": "^4.0.2" - } - }, - "@webex/internal-plugin-calendar": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/internal-plugin-calendar/-/internal-plugin-calendar-1.141.0.tgz", - "integrity": "sha512-zKf8VelJ1redGwGrL5sCLID+cnkthFEkJnWzikbLn1nJahKldrtzuxGog9KXpmkprO129ooUqmEusMMIXa+V/g==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/internal-plugin-conversation": "1.141.0", - "@webex/internal-plugin-device": "1.141.0", - "@webex/internal-plugin-encryption": "1.141.0", - "@webex/webex-core": "1.141.0", - "btoa": "^1.2.1", - "envify": "^4.1.0", - "lodash": "^4.17.21" - } - }, - "@webex/internal-plugin-conversation": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/internal-plugin-conversation/-/internal-plugin-conversation-1.141.0.tgz", - "integrity": "sha512-SDh+/WH3TjZ73jJo+wSF7ce2KtYzMUlBNAwV8MV09+HmPNUsQ1iuTFRojwuwOJw1xTzCG69+0UgAg4JydBPieQ==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/helper-html": "1.141.0", - "@webex/helper-image": "1.141.0", - "@webex/internal-plugin-encryption": "1.141.0", - "@webex/internal-plugin-user": "1.141.0", - "@webex/webex-core": "1.141.0", - "crypto-js": "^3.1.9-1", - "envify": "^4.1.0", - "lodash": "^4.17.21", - "node-scr": "^0.3.0", - "uuid": "^3.3.2" - } - }, - "@webex/internal-plugin-device": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/internal-plugin-device/-/internal-plugin-device-1.141.0.tgz", - "integrity": "sha512-F6gh1vguRZwnmR5ZrkLamOgjAuFrOWcStCEF3I07bX/RDWwIxOx8V5wAkJaLOBRkrbM6xO2Vt4VxWNzVPUwfUw==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/common-timers": "1.141.0", - "@webex/http-core": "1.141.0", - "@webex/webex-core": "1.141.0", - "ampersand-collection": "^2.0.2", - "ampersand-state": "^5.0.3", - "envify": "^4.1.0", - "lodash": "^4.17.21" - } - }, - "@webex/internal-plugin-encryption": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/internal-plugin-encryption/-/internal-plugin-encryption-1.141.0.tgz", - "integrity": "sha512-UMSba7aEgBts5SMBYYOVFn0IoORutvRabx3u+NBKXA4mbP8Mp1WzDfgB1bn+4TMfpcDWt2d6OMY7kbYEb5nxqw==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/common-timers": "1.141.0", - "@webex/http-core": "1.141.0", - "@webex/internal-plugin-device": "1.141.0", - "@webex/internal-plugin-mercury": "1.141.0", - "@webex/webex-core": "1.141.0", - "asn1js": "^2.0.26", - "debug": "^3.2.6", - "envify": "^4.1.0", - "isomorphic-webcrypto": "^2.3.8", - "lodash": "^4.17.21", - "node-jose": "^2.0.0", - "node-kms": "^0.4.0", - "node-scr": "^0.3.0", - "pkijs": "^2.1.84", - "safe-buffer": "^5.2.0", - "valid-url": "^1.0.9" - } - }, - "@webex/internal-plugin-feature": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/internal-plugin-feature/-/internal-plugin-feature-1.141.0.tgz", - "integrity": "sha512-MUWsFlbWd60sB6xMbdB+0iNngmSOdKyTwN+t7F187pc2E9pKLxzVBDwc4+y3ralipPqKiHv624u8vthq5MssRQ==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/internal-plugin-device": "1.141.0", - "@webex/internal-plugin-mercury": "1.141.0", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0", - "lodash": "^4.17.21" - } - }, - "@webex/internal-plugin-lyra": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/internal-plugin-lyra/-/internal-plugin-lyra-1.141.0.tgz", - "integrity": "sha512-5C1uyTPWu7Ssvin7Kz0sAyC6zmMoxMUBBKOF3k7ISD2G3SQRrC4m3GyzkPQPH0cSebZEX1/yOTdmZKUza4o1Hg==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/internal-plugin-conversation": "1.141.0", - "@webex/internal-plugin-encryption": "1.141.0", - "@webex/internal-plugin-feature": "1.141.0", - "@webex/internal-plugin-mercury": "1.141.0", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0" - } - }, - "@webex/internal-plugin-mercury": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/internal-plugin-mercury/-/internal-plugin-mercury-1.141.0.tgz", - "integrity": "sha512-SqksM1vwlen5CZK3HKEcLGgMNpn9rfB9y7dwkW5uFO/ws6A0G+G1gH62CVChBWeO0sKtJYfaGSnY98Kjz98BnA==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/common-timers": "1.141.0", - "@webex/internal-plugin-device": "1.141.0", - "@webex/internal-plugin-feature": "1.141.0", - "@webex/internal-plugin-metrics": "1.141.0", - "@webex/webex-core": "1.141.0", - "backoff": "^2.5.0", - "envify": "^4.1.0", - "lodash": "^4.17.21", - "uuid": "^3.3.2", - "ws": "^4.1.0" - } - }, - "@webex/internal-plugin-metrics": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/internal-plugin-metrics/-/internal-plugin-metrics-1.141.0.tgz", - "integrity": "sha512-7ZFpGnLG45wk8EzNH3VdN8HdZNkSkggxhfZUjvvF1UGM4VTGkSfEGTVhzOLwiwrv2fIJkC9ttVCw8EXXbadp/A==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/common-timers": "1.141.0", - "@webex/internal-plugin-device": "1.141.0", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0" - } - }, - "@webex/internal-plugin-presence": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/internal-plugin-presence/-/internal-plugin-presence-1.141.0.tgz", - "integrity": "sha512-P+NbuzK6WIGWAkeGiM5FqNS/RhmI4YVsE0/SOsC6Rs5EADBB+MRuqRvJRgQni+onQYGFZFyreio7C0yw/pKVvw==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/internal-plugin-device": "1.141.0", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0", - "lodash": "^4.17.21" - } - }, - "@webex/internal-plugin-search": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/internal-plugin-search/-/internal-plugin-search-1.141.0.tgz", - "integrity": "sha512-iEs+Wg9ueKCO8E+skYlwycyi2WPk9f7iAUeP//JZJUq/JXEeA1fx6giikuxxqZBSBT5GL4Y4tZSAsaycM8lHLg==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/internal-plugin-conversation": "1.141.0", - "@webex/internal-plugin-encryption": "1.141.0", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0", - "lodash": "^4.17.21" - } - }, - "@webex/internal-plugin-support": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/internal-plugin-support/-/internal-plugin-support-1.141.0.tgz", - "integrity": "sha512-+XslVCP4aySXeAv/mDol43VjD3/W6i09UMk7URqHwcGykW8JwvS9a3+Ah90HC2iR10zZ8PtITnPE/fOS/gf8LQ==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/internal-plugin-device": "1.141.0", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0", - "lodash": "^4.17.21", - "uuid": "^3.3.2" - } - }, - "@webex/internal-plugin-user": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/internal-plugin-user/-/internal-plugin-user-1.141.0.tgz", - "integrity": "sha512-/qAFzmOSFb9lduUiJe+xhH5gtreeoru2PivbIHfj0JQdvYNLfl6T6N7XFcSfbfstqDGQ3SkOLqVG9v3v0e6ltw==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/internal-plugin-device": "1.141.0", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0", - "lodash": "^4.17.21" - } - }, - "@webex/plugin-attachment-actions": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/plugin-attachment-actions/-/plugin-attachment-actions-1.141.0.tgz", - "integrity": "sha512-FiNHehs/kSB6Pr0YpB2X7uFPwnIYDX3eyzgLmcwCkqS6qzIU11+c3ly6Ni0b6kvUAb6j/wWjA0y3XcHCWrYvrg==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/internal-plugin-conversation": "1.141.0", - "@webex/internal-plugin-mercury": "1.141.0", - "@webex/webex-core": "1.141.0", - "debug": "^3.2.6", - "envify": "^4.1.0", - "lodash": "^4.17.21" - } - }, - "@webex/plugin-authorization": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/plugin-authorization/-/plugin-authorization-1.141.0.tgz", - "integrity": "sha512-u/h4KvsO4AGCtFcryWrYiM2CUTfHNyhTgXyO3tpwO+xO77g0aqyv2+/IWZ/F5atbnpvSFreaXMd+uAHvl6WeUw==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/plugin-authorization-browser": "1.141.0", - "@webex/plugin-authorization-node": "1.141.0", - "envify": "^4.1.0" - } - }, - "@webex/plugin-authorization-browser": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/plugin-authorization-browser/-/plugin-authorization-browser-1.141.0.tgz", - "integrity": "sha512-wkKe2J76lUnRbxhUQKd6C5PhCv1+bxN1bckCV5VgV+dRwBpGEjkcVvsMrRRadesZrAj5Dxp7qSAso+JhiMAWmA==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/internal-plugin-device": "1.141.0", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0", - "lodash": "^4.17.21", - "uuid": "^3.3.2" - } - }, - "@webex/plugin-authorization-node": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/plugin-authorization-node/-/plugin-authorization-node-1.141.0.tgz", - "integrity": "sha512-QV2dKAQHwknVsyg/yxUCOeeXHjq3AI7T9iGmQ2ZQ/jh1GnnfBCLAJHKYIDtmo82Yf0vbKuGDsUQEfVDNRGtP7g==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/internal-plugin-device": "1.141.0", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0" - } - }, - "@webex/plugin-device-manager": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/plugin-device-manager/-/plugin-device-manager-1.141.0.tgz", - "integrity": "sha512-gPjJV1OxV8+jQ5lsdLjLicDZ4aK2D+rXr+CSjvJJ8iIqyNIGxj3zwlOA9HHic5Gw8Izzk8T8mle7oZSusuOB4w==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/internal-plugin-device": "1.141.0", - "@webex/internal-plugin-lyra": "1.141.0", - "@webex/internal-plugin-search": "1.141.0", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0", - "lodash": "^4.17.21", - "uuid": "^3.3.2" - } - }, - "@webex/plugin-logger": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/plugin-logger/-/plugin-logger-1.141.0.tgz", - "integrity": "sha512-XrgY3X0Caw94fb4G8hGjCYRtkxYCxn/Bot31gtXQi5w3QpkSb+a1BpF02m4phinl+SO/tv+IYXC5gwPE1ozB3Q==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0", - "lodash": "^4.17.21" - } - }, - "@webex/plugin-meetings": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/plugin-meetings/-/plugin-meetings-1.141.0.tgz", - "integrity": "sha512-mFEG5QSPuQzkqmY9Z15rueBy6d9NVjVWMA3LX9WnrZFIWroZpwYAS34am+giqj8cpgz0v8Xo1tFqwcUazbhEMg==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/common-timers": "1.141.0", - "@webex/internal-plugin-mercury": "1.141.0", - "@webex/webex-core": "1.141.0", - "bowser": "^2.11.0", - "btoa": "^1.2.1", - "envify": "^4.1.0", - "global": "^4.4.0", - "javascript-state-machine": "^3.1.0", - "lodash": "^4.17.21", - "readable-stream": "^3.6.0", - "sdp-transform": "^2.12.0", - "uuid": "^3.3.2", - "webrtc-adapter": "^7.7.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "@webex/plugin-memberships": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/plugin-memberships/-/plugin-memberships-1.141.0.tgz", - "integrity": "sha512-Dn4HwpqPvbvj6wsu7Hh9KRYmmAZXIlrZd1E84au/vsiLe/ZFV7ME4TCAQ0OcA3vDcZ9XVTPA7QnJL207xRtw1A==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/internal-plugin-conversation": "1.141.0", - "@webex/internal-plugin-mercury": "1.141.0", - "@webex/webex-core": "1.141.0", - "debug": "^3.2.6", - "envify": "^4.1.0", - "lodash": "^4.17.21" - } - }, - "@webex/plugin-messages": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/plugin-messages/-/plugin-messages-1.141.0.tgz", - "integrity": "sha512-quNgN3V/S0///fM/rPLVu4njIJ658CMeJx6IYgnO1Ii+2JzOa8BHYnQDWtlFR3FQhaa8g83aOLvRIooX/MY9Xg==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/internal-plugin-conversation": "1.141.0", - "@webex/internal-plugin-mercury": "1.141.0", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0", - "lodash": "^4.17.21" - } - }, - "@webex/plugin-people": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/plugin-people/-/plugin-people-1.141.0.tgz", - "integrity": "sha512-1LgvmhgWWNHEcyDhf+qhBl4125yonadNoMkQhYXBzHsWoaZQkM0qEd0FHE0MgBlcVa+V0Ik7vw2diIVyhGijIQ==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0" - } - }, - "@webex/plugin-rooms": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/plugin-rooms/-/plugin-rooms-1.141.0.tgz", - "integrity": "sha512-i99qJsURAEGHxf2mOnijoY98w22K4cJWMkB5iayt/lqwkF9uS2xKrf8A0QwUYP2dw3Q5P/RrLOlN+38IPoHX9g==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/internal-plugin-conversation": "1.141.0", - "@webex/internal-plugin-mercury": "1.141.0", - "@webex/webex-core": "1.141.0", - "debug": "^3.2.6", - "envify": "^4.1.0", - "lodash": "^4.17.21" - } - }, - "@webex/plugin-team-memberships": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/plugin-team-memberships/-/plugin-team-memberships-1.141.0.tgz", - "integrity": "sha512-rUSPJveQnv62odb4Z+06LztwopPQglNnAxhFlYi/NLTXEIGtfuB6v4IT8ED1aUJ7oYJhMHt/j7rVHEWo8fOWow==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0" - } - }, - "@webex/plugin-teams": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/plugin-teams/-/plugin-teams-1.141.0.tgz", - "integrity": "sha512-9nRaPrcppnetfqZUWoRdddwpg5bSd3fOQWB7vMVF0UzDOVcG4HCNTD8/2yZxZqxhDK/qA0+IgcR7Crx0+rDW/g==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0" - } - }, - "@webex/plugin-webhooks": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/plugin-webhooks/-/plugin-webhooks-1.141.0.tgz", - "integrity": "sha512-AUW7lDh9iTkeGJVo1qn7R4KOhYjPS5Kti9Sc2LK3xUlwA7Yf5NnhD86LNQC6QJDiywe9BSPH3WAceNPNPyNANg==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0" - } - }, - "@webex/storage-adapter-local-storage": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/storage-adapter-local-storage/-/storage-adapter-local-storage-1.141.0.tgz", - "integrity": "sha512-YgzFej33u1/omY903yihnvzr1xREdQ8vtsa1IvMxxqEggO1iHEZxpglsctn6dgVhADRum0DtHP+rXCd8mz/QGA==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0" - } - }, - "@webex/webex-core": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@webex/webex-core/-/webex-core-1.141.0.tgz", - "integrity": "sha512-oXa8cNNWXj396xuYEnEUnN+UCjRjc4kicXYjMHIUgITqImvt/a0r0srEE1bEtoVlluE9TpupmwviP9xdUyh0OQ==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.14.8", - "@webex/common": "1.141.0", - "@webex/common-timers": "1.141.0", - "@webex/http-core": "1.141.0", - "@webex/webex-core": "1.141.0", - "ampersand-collection": "^2.0.2", - "ampersand-events": "^2.0.2", - "ampersand-state": "^5.0.3", - "core-decorators": "^0.20.0", - "crypto-js": "^3.1.9-1", - "envify": "^4.1.0", - "jsonwebtoken": "^8.5.1", - "lodash": "^4.17.21", - "uuid": "^3.3.2" - } - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==" - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "dependencies": { - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - } - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "algoliasearch": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.19.1.tgz", - "integrity": "sha512-IJF5b93b2MgAzcE/tuzW0yOPnuUyRgGAtaPv5UUywXM8kzqfdwZTO4sPJBzoGz1eOy6H9uEchsJsBFTELZSu+g==", - "dev": true, - "requires": { - "@algolia/cache-browser-local-storage": "4.19.1", - "@algolia/cache-common": "4.19.1", - "@algolia/cache-in-memory": "4.19.1", - "@algolia/client-account": "4.19.1", - "@algolia/client-analytics": "4.19.1", - "@algolia/client-common": "4.19.1", - "@algolia/client-personalization": "4.19.1", - "@algolia/client-search": "4.19.1", - "@algolia/logger-common": "4.19.1", - "@algolia/logger-console": "4.19.1", - "@algolia/requester-browser-xhr": "4.19.1", - "@algolia/requester-common": "4.19.1", - "@algolia/requester-node-http": "4.19.1", - "@algolia/transporter": "4.19.1" - } - }, - "ampersand-class-extend": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ampersand-class-extend/-/ampersand-class-extend-2.0.0.tgz", - "integrity": "sha1-Uolf+lkhdjSmGI/RhLEEj12Aiv8=", - "dev": true, - "requires": { - "lodash": "^4.11.1" - } - }, - "ampersand-collection": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ampersand-collection/-/ampersand-collection-2.0.2.tgz", - "integrity": "sha512-IjDa4HTL/tdQDDL0SGyWk4AHD02iNtUSLRWkAsJ2biPvapljW9HNgIEIdbPnnR+7Gb9BJkjesaLNjVZfAMzeuA==", - "dev": true, - "requires": { - "ampersand-class-extend": "^2.0.0", - "ampersand-events": "^2.0.1", - "ampersand-version": "^1.0.2", - "lodash": "^4.11.1" - } - }, - "ampersand-events": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ampersand-events/-/ampersand-events-2.0.2.tgz", - "integrity": "sha1-9AK8LhgwX6vZldvc07cFe73X00c=", - "dev": true, - "requires": { - "ampersand-version": "^1.0.2", - "lodash": "^4.6.1" - } - }, - "ampersand-state": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/ampersand-state/-/ampersand-state-5.0.3.tgz", - "integrity": "sha512-sr904K5zvw6mkGjFHhTcfBIdpoJ6mn/HrFg7OleRmBpw3apLb3Z0gVrgRTb7kK1wOLI34vs4S+IXqNHUeqWCzw==", - "dev": true, - "requires": { - "ampersand-events": "^2.0.1", - "ampersand-version": "^1.0.0", - "array-next": "~0.0.1", - "key-tree-store": "^1.3.0", - "lodash": "^4.12.0" - } - }, - "ampersand-version": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ampersand-version/-/ampersand-version-1.0.2.tgz", - "integrity": "sha1-/489TOrE0yzNg/a9Zpc5f3tZ4sA=", - "dev": true, - "requires": { - "find-root": "^0.1.1", - "through2": "^0.6.3" - } - }, - "anser": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", - "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", - "dev": true, - "optional": true, - "peer": true - }, - "ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", - "dev": true, - "requires": { - "string-width": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "ansi-fragments": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", - "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "colorette": "^1.0.7", - "slice-ansi": "^2.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "optional": true, - "peer": true - }, - "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, - "optional": true, - "peer": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "optional": true, - "peer": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "optional": true, - "peer": true - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "optional": true, - "peer": true - }, - "ansi-sequence-parser": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", - "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "appdirsjs": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.7.tgz", - "integrity": "sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==", - "dev": true, - "optional": true, - "peer": true - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" - }, - "array-next": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-next/-/array-next-0.0.1.tgz", - "integrity": "sha1-5eRmCkwn/agVH/d2QnXQCQAGK+E=", - "dev": true - }, - "array-parallel": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/array-parallel/-/array-parallel-0.1.3.tgz", - "integrity": "sha1-j3hTCJJu1apHjEfmTRszS2wMlH0=", - "dev": true - }, - "array-series": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/array-series/-/array-series-0.1.5.tgz", - "integrity": "sha1-3103v8XC7wdV4qpPkv6ufUtaly8=", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - }, - "arrgv": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arrgv/-/arrgv-1.0.2.tgz", - "integrity": "sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw==" - }, - "arrify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", - "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==" - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "optional": true, - "peer": true - }, - "asmcrypto.js": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/asmcrypto.js/-/asmcrypto.js-0.22.0.tgz", - "integrity": "sha512-usgMoyXjMbx/ZPdzTSXExhMPur2FTdz/Vo5PVx2gIaBcdAAJNOFlsdgqveM8Cff7W0v+xrf9BwjOV26JSAF9qA==", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1js": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-2.1.1.tgz", - "integrity": "sha512-t9u0dU0rJN4ML+uxgN6VM2Z4H5jWIYm0w8LsZLzMJaQsgL3IJNbxHgmbWDvJAwspyHpDFuzUaUFh4c05UB4+6g==", - "dev": true, - "requires": { - "pvutils": "latest" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "ast-types": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", - "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "tslib": "^2.0.1" - } - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true, - "optional": true, - "peer": true - }, - "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", - "dev": true - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "optional": true - }, - "ava": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ava/-/ava-4.1.0.tgz", - "integrity": "sha512-QD6MBWHzagAwb9vxduXzVWx6Q77DUHLxvIebSY6+enL+Ri6KzSZYj0IBOFifA26wfpJPZnWKLUh3vwx1LyVh/g==", - "requires": { - "acorn": "^8.7.0", - "acorn-walk": "^8.2.0", - "ansi-styles": "^6.1.0", - "arrgv": "^1.0.2", - "arrify": "^3.0.0", - "callsites": "^4.0.0", - "cbor": "^8.1.0", - "chalk": "^5.0.0", - "chokidar": "^3.5.3", - "chunkd": "^2.0.1", - "ci-info": "^3.3.0", - "ci-parallel-vars": "^1.0.1", - "clean-yaml-object": "^0.1.0", - "cli-truncate": "^3.1.0", - "code-excerpt": "^4.0.0", - "common-path-prefix": "^3.0.0", - "concordance": "^5.0.4", - "currently-unhandled": "^0.4.1", - "debug": "^4.3.3", - "del": "^6.0.0", - "emittery": "^0.10.1", - "figures": "^4.0.0", - "globby": "^13.1.1", - "ignore-by-default": "^2.0.0", - "indent-string": "^5.0.0", - "is-error": "^2.2.2", - "is-plain-object": "^5.0.0", - "is-promise": "^4.0.0", - "matcher": "^5.0.0", - "mem": "^9.0.2", - "ms": "^2.1.3", - "p-event": "^5.0.1", - "p-map": "^5.3.0", - "picomatch": "^2.3.1", - "pkg-conf": "^4.0.0", - "plur": "^5.1.0", - "pretty-ms": "^7.0.1", - "resolve-cwd": "^3.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.5", - "strip-ansi": "^7.0.1", - "supertap": "^3.0.1", - "temp-dir": "^2.0.0", - "write-file-atomic": "^4.0.1", - "yargs": "^17.3.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "ansi-styles": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", - "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==" - }, - "chalk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", - "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==" - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==" - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "ignore-by-default": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-2.0.0.tgz", - "integrity": "sha512-+mQSgMRiFD3L3AOxLYOCxjIq4OnAmo5CIuC+lj5ehCJcPtV++QacEV7FdpzvYxH6DaOySWzQU6RR0lPLy37ckA==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "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==" - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - } - } - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, - "axios": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", - "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", - "requires": { - "follow-redirects": "^1.14.4" - } - }, - "b64-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/b64-lite/-/b64-lite-1.4.0.tgz", - "integrity": "sha512-aHe97M7DXt+dkpa8fHlCcm1CnskAHrJqEfMI0KN7dwqlzml/aUe1AGt6lk51HzrSfVD67xOso84sOpr+0wIe2w==", - "dev": true, - "requires": { - "base-64": "^0.1.0" - } - }, - "b64u-lite": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/b64u-lite/-/b64u-lite-1.1.0.tgz", - "integrity": "sha512-929qWGDVCRph7gQVTC6koHqQIpF4vtVaSbwLltFQo44B1bYUquALswZdBKFfrJCPEnsCOvWkJsPdQYZ/Ukhw8A==", - "dev": true, - "requires": { - "b64-lite": "^1.4.0" - } - }, - "babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "dev": true, - "optional": true, - "peer": true, - "requires": {} - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", - "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.2", - "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", - "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.2", - "core-js-compat": "^3.31.0" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", - "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.2" - } - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "7.0.0-beta.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", - "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==", - "dev": true, - "optional": true, - "peer": true - }, - "babel-plugin-transform-flow-enums": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", - "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/plugin-syntax-flow": "^7.12.1" - } - }, - "babel-preset-fbjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz", - "integrity": "sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-syntax-class-properties": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-block-scoped-functions": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-member-expression-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-object-super": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-property-literals": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" - } - }, - "backoff": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", - "integrity": "sha1-9hbtqdPktmuMp/ynn2lXIsX44m8=", - "dev": true, - "requires": { - "precond": "0.2" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base-64": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", - "integrity": "sha1-eAqZyE59YAJgNhURxId2E78k9rs=", - "dev": true - }, - "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 - }, - "base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "bl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", - "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", - "dev": true, - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "blueimp-md5": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", - "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==" - }, - "body-scroll-lock": { - "version": "4.0.0-beta.0", - "resolved": "https://registry.npmjs.org/body-scroll-lock/-/body-scroll-lock-4.0.0-beta.0.tgz", - "integrity": "sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ==", - "dev": true - }, - "bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", - "dev": true - }, - "boxen": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", - "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", - "dev": true, - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "cli-boxes": "^2.2.0", - "string-width": "^4.1.0", - "term-size": "^2.1.0", - "type-fest": "^0.8.1", - "widest-line": "^3.1.0" - }, - "dependencies": { - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "bson": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", - "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==", - "dev": true - }, - "btoa": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", - "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", - "dev": true - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", - "dev": true - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true, - "optional": true, - "peer": true - }, - "bytestreamjs": { - "version": "1.0.29", - "resolved": "https://registry.npmjs.org/bytestreamjs/-/bytestreamjs-1.0.29.tgz", - "integrity": "sha512-Mri3yqoo9YvdaSvD5OYl4Rdu9zCBJInW/Ez31sdlNY4ikMy//EvTTmidfLcs0e+NBvKVEpPzYvJAesjgMdjnZg==", - "dev": true - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "callsites": "^2.0.0" - }, - "dependencies": { - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-4.0.0.tgz", - "integrity": "sha512-y3jRROutgpKdz5vzEhWM34TidDU8vkJppF8dszITeb1PQmSqV3DTxyV8G/lyO/DNvtE1YTedehmw9MPZsCBHxQ==" - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001522", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001522.tgz", - "integrity": "sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg==", - "dev": true, - "optional": true, - "peer": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "cbor": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", - "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", - "requires": { - "nofilter": "^3.1.0" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chunkd": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/chunkd/-/chunkd-2.0.1.tgz", - "integrity": "sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==" - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "ci-parallel-vars": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ci-parallel-vars/-/ci-parallel-vars-1.0.1.tgz", - "integrity": "sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==" - }, - "clean": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/clean/-/clean-4.0.2.tgz", - "integrity": "sha1-yfAW9wonzB8aOfypW1BAR+S28VM=", - "dev": true, - "requires": { - "async": "^0.9.0", - "minimist": "^1.1.0", - "mix2": "^1.0.0", - "skema": "^1.0.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - }, - "clean-yaml-object": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz", - "integrity": "sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g=" - }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", - "dev": true, - "optional": true, - "peer": true - }, - "cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", - "requires": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "optional": true, - "peer": true - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "dependencies": { - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "code-excerpt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-4.0.0.tgz", - "integrity": "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==", - "requires": { - "convert-to-spaces": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", - "dev": true, - "optional": true, - "peer": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true, - "optional": true, - "peer": true - }, - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "optional": true - }, - "common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==" - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true, - "optional": true, - "peer": true - }, - "compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", - "dev": true, - "optional": true - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "optional": true, - "peer": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concordance": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/concordance/-/concordance-5.0.4.tgz", - "integrity": "sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==", - "requires": { - "date-time": "^3.1.0", - "esutils": "^2.0.3", - "fast-diff": "^1.2.0", - "js-string-escape": "^1.0.1", - "lodash": "^4.17.15", - "md5-hex": "^3.0.1", - "semver": "^7.3.2", - "well-known-symbols": "^2.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - } - }, - "connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true, - "optional": true, - "peer": true - }, - "convert-to-spaces": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz", - "integrity": "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==" - }, - "core-decorators": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/core-decorators/-/core-decorators-0.20.0.tgz", - "integrity": "sha1-YFiWYkBTr4wo775zXCWjAaYcZcU=", - "dev": true - }, - "core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "dev": true - }, - "core-js-compat": { - "version": "3.32.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.1.tgz", - "integrity": "sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "browserslist": "^4.21.10" - } - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - } - }, - "cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "crypto-js": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz", - "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==", - "dev": true - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true - }, - "csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", - "dev": true - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "requires": { - "array-find-index": "^1.0.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "date-time": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz", - "integrity": "sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==", - "requires": { - "time-zone": "^1.0.0" - } - }, - "dayjs": { - "version": "1.11.9", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", - "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==", - "dev": true, - "optional": true, - "peer": true - }, - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "optional": true, - "peer": true - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "optional": true, - "peer": true - }, - "defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "clone": "^1.0.2" - } - }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true - }, - "del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", - "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "dependencies": { - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "requires": { - "aggregate-error": "^3.0.0" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "denodeify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", - "integrity": "sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==", - "dev": true, - "optional": true, - "peer": true - }, - "denque": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", - "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", - "dev": true - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "optional": true, - "peer": true - }, - "deprecated-react-native-prop-types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-4.1.0.tgz", - "integrity": "sha512-WfepZHmRbbdTvhcolb8aOKEvQdcmTMn5tKLbqbXmkBvjFjRVWAYqsXk/DBsV8TZxws8SdGHLuHaJrHSQUPRdfw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@react-native/normalize-colors": "*", - "invariant": "*", - "prop-types": "*" - } - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "optional": true, - "peer": true - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "requires": { - "path-type": "^4.0.0" - } - }, - "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 - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true, - "optional": true, - "peer": true - }, - "electron-to-chromium": { - "version": "1.4.496", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.496.tgz", - "integrity": "sha512-qeXC3Zbykq44RCrBa4kr8v/dWzYJA8rAwpyh9Qd+NKWoJfjG5vvJqy9XOJ9H4P/lqulZBCgUWAYi+FeK5AuJ8g==", - "dev": true, - "optional": true, - "peer": true - }, - "emittery": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.1.tgz", - "integrity": "sha512-OBSS9uVXbpgqEGq2V5VnpfCu9vSnfiR9eYVJmxFYToNIcWRHkM4BAFbJe/PWjf/pQdEL7OPxd2jOW/bJiyX7gg==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "optional": true, - "peer": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "envify": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/envify/-/envify-4.1.0.tgz", - "integrity": "sha512-IKRVVoAYr4pIx4yIWNsz9mOsboxlNXiu7TNBnem/K/uTHdkyzXWDzHCK7UTolqBbgaBz0tQHsD3YNls0uIIjiw==", - "dev": true, - "requires": { - "esprima": "^4.0.0", - "through": "~2.3.4" - } - }, - "envinfo": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", - "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", - "dev": true, - "optional": true, - "peer": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "stackframe": "^1.3.4" - } - }, - "errorhandler": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", - "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "accepts": "~1.3.7", - "escape-html": "~1.0.3" - } - }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "dev": true - }, - "esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true, - "optional": true, - "peer": true - }, - "escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "optional": true, - "peer": true - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true, - "optional": true, - "peer": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "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, - "optional": true, - "peer": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "exifr": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/exifr/-/exifr-5.0.6.tgz", - "integrity": "sha512-iDB4IhKoKVF+uDDrHRlyNxWqGaTxYluVWqvBWVG54HkQZe8qkFYl9eQrjEP3d8Q4UMBZ9rWu3Pa+mfC+o4CZuw==", - "dev": true - }, - "expo-modules-autolinking": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.0.3.tgz", - "integrity": "sha512-azkCRYj/DxbK4udDuDxA9beYzQTwpJ5a9QA0bBgha2jHtWdFGF4ZZWSY+zNA5mtU3KqzYt8jWHfoqgSvKyu1Aw==", - "dev": true, - "optional": true, - "requires": { - "chalk": "^4.1.0", - "commander": "^7.2.0", - "fast-glob": "^3.2.5", - "find-up": "~5.0.0", - "fs-extra": "^9.1.0" - } - }, - "expo-random": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-11.2.0.tgz", - "integrity": "sha512-kgBJBB02iCX/kpoTHN57V7b4hWOCj4eACIQDl7bN94lycUcZu62T00P/rVZIcE/29x0GAi+Pw5ZWj0NlqBsMQQ==", - "dev": true, - "optional": true, - "requires": { - "base64-js": "^1.3.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" - }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "optional": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-xml-parser": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.7.tgz", - "integrity": "sha512-J8r6BriSLO1uj2miOk1NW0YVm8AGOOu3Si2HQp/cSmo6EA4m3fcwu2WKjJ4RK9wMLBtg69y1kS8baDiQBR41Ig==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "strnum": "^1.0.5" - } - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "requires": { - "reusify": "^1.0.4" - } - }, - "fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bser": "2.1.1" - } - }, - "figures": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-4.0.0.tgz", - "integrity": "sha512-VnYcWq6H6F0qDN0QnorznBr0abEovifzUokmnezpKZBUbDmbLAt7LMryOp1TKFVxLxyNYkxEkCEADZR58U9oSw==", - "requires": { - "escape-string-regexp": "^5.0.0", - "is-unicode-supported": "^1.0.0" - } - }, - "file-type": { - "version": "16.5.3", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.3.tgz", - "integrity": "sha512-uVsl7iFhHSOY4bEONLlTK47iAHtNsFHWP5YE4xJfZ4rnX7S1Q3wce09XgqSC7E/xh8Ncv/be1lNoyprlUH/x6A==", - "dev": true, - "requires": { - "readable-web-to-node-stream": "^3.0.0", - "strtok3": "^6.2.4", - "token-types": "^4.1.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "dependencies": { - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - } - } - }, - "find-root": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-0.1.2.tgz", - "integrity": "sha1-mNImfP8ZFsyvJ0OzoO6oHXnX3NE=", - "dev": true - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "optional": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flow-enums-runtime": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/flow-enums-runtime/-/flow-enums-runtime-0.0.5.tgz", - "integrity": "sha512-PSZF9ZuaZD03sT9YaIs0FrGJ7lSUw7rHZIex+73UYVXg46eL/wxN5PaVcPJFudE2cJu5f0fezitV5aBkLHPUOQ==", - "dev": true, - "optional": true, - "peer": true - }, - "flow-parser": { - "version": "0.206.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.206.0.tgz", - "integrity": "sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w==", - "dev": true, - "optional": true, - "peer": true - }, - "focus-trap": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.2.tgz", - "integrity": "sha512-p6vGNNWLDGwJCiEjkSK6oERj/hEyI9ITsSwIUICBoKLlWiTWXJRfQibCwcoi50rTZdbi87qDtUlMCmQwsGSgPw==", - "dev": true, - "requires": { - "tabbable": "^6.2.0" - } - }, - "follow-redirects": { - "version": "1.14.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", - "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==" - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "optional": true, - "peer": true - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "optional": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "optional": true, - "peer": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "dev": true, - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "global-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", - "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", - "dev": true, - "requires": { - "ini": "1.3.7" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "optional": true, - "peer": true - }, - "globby": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.1.tgz", - "integrity": "sha512-XMzoDZbGZ37tufiv7g0N4F/zp3zkwdFtVbV3EHsVl1KQr4RPLfNoT068/97RPshz2J5xYNEjLKKBKaGHifBd3Q==", - "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "dependencies": { - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" - } - } - }, - "gm": { - "version": "1.23.1", - "resolved": "https://registry.npmjs.org/gm/-/gm-1.23.1.tgz", - "integrity": "sha1-Lt7rlYCE0PjqeYjl2ZWxx9/BR3c=", - "dev": true, - "requires": { - "array-parallel": "~0.1.3", - "array-series": "~0.1.5", - "cross-spawn": "^4.0.0", - "debug": "^3.1.0" - } - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true - }, - "hermes-estree": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.12.0.tgz", - "integrity": "sha512-+e8xR6SCen0wyAKrMT3UD0ZCCLymKhRgjEB5sS28rKiFir/fXgLoeRilRUssFCILmGHb+OvHDUlhxs0+IEyvQw==", - "dev": true, - "optional": true, - "peer": true - }, - "hermes-parser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.12.0.tgz", - "integrity": "sha512-d4PHnwq6SnDLhYl3LHNHvOg7nQ6rcI7QVil418REYksv0Mh3cEkHDcuhGxNQ3vgnLSLl4QSvDrFCwQNYdpWlzw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "hermes-estree": "0.12.0" - } - }, - "hermes-profile-transformer": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz", - "integrity": "sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "dependencies": { - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "optional": true, - "peer": true - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" - }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true - }, - "image-size": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", - "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "queue": "6.0.2" - } - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", - "dev": true - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "optional": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", - "dev": true, - "optional": true, - "peer": true - }, - "irregular-plurals": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.3.0.tgz", - "integrity": "sha512-MVBLKUTangM3EfRPFROhmWQQKRDsrgI83J8GS3jXy+OwYqiR2/aoWndYQ5416jLE3uaGgLH7ncme3X9y09gZ3g==" - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, - "optional": true, - "peer": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", - "dev": true, - "optional": true, - "peer": true - }, - "is-error": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-error/-/is-error-2.2.2.tgz", - "integrity": "sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg==" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "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 - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-installed-globally": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", - "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", - "dev": true, - "requires": { - "global-dirs": "^2.0.1", - "is-path-inside": "^3.0.1" - } - }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "optional": true, - "peer": true - }, - "is-npm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", - "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" - }, - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" - }, - "is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" - }, - "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, - "optional": true, - "peer": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-unicode-supported": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.2.0.tgz", - "integrity": "sha512-wH+U77omcRzevfIG8dDhTS0V9zZyweakfD01FULl97+0EHiJTTZtJqxPSkIIo/SDPv/i07k/C9jAPY+jwLLeUQ==" - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true, - "optional": true, - "peer": true - }, - "is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "optional": true, - "peer": true - }, - "isomorphic-webcrypto": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/isomorphic-webcrypto/-/isomorphic-webcrypto-2.3.8.tgz", - "integrity": "sha512-XddQSI0WYlSCjxtm1AI8kWQOulf7hAN3k3DclF1sxDJZqOe0pcsOt675zvWW91cZH9hYs3nlA3Ev8QK5i80SxQ==", - "dev": true, - "requires": { - "@peculiar/webcrypto": "^1.0.22", - "@unimodules/core": "*", - "@unimodules/react-native-adapter": "*", - "asmcrypto.js": "^0.22.0", - "b64-lite": "^1.3.1", - "b64u-lite": "^1.0.1", - "expo-random": "*", - "msrcrypto": "^1.5.6", - "react-native-securerandom": "^0.1.1", - "str2buf": "^1.3.0", - "webcrypto-shim": "^0.1.4" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "javascript-state-machine": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/javascript-state-machine/-/javascript-state-machine-3.1.0.tgz", - "integrity": "sha512-BwhYxQ1OPenBPXC735RgfB+ZUG8H3kjsx8hrYTgWnoy6TPipEy4fiicyhT2lxRKAXq9pG7CfFT8a2HLr6Hmwxg==", - "dev": true - }, - "jest-environment-node": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.2.tgz", - "integrity": "sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@jest/environment": "^29.6.2", - "@jest/fake-timers": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "jest-mock": "^29.6.2", - "jest-util": "^29.6.2" - } - }, - "jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "dev": true, - "optional": true, - "peer": true - }, - "jest-message-util": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.2.tgz", - "integrity": "sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "optional": true, - "peer": true - }, - "pretty-format": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", - "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@jest/schemas": "^29.6.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "jest-mock": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.2.tgz", - "integrity": "sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@jest/types": "^29.6.1", - "@types/node": "*", - "jest-util": "^29.6.2" - } - }, - "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true, - "optional": true, - "peer": true - }, - "jest-util": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.2.tgz", - "integrity": "sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "dependencies": { - "ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "jest-validate": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.2.tgz", - "integrity": "sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@jest/types": "^29.6.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "leven": "^3.1.0", - "pretty-format": "^29.6.2" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "optional": true, - "peer": true - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "optional": true, - "peer": true - }, - "pretty-format": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", - "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@jest/schemas": "^29.6.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "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, - "optional": true, - "peer": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "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, - "optional": true, - "peer": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "joi": { - "version": "17.9.2", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.9.2.tgz", - "integrity": "sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, - "js-string-escape": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", - "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "optional": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsc-android": { - "version": "250231.0.0", - "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-250231.0.0.tgz", - "integrity": "sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw==", - "dev": true, - "optional": true, - "peer": true - }, - "jsc-safe-url": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz", - "integrity": "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==", - "dev": true, - "optional": true, - "peer": true - }, - "jscodeshift": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", - "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/core": "^7.13.16", - "@babel/parser": "^7.13.16", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", - "@babel/preset-flow": "^7.13.13", - "@babel/preset-typescript": "^7.13.0", - "@babel/register": "^7.13.16", - "babel-core": "^7.0.0-bridge.0", - "chalk": "^4.1.2", - "flow-parser": "0.*", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "neo-async": "^2.5.0", - "node-dir": "^0.1.17", - "recast": "^0.21.0", - "temp": "^0.8.4", - "write-file-atomic": "^2.3.0" - }, - "dependencies": { - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - } - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "optional": true, - "peer": true - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true, - "optional": true, - "peer": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "optional": true, - "peer": true - }, - "jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", - "dev": true, - "requires": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^5.6.0" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dev": true, - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dev": true, - "requires": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "key-tree-store": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/key-tree-store/-/key-tree-store-1.3.0.tgz", - "integrity": "sha1-XqKa/CUppCWThDfWlVtxTOapeR8=", - "dev": true - }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "requires": { - "json-buffer": "3.0.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "optional": true, - "peer": true - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "optional": true, - "peer": true - }, - "latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dev": true, - "requires": { - "package-json": "^6.3.0" - } - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "optional": true, - "peer": true - }, - "load-json-file": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-7.0.1.tgz", - "integrity": "sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==" - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "optional": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash._arraycopy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz", - "integrity": "sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE=", - "dev": true - }, - "lodash._arrayeach": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz", - "integrity": "sha1-urFWsqkNPxu9XGU0AzSeXlkz754=", - "dev": true - }, - "lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "dev": true, - "requires": { - "lodash._basecopy": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "lodash._baseclone": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz", - "integrity": "sha1-MDUZv2OT/n5C802LYw73eU41Qrc=", - "dev": true, - "requires": { - "lodash._arraycopy": "^3.0.0", - "lodash._arrayeach": "^3.0.0", - "lodash._baseassign": "^3.0.0", - "lodash._basefor": "^3.0.0", - "lodash.isarray": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "lodash._basefor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz", - "integrity": "sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI=", - "dev": true - }, - "lodash._bindcallback": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", - "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", - "dev": true - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true - }, - "lodash.clone": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-3.0.3.tgz", - "integrity": "sha1-hGiMc9MrWpDKJWFpY/GJJSqZcEM=", - "dev": true, - "requires": { - "lodash._baseclone": "^3.0.0", - "lodash._bindcallback": "^3.0.0", - "lodash._isiterateecall": "^3.0.0" - } - }, - "lodash.clonedeep": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz", - "integrity": "sha1-oKHkDYKl6on/WxR7hETtY9koJ9s=", - "dev": true, - "requires": { - "lodash._baseclone": "^3.0.0", - "lodash._bindcallback": "^3.0.0" - } - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true, - "optional": true, - "peer": true - }, - "lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=", - "dev": true - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=", - "dev": true - }, - "lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=", - "dev": true - }, - "lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=", - "dev": true - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", - "dev": true - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, - "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", - "dev": true - }, - "lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", - "dev": true, - "optional": true, - "peer": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "dependencies": { - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "logkitty": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", - "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ansi-fragments": "^0.2.1", - "dayjs": "^1.8.15", - "yargs": "^15.1.0" - }, - "dependencies": { - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true, - "optional": true, - "peer": true - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "optional": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "magic-string": { - "version": "0.30.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.2.tgz", - "integrity": "sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==", - "dev": true, - "requires": { - "@jridgewell/sourcemap-codec": "^1.4.15" - } - }, - "make-array": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/make-array/-/make-array-0.1.2.tgz", - "integrity": "sha1-M14267DFpDFU0hIToeyuriobs+8=", - "dev": true - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "requires": { - "p-defer": "^1.0.0" - } - }, - "mark.js": { - "version": "8.11.1", - "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", - "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", - "dev": true - }, - "matcher": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-5.0.0.tgz", - "integrity": "sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==", - "requires": { - "escape-string-regexp": "^5.0.0" - } - }, - "md5-hex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-3.0.1.tgz", - "integrity": "sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==", - "requires": { - "blueimp-md5": "^2.10.0" - } - }, - "mem": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/mem/-/mem-9.0.2.tgz", - "integrity": "sha512-F2t4YIv9XQUBHt6AOJ0y7lSmP1+cY7Fm1DRh9GClTGzKST7UWLMx6ly9WZdLH/G/ppM5RL4MlQfRT71ri9t19A==", - "requires": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^4.0.0" - } - }, - "memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", - "dev": true, - "optional": true, - "peer": true - }, - "memory-pager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "dev": true, - "optional": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "optional": true, - "peer": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "metro": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.76.7.tgz", - "integrity": "sha512-67ZGwDeumEPnrHI+pEDSKH2cx+C81Gx8Mn5qOtmGUPm/Up9Y4I1H2dJZ5n17MWzejNo0XAvPh0QL0CrlJEODVQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.0", - "@babel/parser": "^7.20.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.20.0", - "@babel/types": "^7.20.0", - "accepts": "^1.3.7", - "async": "^3.2.2", - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "connect": "^3.6.5", - "debug": "^2.2.0", - "denodeify": "^1.2.1", - "error-stack-parser": "^2.0.6", - "graceful-fs": "^4.2.4", - "hermes-parser": "0.12.0", - "image-size": "^1.0.2", - "invariant": "^2.2.4", - "jest-worker": "^27.2.0", - "jsc-safe-url": "^0.2.2", - "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.76.7", - "metro-cache": "0.76.7", - "metro-cache-key": "0.76.7", - "metro-config": "0.76.7", - "metro-core": "0.76.7", - "metro-file-map": "0.76.7", - "metro-inspector-proxy": "0.76.7", - "metro-minify-terser": "0.76.7", - "metro-minify-uglify": "0.76.7", - "metro-react-native-babel-preset": "0.76.7", - "metro-resolver": "0.76.7", - "metro-runtime": "0.76.7", - "metro-source-map": "0.76.7", - "metro-symbolicate": "0.76.7", - "metro-transform-plugins": "0.76.7", - "metro-transform-worker": "0.76.7", - "mime-types": "^2.1.27", - "node-fetch": "^2.2.0", - "nullthrows": "^1.1.1", - "rimraf": "^3.0.2", - "serialize-error": "^2.1.0", - "source-map": "^0.5.6", - "strip-ansi": "^6.0.0", - "throat": "^5.0.0", - "ws": "^7.5.1", - "yargs": "^17.6.2" - }, - "dependencies": { - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true, - "optional": true, - "peer": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "metro-runtime": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.76.7.tgz", - "integrity": "sha512-MuWHubQHymUWBpZLwuKZQgA/qbb35WnDAKPo83rk7JRLIFPvzXSvFaC18voPuzJBt1V98lKQIonh6MiC9gd8Ug==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/runtime": "^7.0.0", - "react-refresh": "^0.4.0" - } - }, - "metro-source-map": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.76.7.tgz", - "integrity": "sha512-Prhx7PeRV1LuogT0Kn5VjCuFu9fVD68eefntdWabrksmNY6mXK8pRqzvNJOhTojh6nek+RxBzZeD6MIOOyXS6w==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/traverse": "^7.20.0", - "@babel/types": "^7.20.0", - "invariant": "^2.2.4", - "metro-symbolicate": "0.76.7", - "nullthrows": "^1.1.1", - "ob1": "0.76.7", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "optional": true, - "peer": true - }, - "ob1": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.76.7.tgz", - "integrity": "sha512-BQdRtxxoUNfSoZxqeBGOyuT9nEYSn18xZHwGMb0mMVpn2NBcYbnyKY4BK2LIHRgw33CBGlUmE+KMaNvyTpLLtQ==", - "dev": true, - "optional": true, - "peer": true - }, - "serialize-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", - "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==", - "dev": true, - "optional": true, - "peer": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "optional": true, - "peer": true - }, - "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "optional": true, - "peer": true, - "requires": {} - } - } - }, - "metro-babel-transformer": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.76.7.tgz", - "integrity": "sha512-bgr2OFn0J4r0qoZcHrwEvccF7g9k3wdgTOgk6gmGHrtlZ1Jn3oCpklW/DfZ9PzHfjY2mQammKTc19g/EFGyOJw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/core": "^7.20.0", - "hermes-parser": "0.12.0", - "nullthrows": "^1.1.1" - } - }, - "metro-cache": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.76.7.tgz", - "integrity": "sha512-nWBMztrs5RuSxZRI7hgFgob5PhYDmxICh9FF8anm9/ito0u0vpPvRxt7sRu8fyeD2AHdXqE7kX32rWY0LiXgeg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "metro-core": "0.76.7", - "rimraf": "^3.0.2" - } - }, - "metro-cache-key": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.76.7.tgz", - "integrity": "sha512-0pecoIzwsD/Whn/Qfa+SDMX2YyasV0ndbcgUFx7w1Ct2sLHClujdhQ4ik6mvQmsaOcnGkIyN0zcceMDjC2+BFQ==", - "dev": true, - "optional": true, - "peer": true - }, - "metro-config": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.76.7.tgz", - "integrity": "sha512-CFDyNb9bqxZemiChC/gNdXZ7OQkIwmXzkrEXivcXGbgzlt/b2juCv555GWJHyZSlorwnwJfY3uzAFu4A9iRVfg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "connect": "^3.6.5", - "cosmiconfig": "^5.0.5", - "jest-validate": "^29.2.1", - "metro": "0.76.7", - "metro-cache": "0.76.7", - "metro-core": "0.76.7", - "metro-runtime": "0.76.7" - }, - "dependencies": { - "metro-runtime": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.76.7.tgz", - "integrity": "sha512-MuWHubQHymUWBpZLwuKZQgA/qbb35WnDAKPo83rk7JRLIFPvzXSvFaC18voPuzJBt1V98lKQIonh6MiC9gd8Ug==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/runtime": "^7.0.0", - "react-refresh": "^0.4.0" - } - } - } - }, - "metro-core": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.76.7.tgz", - "integrity": "sha512-0b8KfrwPmwCMW+1V7ZQPkTy2tsEKZjYG9Pu1PTsu463Z9fxX7WaR0fcHFshv+J1CnQSUTwIGGjbNvj1teKe+pw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "lodash.throttle": "^4.1.1", - "metro-resolver": "0.76.7" - } - }, - "metro-file-map": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.76.7.tgz", - "integrity": "sha512-s+zEkTcJ4mOJTgEE2ht4jIo1DZfeWreQR3tpT3gDV/Y/0UQ8aJBTv62dE775z0GLsWZApiblAYZsj7ZE8P06nw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "anymatch": "^3.0.3", - "debug": "^2.2.0", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.4", - "invariant": "^2.2.4", - "jest-regex-util": "^27.0.6", - "jest-util": "^27.2.0", - "jest-worker": "^27.2.0", - "micromatch": "^4.0.4", - "node-abort-controller": "^3.1.1", - "nullthrows": "^1.1.1", - "walker": "^1.0.7" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "optional": true, - "peer": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "metro-inspector-proxy": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.76.7.tgz", - "integrity": "sha512-rNZ/6edTl/1qUekAhAbaFjczMphM50/UjtxiKulo6vqvgn/Mjd9hVqDvVYfAMZXqPvlusD88n38UjVYPkruLSg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "connect": "^3.6.5", - "debug": "^2.2.0", - "node-fetch": "^2.2.0", - "ws": "^7.5.1", - "yargs": "^17.6.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "optional": true, - "peer": true - }, - "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "optional": true, - "peer": true, - "requires": {} - } - } - }, - "metro-minify-terser": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.76.7.tgz", - "integrity": "sha512-FQiZGhIxCzhDwK4LxyPMLlq0Tsmla10X7BfNGlYFK0A5IsaVKNJbETyTzhpIwc+YFRT4GkFFwgo0V2N5vxO5HA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "terser": "^5.15.0" - } - }, - "metro-minify-uglify": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.76.7.tgz", - "integrity": "sha512-FuXIU3j2uNcSvQtPrAJjYWHruPiQ+EpE++J9Z+VznQKEHcIxMMoQZAfIF2IpZSrZYfLOjVFyGMvj41jQMxV1Vw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "uglify-es": "^3.1.9" - } - }, - "metro-react-native-babel-preset": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.76.7.tgz", - "integrity": "sha512-R25wq+VOSorAK3hc07NW0SmN8z9S/IR0Us0oGAsBcMZnsgkbOxu77Mduqf+f4is/wnWHc5+9bfiqdLnaMngiVw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/core": "^7.20.0", - "@babel/plugin-proposal-async-generator-functions": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.18.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", - "@babel/plugin-proposal-numeric-separator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.20.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.18.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-async-to-generator": "^7.20.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.20.0", - "@babel/plugin-transform-flow-strip-types": "^7.20.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "babel-plugin-transform-flow-enums": "^0.0.2", - "react-refresh": "^0.4.0" - } - }, - "metro-react-native-babel-transformer": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.76.7.tgz", - "integrity": "sha512-W6lW3J7y/05ph3c2p3KKJNhH0IdyxdOCbQ5it7aM2MAl0SM4wgKjaV6EYv9b3rHklpV6K3qMH37UKVcjMooWiA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/core": "^7.20.0", - "babel-preset-fbjs": "^3.4.0", - "hermes-parser": "0.12.0", - "metro-react-native-babel-preset": "0.76.7", - "nullthrows": "^1.1.1" - } - }, - "metro-resolver": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.76.7.tgz", - "integrity": "sha512-pC0Wgq29HHIHrwz23xxiNgylhI8Rq1V01kQaJ9Kz11zWrIdlrH0ZdnJ7GC6qA0ErROG+cXmJ0rJb8/SW1Zp2IA==", - "dev": true, - "optional": true, - "peer": true - }, - "metro-runtime": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.76.8.tgz", - "integrity": "sha512-XKahvB+iuYJSCr3QqCpROli4B4zASAYpkK+j3a0CJmokxCDNbgyI4Fp88uIL6rNaZfN0Mv35S0b99SdFXIfHjg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/runtime": "^7.0.0", - "react-refresh": "^0.4.0" - } - }, - "metro-source-map": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.76.8.tgz", - "integrity": "sha512-Hh0ncPsHPVf6wXQSqJqB3K9Zbudht4aUtNpNXYXSxH+pteWqGAXnjtPsRAnCsCWl38wL0jYF0rJDdMajUI3BDw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/traverse": "^7.20.0", - "@babel/types": "^7.20.0", - "invariant": "^2.2.4", - "metro-symbolicate": "0.76.8", - "nullthrows": "^1.1.1", - "ob1": "0.76.8", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, - "dependencies": { - "metro-symbolicate": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.76.8.tgz", - "integrity": "sha512-LrRL3uy2VkzrIXVlxoPtqb40J6Bf1mlPNmUQewipc3qfKKFgtPHBackqDy1YL0njDsWopCKcfGtFYLn0PTUn3w==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "invariant": "^2.2.4", - "metro-source-map": "0.76.8", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "through2": "^2.0.1", - "vlq": "^1.0.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "optional": true, - "peer": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "metro-symbolicate": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.76.7.tgz", - "integrity": "sha512-p0zWEME5qLSL1bJb93iq+zt5fz3sfVn9xFYzca1TJIpY5MommEaS64Va87lp56O0sfEIvh4307Oaf/ZzRjuLiQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "invariant": "^2.2.4", - "metro-source-map": "0.76.7", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "through2": "^2.0.1", - "vlq": "^1.0.0" - }, - "dependencies": { - "metro-source-map": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.76.7.tgz", - "integrity": "sha512-Prhx7PeRV1LuogT0Kn5VjCuFu9fVD68eefntdWabrksmNY6mXK8pRqzvNJOhTojh6nek+RxBzZeD6MIOOyXS6w==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/traverse": "^7.20.0", - "@babel/types": "^7.20.0", - "invariant": "^2.2.4", - "metro-symbolicate": "0.76.7", - "nullthrows": "^1.1.1", - "ob1": "0.76.7", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - } - }, - "ob1": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.76.7.tgz", - "integrity": "sha512-BQdRtxxoUNfSoZxqeBGOyuT9nEYSn18xZHwGMb0mMVpn2NBcYbnyKY4BK2LIHRgw33CBGlUmE+KMaNvyTpLLtQ==", - "dev": true, - "optional": true, - "peer": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "optional": true, - "peer": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "metro-transform-plugins": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.76.7.tgz", - "integrity": "sha512-iSmnjVApbdivjuzb88Orb0JHvcEt5veVyFAzxiS5h0QB+zV79w6JCSqZlHCrbNOkOKBED//LqtKbFVakxllnNg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.20.0", - "nullthrows": "^1.1.1" - } - }, - "metro-transform-worker": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.76.7.tgz", - "integrity": "sha512-cGvELqFMVk9XTC15CMVzrCzcO6sO1lURfcbgjuuPdzaWuD11eEyocvkTX0DPiRjsvgAmicz4XYxVzgYl3MykDw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.0", - "@babel/parser": "^7.20.0", - "@babel/types": "^7.20.0", - "babel-preset-fbjs": "^3.4.0", - "metro": "0.76.7", - "metro-babel-transformer": "0.76.7", - "metro-cache": "0.76.7", - "metro-cache-key": "0.76.7", - "metro-source-map": "0.76.7", - "metro-transform-plugins": "0.76.7", - "nullthrows": "^1.1.1" - }, - "dependencies": { - "metro-source-map": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.76.7.tgz", - "integrity": "sha512-Prhx7PeRV1LuogT0Kn5VjCuFu9fVD68eefntdWabrksmNY6mXK8pRqzvNJOhTojh6nek+RxBzZeD6MIOOyXS6w==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/traverse": "^7.20.0", - "@babel/types": "^7.20.0", - "invariant": "^2.2.4", - "metro-symbolicate": "0.76.7", - "nullthrows": "^1.1.1", - "ob1": "0.76.7", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - } - }, - "ob1": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.76.7.tgz", - "integrity": "sha512-BQdRtxxoUNfSoZxqeBGOyuT9nEYSn18xZHwGMb0mMVpn2NBcYbnyKY4BK2LIHRgw33CBGlUmE+KMaNvyTpLLtQ==", - "dev": true, - "optional": true, - "peer": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "dev": true - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "dev": true, - "requires": { - "dom-walk": "^0.1.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true - }, - "minisearch": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-6.1.0.tgz", - "integrity": "sha512-PNxA/X8pWk+TiqPbsoIYH0GQ5Di7m6326/lwU/S4mlo4wGQddIcf/V//1f9TB0V4j59b57b+HZxt8h3iMROGvg==", - "dev": true - }, - "mix2": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/mix2/-/mix2-1.0.5.tgz", - "integrity": "sha512-ybWz7nY+WHBBIyliND5eYaJKzkoa+qXRYNTmVqAxSLlFtL/umT2iv+pmyTu1oU7WNkrirwheqR8d9EaKVz0e5g==", - "dev": true - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", - "dev": true - }, - "mongodb": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.1.tgz", - "integrity": "sha512-iSVgexYr8ID0ieeNFUbRfQeOZxOchRck6kEDVySQRaa8VIw/1Pm+/LgcpZcl/BWV6nT0L8lP9qyl7dRPJ6mnLw==", - "dev": true, - "requires": { - "bl": "^2.2.1", - "bson": "^1.1.4", - "denque": "^1.4.1", - "optional-require": "^1.0.3", - "safe-buffer": "^5.1.2", - "saslprep": "^1.0.0" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "msrcrypto": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/msrcrypto/-/msrcrypto-1.5.8.tgz", - "integrity": "sha512-ujZ0TRuozHKKm6eGbKHfXef7f+esIhEckmThVnz7RNyiOJd7a6MXj2JGBoL9cnPDW+JMG16MoTUh5X+XXjI66Q==", - "dev": true - }, - "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "optional": true, - "peer": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true, - "optional": true, - "peer": true - }, - "nocache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/nocache/-/nocache-3.0.4.tgz", - "integrity": "sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==", - "dev": true, - "optional": true, - "peer": true - }, - "node-abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", - "dev": true, - "optional": true, - "peer": true - }, - "node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "minimatch": "^3.0.2" - } - }, - "node-fetch": { - "version": "2.6.13", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.13.tgz", - "integrity": "sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true, - "optional": true, - "peer": true - }, - "node-jose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/node-jose/-/node-jose-2.0.0.tgz", - "integrity": "sha512-j8zoFze1gijl8+DK/dSXXqX7+o2lMYv1XS+ptnXgGV/eloQaqq1YjNtieepbKs9jBS4WTnMOqyKSaQuunJzx0A==", - "dev": true, - "requires": { - "base64url": "^3.0.1", - "buffer": "^5.5.0", - "es6-promise": "^4.2.8", - "lodash": "^4.17.15", - "long": "^4.0.0", - "node-forge": "^0.10.0", - "pako": "^1.0.11", - "process": "^0.11.10", - "uuid": "^3.3.3" - } - }, - "node-kms": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-kms/-/node-kms-0.4.0.tgz", - "integrity": "sha512-Tvhs7XTvBgWLZUrAeLKDqzvlomaZWwMoIXWImMc/IbvTijLoOrkovZo+PeW0ivf/8fBlg5EihPCwKg/dy9r+sA==", - "dev": true, - "requires": { - "es6-promise": "^2.0.1", - "lodash.clone": "^3.0.2", - "lodash.clonedeep": "^3.0.1", - "node-jose": "^2.0.0", - "uuid": "^2.0.1" - }, - "dependencies": { - "es6-promise": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz", - "integrity": "sha1-lu258v2wGZWCKyY92KratnSBgbw=", - "dev": true - }, - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", - "dev": true - } - } - }, - "node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true, - "optional": true, - "peer": true - }, - "node-scr": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/node-scr/-/node-scr-0.3.0.tgz", - "integrity": "sha512-Hb0ykojynSbt7ra6eml6NX39WAumFfU3G81XvLpp2H7y8KjQc29oEIf2TlgZQCfA+pyxbY5t4a1xBqPpyrbpvw==", - "dev": true, - "requires": { - "es6-promise": "^2.0.1", - "lodash.clone": "^3.0.2", - "node-jose": "^2.0.0" - }, - "dependencies": { - "es6-promise": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz", - "integrity": "sha1-lu258v2wGZWCKyY92KratnSBgbw=", - "dev": true - } - } - }, - "node-stream-zip": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", - "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", - "dev": true, - "optional": true, - "peer": true - }, - "nodemon": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.12.tgz", - "integrity": "sha512-egCTmNZdObdBxUBw6ZNwvZ/xzk24CKRs5K6d+5zbmrMr7rOpPmfPeF6OxM3DDpaRx331CQRFEktn+wrFFfBSOA==", - "dev": true, - "requires": { - "chokidar": "^3.2.2", - "debug": "^3.2.6", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.7", - "semver": "^5.7.1", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.3", - "update-notifier": "^4.1.0" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "nofilter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==" - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "nullthrows": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", - "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", - "dev": true, - "optional": true, - "peer": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "ob1": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.76.8.tgz", - "integrity": "sha512-dlBkJJV5M/msj9KYA9upc+nUWVwuOFFTbu28X6kZeGwcuW+JxaHSBZ70SYQnk5M+j5JbNLR6yKHmgW4M5E7X5g==", - "dev": true, - "optional": true, - "peer": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "optional": true, - "peer": true - }, - "object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true, - "optional": true, - "peer": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "mimic-fn": "^2.1.0" - }, - "dependencies": { - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "open": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", - "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "is-wsl": "^1.1.0" - } - }, - "optional-require": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.1.7.tgz", - "integrity": "sha512-cIeRZocXsZnZYn+SevbtSqNlLbeoS4mLzuNn4fvXRMDRNhTGg0sxuKXl0FnZCtnew85LorNxIbZp5OeliILhMw==", - "dev": true, - "requires": { - "require-at": "^1.0.6" - } - }, - "ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "optional": true, - "peer": true - }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" - }, - "p-event": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-5.0.1.tgz", - "integrity": "sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==", - "requires": { - "p-timeout": "^5.0.2" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "optional": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "optional": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "p-map": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.3.0.tgz", - "integrity": "sha512-SRbIQFoLYNezHkqZslqeg963HYUtqOrfMCxjNrFOpJ19WTYuq26rQoOXeX8QQiMLUlLqdYV/7PuDsdYJ7hLE1w==", - "requires": { - "aggregate-error": "^4.0.0" - }, - "dependencies": { - "aggregate-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.0.tgz", - "integrity": "sha512-8DGp7zUt1E9k0NE2q4jlXHk+V3ORErmwolEdRz9iV+LKJ40WhMHh92cxAvhqV2I+zEn/gotIoqoMs0NjF3xofg==", - "requires": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" - } - }, - "clean-stack": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.1.0.tgz", - "integrity": "sha512-dxXQYI7mfQVcaF12s6sjNFoZ6ZPDQuBBLp3QJ5156k9EvUFClUoZ11fo8HnLQO241DDVntHEug8MOuFO5PSfRg==", - "requires": { - "escape-string-regexp": "5.0.0" - } - } - } - }, - "p-timeout": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.0.2.tgz", - "integrity": "sha512-sEmji9Yaq+Tw+STwsGAE56hf7gMy9p0tQfJojIAamB7WHJYJKf1qlsg9jqBWG8q9VCxKPhZaP/AcXwEoBcYQhQ==" - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "optional": true, - "peer": true - }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "parse-headers": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz", - "integrity": "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw==", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parse-ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", - "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==" - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "optional": true, - "peer": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "optional": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "optional": true, - "peer": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "optional": true, - "peer": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "peek-readable": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.0.1.tgz", - "integrity": "sha512-7qmhptnR0WMSpxT5rMHG9bW/mYSR1uqaPFj2MHvT+y/aOUu6msJijpKt5SkTDKySwg65OWG2JwTMBlgcbwMHrQ==", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "optional": true, - "peer": true - }, - "pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "optional": true, - "peer": true - }, - "pkg-conf": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-4.0.0.tgz", - "integrity": "sha512-7dmgi4UY4qk+4mj5Cd8v/GExPo0K+SlY+hulOSdfZ/T6jVH6//y7NtzZo5WrfhDBxuQ0jCa7fLZmNaNh7EWL/w==", - "requires": { - "find-up": "^6.0.0", - "load-json-file": "^7.0.0" - }, - "dependencies": { - "find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "requires": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - } - }, - "locate-path": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.1.0.tgz", - "integrity": "sha512-HNx5uOnYeK4SxEoid5qnhRfprlJeGMzFRKPLCf/15N3/B4AiofNwC/yq7VBKdVk9dx7m+PiYCJOGg55JYTAqoQ==", - "requires": { - "p-locate": "^6.0.0" - } - }, - "p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "requires": { - "yocto-queue": "^1.0.0" - } - }, - "p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "requires": { - "p-limit": "^4.0.0" - } - }, - "path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==" - }, - "yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==" - } - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "pkijs": { - "version": "2.1.97", - "resolved": "https://registry.npmjs.org/pkijs/-/pkijs-2.1.97.tgz", - "integrity": "sha512-g/I8u//tvIYBsoIwZ9lV5U1KBqkZqsCHydv50/RN/Va8FF+jJFT4goC8oX/2Uc1TpEFeWkmpYgutk4ONiB2t9g==", - "dev": true, - "requires": { - "asn1js": "^2.1.1", - "bytestreamjs": "^1.0.29", - "pvutils": "^1.0.17" - } - }, - "plur": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/plur/-/plur-5.1.0.tgz", - "integrity": "sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==", - "requires": { - "irregular-plurals": "^3.3.0" - } - }, - "postcss": { - "version": "8.4.28", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz", - "integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==", - "dev": true, - "requires": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "preact": { - "version": "10.17.1", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.17.1.tgz", - "integrity": "sha512-X9BODrvQ4Ekwv9GURm9AKAGaomqXmip7NQTZgY7gcNmr7XE83adOMJvd3N42id1tMFU7ojiynRsYnY6/BRFxLA==", - "dev": true - }, - "precond": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", - "integrity": "sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw=", - "dev": true - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true - }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "pretty-ms": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", - "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", - "requires": { - "parse-ms": "^2.1.0" - } - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "asap": "~2.0.6" - } - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - }, - "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - }, - "pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, - "requires": { - "escape-goat": "^2.0.0" - } - }, - "pvtsutils": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.2.0.tgz", - "integrity": "sha512-IDefMJEQl7HX0FP2hIKJFnAR11klP1js2ixCrOaMhe3kXFK6RQ2ABUCuwWaaD4ib0hSbh2fGTICvWJJhDfNecA==", - "dev": true, - "requires": { - "tslib": "^2.2.0" - } - }, - "pvutils": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.0.17.tgz", - "integrity": "sha512-wLHYUQxWaXVQvKnwIDWFVKDJku9XDCvyhhxoq8dc5MFdIlRenyPI9eSfEtcvgHgD7FlvCyGAlWgOzRnZD99GZQ==", - "dev": true - }, - "qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "inherits": "~2.0.3" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "optional": true, - "peer": true - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "loose-envify": "^1.1.0" - } - }, - "react-devtools-core": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.28.0.tgz", - "integrity": "sha512-E3C3X1skWBdBzwpOUbmXG8SgH6BtsluSMe+s6rRcujNKG1DGi8uIfhdhszkgDpAsMoE55hwqRUzeXCmETDBpTg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "shell-quote": "^1.6.1", - "ws": "^7" - }, - "dependencies": { - "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "optional": true, - "peer": true, - "requires": {} - } - } - }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true, - "optional": true, - "peer": true - }, - "react-native": { - "version": "0.72.4", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.72.4.tgz", - "integrity": "sha512-+vrObi0wZR+NeqL09KihAAdVlQ9IdplwznJWtYrjnQ4UbCW6rkzZJebRsugwUneSOKNFaHFEo1uKU89HsgtYBg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@jest/create-cache-key-function": "^29.2.1", - "@react-native-community/cli": "11.3.6", - "@react-native-community/cli-platform-android": "11.3.6", - "@react-native-community/cli-platform-ios": "11.3.6", - "@react-native/assets-registry": "^0.72.0", - "@react-native/codegen": "^0.72.6", - "@react-native/gradle-plugin": "^0.72.11", - "@react-native/js-polyfills": "^0.72.1", - "@react-native/normalize-colors": "^0.72.0", - "@react-native/virtualized-lists": "^0.72.8", - "abort-controller": "^3.0.0", - "anser": "^1.4.9", - "base64-js": "^1.1.2", - "deprecated-react-native-prop-types": "4.1.0", - "event-target-shim": "^5.0.1", - "flow-enums-runtime": "^0.0.5", - "invariant": "^2.2.4", - "jest-environment-node": "^29.2.1", - "jsc-android": "^250231.0.0", - "memoize-one": "^5.0.0", - "metro-runtime": "0.76.8", - "metro-source-map": "0.76.8", - "mkdirp": "^0.5.1", - "nullthrows": "^1.1.1", - "pretty-format": "^26.5.2", - "promise": "^8.3.0", - "react-devtools-core": "^4.27.2", - "react-refresh": "^0.4.0", - "react-shallow-renderer": "^16.15.0", - "regenerator-runtime": "^0.13.2", - "scheduler": "0.24.0-canary-efb381bbf-20230505", - "stacktrace-parser": "^0.1.10", - "use-sync-external-store": "^1.0.0", - "whatwg-fetch": "^3.0.0", - "ws": "^6.2.2", - "yargs": "^17.6.2" - }, - "dependencies": { - "ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "react-native-securerandom": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/react-native-securerandom/-/react-native-securerandom-0.1.1.tgz", - "integrity": "sha1-8TBiOkEsM4sK+t7bwgTFy7i/IHA=", - "dev": true, - "optional": true, - "requires": { - "base64-js": "*" - } - }, - "react-refresh": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", - "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", - "dev": true, - "optional": true, - "peer": true - }, - "react-shallow-renderer": { - "version": "16.15.0", - "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz", - "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "object-assign": "^4.1.1", - "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "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, - "requires": { - "readable-stream": "^3.6.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { - "picomatch": "^2.2.1" - } - }, - "readline": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", - "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==", - "dev": true, - "optional": true, - "peer": true - }, - "recast": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz", - "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ast-types": "0.15.2", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tslib": "^2.0.1" - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true, - "optional": true, - "peer": true - }, - "regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true - }, - "regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - } - }, - "registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, - "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, - "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - } - } - }, - "require-at": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/require-at/-/require-at-1.0.6.tgz", - "integrity": "sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g==", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true, - "optional": true, - "peer": true - }, - "resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "rollup": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.28.0.tgz", - "integrity": "sha512-d7zhvo1OUY2SXSM6pfNjgD5+d0Nz87CUp4mt8l/GgVP3oBsPwzNvSzyu1me6BSG9JIgWNTVcafIXBIyM8yQ3yw==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "rtcpeerconnection-shim": { - "version": "1.2.15", - "resolved": "https://registry.npmjs.org/rtcpeerconnection-shim/-/rtcpeerconnection-shim-1.2.15.tgz", - "integrity": "sha512-C6DxhXt7bssQ1nHb154lqeL0SXz5Dx4RczXZu2Aa/L1NJFnEVDxFwCBo3fqtuljhHIGceg5JKBV4XJ0gW5JKyw==", - "dev": true, - "requires": { - "sdp": "^2.6.0" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "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 - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "saslprep": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", - "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", - "dev": true, - "optional": true, - "requires": { - "sparse-bitfield": "^3.0.3" - } - }, - "scheduler": { - "version": "0.24.0-canary-efb381bbf-20230505", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.24.0-canary-efb381bbf-20230505.tgz", - "integrity": "sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "loose-envify": "^1.1.0" - } - }, - "sdp": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/sdp/-/sdp-2.12.0.tgz", - "integrity": "sha512-jhXqQAQVM+8Xj5EjJGVweuEzgtGWb3tmEEpl3CLP3cStInSbVHSg0QWOGQzNq8pSID4JkpeV2mPqlMDLrm0/Vw==", - "dev": true - }, - "sdp-transform": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/sdp-transform/-/sdp-transform-2.14.1.tgz", - "integrity": "sha512-RjZyX3nVwJyCuTo5tGPx+PZWkDMCg7oOLpSlhjDdZfwUoNqG1mM8nyj31IGHyaPWXhjbP7cdK3qZ2bmkJ1GzRw==", - "dev": true - }, - "search-insights": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.7.0.tgz", - "integrity": "sha512-GLbVaGgzYEKMvuJbHRhLi1qoBFnjXZGZ6l4LxOYPCp4lI2jDRB3jPU9/XNhMwv6kvnA9slTreq6pvK+b3o3aqg==", - "dev": true, - "peer": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "optional": true, - "peer": true - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "serialize-error": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", - "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", - "requires": { - "type-fest": "^0.13.1" - }, - "dependencies": { - "type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==" - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true, - "optional": true, - "peer": true - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true, - "optional": true, - "peer": true - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "optional": true, - "peer": true - }, - "shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "dev": true, - "optional": true, - "peer": true - }, - "shiki": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.3.tgz", - "integrity": "sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g==", - "dev": true, - "requires": { - "ansi-sequence-parser": "^1.1.0", - "jsonc-parser": "^3.2.0", - "vscode-oniguruma": "^1.7.0", - "vscode-textmate": "^8.0.0" - } - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "simple-log-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/simple-log-colors/-/simple-log-colors-1.1.0.tgz", - "integrity": "sha512-Vwz9UQYHMeO51TxPRM5AIcajkJE6W5lwEJ6odg5zhu7dbTA8oov7W5CZhto77alVTiHVily35IgwSObG8JvRfg==" - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "optional": true, - "peer": true - }, - "skema": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/skema/-/skema-1.0.2.tgz", - "integrity": "sha1-NxIc/qHK7DEHLZVlhXSMmxGfxFM=", - "dev": true, - "requires": { - "async": "^0.9.0", - "make-array": "^0.1.2", - "mix2": "^1.0.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "requires": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", - "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==" - }, - "is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==" - } - } - }, - "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 - }, - "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==", - "dev": true - }, - "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, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sparse-bitfield": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", - "dev": true, - "optional": true, - "requires": { - "memory-pager": "^1.0.2" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" - } - } - }, - "stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", - "dev": true, - "optional": true, - "peer": true - }, - "stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "type-fest": "^0.7.1" - }, - "dependencies": { - "type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "optional": true, - "peer": true - }, - "str2buf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/str2buf/-/str2buf-1.3.0.tgz", - "integrity": "sha512-xIBmHIUHYZDP4HyoXGHYNVmxlXLXDrtFHYT0eV6IOdEj3VO9ccaF1Ejl9Oq8iFjITllpT8FhaXb4KsNmw+3EuA==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - } - } - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "optional": true, - "peer": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "dev": true, - "optional": true, - "peer": true + "universal-cookie": { + "optional": true + } + } + }, + "node_modules/@vueuse/integrations/node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "dev": true + }, + "node_modules/@vueuse/integrations/node_modules/@vueuse/core": { + "version": "10.6.1", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.6.1.tgz", + "integrity": "sha512-Pc26IJbqgC9VG1u6VY/xrXXfxD33hnvxBnKrLlA2LJlyHII+BSrRoTPJgGYq7qZOu61itITFUnm6QbacwZ4H8Q==", + "dev": true, + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "10.6.1", + "@vueuse/shared": "10.6.1", + "vue-demi": ">=0.14.6" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/integrations/node_modules/@vueuse/metadata": { + "version": "10.6.1", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.6.1.tgz", + "integrity": "sha512-qhdwPI65Bgcj23e5lpGfQsxcy0bMjCAsUGoXkJ7DsoeDUdasbZ2DBa4dinFCOER3lF4gwUv+UD2AlA11zdzMFw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/integrations/node_modules/@vueuse/shared": { + "version": "10.6.1", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.6.1.tgz", + "integrity": "sha512-TECVDTIedFlL0NUfHWncf3zF9Gc4VfdxfQc8JFwoVZQmxpONhLxFrlm0eHQeidHj4rdTPL3KXJa0TZCk1wnc5Q==", + "dev": true, + "dependencies": { + "vue-demi": ">=0.14.6" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/integrations/node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "dev": true, + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.13.0.tgz", + "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-9.13.0.tgz", + "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==", + "dev": true, + "dependencies": { + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "dev": true, + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", + "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/adaptivecards": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/adaptivecards/-/adaptivecards-2.11.1.tgz", + "integrity": "sha512-dyF23HK+lRMEreexJgHz4y9U5B0ZuGk66N8nhwXRnICyYjq8hE4A6n8rLoV/CNY2QAZ0iRjOIR2J8U7M1CKl8Q==", + "dev": true + }, + "node_modules/algoliasearch": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.20.0.tgz", + "integrity": "sha512-y+UHEjnOItoNy0bYO+WWmLWBlPwDjKHW6mNHrPi0NkuhpQOOEbrkwQH/wgKFDLh7qlKjzoKeiRtlpewDPDG23g==", + "dev": true, + "dependencies": { + "@algolia/cache-browser-local-storage": "4.20.0", + "@algolia/cache-common": "4.20.0", + "@algolia/cache-in-memory": "4.20.0", + "@algolia/client-account": "4.20.0", + "@algolia/client-analytics": "4.20.0", + "@algolia/client-common": "4.20.0", + "@algolia/client-personalization": "4.20.0", + "@algolia/client-search": "4.20.0", + "@algolia/logger-common": "4.20.0", + "@algolia/logger-console": "4.20.0", + "@algolia/requester-browser-xhr": "4.20.0", + "@algolia/requester-common": "4.20.0", + "@algolia/requester-node-http": "4.20.0", + "@algolia/transporter": "4.20.0" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "peer": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "peer": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "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==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==", + "dev": true + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "peer": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "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, + "engines": { + "node": ">=8" + } + }, + "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, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "peer": true, + "dependencies": { + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "peer": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001565", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001565.tgz", + "integrity": "sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "peer": true + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chai": { + "version": "4.3.10", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", + "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "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" + } + ], + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "peer": true + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "peer": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true, + "peer": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "peer": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "dev": true + }, + "node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dedent": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "peer": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "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==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dev": true, + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dynamic-dedupe": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz", + "integrity": "sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ==", + "dev": true, + "dependencies": { + "xtend": "^4.0.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.601", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.601.tgz", + "integrity": "sha512-SpwUMDWe9tQu8JX5QCO1+p/hChAi9AE9UpoC3rcHVc+gdCGlbT3SGb5I1klgb952HRIyvt9wZhSz9bNBYz9swA==", + "dev": true, + "peer": true + }, + "node_modules/element-plus": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.4.3.tgz", + "integrity": "sha512-b3q26j+lM4SBqiyzw8HybybGnP2pk4MWgrnzzzYW5qKQUgV6EG1Zg7nMCfgCVccI8tNvZoTiUHb2mFaiB9qT8w==", + "dev": true, + "dependencies": { + "@ctrl/tinycolor": "^3.4.1", + "@element-plus/icons-vue": "^2.3.1", + "@floating-ui/dom": "^1.0.1", + "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", + "@types/lodash": "^4.14.182", + "@types/lodash-es": "^4.17.6", + "@vueuse/core": "^9.1.0", + "async-validator": "^4.2.5", + "dayjs": "^1.11.3", + "escape-html": "^1.0.3", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "lodash-unified": "^1.0.2", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "peer": true + }, + "node_modules/entities": { + "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" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "peer": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "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/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "peer": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fflate": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.1.tgz", + "integrity": "sha512-/exOvEuc+/iaUm105QIiOt4LpBdMTWsXxqR0HDF35vx3fmaKzw7354gTilCh5rkzEt8WYyG//ku3h3nRmd7CHQ==", + "dev": true + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "peer": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/focus-trap": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.4.tgz", + "integrity": "sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==", + "dev": true, + "dependencies": { + "tabbable": "^6.2.0" + } + }, + "node_modules/fs-extra": { + "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", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "peer": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8.0.0" + } + }, + "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/get-tsconfig": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", + "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz", + "integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==", + "dev": true, + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^8.0.0", + "property-information": "^6.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "dev": true, + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.1.tgz", + "integrity": "sha512-5m1gmba658Q+lO5uqL5YNGQWeh1MYWZbZmWrM5lncdcuiXuo5E2HT/CIOp0rLF8ksfSwiCVJ3twlgVRyTGThGA==", + "dev": true, + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.0.tgz", + "integrity": "sha512-IVGhNgg7vANuUA2XKrT6sOIIPgaYZnmLx3l/CCOAK0PtgfoHrZwX7jCSYyFxHTrGmC6S9q8aQQekjp4JPZF+cw==", + "dev": true, + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-raw": "^9.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", + "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", + "dev": true, + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "dev": true, + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz", + "integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==", + "dev": true, + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "peer": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "peer": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-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/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "peer": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/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, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/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, + "peer": true + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "peer": true, + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true }, - "strtok3": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.2.4.tgz", - "integrity": "sha512-GO8IcFF9GmFDvqduIspUBwCzCbqzegyVKIsSymcMgiZKeCfrN9SowtUoi8+b59WZMAjIzVZic/Ft97+pynR3Iw==", - "dev": true, - "requires": { - "@tokenizer/token": "^0.3.0", - "peek-readable": "^4.0.1" - } + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "peer": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "peer": true, + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "peer": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "peer": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "peer": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/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, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/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, + "peer": true + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": 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" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "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-worker/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/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "peer": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "peer": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "peer": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "peer": true + }, + "node_modules/local-pkg": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", + "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "peer": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "dev": true + }, + "node_modules/lodash-unified": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.3.tgz", + "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", + "dev": true, + "peerDependencies": { + "@types/lodash-es": "*", + "lodash": "*", + "lodash-es": "*" + } + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "peer": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "node_modules/magic-string": { + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/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/make-dir/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir/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 + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "peer": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/mark.js": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", + "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", + "dev": true + }, + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true, + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.0.2.tgz", + "integrity": "sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==", + "dev": true, + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "peer": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", + "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", + "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "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, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minisearch": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-6.3.0.tgz", + "integrity": "sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mlly": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.2.tgz", + "integrity": "sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==", + "dev": true, + "dependencies": { + "acorn": "^8.10.0", + "pathe": "^1.1.1", + "pkg-types": "^1.0.3", + "ufo": "^1.3.0" + } + }, + "node_modules/monaco-editor": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.41.0.tgz", + "integrity": "sha512-1o4olnZJsiLmv5pwLEAmzHTE/5geLKQ07BrGxlF4Ri/AXAc2yyDGZwHjiTqD8D/ROKUZmwMA28A+yEowLNOEcA==", + "dev": true + }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "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", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "peer": true + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "peer": true + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true, + "peer": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-wheel-es": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==", + "dev": true + }, + "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/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "peer": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "peer": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "peer": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "peer": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/pathe": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", + "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", + "dev": true + }, + "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/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "peer": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-types": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" + } + }, + "node_modules/postcss": { + "version": "8.4.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", + "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/preact": { + "version": "10.19.2", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.19.2.tgz", + "integrity": "sha512-UA9DX/OJwv6YwP9Vn7Ti/vF80XL+YA5H2l7BpCtUr3ya8LWHFzpiO5R+N7dN16ujpIxhekRFuOOF82bXX7K/lg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "peer": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/property-information": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.4.0.tgz", + "integrity": "sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "peer": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "peer": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/search-insights": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.11.0.tgz", + "integrity": "sha512-Uin2J8Bpm3xaZi9Y8QibSys6uJOFZ+REMrf42v20AA3FUDUrshKkMEP6liJbMAHCm71wO6ls4mwAf7a3gFVxLw==", + "dev": true, + "peer": true + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "peer": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shiki": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.10.1.tgz", + "integrity": "sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.0.0", + "vscode-oniguruma": "^1.6.1", + "vscode-textmate": "5.2.0" + } + }, + "node_modules/shikiji": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/shikiji/-/shikiji-0.7.6.tgz", + "integrity": "sha512-KzEtvSGQtBvfwVIB70kOmIfl/5rz1LC8j+tvlHXsJKAIdONNQvG1at7ivUUq3xUctqgO6fsO3AGomUSh0F+wsQ==", + "dev": true, + "dependencies": { + "hast-util-to-html": "^9.0.0" + } + }, + "node_modules/shikiji-transformers": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/shikiji-transformers/-/shikiji-transformers-0.7.6.tgz", + "integrity": "sha512-yTp+7JMD/aXbV9ndn14eo9IK/UNt8iDsLNyqlOmCtcldlkqWE9T2YKAlOHOTVaeDfYWUWZa2EgSXb/CBfepBrw==", + "dev": true, + "dependencies": { + "shikiji": "0.7.6" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, + "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/sirv": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", + "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", + "dev": true, + "dependencies": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true, + "peer": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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/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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true + }, + "node_modules/std-env": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.6.0.tgz", + "integrity": "sha512-aFZ19IgVmhdB2uX599ve2kE6BIE3YMnQ6Gp6BURhW/oIzpXGKr878TQfAQZn1+i0Flcc/UKUy1gOlcfaUBCryg==", + "dev": true + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "peer": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", + "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", + "dev": true, + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-literal": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", + "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", + "dev": true, + "dependencies": { + "acorn": "^8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "dev": true + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tinybench": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.1.tgz", + "integrity": "sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==", + "dev": true + }, + "node_modules/tinypool": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.5.0.tgz", + "integrity": "sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.0.tgz", + "integrity": "sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true, + "peer": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ts-jest": { + "version": "29.1.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", + "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "^7.5.3", + "yargs-parser": "^21.0.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true }, - "sudo-prompt": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", - "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==", - "dev": true, - "optional": true, - "peer": true + "@jest/types": { + "optional": true }, - "supertap": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/supertap/-/supertap-3.0.1.tgz", - "integrity": "sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==", - "requires": { - "indent-string": "^5.0.0", - "js-yaml": "^3.14.1", - "serialize-error": "^7.0.1", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "requires": { - "ansi-regex": "^6.0.1" - } - } - } + "babel-jest": { + "optional": true }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-jest/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/ts-jest/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-jest/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 + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node-dev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-2.0.0.tgz", + "integrity": "sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.1", + "dynamic-dedupe": "^0.3.0", + "minimist": "^1.2.6", + "mkdirp": "^1.0.4", + "resolve": "^1.0.0", + "rimraf": "^2.6.1", + "source-map-support": "^0.5.12", + "tree-kill": "^1.2.2", + "ts-node": "^10.4.0", + "tsconfig": "^7.0.0" + }, + "bin": { + "ts-node-dev": "lib/bin.js", + "tsnd": "lib/bin.js" + }, + "engines": { + "node": ">=0.8.0" + }, + "peerDependencies": { + "node-notifier": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/tsconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", + "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", + "dev": true, + "dependencies": { + "@types/strip-bom": "^3.0.0", + "@types/strip-json-comments": "0.0.30", + "strip-bom": "^3.0.0", + "strip-json-comments": "^2.0.0" + } + }, + "node_modules/tsconfig/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsconfig/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tsx": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-3.14.0.tgz", + "integrity": "sha512-xHtFaKtHxM9LOklMmJdI3BEnQq/D5F73Of2E1GDrITi9sgoVkvIsrQUTY1G8FlmGtA+awCI4EBlTRRYxkL2sRg==", + "dev": true, + "dependencies": { + "esbuild": "~0.18.20", + "get-tsconfig": "^4.7.2", + "source-map-support": "^0.5.21" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/tsx/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/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedoc": { + "version": "0.22.18", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.18.tgz", + "integrity": "sha512-NK9RlLhRUGMvc6Rw5USEYgT4DVAUFk7IF7Q6MYfpJ88KnTZP7EneEa4RcP+tX1auAcz7QT1Iy0bUSZBYYHdoyA==", + "dev": true, + "dependencies": { + "glob": "^8.0.3", + "lunr": "^2.3.9", + "marked": "^4.0.16", + "minimatch": "^5.1.0", + "shiki": "^0.10.1" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 12.10.0" + }, + "peerDependencies": { + "typescript": "4.0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x || 4.5.x || 4.6.x || 4.7.x" + } + }, + "node_modules/typedoc-plugin-markdown": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.12.1.tgz", + "integrity": "sha512-gMntJq7+JlGJZ5sVjrkzO/rG2dsmNBbWk5ZkcKvYu6QOeBwGcK5tzEyS0aqnFTJj9GCHCB+brAnTuKtAyotNwA==", + "dev": true, + "dependencies": { + "handlebars": "^4.7.7" + }, + "peerDependencies": { + "typedoc": ">=0.22.0" + } + }, + "node_modules/typedoc-theme-hierarchy": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/typedoc-theme-hierarchy/-/typedoc-theme-hierarchy-1.2.1.tgz", + "integrity": "sha512-J+gzo0kj1F8lPNeCFW5HNRxHCxubHhZKOILcK7dyk9qpxNRDF9D9LCGF3Qzw6VF+0n+/Rywsy8ORqge1mmZJoA==", + "dev": true, + "dependencies": { + "fs-extra": "^10.0.0" + }, + "peerDependencies": { + "typedoc": "^0.22.9" + } + }, + "node_modules/typedoc-theme-hierarchy/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/typedoc/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/typedoc/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typedoc/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ufo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz", + "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==", + "dev": true + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "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==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "peer": true, + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.2.tgz", + "integrity": "sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", + "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==", + "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "optional": true, - "peer": true + "less": { + "optional": true }, - "tabbable": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", - "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", - "dev": true + "lightningcss": { + "optional": true }, - "temp": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", - "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "rimraf": "~2.6.2" - }, - "dependencies": { - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "glob": "^7.1.3" - } - } - } + "sass": { + "optional": true }, - "temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==" + "stylus": { + "optional": true }, - "term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", - "dev": true + "sugarss": { + "optional": true }, "terser": { - "version": "5.19.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", - "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "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, - "optional": true, - "peer": true - } - } - }, - "throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true, - "optional": true, - "peer": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "time-zone": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz", - "integrity": "sha1-mcW/VZWJZq9tBtg73zgA3IL67F0=" - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true, - "optional": true, - "peer": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "optional": true, - "peer": true - }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "optional": true, - "peer": true - }, - "token-types": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.1.1.tgz", - "integrity": "sha512-hD+QyuUAyI2spzsI0B7gf/jJ2ggR4RjkAo37j3StuePhApJUwcWDjnHDOFdIWYSwNR28H14hpwm4EI+V1Ted1w==", - "dev": true, - "requires": { - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" - } - }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "requires": { - "nopt": "~1.0.10" - } - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - } - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true, - "optional": true, - "peer": true - }, - "ts-node": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", - "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", - "dev": true, - "requires": { - "arg": "^4.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - } + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.32.4.tgz", + "integrity": "sha512-L2gIw+dCxO0LK14QnUMoqSYpa9XRGnTTTDjW2h19Mr+GR0EFj4vx52W41gFXfMLqpA00eK4ZjOVYo1Xk//LFEw==", + "dev": true, + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "mlly": "^1.4.0", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "vite": "^3.0.0 || ^4.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": ">=v14.18.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitepress": { + "version": "1.0.0-rc.31", + "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.0.0-rc.31.tgz", + "integrity": "sha512-ikH9pIjOOAbyoYAGBVfTz8TzuXp+UoWaIRMU4bw/oiTg8R65SbAaGKY84xx6TuL+f4VqUJ8lhzW82YyxSLvstA==", + "dev": true, + "dependencies": { + "@docsearch/css": "^3.5.2", + "@docsearch/js": "^3.5.2", + "@types/markdown-it": "^13.0.7", + "@vitejs/plugin-vue": "^4.5.0", + "@vue/devtools-api": "^6.5.1", + "@vueuse/core": "^10.6.1", + "@vueuse/integrations": "^10.6.1", + "focus-trap": "^7.5.4", + "mark.js": "8.11.1", + "minisearch": "^6.3.0", + "mrmime": "^1.0.1", + "shikiji": "^0.7.4", + "shikiji-transformers": "^0.7.4", + "vite": "^5.0.2", + "vue": "^3.3.8" + }, + "bin": { + "vitepress": "bin/vitepress.js" + }, + "peerDependencies": { + "markdown-it-mathjax3": "^4.3.2", + "postcss": "^8.4.31" + }, + "peerDependenciesMeta": { + "markdown-it-mathjax3": { + "optional": true }, - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dev": true + "postcss": { + "optional": true + } + } + }, + "node_modules/vitepress/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.8.tgz", + "integrity": "sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "dev": true + }, + "node_modules/vitepress/node_modules/@vueuse/core": { + "version": "10.6.1", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.6.1.tgz", + "integrity": "sha512-Pc26IJbqgC9VG1u6VY/xrXXfxD33hnvxBnKrLlA2LJlyHII+BSrRoTPJgGYq7qZOu61itITFUnm6QbacwZ4H8Q==", + "dev": true, + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "10.6.1", + "@vueuse/shared": "10.6.1", + "vue-demi": ">=0.14.6" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/vitepress/node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "dev": true, + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vitepress/node_modules/@vueuse/metadata": { + "version": "10.6.1", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.6.1.tgz", + "integrity": "sha512-qhdwPI65Bgcj23e5lpGfQsxcy0bMjCAsUGoXkJ7DsoeDUdasbZ2DBa4dinFCOER3lF4gwUv+UD2AlA11zdzMFw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/vitepress/node_modules/@vueuse/shared": { + "version": "10.6.1", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.6.1.tgz", + "integrity": "sha512-TECVDTIedFlL0NUfHWncf3zF9Gc4VfdxfQc8JFwoVZQmxpONhLxFrlm0eHQeidHj4rdTPL3KXJa0TZCk1wnc5Q==", + "dev": true, + "dependencies": { + "vue-demi": ">=0.14.6" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/vitepress/node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "dev": true, + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vitepress/node_modules/esbuild": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.8.tgz", + "integrity": "sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.19.8", + "@esbuild/android-arm64": "0.19.8", + "@esbuild/android-x64": "0.19.8", + "@esbuild/darwin-arm64": "0.19.8", + "@esbuild/darwin-x64": "0.19.8", + "@esbuild/freebsd-arm64": "0.19.8", + "@esbuild/freebsd-x64": "0.19.8", + "@esbuild/linux-arm": "0.19.8", + "@esbuild/linux-arm64": "0.19.8", + "@esbuild/linux-ia32": "0.19.8", + "@esbuild/linux-loong64": "0.19.8", + "@esbuild/linux-mips64el": "0.19.8", + "@esbuild/linux-ppc64": "0.19.8", + "@esbuild/linux-riscv64": "0.19.8", + "@esbuild/linux-s390x": "0.19.8", + "@esbuild/linux-x64": "0.19.8", + "@esbuild/netbsd-x64": "0.19.8", + "@esbuild/openbsd-x64": "0.19.8", + "@esbuild/sunos-x64": "0.19.8", + "@esbuild/win32-arm64": "0.19.8", + "@esbuild/win32-ia32": "0.19.8", + "@esbuild/win32-x64": "0.19.8" + } + }, + "node_modules/vitepress/node_modules/rollup": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.6.1.tgz", + "integrity": "sha512-jZHaZotEHQaHLgKr8JnQiDT1rmatjgKlMekyksz+yk9jt/8z9quNjnKNRoaM0wd9DC2QKXjmWWuDYtM3jfF8pQ==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.6.1", + "@rollup/rollup-android-arm64": "4.6.1", + "@rollup/rollup-darwin-arm64": "4.6.1", + "@rollup/rollup-darwin-x64": "4.6.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.6.1", + "@rollup/rollup-linux-arm64-gnu": "4.6.1", + "@rollup/rollup-linux-arm64-musl": "4.6.1", + "@rollup/rollup-linux-x64-gnu": "4.6.1", + "@rollup/rollup-linux-x64-musl": "4.6.1", + "@rollup/rollup-win32-arm64-msvc": "4.6.1", + "@rollup/rollup-win32-ia32-msvc": "4.6.1", + "@rollup/rollup-win32-x64-msvc": "4.6.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/vitepress/node_modules/vite": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.4.tgz", + "integrity": "sha512-RzAr8LSvM8lmhB4tQ5OPcBhpjOZRZjuxv9zO5UcxeoY2bd3kP3Ticd40Qma9/BqZ8JS96Ll/jeBX9u+LJZrhVg==", + "dev": true, + "dependencies": { + "esbuild": "^0.19.3", + "postcss": "^8.4.31", + "rollup": "^4.2.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } + "less": { + "optional": true }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true + "lightningcss": { + "optional": true }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "optional": true, - "peer": true + "sass": { + "optional": true }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true + "stylus": { + "optional": true }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } + "sugarss": { + "optional": true }, + "terser": { + "optional": true + } + } + }, + "node_modules/vitest": { + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.32.4.tgz", + "integrity": "sha512-3czFm8RnrsWwIzVDu/Ca48Y/M+qh3vOnF16czJm98Q/AN1y3B6PBsyV8Re91Ty5s7txKNjEhpgtGPcfdbh2MZg==", + "dev": true, + "dependencies": { + "@types/chai": "^4.3.5", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "@vitest/expect": "0.32.4", + "@vitest/runner": "0.32.4", + "@vitest/snapshot": "0.32.4", + "@vitest/spy": "0.32.4", + "@vitest/utils": "0.32.4", + "acorn": "^8.9.0", + "acorn-walk": "^8.2.0", + "cac": "^6.7.14", + "chai": "^4.3.7", + "debug": "^4.3.4", + "local-pkg": "^0.4.3", + "magic-string": "^0.30.0", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "std-env": "^3.3.3", + "strip-literal": "^1.0.1", + "tinybench": "^2.5.0", + "tinypool": "^0.5.0", + "vite": "^3.0.0 || ^4.0.0", + "vite-node": "0.32.4", + "why-is-node-running": "^2.2.2" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": ">=v14.18.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@vitest/browser": "*", + "@vitest/ui": "*", + "happy-dom": "*", + "jsdom": "*", + "playwright": "*", + "safaridriver": "*", + "webdriverio": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "playwright": { + "optional": true + }, + "safaridriver": { + "optional": true + }, + "webdriverio": { + "optional": true + } + } + }, + "node_modules/vscode-oniguruma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", + "dev": true + }, + "node_modules/vscode-textmate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", + "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", + "dev": true + }, + "node_modules/vue": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.9.tgz", + "integrity": "sha512-sy5sLCTR8m6tvUk1/ijri3Yqzgpdsmxgj6n6yl7GXXCXqVbmW2RCXe9atE4cEI6Iv7L89v5f35fZRRr5dChP9w==", + "dev": true, + "dependencies": { + "@vue/compiler-dom": "3.3.9", + "@vue/compiler-sfc": "3.3.9", + "@vue/runtime-dom": "3.3.9", + "@vue/server-renderer": "3.3.9", + "@vue/shared": "3.3.9" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { "typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "dev": true - }, - "uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", - "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "commander": "~2.13.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "undefsafe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", - "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", - "dev": true, - "requires": { - "debug": "^2.2.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "optional": true, - "peer": true - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, - "optional": true, - "peer": true - }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "optional": true, - "peer": true - }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "optional": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "optional": true, - "peer": true - }, - "update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "update-notifier": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", - "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", - "dev": true, - "requires": { - "boxen": "^4.2.0", - "chalk": "^3.0.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.3.1", - "is-npm": "^4.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.0.0", - "pupa": "^2.0.1", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - } - } - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "requires": { - "prepend-http": "^2.0.0" - } - }, - "urlsafe-base64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/urlsafe-base64/-/urlsafe-base64-1.0.0.tgz", - "integrity": "sha1-I/iQaabGL0bPOh07ABac77kL4MY=", - "dev": true - }, - "use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "dev": true, - "optional": true, - "peer": true, - "requires": {} - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "optional": true, - "peer": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "valid-url": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=", - "dev": true - }, - "validator": { - "version": "13.6.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.6.0.tgz", - "integrity": "sha512-gVgKbdbHgtxpRyR8K0O6oFZPhhB5tT1jeEHZR0Znr9Svg03U0+r9DXWMrnRAB+HtCStDQKlaIZm42tVsVjqtjg==", - "dev": true - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "optional": true, - "peer": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, - "dependencies": { - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - } - } - }, - "vitepress": { - "version": "1.0.0-rc.4", - "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.0.0-rc.4.tgz", - "integrity": "sha512-JCQ89Bm6ECUTnyzyas3JENo00UDJeK8q1SUQyJYou+4Yz5BKEc/F3O21cu++DnUT2zXc0kvQ2Aj4BZCc/nioXQ==", - "dev": true, - "requires": { - "@docsearch/css": "^3.5.1", - "@docsearch/js": "^3.5.1", - "@vitejs/plugin-vue": "^4.2.3", - "@vue/devtools-api": "^6.5.0", - "@vueuse/core": "^10.3.0", - "@vueuse/integrations": "^10.3.0", - "body-scroll-lock": "4.0.0-beta.0", - "focus-trap": "^7.5.2", - "mark.js": "8.11.1", - "minisearch": "^6.1.0", - "shiki": "^0.14.3", - "vite": "^4.4.9", - "vue": "^3.3.4" - }, - "dependencies": { - "@types/node": { - "version": "20.5.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.1.tgz", - "integrity": "sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==", - "dev": true, - "optional": true, - "peer": true - }, - "@vitejs/plugin-vue": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.3.1.tgz", - "integrity": "sha512-tUBEtWcF7wFtII7ayNiLNDTCE1X1afySEo+XNVMNkFXaThENyCowIEX095QqbJZGTgoOcSVDJGlnde2NG4jtbQ==", - "dev": true, - "requires": {} - }, - "vite": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", - "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", - "dev": true, - "requires": { - "esbuild": "^0.18.10", - "fsevents": "~2.3.2", - "postcss": "^8.4.27", - "rollup": "^3.27.1" - } - } - } - }, - "vlq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", - "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==", - "dev": true, - "optional": true, - "peer": true - }, - "vscode-oniguruma": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", - "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", - "dev": true - }, - "vscode-textmate": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", - "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", - "dev": true - }, - "vue": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz", - "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==", - "dev": true, - "requires": { - "@vue/compiler-dom": "3.3.4", - "@vue/compiler-sfc": "3.3.4", - "@vue/runtime-dom": "3.3.4", - "@vue/server-renderer": "3.3.4", - "@vue/shared": "3.3.4" - } - }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "makeerror": "1.0.12" - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "webcrypto-core": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.2.1.tgz", - "integrity": "sha512-5+h1/e/A4eegCRTg+oQ9ehTJRTMwFhZazJ2RH1FP0VC3q1/0xl7x6SzzTwPxd/VTGc7kjuSEJGnfNgoLe5jNRQ==", - "dev": true, - "requires": { - "@peculiar/asn1-schema": "^2.0.38", - "@peculiar/json-schema": "^1.1.12", - "asn1js": "^2.1.1", - "pvtsutils": "^1.2.0", - "tslib": "^2.3.1" - } - }, - "webcrypto-shim": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/webcrypto-shim/-/webcrypto-shim-0.1.7.tgz", - "integrity": "sha512-JAvAQR5mRNRxZW2jKigWMjCMkjSdmP5cColRP1U/pTg69VgHXEi1orv5vVpJ55Zc5MIaPc1aaurzd9pjv2bveg==", - "dev": true - }, - "webex": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/webex/-/webex-1.141.0.tgz", - "integrity": "sha512-b+VFuREIsI9udIZ7baKydo34+ggS4rrOl3dtTGWwZTpweRcgDN1Saxb/lhdSt+520LsHBoWuqNzS4qozjCZKeA==", - "dev": true, - "requires": { - "@babel/polyfill": "^7.12.1", - "@babel/runtime-corejs2": "^7.14.8", - "@webex/internal-plugin-calendar": "1.141.0", - "@webex/internal-plugin-device": "1.141.0", - "@webex/internal-plugin-presence": "1.141.0", - "@webex/internal-plugin-support": "1.141.0", - "@webex/plugin-attachment-actions": "1.141.0", - "@webex/plugin-authorization": "1.141.0", - "@webex/plugin-device-manager": "1.141.0", - "@webex/plugin-logger": "1.141.0", - "@webex/plugin-meetings": "1.141.0", - "@webex/plugin-memberships": "1.141.0", - "@webex/plugin-messages": "1.141.0", - "@webex/plugin-people": "1.141.0", - "@webex/plugin-rooms": "1.141.0", - "@webex/plugin-team-memberships": "1.141.0", - "@webex/plugin-teams": "1.141.0", - "@webex/plugin-webhooks": "1.141.0", - "@webex/storage-adapter-local-storage": "1.141.0", - "@webex/webex-core": "1.141.0", - "envify": "^4.1.0", - "lodash": "^4.17.21" - } - }, - "webex-node-bot-framework": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/webex-node-bot-framework/-/webex-node-bot-framework-2.3.7.tgz", - "integrity": "sha512-DzQB+PbgUOQHLiZ4d/CPxB5xRPV8cbeFObDp3TWtfUpOEw/6KufWhTIlikkbYRX3xc9kuyR/+6C1FwHAt9WAtg==", - "dev": true, - "requires": { - "clean": "^4.0.2", - "https-proxy-agent": "^5.0.0", - "moment": "^2.24.0", - "mongodb": "^3.5.7", - "url": "^0.11.0", - "validator": "^13.6.0", - "webex": "^1.99.0", - "when": "^3.7.8" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true, - "optional": true, - "peer": true - }, - "webrtc-adapter": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-7.7.1.tgz", - "integrity": "sha512-TbrbBmiQBL9n0/5bvDdORc6ZfRY/Z7JnEj+EYOD1ghseZdpJ+nF2yx14k3LgQKc7JZnG7HAcL+zHnY25So9d7A==", - "dev": true, - "requires": { - "rtcpeerconnection-shim": "^1.2.15", - "sdp": "^2.12.0" - } - }, - "well-known-symbols": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz", - "integrity": "sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==" - }, - "whatwg-fetch": { - "version": "3.6.17", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.17.tgz", - "integrity": "sha512-c4ghIvG6th0eudYwKZY5keb81wtFz9/WeAHAoy8+r18kcWlitUIrmGFQ2rWEl4UCKUilD3zCLHOIPheHx5ypRQ==", - "dev": true, - "optional": true, - "peer": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "when": { - "version": "3.7.8", - "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz", - "integrity": "sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I=", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", - "dev": true, - "optional": true, - "peer": true - }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "requires": { - "string-width": "^4.0.0" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", - "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yaml": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", - "dev": true, - "optional": true, - "peer": true - }, - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "dependencies": { - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "optional": true + "optional": true } + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "peer": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/why-is-node-running": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", + "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", + "dev": true, + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "peer": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + } + }, + "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/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "peer": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } + } } diff --git a/package.json b/package.json index c3b716b..9b846a4 100644 --- a/package.json +++ b/package.json @@ -1,51 +1,71 @@ { "name": "speedybot", - "version": "1.1.20", - "description": "Speedy & easy way to rapidly iterate with conversation bots", - "main": "./dist/src/index.js", - "types": "./dist/src/index.d.ts", + "version": "2.0.0", + "main": "dist/cjs/src/index.js", + "module": "dist/mjs/src/index.js", + "types": "dist/mjs/src/index.d.ts", + "homepage": "https://speedybot.js.org", + "bin": { + "speedybot": "./bin/cli.js" + }, + "exports": { + ".": { + "import": "./dist/mjs/src/index.js", + "require": "./dist/cjs/src/index.js" + } + }, + "devDependencies": { + "@types/node": "^18.8.4", + "@vitest/coverage-v8": "^0.32.2", + "@vitest/ui": "^0.32.2", + "adaptivecards": "2.11.1", + "element-plus": "^2.3.10", + "monaco-editor": "^0.41.0", + "tsx": "^3.10.1", + "typedoc": "^0.22.18", + "typedoc-plugin-markdown": "3.12.1", + "typedoc-theme-hierarchy": "1.2.1", + "typescript": "^4.7.2", + "vite": "^4.3.9", + "vitepress": "^1.0.0-rc.31", + "vitest": "^0.32.2", + "@rollup/rollup-linux-x64-gnu": "latest" + }, "scripts": { - "test": "npm run build && ava 'dist/test/*.test.js'", - "x": "npm run build && node_modules/.bin/tape dist/test/*.test.js", - "patch": "npx np patch", - "dev": "nodemon", - "superdev": "npm link && npm run dev", - "start": "ts-node src/launcher", - "start:dist": "npm run setup && cd dist && node src/launcher", - "build:global": "tsc", - "build": "./node_modules/typescript/bin/tsc", - "setup": "npm i && npm run build", - "docs:dev": "vitepress dev docs", + "dist:example": "tee examples/worker/settings/bot.ts examples/i18n/settings/bot.ts < examples/bot.sample.ts >/dev/null", + "build:hybrid": "rm -fr dist/* && tsc -p ./build_tricks/tsconfig-esm.json && tsc -p ./build_tricks/tsconfig-cjs.json && sh ./build_tricks/patch_dist.sh", + "install:all": "npm i && cd docs && npm i", + "build": "npm run test:nowatch && tsc && npm run api-docs && npm run docs:build", + "api-docs": "npm run docs", + "docs": "rm -rf docs/api-docs 2>/dev/null && npx --yes typedoc --media docs/assets --plugin typedoc-plugin-markdown --out docs/api-docs src/docs.ts", + "publish:beta-hybrid": "npm run build:hybrid && npm publish --tag beta", + "publish:beta": "npm run build && npm publish --tag beta", + "save": "git add . &2.0.0-beta.& git commit -m \"checkpt\" && git push draft deploy", + "test": "vitest --reporter verbose", + "test:ui": "vitest --ui", + "test:coverage": "vitest run --coverage", + "test:coverage:ui": "npm run test:coverage && cd coverage && npx serve -p 8001", + "test:nowatch": "vitest run", + "docs:dev": "vitepress dev docs --host", "docs:build": "vitepress build docs", - "docs:preview": "vitepress preview docs" - }, - "keywords": [ - "bot", - "scaffold", - "demo", - "speedybot" - ], - "author": "valgaze@gmail.com", - "license": "MIT", - "dependencies": { - "ava": "^4.1.0", - "axios": "^0.24.0", - "form-data": "^4.0.0", - "simple-log-colors": "^1.1.0" + "docs:copy": "ts-node build_tricks/copy_rewrite.ts", + "docs:preview": "vitepress preview docs", + "docs:localbuild": "npm run docs:build && cd docs/.vitepress/dist && npx serve -p 1337" }, - "peerDependencies": { - "webex-node-bot-framework": "*" + "engines": { + "node": ">=18.11.0" }, "repository": { "type": "git", "url": "https://github.com/valgaze/speedybot.git" }, - "devDependencies": { - "@types/node": "^13.13.52", - "nodemon": "^2.0.4", - "ts-node": "^8.10.1", - "typescript": "^3.8.3", - "vitepress": "^1.0.0-rc.4", - "webex-node-bot-framework": "^2.3.7" - } + "keywords": [ + "bot", + "scaffold", + "continerless", + "speedybot", + "serverless" + ], + "author": "valgaze@gmail.com", + "license": "MIT" } diff --git a/quickstart.md b/quickstart.md deleted file mode 100644 index 0572ee3..0000000 --- a/quickstart.md +++ /dev/null @@ -1,55 +0,0 @@ -## Quickstart - -Note: The steps below assume you have a function WebEx account & **[Nodejs](https://nodejs.org/en/download/)** 12+ available on your system. The Steps below can be automated using the cli, ex - -```sh -npx speedyhelper setup -``` - -## Video instructions - -- 101: https://share.descript.com/view/ds3UA1kUb9z - -- Webhooks/3rd-party integrations: https://share.descript.com/view/bnyupJvNJcx ------ - -## 1. Fetch repo & install dependencies - -``` -git clone https://github.com/valgaze/speedybot-starter -cd speedybot-starter -npm run setup -``` - -## 2. Set your bot access token - -- If you have an existing bot, get its token here: **[https://developer.webex.com/my-apps](https://developer.webex.com/my-apps)** - -- If you don't have a bot, create one and save the token from here: **[https://developer.webex.com/my-apps/new/bot](https://developer.webex.com/my-apps/new/bot)** - -Once you have the bot's token, save it to **[settings/config.json](./settings/config.json)** under the ```token``` field - -## 3. Boot your Bot - -```sh -npm start -``` - -If all went well, it should look something like this: -![image](https://raw.githubusercontent.com/valgaze/speedybot-starter/master/docs/assets/framework_success.png) - -## 4. Run a "healthcheck" with the bot - -To make sure all is well, add your bot from Step 1 in a 1-1 chat session and tell it "healthcheck"-- if everything is configured properly you should see something like this: - -![image](https://raw.githubusercontent.com/valgaze/speedybot-starter/master/docs/assets/healthcheck.gif) - -## 5. Extend - -- [ ] From here, you can edit **settings/handlers.ts** and make your own handlers (& integrate with other services) - -- [ ] Use the How-To doc to see how to use **["special words"](https://github.com/valgaze/speedybot/blob/master/docs/how-to.md#special-words)** to intercept file-uploads/attachments, submit data from a card, etc - -- [ ] Look into Adaptive Cards and other rich chat components: https://developer.webex.com/docs/api/guides/cards - -- [ ] See the **[resources](https://github.com/valgaze/speedybot/blob/master/docs/resources.md)** for further reading & inspiration \ No newline at end of file diff --git a/settings/config.json b/settings/config.json deleted file mode 100644 index 95911e2..0000000 --- a/settings/config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "token": "__REPLACE__ME__" -} \ No newline at end of file diff --git a/settings/handlers.ts b/settings/handlers.ts deleted file mode 100644 index 48ba0c2..0000000 --- a/settings/handlers.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { $, BotHandler } from './../src' // import { BotHandler } from 'speedybot' -import Namegamehandler from './namegame' - -/** - * Add a "handler" below to control your bot's responses to a user-- just add to the list - * - * At minimum a handler must have - * keyword: a word, RegEx, or a list of words and/or regex's to trigger the handler - * handler: a function with access to the bot instance and "trigger" data - * helpText: Simple explanation for how to use (this gets displayed by default if the user tells your bot "help") - * - * If you can make it fit in this list, you can make it do whatever you want - * Special keyword phrases: - * 1) "<@submit>": will be triggered whenever the user subits data from a form - * 2) "<@catchall>": will be triggered on every message received - * 3) "<@help>": override the built-in help handler - * 4) "<@fileupload>": Handle file-upload event - * - */ -const handlers: BotHandler[] = [ - { - keyword: ['hello', 'hey', 'yo', 'watsup', 'hola'], - handler(bot, trigger) { - const reply = `Heya how's it going ${trigger.person.displayName}?` - bot.say(reply) - }, - helpText: `A handler that greets the user` - }, - { - keyword: '<@fileupload>', - handler(bot, trigger) { - - }, - helpText: `Special handler that's fired when the user uploads a file to your bot (by default supports json/csv/txt)` - }, - { - keyword: ['sendfile'], - handler(bot, trigger) { - const fileUrl = 'https://camo.githubusercontent.com/b846bfa57dd26af4e1526abe1173e0b332b75af5d642564b2ab1d0c12a482290/68747470733a2f2f692e696d6775722e636f6d2f56516f5866486e2e676966' - // Send a DM w/ markdown - bot.dm(trigger.person.id, 'markdown', 'Sending you a **file**'); - // Send a file by URL - bot.dm(trigger.person.id, { file: fileUrl }) - }, - helpText: `A handler that attaches a file in a direct message` - }, - { - keyword: ['ping', 'pong'], - handler(bot, trigger) { - const normalized = trigger.text.toLowerCase() - if (normalized === 'ping') { - bot.say('pong') - } else { - bot.say('ping') - } - }, - helpText: `A handler that says ping when the user says pong and vice versa` - }, - { - keyword: '<@submit>', - handler(bot, trigger) { - // Ex. From here data could be transmitted to another service or a 3rd-party integrationn - bot.say(`Submission received! You sent us ${JSON.stringify(trigger.attachmentAction.inputs)}`) - - }, - helpText: `A special handler that fires anytime a user submits data (you can only trigger this handler by tapping Submit in a card)` - }, - { - keyword: '<@fileupload>', - async handler(bot, trigger) { - const supportedFiles = ['json', 'txt', 'csv'] - - // take 1st file uploaded, note this is just a URL & not authenticated - const [file] = trigger.message.files - - // Retrieve file data - const fileData = await $(bot).getFile(file) - const { extension } = fileData - - if (supportedFiles.includes(extension)) { - const {data} = fileData - // bot.snippet will format json or text data into markdown format - bot.say({markdown: $(bot).snippet(data)}) - } else { - bot.say(`Sorry, somebody needs to add support to handle *.${extension} files`) - } - }, - helpText: 'A special handler that will activate whenever a file is uploaded' - }, - Namegamehandler, // You can also include single-file handlers in your list -] - -export default handlers; \ No newline at end of file diff --git a/settings/namegame.ts b/settings/namegame.ts deleted file mode 100644 index 322a0f5..0000000 --- a/settings/namegame.ts +++ /dev/null @@ -1,93 +0,0 @@ -// See here: https://www.youtube.com/watch?v=NeF7jqf0GU4 -import { pickRandom, Trigger, BotInst, SpeedyCard} from './../src' -export default { - keyword: ['namegame', 'namegame:start'], - handler(bot: BotInst, trigger: Trigger) { - const [rootCommand, name] = trigger.args; - if (rootCommand === 'namegame:start') { - const text = ` - 🎶🎶🎸🎶🎶 - Come on ev'rybody, I say now let's play a gamme - - Mention this bot and give it a nammme: - - ex. @botname namegame Shirley - - ex. namegame Lincoln - 🎶🎶🎸🎶🎶 - ` - - const myCard = new SpeedyCard().setTitle('The Name Game by Shirley Ellis').setSubtitle(text).setUrl('https://www.youtube.com/watch?v=NeF7jqf0GU4').setImage('https://i3.ytimg.com/vi/NeF7jqf0GU4/hqdefault.jpg') - return bot.sendCard(myCard.render(), 'It appears your client does not support adaptive cards') - } - - const firstName = name ? name : trigger.person.firstName; - const res = lyricsGenerator(firstName) - const warmup = ['Alright,', 'Here we go', 'Ready?', 'Deep breath...'] - const output = `${pickRandom(warmup)} ${res}` - - const myCard = new SpeedyCard().setTitle('The Name Game by Shirley Ellis').setSubtitle(output).setUrl('https://www.youtube.com/watch?v=NeF7jqf0GU4').setImage('https://i3.ytimg.com/vi/NeF7jqf0GU4/hqdefault.jpg') - bot.sendCard(myCard.render(), 'The Name Game by Shirley Ellis: https://www.youtube.com/watch?v=NeF7jqf0GU4') - if (!name) { - bot.say('Psst, try adding a name, like this: @botname namegame Shirley') - } - return; - }, - helpText: `🎶🎶 Come on everybody, let's play the name game! 🎶🎶 Start a game with 'namegame:start' or enter it directly, ex 'namegame Lincoln'` -} -// https://github.com/valgaze/aws-ecr/blob/master/app/lyrics_generator.js -const isVowel = (letter: string): Boolean => { - const vowels = { - 'a': true, - 'e': true, - 'i': true, - 'o': true, - 'u': true - } - return Boolean(vowels[letter]); -} -const isBFM = (letter: string): Boolean => { - const vowels = { - 'b': true, - 'f': true, - 'm': true - } - return Boolean(vowels[letter]); -} - - -const cases = (firstLetter, remainder, fullname) => { - // Vowel case - if (isVowel(firstLetter)) { - - return ` -${fullname}, ${fullname}, bo-${fullname.toLowerCase()} -Banana-fana fo-f${fullname.toLowerCase()} -Fee-fi-mo-m${fullname.toLowerCase()} -${fullname}! -` - } - - // Billy/Felix/Mary case - if (isBFM(firstLetter)) { - return ` -${fullname}, ${fullname}, bo-${remainder} -Banana-fana fo-${remainder} -Fee-fi-mo-m${remainder} -${fullname}! -` - } - - return ` -${fullname}, ${fullname}, bo-b${remainder} -Banana-fana fo-f${remainder} -Fee-fi-mo-m${remainder} -${fullname}! -` -} - -export const lyricsGenerator = (name = "Marsha") => { - const firstLetter = name.charAt(0); - const remainder = name.slice(1); - return cases(firstLetter, remainder, name); -}; diff --git a/src/cards.ts b/src/cards.ts index a3964a9..0454af6 100644 --- a/src/cards.ts +++ b/src/cards.ts @@ -1,416 +1,844 @@ -import {bad} from './index' +import { CONSTANTS, Card } from "./index"; +import { AttachedData } from "./types"; +export type AbbreviatedSpeedyCard = { + title: string; + subTitle: string; + image: string; + url: string; + urlLabel: string; + data: AttachedData; + chips: (string | { title: string; value?: string })[]; + table: string[][] | { [key: string]: string }; + choices: (string | number)[]; + backgroundImage: string; +}; +export const checkers = { + isSpeedyCard(input: SpeedyCard | object): boolean { + return ( + typeof input === "object" && + "build" in input && + typeof input.build === "function" + ); + }, + isCard(cardCandidate: any | SpeedyCard): boolean { + if (this.isSpeedyCard(cardCandidate)) { + return true; + } + return ( + "$schema" in cardCandidate && + "type" in cardCandidate && + "version" in cardCandidate + ); + }, + isEmail(candidate: string) { + // Only really care about joe@joe.com joe@joe.joe.com joe@a.io + // Should probably get a Regex @ some point... // https://fightingforalostcause.net/content/misc/2006/compare-email-regex.php + const res = candidate.includes("@") && candidate.includes("."); + return res; + }, +}; + +export type SurveyQuestionType = + | "text" + | "single-select" + | "multi-select" + | "picker-dropdown" + | "picker-date" + | "picker-time" + | "textarea"; + +export type SurveyQuestion = { + type: SurveyQuestionType; + question: string; + choices?: (string | number)[]; // Relevant for 'single-select', 'multi-select', 'picker-dropdown' + id?: string; +}; + export interface BaseConfig { - title?: string; - titleConfig?: Partial; - choices?: string[]; - buttons?: string[]; + title?: string; + titleConfig?: Partial; + choices?: string[]; + buttons?: string[]; } export interface BaseOpts { - horizontalAlignment?: "Left" | "Center" | "Right"; - size?: "Small" | "Default" | "Medium" | "Large" | "ExtraLarge"; + horizontalAlignment?: AlignmentChoices; + size?: SizeChoices; } export interface ChoiceOption { - title: string; - value: string; + title: string; + value: string | number; } export interface ChoiceBlock { - type?: string; // "Input.ChoiceSet" - id?: string; - value?: string; - isMultiSelect?: boolean; - isVisible?: boolean; - choices?: ChoiceOption[] + type?: string; // "Input.ChoiceSet" + id?: string; + value?: string; + isMultiSelect?: boolean; + isVisible?: boolean; + choices?: ChoiceOption[]; } export interface TextBlock extends BaseOpts { - type: "TextBlock"; - text: string; - color?: "Default" | "Dark" | "Light" | "Accent" | "Good" | "Warning" | "Attention"; - fontType?: string; - isSubtle?: boolean; - weight: "Lighter" | "Default" | "Bolder"; - wrap?: boolean; + type: "TextBlock"; + text: string; + color?: ColorChoices; + fontType?: string; + isSubtle?: boolean; + weight: "Lighter" | "Default" | "Bolder"; + wrap?: boolean; } export interface ImageBlock extends BaseOpts { - type:"Image"; + type: "Image"; + url: string; + selectAction?: { + type: string; + style?: string; + isPrimary?: boolean; url: string; + }; } export interface LinkButton { - type: "Action.OpenUrl"; - title: string; - url: string; - style?: "positive" | "destructive"; + type: "Action.OpenUrl"; + title: string; + url: string; + style?: "positive" | "destructive"; } export interface inputConfig { - id: string; - placeholder?: string; + id?: string; + placeholder?: string; + isMultiline?: boolean; } export interface Fact { - title: string; - value: string + title: string; + value: string; } export interface FactSet { - type: 'FactSet', - facts: Fact[] -} -export interface AttachmentData { - [key: string]: any + type: "FactSet"; + facts: Fact[]; } +export type HeaderConfig = { + iconURL?: string; + backgroundColor?: ColorChoices; + rtl?: boolean; + iconAlignment?: AlignmentChoices; + iconWidth?: number; + iconRound?: boolean; + textSize?: SizeChoices; + textAlign?: AlignmentChoices; + textColor?: ColorChoices; +}; + +// export type SelectOpts = (string | number)[] | { title: string; value: string }; + +type LazyCardSpec = { + $schema: string; + type: string; + version: string; + body: unknown[]; + actions?: any[]; + backgroundImage?: string; +}; + +type TextBlockConfig = { + type: "TextBlock"; + color: ColorChoices; + fontType: string; + isSubtle: boolean; + size: SizeChoices; + weight: "Lighter" | "Default" | "Bolder"; + wrap: boolean; +}; + +export type SizeChoices = + | "Small" + | "Default" + | "Medium" + | "Large" + | "ExtraLarge" + | "Stretch"; + +export type AlignmentChoices = "Left" | "Center" | "Right"; + +export type BaseColors = + | "Default" + | "Dark" + | "Light" + | "Accent" + | "Good" + | "Warning" + | "Attention"; +export type SimpleColor = "blue" | "red" | "green" | "yellow"; // subject to change :/ +export type ColorChoices = + | "Default" + | "Dark" + | "Light" + | "Accent" + | "Good" + | "Warning" + | "Attention" + | "blue" + | "red" + | "green" + | "yellow"; +export type VAlignChoices = "Bottom" | "Center" | "Top"; + +export const SpeedyCardId = { + dropdown: "addPickerDropdown_result", +}; /** - * SpeedyCard - * Work in progress - * - zero-knowledge, easy declarative way to construct - * "rich" (ie interactive adpative cards) - * - * - Chain methods together, kinda like SwiftUI's syntax: https://developer.apple.com/xcode/swiftui/ - * - * ```ts - import { SpeedyCard } from 'speedybot' - - const cardPayload = new SpeedyCard().setTitle('System is 👍') - .setSubtitle('If you see this card, everything is working') - .setImage('https://i.imgur.com/SW78JRd.jpg') - .setInput(`What's on your mind?`) - .setUrl(pickRandom(['https://www.youtube.com/watch?v=3GwjfUFyY6M', 'https://www.youtube.com/watch?v=d-diB65scQU']), 'Take a moment to celebrate') - .setTable([[`Bot's Date`, new Date().toDateString()], ["Bot's Uptime", `${String(process.uptime()).substring(0, 25)}s`]]) - - bot.sendCard(cardPayload.render(), 'Your client doesnt appear to support adaptive cards') - * ``` + * Card Builder + * + * This is a utility that makes it convenient to build + pass data to Adaptive Cards + * + * Note: This extends Adaptive Card functionality to include "chips" which when tapped will trigger your text handling logic + * + * You can add "pickers" for date, time, select (and multi-select) + * + * */ -export interface SelectorPayload { - id: string; - type: string; - label?: string; -} export class SpeedyCard { - public title = '' - public subtitle = '' - public titleConfig: Partial = {} - public subTitleConfig: Partial = {} - public choices: ChoiceOption[] = [] - public choiceConfig: Partial = {} - public image: string = ''; - public imageConfig: BaseOpts = {}; - public buttonLabel = 'Submit' - public inputPlaceholder = '' - public inputConfig: inputConfig = { - id: 'inputData', - } - public url = '' - public urlLabel = 'Go' - public tableData: string[][] = [] - public attachedData: AttachmentData = {} - public needsSubmit = false - public dateData: Partial = {} - public timeData: Partial = {} - - public json:EasyCardSpec = { - "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", - "type": "AdaptiveCard", - "version": "1.0", - "body": [] - } - - constructor() {} - - setTitle(title:string, config?: Partial) { - this.title = title - if (config) { - this.titleConfig = config - } - return this + /** + * @hidden + */ + public json: LazyCardSpec = { + $schema: "http://adaptivecards.io/schemas/adaptive-card.json", + type: "AdaptiveCard", + version: "1.0", + body: [], + }; + + public tools = { + checkColor(candidate: string) { + const colorMapping: Record = { + default: "Default", + dark: "Dark", + light: "Light", + accent: "Accent", + good: "Good", + warning: "Warning", + attention: "Attention", + blue: "Accent", + red: "Attention", + green: "Good", + yellow: "Warning", + }; + + const lowerCaseInput = candidate.toLowerCase(); + return colorMapping[lowerCaseInput] || "Default"; + }, + }; + + /** + * @hidden + */ + private _stash: { + needsSubmit: boolean; + title: string; + subTitle: string; + chips: string[]; + data: AttachedData; + submitLabel: string; + header?: { type: string; columns: unknown[] }; + } = { + needsSubmit: false, + title: "", + subTitle: "", + chips: [], + data: {}, + submitLabel: "Submit", + }; + + /** + * @hidden + */ + private id: { [key: string]: number } = {}; + + needsSubmit(): boolean { + return Boolean(this._stash.needsSubmit); + } + /** + * @hidden + */ + private checkId(id: string = ""): string { + if (id in this.id) { + this.id[id]++; + const num = this.id[id]; + const modifiedId = `${id}_${num}`; + return modifiedId; + } else { + this.id[id] = 1; + return id; } - - setSubtitle(subtitle: string, config?: Partial) { - this.subtitle = subtitle - if (config) { - this.subTitleConfig = config + } + + constructor() {} + + addTitle(title: string) { + this._stash.title = title; + return this; + } + + addSubtitle(subTitle: string) { + this._stash.subTitle = subTitle; + return this; + } + + addTable( + input: (string | number)[][] | { [key: string]: string | number }, + separator = false + ) { + const payload: { + type: "FactSet"; + separator: boolean; + facts: { title: string | number; value: string | number }[]; + } = { + type: "FactSet", + separator, + facts: Array.isArray(input) + ? input.map(([label, value]) => ({ title: label, value })) + : Object.entries(input).map(([label, value]) => ({ + title: label, + value, + })), + }; + this.json.body.push(payload); + return this; + } + + addChip( + payload: string | { title: string; value?: string }, + id = CONSTANTS.CHIP_LABEL + ) { + return this.addChips([payload], id); + } + + addChips( + chips: (string | { title: string; value?: string })[], + id = CONSTANTS.CHIP_LABEL + ) { + const chipPayload = chips.map((chip) => { + let chipLabel = ""; + let chipAction = ""; + if (typeof chip === "string") { + chipLabel = chip; + chipAction = chip; + } else { + const { title, value = "" } = chip; + chipLabel = title; + if (value) { + chipAction = value; + } else { + chipAction = title; } - return this + } + + const payload = { + type: "Action.Submit", + title: chipLabel, + data: { + [id]: chipAction, + }, + }; + return payload; + }); + + this.json.actions = this.json.actions + ? this.json.actions.concat(chipPayload) + : chipPayload; + return this; + } + + addImage( + url: string, + config: { + size?: SizeChoices; + align?: AlignmentChoices; + targetURL?: string; + } = {} + ) { + if (url) { + const payload: ImageBlock = { + horizontalAlignment: config.align ?? "Center", + size: config.size ?? "ExtraLarge", + type: "Image", + url, + }; + + if (config.targetURL) { + const linkPayload = { + type: "Action.OpenUrl", + style: "positive", + isPrimary: true, + url: config.targetURL, + }; + payload.selectAction = linkPayload; + } + this.json.body.push(payload); } - - setChoices(choices: string[], config?:ChoiceBlock) { - this.choices = choices.map((choice: string, idx) => { - return { - title: choice, - value: choice - } - }) - if (config) { - this.choiceConfig = config - } - return this + return this; + } + + addLink(url: string, label?: string) { + return this.addText(`**[${label || url}](${url})**`); + } + + addLinkButton(url: string, label?: string) { + const id = String(Math.random()).slice(3); + const cleanId = this.checkId(id); + + const payload = { + type: "Action.OpenUrl", + id: cleanId, + title: label ?? url, + url: url, + }; + this.addAction(payload); + return this; + } + + addText( + text: string, + config: { + bold?: boolean; + size?: SizeChoices; + align?: AlignmentChoices; + color?: ColorChoices; + backgroundColor?: ColorChoices; + vertAlign?: VAlignChoices; + } = {} + ) { + const { + bold = false, + size = "Medium", + align = "Left", + color, + backgroundColor, + vertAlign, + } = config; + const payload = { + type: "TextBlock", + text: text, + wrap: true, + size, + horizontalAlignment: align, + ...(color && { color: this.tools.checkColor(color) }), + ...(bold && { weight: "Bolder" }), + }; + + if (backgroundColor || vertAlign) { + const containerPayload = { + type: "Container", + height: "stretch", + items: [payload], + ...(backgroundColor && { + style: this.tools.checkColor(backgroundColor), + }), + ...(color && { color: this.tools.checkColor(color) }), + ...(vertAlign && { + verticalContentAlignment: vertAlign, + }), + }; + this.json.body.push(containerPayload); + } else { + this.json.body.push(payload); } - - setImage(url: string, imageConfig?) { - this.image = url - if (imageConfig) { - this.imageConfig = imageConfig + return this; + } + + addHeader(text: string, config: HeaderConfig = {}) { + const textPayload = { + width: "stretch", + items: [ + { + type: "TextBlock", + text: text, + wrap: true, + size: config.textSize || "Large", + horizontalAlignment: + config.textAlign ?? config.rtl ? "Right" : "Left", + ...(config.textColor && { + color: this.tools.checkColor(config.textColor), + }), + verticalContentAlignment: "Center", + ...(config.backgroundColor && { + style: this.tools.checkColor(config.backgroundColor), + }), + }, + ], + }; + + const iconPayload = config.iconURL + ? { + width: "32px", + items: [ + { + type: "Image", + horizontalAlignment: config.iconAlignment ?? "Left", + url: config.iconURL, + ...(config.iconRound && { style: "person" }), + width: `${config.iconWidth ?? "16"}px`, + }, + ], } - return this - } - - setButtonLabel(label: string) { - this.buttonLabel = label - return this + : null; + + const headerPayload: { + type: string; + columns: (typeof textPayload | typeof iconPayload)[]; + } = { + type: "ColumnSet", + columns: config.rtl + ? [textPayload, iconPayload].filter(Boolean) + : [iconPayload, textPayload].filter(Boolean), + }; + + this._stash.header = headerPayload; + + return this; + } + + addBlock( + content: string | SpeedyCard, + config: { + backgroundColor?: ColorChoices; + vertAlign?: VAlignChoices; + separator?: boolean; + } = {} + ) { + if (typeof content === "string") { + return this.addText(content, config); } - setInput(placeholder: string, config?:inputConfig) { - this.inputPlaceholder = placeholder - if (config) { - this.inputConfig = config - } - return this + if (content instanceof SpeedyCard) { + const { backgroundColor, vertAlign } = config; + const { body } = content.build(); + + const containerPayload = { + ...(config.separator && { separator: config.separator }), + type: "Container", + height: "stretch", + items: body, + ...(backgroundColor && { + style: this.tools.checkColor(backgroundColor), + }), + ...(vertAlign && { + verticalContentAlignment: vertAlign, + }), + }; + + this._stash.needsSubmit = !this._stash.needsSubmit + ? content.needsSubmit() + : this._stash.needsSubmit; + + this.json.body.push(containerPayload); } - setUrl(url: string, label='Go') { - this.urlLabel = label - this.url = url - return this + return this; + } + + // Add sub card + addSubcard(card: SpeedyCard | Card, textLabel: string = "") { + const subCard = { + type: "Action.ShowCard", + title: textLabel, + card: + "build" in card && typeof card.build === "function" + ? card.build() + : card, + }; + this.addAction(subCard); + return this; + } + + // "Pickers" + addPickerDropdown( + choices: (string | number | { title: string; value: number | string })[], + id: string = SpeedyCardId.dropdown + ) { + const cleanId = this.checkId(id); + this._stash.needsSubmit = true; + const formattedChoices = choices.map((choice, idx) => { + if (typeof choice === "object") { + return choice; // {title, val} + } + return { + title: String(choice), + value: String(choice), + }; + }); + const payload: ChoiceBlock = { + type: "Input.ChoiceSet", + id: cleanId, + value: "0", // Pick 1st one? + isMultiSelect: false, + isVisible: true, + choices: formattedChoices, + }; + this.json.body.push(payload); + return this; + } + + addSingleSelect( + choices: (string | number)[] | { title: string; value: string }[], + id: string = "addSingleSelectresult" + ) { + return this.addSelect(choices, id, { + isMultiSelect: false, + style: "expanded", + }); + } + + addMultiSelect( + choices: (string | number)[] | { title: string; value: string }[], + id: string = "addMultiSelect_result" + ) { + return this.addSelect(choices, id, { isMultiSelect: true }); + } + + /** + * @hidden + */ + private addSelect( + choices: (string | number)[] | { title: string; value: string }[], + id: string, + config: { + isMultiSelect?: boolean; + style?: string; + } = {} + ) { + this._stash.needsSubmit = true; + const cleanId = this.checkId(id); + + // Define formattedChoices with a more specific type + let formattedChoices: { title: string; value: string }[]; + + if (Array.isArray(choices) && typeof choices[0] === "string") { + formattedChoices = (choices as (string | number)[]).map((choice) => ({ + title: String(choice), + value: String(choice), + })); + } else { + formattedChoices = choices as { title: string; value: string }[]; } - setTable(input: string[][]) { - let core = input - if (!Array.isArray(input) && typeof input === 'object') { - core = Object.entries(input) - } - this.tableData = core - return this + const payload: ChoiceBlock & { style?: string } = { + type: "Input.ChoiceSet", + id: cleanId, + value: "0", + isMultiSelect: Boolean(config.isMultiSelect), + isVisible: true, + ...(config.style && { style: "expanded" }), + choices: formattedChoices, + style: "expanded", + }; + + this.json.body.push(payload); + return this; + } + + addPickerDate(textLabel: string, id: string = "addPickerDate_result") { + this._stash.needsSubmit = true; + const cleanId = this.checkId(id); + const textPayload = this.buildTextPayload(textLabel); + const datePicker = { + type: "Input.Date", + id: cleanId, + }; + this.json.body.push(textPayload, datePicker); + return this; + } + + addPickerTime(textLabel: string, id: string = "addPickerTime_result") { + this._stash.needsSubmit = true; + + const cleanId = this.checkId(id); + const textPayload = this.buildTextPayload(textLabel); + const timePicker = { + type: "Input.Time", + id: cleanId, + }; + this.json.body.push(textPayload, timePicker); + return this; + } + + addTextInput(placeholder: string, id = "addTextInput_result") { + this._stash.needsSubmit = true; + + const cleanId = this.checkId(id); + const payload = { + id: cleanId, + placeholder, + type: "Input.Text", + }; + this.json.body.push(payload); + return this; + } + + addTextarea(placeholder: string, id = "addTextarea_result") { + this._stash.needsSubmit = true; + const cleanId = this.checkId(id); + const payload = { + id: cleanId, + placeholder, + type: "Input.Text", + isMultiline: true, + }; + this.json.body.push(payload); + return this; + } + + // Setters + setBackgroundImage(url: string) { + this.json.backgroundImage = url; + return this; + } + + setSubmitButtonTitle(label: string) { + this._stash.submitLabel = label; + return this; + } + + // Attach "fixed"/static data to go along with the card + attachData(payload: AttachedData) { + this._stash.needsSubmit = true; + this._stash.data = payload; + return this; + } + + /** + * @hidden + */ + private buildTextPayload( + text: string, + textConfig: Partial = {} + ) { + const payload: TextBlock = { + type: "TextBlock", + text, + size: "Medium", + isSubtle: true, + wrap: true, + weight: "Lighter", + ...textConfig, + }; + return payload; + } + + private addAction(a: any) { + if (!this.json.actions) { + this.json.actions = []; } - - setData(payload:AttachmentData) { - if (payload) { - this.attachedData = payload - this.needsSubmit = true - } - return this + this.json.actions.push(a); + } + + addDeleteButton(label = CONSTANTS.destroyLabel) { + return this.addButton( + label, + CONSTANTS.submitToken, + CONSTANTS.action_delete + ); + } + + addButton( + label: string, + id = "button_result", + attachedData: string | { [key: string]: number | string | boolean } = {} + ): SpeedyCard { + const payload = { + type: "Action.Submit", + title: label, + data: { + [id]: attachedData, + }, + }; + this.addAction(payload); + return this; + } + + survey(questions: SurveyQuestion[], title = "📝 Survey") { + const card = new SpeedyCard(); + card.addHeader(title); + + questions.forEach((question, idx) => { + let id = question.id || `question_${idx + 1}`; + + switch (question.type) { + case "text": + card.addTextInput(question.question, id); + break; + case "single-select": + card.addText(question.question); + card.addSingleSelect(question.choices || [], id); + break; + case "multi-select": + card.addText(question.question); + card.addMultiSelect(question.choices || [], id); + break; + case "picker-dropdown": + card.addText(question.question); + card.addPickerDropdown(question.choices || [], id); + break; + case "picker-date": + card.addPickerDate(question.question, id); + break; + case "picker-time": + card.addPickerTime(question.question, id); + break; + case "textarea": + card.addTextarea(question.question, id); + break; + } + }); + + return card; + } + + build() { + // Building shouldn't mutate card itself + const json = JSON.parse(JSON.stringify(this.json)); + const needsSubmit = this._stash.needsSubmit; + if (this._stash.subTitle) { + json.body.unshift(this.buildTextPayload(this._stash.subTitle)); } - - setDate(id="selectedDate", label: string='Select a date') { - const payload = { - "type": "Input.Date", - id, - label - } - this.dateData = payload - return this - } - - setTime(id="selectedTime", label: string = 'Select a time') { - const payload = { - "type": "Input.Time", - id, - label - } - this.timeData = payload - return this - } - - setChips(chips: (string | {label: string, keyword?:string})[]) { - const chipPayload = chips.map(chip => { - let chipLabel = '' - let chipAction = '' - if (typeof chip === 'string') { - chipLabel = chip - chipAction = chip - } else { - const {label, keyword=''} = chip - chipLabel = label - if (keyword) { - chipAction = keyword - } else { - chipAction = label - } - } - - - const payload = { - "type": "Action.Submit", - "title": chipLabel, - "data": { - "chip_action": chipAction - } - } - return payload + if (this._stash.title) { + json.body.unshift( + this.buildTextPayload(this._stash.title, { + weight: "Bolder", + size: "ExtraLarge", }) - this.json.actions = this.json.actions ? this.json.actions.push(chipPayload) : chipPayload - return this + ); } - - render() { - if (this.title) { - const payload:TextBlock = { - type: 'TextBlock', - text: this.title, - weight: 'Bolder', - size: 'Large', - wrap: true, - ...this.titleConfig - } - this.json.body.push(payload) - } - - if (this.subtitle) { - const payload:TextBlock = { - type: 'TextBlock', - text: this.subtitle, - size: "Medium", - isSubtle: true, - wrap:true, - weight: 'Lighter', - ...this.subTitleConfig - } - this.json.body.push(payload) - } - - if (this.tableData && this.tableData.length) { - const payload: FactSet = { - "type": "FactSet", - "facts": [] - } - - this.tableData.forEach(([label, value], i) => { - const fact:Fact = { - title: label, - value - } - payload.facts.push(fact) - }) - - this.json.body.push(payload) - } - - if (this.image) { - const payload: ImageBlock = { - type: "Image", - url: this.image, - horizontalAlignment: "Center", - size: "Large", - ...this.imageConfig - } - this.json.body.push(payload) - } - - if (this.choices.length) { - this.needsSubmit = true - const payload: ChoiceBlock = { - type: 'Input.ChoiceSet', - id: 'choiceSelect', - "value": "0", // Pick 1st one? - "isMultiSelect": false, - "isVisible": true, - choices: this.choices, - ...this.choiceConfig - } - this.json.body.push(payload) - } - - if (this.inputPlaceholder) { - this.needsSubmit = true - const payload = { - "type": "Input.Text", - placeholder: this.inputPlaceholder, - ...this.inputConfig, - } - this.json.body.push(payload) - } - - if (Object.keys(this.dateData).length) { - const { id, type, label} = this.dateData - if (label) { - this.json.body.push({ - "type": "TextBlock", - "text": label, - "wrap": true - }) - } - if (id && type) { - this.json.body.push({id, type}) - } - this.needsSubmit = true - } - - - if (Object.keys(this.timeData).length) { - const { id, type, label} = this.timeData - if (label) { - this.json.body.push({ - "type": "TextBlock", - "text": label, - "wrap": true - }) - } - if (id && type) { - this.json.body.push({id, type}) - } - this.needsSubmit = true - } - - - if (this.needsSubmit) { - interface SubmitPayload { - type: string; - title: string; - data?: unknown - } - const payload:SubmitPayload = { - type: "Action.Submit", - title: this.buttonLabel, - } - if (this.attachedData) { - payload.data = this.attachedData - } - - if (this.json.actions?.length) { - this.json.actions.push(payload) - } else { - this.json.actions = [payload] - } - } else { - if (this.attachedData && Object.keys(this.attachedData).length) { - bad(`attachedData ignore, you must call at least either .setInput(), .setChoices, .setDate, .setTime, to pass through data with an adaptive card`) - } - } - - if (this.url) { - const payload: LinkButton = { - type: "Action.OpenUrl", - title: this.urlLabel, - url: this.url, - } - if (this.json.actions) { - this.json.actions.push(payload) - } else { - this.json.actions = [payload] - } - } - return this.json + if (needsSubmit) { + const payload: { type: string; title: string; data?: any } = { + type: "Action.Submit", + title: this._stash.submitLabel, + }; + if (this._stash.data && Object.keys(this._stash.data).length > 0) { + payload.data = this._stash.data; + } + if (!json.actions) { + json.actions = []; + } + json.actions.push(payload); } - - renderFull() { - const cardData = this.render() - const fullPayload = { - "roomId": "__REPLACE__ME__", - "markdown": "Fallback text **here**", - "attachments": [cardData] - } - return fullPayload + const hasHeader = Boolean(this._stash.header); + if (hasHeader) { + json.body = [ + this._stash.header, + { + separator: true, + type: "Container", + items: json.body, + }, + ]; } + return json; + } } - -// todo: better types -export interface EasyCardSpec { - $schema: string; - type: string; - version: string; - body: any; - actions?: any; -} \ No newline at end of file diff --git a/src/docs.ts b/src/docs.ts new file mode 100644 index 0000000..09de262 --- /dev/null +++ b/src/docs.ts @@ -0,0 +1,5 @@ +export { SpeedyCard } from "./cards"; + +export * from "./speedybot"; +// export { MessageResponse } from "./types"; +export { $Magic } from "./types"; diff --git a/src/framework.ts b/src/framework.ts deleted file mode 100644 index d4435af..0000000 --- a/src/framework.ts +++ /dev/null @@ -1,271 +0,0 @@ -/** - * - * Framework: https://github.com/WebexSamples/webex-node-bot-framework/blob/master/lib/framework.js - * Bot inst: https://github.com/WebexSamples/webex-node-bot-framework/blob/master/lib/bot.js - * - */ - -/** - * Framework instance: https://github.com/WebexSamples/webex-node-bot-framework/blob/master/lib/framework.js#L25-L34 - * -*/ -import { Locker, vote_prefix } from './' - -export interface FrameworkInst { - options: FrameworkOptions; - id: string; - active: boolean; - isBotAccount: boolean; - isUserAccount: boolean; - person: Person; - email: string; - webex: WebexInst; - messageFormat?: string; - setWebexToken(token: string): Promise; - testWebexToken(token: string): Promise; - getWebexSDK(): WebexInst; // TODO - stop(): Promise; - start(): Promise; - initialize(): Promise; - restart(): Promise; - hears(phrase: string | RegExp, action: any, helpText: string, preference?: number):string; - clearHears(hearsId: string): void; - showHelp(header:string, footer: string): string; - setAuthorizer(func: any); boolean; - clearAuthorizer(): void; - on(eventName: string, handler: unknown): void; - onMessageCreated(payload: Message): void; - _$storage: Locker; // extend w/ storage for all users - [vote_prefix]: Map -} - -export interface FrameworkOptions { - token: string; - webhookSecret: string; - webhookRequestJSONLocation: string; - removeWebhooksOnStart: boolean; - removeDeviceRegistrationsOnStart: boolean; -} - - -/** - * Bot - * Bot inst: https://github.com/WebexSamples/webex-node-bot-framework/blob/master/lib/bot.js - * - */ -export interface BotInst { - framework: FrameworkInst; - active: boolean; // Bot active state - person: object; // Bot's Webex Person Object - email: string; // Bot email - room: Room; // Bot's Webex Room object - membership: object; // Bot's Webex Membership object - isLocked: boolean; // If bot is locked - isModerator: boolean; // If bot is a moderator - isGroup: boolean; // If bot is in Group Room - isDirect: boolean; // If bot is in 1:1/Direct Room - isTeam: boolean; // If bot is in a Room associated to a Team - isDirectTo: string; // Recipient Email if bot is in 1:1/Direct Room - lastActivity: string; // Last bot activity - webex: WebexInst; - - // methods - implode(): Promise; - say(format:string, msg?: string | object): Promise - say(object): Promise - say({markdown: string}): Promise - sayWithLocalFile(message: string | object, filename: string): Promise - reply(replyTo: string | object, message: string | object, format?: string): Promise - dm(person: string, format: string | object, ...rest: any): void; - sendCard(cardJson: any, fallbackText: string): Promise; - dmCard(person: string, cardJson: any, fallbackText: string): void; - censor(messageId: string): Promise; - uploadStream(stream: any): Promise; - add(emails: string | string[], moderator: boolean): Promise; - remove(emails: string | string[]): Promise; - getModerators():Promise; - newRoom(roomName:string, email: string[], isTeam: boolean): Promise; - newTeamRoom(roomName:string, email: string[]): Promise; - roomRename(title: string): Promise; - exit(): Promise; - - // storage - store(key: string, val: any): Promise; - recall(key?: string): Promise; - forget(key: string): Promise; -} - -export interface ToMessage extends Partial { - toPersonId?: string; - toPersonEmail?: string; - roomId?: string; - files?: string[] | any[] -} - -export interface Message { - id?: string; - roomId?: string; - roomType?: string; - text?: string; - personId?: string; - personEmail?: string; - markdown?: string; - html?: string; - created?: string; - files: string[]; - mentionedPeople?: string[]; -} - -export interface Room { - id: string; - title: string; - type: string; - isLocked: boolean; - lastActivity: string; - creatorId: string; - created?: string; - ownerId: string; - teamId?: string; -} - -export interface PhoneNumber { - type: string; - value: string; -} - -export interface Person { - id: string; - emails: string[]; - phoneNumbers: PhoneNumber[]; - displayName: string; - nickName: string; - firstName: string; - lastName: string; - avatar: string; - orgId: string; - created: string; - lastModified: string; - type: string; -} - -export interface Trigger { - type: 'message' | 'attachmentAction'; - id: string; - text: string; - args: string[]; - message: Message; - person: Person; - personId: string; - phrase: string; - attachmentAction?: any; -} - -// Partial stub-out of webex library -// webex.memberships.create -// webex.messages.create(message); -// https://webex.github.io/webex-js-sdk/api/#messageobject -export interface WebexInst { - rooms: { - create(room: Room): Promise, - get(room: (Room | string), options: Object): Promise, - remove(room: (Room | string)): Promise, - update(room: Room): Promise, - [key: string]: any; - }, - messages: { - // https://webex.github.io/webex-js-sdk/api/#messageobject - /** - * - * @param message - * - * ```ts - * { - * "toPersonEmail":"joe@bongo.com", - * "text": "Here is a message" - * } - * ``` - * - */ - create(message: ToMessage): Promise, - get(message: (Message | string)): Promise, - list(options: {roomId: string, max?: number}): Promise, - remove(message: (Message | string | number)): Promise, - [key: string]: any; - }, - memberships: { - create(membership: Membership): Promise, - get(membership: (Message | string | number)): Promise, - remove(membership: (Message | string | number)): Promise, - update(membership: (Message | string | number)): Promise, - list({roomId: string}): Promise<{ - items: Membership[] - }> - }, - - request(payload: any): Promise; // https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/request/index.d.ts - // catch-all - [key: string]: any -} - -// For endpoint, message request -export interface MessageRequest { - roomId?: string; - parentId?: string; - toPersonId?: string; - toPersonEmail?: string; - text?: string; - markdown?: string; - files?: string[]; - attachments?: any[]; // Adaptive card -} - -export interface Membership { - id: string; // Unique identifier for the membership - roomId: string; // The room ID - personId: string; // The person ID - personEmail: string; // The email address of the person / room member - isModerator: boolean; // Indicates whether the specified person should be a room moderator - isMonitor: boolean; // Indicates whether the specified member is a room monitor - created: string; // The date and time that this membership was created - roomType: string; // "group" or "other" - personDisplayName?: string; - personOrgId?: string; - isRoomHidden: boolean; -} -// Bot handler -export type keywords = string | RegExp; -export type Allowedkeywords = keywords | keywords[]; -export type handlerFunc = (bot: BotInst, trigger: Trigger) => void; - -/** - * - * @member {string | RegExp | (string | RegExp)[]} keyword is used for whatever reason - - * ``` - * keyword: string or regex, or a list of both. If regex it matches on entire message, if a string just on the 1st word - * handler: handler function - * helpText: help text - * preference (optional) specify what should happen if multiple handlers overlap, lower number == higher match priority - * ``` - */ -export interface BotHandler { - keyword: Allowedkeywords; // string or regex, or a list of both. If regex it matches on entire message, if a string just on the 1st word - handler: handlerFunc; - helpText: string; // Used by built-in help generator any handlers you write this way will list out their help data - preference?: number; // defaults to 0, specifies preference of phrase when overlapping handlers match, lower number >> higher match priority -} - -export type AlertFunc = (req: any, res: any) => void; - -export type ValidMethods = 'POST' | 'GET' | 'PUT' | 'PATCH' | 'DELETE' -export interface WebhookHandler { - keyword: '<@webhook>'; - route: string; - handler: AlertFunc; - method?: ValidMethods; // default to post -} - -export const passThru = (bot: BotInst, trigger: Trigger) => { - // HACK: pass the button-tap value through the handler system - return bot.framework.onMessageCreated(trigger.message) -} \ No newline at end of file diff --git a/src/helpers.ts b/src/helpers.ts deleted file mode 100644 index 06a65ef..0000000 --- a/src/helpers.ts +++ /dev/null @@ -1,989 +0,0 @@ -import axios, { Method, AxiosRequestConfig, AxiosResponse } from 'axios' -import { createReadStream, unlink } from 'fs' -import { SpeedyCard, chipLabel, chipConfigLabel, $promptActiveKey, $prompts } from './index' -import { BotInst, Trigger, ToMessage, Message, BotHandler, Membership } from './framework' -import { log, loud } from './logger' -import { resolve } from 'path' -import FormData from 'form-data' - -export const checkers = { - isSpeedyCard(input: SpeedyCard | object): boolean { - return ( - typeof input === 'object' && - 'render' in input && - typeof input.render === 'function' - ) - }, - isCard(cardCandidate: any | SpeedyCard): boolean { - if (this.isSpeedyCard(cardCandidate)) return true - const stringifiedPayload = JSON.stringify(cardCandidate) - const isCard = - stringifiedPayload.includes('AdaptiveCard') && - stringifiedPayload.includes('$schema') && - stringifiedPayload.includes('version') - return isCard - }, - isEmail(candidate: string) { - // Only really care about joe@joe.com joe@joe.joe.com joe@a.io - // Should probably get a Regex @ some point... // https://fightingforalostcause.net/content/misc/2006/compare-email-regex.php - const res = candidate.includes('@') && candidate.includes('.') - return res - }, - } - -/** -* @param list -* Pick an item from the list -**/ -export const pickRandom = (list) => list[Math.floor(Math.random() * list.length)] - - -/** - * Make sure webhookUrl exists and has an ending path - * @param webhookUrl - * - * - * @returns boolean | throws - */ -export const ValidatewebhookUrl = (webhookUrl: string) => { - // if no webhookUrl specified - if (!webhookUrl) { - throw new Error(`Error: Missing 'webhookUrl' in config`) - } - - // check if ending route, throw if not present - // ex. good: https://123-456-789.ngrok.io/webhookroute - // ex. bad: https://123-456-789.ngrok.io/ - // ex. bad: https://123-456-789.ngrok.io - const candidate = new URL(webhookUrl) - if (candidate.pathname === '/') { - loud(` -It looks like your config's webhookUrl does not end with a route - -Ex. (expresjs) If your server's route handler looks like this: - -const config = { - "webhookUrl": "${webhookUrl}", - "token": "aaa-bbb-ccc" -} - -app.post('my_webhook', SpeedybotWebhook(config, handlerList)) - -Change config.webhookUrl to ${webhookUrl}${webhookUrl.slice(-1) === '/' ? 'my_webhook' : '/my_webhook'} - -See here for more details: https://github.com/valgaze/speedybot/blob/master/docs/how-to.md#deploy`) - const errMsg = `Error: webhookUrl in should end with a path, ex ${webhookUrl}${webhookUrl.slice(-1) === '/' ? 'my_webhook' : '/my_webhook'}` - throw new Error(errMsg) - } else { - return true - } -} - -/** - * - * Randomly selects a phrase & fill in template - * - * ```ts - * - * // ie from an external template file - * const payload = { - * phrases: ['Hey there, how it going, $[name]?', 'Hi $[name], here's your $[mint]'] - * template: { - * name: 'Joe', - * flavor: 'mint' - * } - * } - * - * fillTemplate(payload.phrases, payload.template) - * - * ``` - * - * @param phrases: array of phrases []string - * ```ts - * ['Howdy, you are $[name] and you like $[flavor]', '$[name], here is $[flavor]'] - * ``` - * @param template: mappings to phrases object - * - * ```js - * { - * name: 'Joe', - * flavor: 'mint' - * } - *``` - * - * - */ - - export const fillTemplate = (utterances: string | string[], template: { [key: string]: any }): string => { - let payload: string; - if (typeof utterances != "string") { - payload = pickRandom(utterances) || ""; - } else { - payload = utterances - } - const replacer = ( - utterance: string, - target: string, - replacement: string - ): string => { - if (!utterance.includes(`$[${target}]`)) { - return utterance - } else { - return replacer( - utterance.replace(`$[${target}]`, replacement), - target, - replacement - ) - } - } - - for (let key in template) { - const val = template[key] - payload = replacer(payload, key, val) - } - return payload -} - - -export const snippet = (data: string | object, dataType='json'): string => { - const msg = ` -\`\`\`${dataType} -${dataType === 'json' ? JSON.stringify(data, null, 2) : data} -\`\`\`` - return msg -} - - -export const htmlSnippet = (data: string | object): string => { - return snippet(data, 'html') -} - -// Alias store/recall -export class Storage { - static async get(bot, key:string) { - let res = null - try { - res = await bot.recall(key) - } catch(e) { - - } - return res - } - - static async save(bot, key:string, val: any) { - return bot.store(key, val) - } - - static async delete(bot, key) { - return bot.forget(key) - } -} - - -export class Locker { - public state = new Map() - constructor() {} - - exists(key:string) { - return this.state.has(key) - } - - save(key: string, value: T): T { - this.state.set(key, value) - return value - } - - get(key: string) { - return this.state.get(key) - } - - delete(key: string) { - return this.state.delete(key) - } - - snapShot() { - return JSON.parse(JSON.stringify(this.state)) - } -} - -export const globoStore = () => new Locker(); - - -// Get uploaded files -export interface SpeedyFileData { - data: T; - extension: string; - fileName: string; - type: string; - markdownSnippet: string; -} - - -export const extractFileData = (contentDisposition: string): { fileName: string, extension: string } => { - // header >> 'content-disposition': 'attachment; filename="a.json"', - const fileName = contentDisposition.split(';')[1].split('=')[1].replace(/\"/g, '') - const extension = fileName.split('.').pop() || '' - return { - fileName, - extension - } -} - - -export type retryFunc = (bot: BotInst, trigger: Trigger, result?: string | number) => void | Promise; -export interface PromptConfig { - prompt?: string; - retry: string | string[] | retryFunc; - validate?: (val: string | number) => boolean | Promise; - success: (bot: BotInst, trigger: Trigger, result?: string | number) => void | Promise; -} - -export class $Botutils { - public token:string - public botRef: BotInst; - public request: (payload: any) => Promise; - public ContextKey = '_context_' - // https://developer.webex.com/docs/basics - public supportedExtensions = ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'pdf', 'jpg', 'jpeg', 'bmp', 'gif', 'png'] - - private API = { - messages: 'https://webexapis.com/v1/messages', - } - constructor(botRef: BotInst | any){ - this.botRef = botRef - this.token = botRef.framework.options.token - this.request = axios - if (!this.botRef.framework._$storage) { - this.botRef.framework._$storage = globoStore() - } - } - - - globalSave(key: string, val: T): T { - return this.botRef.framework._$storage.save(key, val) - } - - globalGet(key: string): T { - return this.botRef.framework._$storage.get(key) - } - - globalDelete(key: string) { - return this.botRef.framework._$storage.delete(key) - } - - globalExists(key: string) { - return this.botRef.framework._$storage.exists(key) - } - - /** - * Take user data and validate their responses-- don't give up until the uer completes the task or they type "$exit" - * @param label: string - * @param config: PromptConfig - * - * $bot.prompt has (1) retry (list of message to encourage the user to try again), (2) success (handler when validation passes), (3) validate (function that accepts the user-provided value as a parameter) - - * ex. Here's a prompt that wants the user to provide a number whose digits add up to 6 - - ```ts - import { BotHandler, $ } from 'speedybot' - export const handlers: BotHandler[] = [ - { - keyword: 'promptme', - handler(bot) { - const $bot = $(bot) - bot.say('Sending you a prompt...') - $bot.prompt('Enter a number whose digits that add up to 6 (ex 51, 60, 33, 501, etc)', { - retry: [`Sorry, doesn't add up to 6`, `Whoops that value doesn't work try again`, `That value doesn't work`, `Type $exit to abandon this`], - async success(bot, trigger, answer) { - bot.say('You did it!!! Good job! <3 <3') - bot.say(JSON.stringify(answer)) - // Ex. Submit data to a 3rd-party service/integration - const res = await $bot.post('https://jsonplaceholder.typicode.com/posts', { data: { title: 'my special value that adds to 6', userValue: answer } }) - $(bot).sendSnippet(res.data, 'Posted response to https://jsonplaceholder.typicode.com/posts') - }, - validate(val=0) { - // Make sure digits add to 6 - const sum = String(val).split('') - .map(Number) - .reduce(function (a, b) { - return a + b; - }, 0) - if (sum === 6) { - return true - } else { - return false - } - } - }) - }, - helpText: 'x' - }] - ``` - * - */ - async prompt(label: string, config: PromptConfig) { - let { prompt } = config - if (!prompt && label) { - prompt = label - } - await this.promptActive(true) - await this.savePrompts({...config, prompt}) - this.botRef.say(prompt) - } - - async promptActive(flag?: boolean): Promise { - if (flag !== undefined) { - return this.saveData($promptActiveKey, flag) - } else { - return await this.getData($promptActiveKey) as boolean - } - } - - async endPrompt() { - return Promise.all([this.promptActive(false), this.deleteData($prompts)]) - } - - async savePrompts(prompts: PromptConfig): Promise { - return this.saveData($prompts, prompts) - } - - async getPrompt(): Promise { - return this.getData($prompts) - } - - /** - * Utility: Given a (pre-cleaned) list of handlers and an activating trigger - * - * - * - * @param handlerList - * @param trigger - */ - matchInvokeHandlers(handlerList: BotHandler[], trigger: Trigger, noMatch?: BotHandler) { - const triggerPayload = trigger - const checkHandler = (handler: BotHandler, trigger: Trigger):boolean => { - /** - * Per "https://github.com/WebexSamples/webex-node-bot-framework/blob/master/lib/framework.js#L1625" - * - "If regex, matches on entire message. If string, matches on first word." - */ - - if (handler.keyword instanceof RegExp && handler.keyword.test(trigger.text as string)) { - // trigger.phrase = handler.keyword - return true; - } - if (typeof handler.keyword === 'string') { - const { args } = trigger - const [triggerCandidate] = args as string[] - if (handler.keyword === triggerCandidate?.toLowerCase()) { - trigger.phrase = handler.keyword; - return true - } - } - return false - } - - - if (trigger.message.roomType === 'group' && trigger['args'].length) { - // In group rooms, return text includes bot @mention - // if a group, slice off 1st element - // Ain't pretty or elegant, but resolving this "here" is a big win - // Another approach: https://github.com/WebexSamples/webex-node-bot-framework/blob/master/lib/framework.js#L1193-L1194 - const args = trigger['args'].slice(1) - Object.assign(triggerPayload, {args}) - Object.assign(triggerPayload, {text: args.join(' ')}) - - // Adjust original message too - // triggerPayload.message.html will contain the rich markup for a mention - triggerPayload.message.text = triggerPayload.text - } - - let matchedHandlers = handlerList.filter(handler => { - const {keyword} = handler - if (Array.isArray(keyword)) { - let flag = false - keyword.forEach(kw => { - const res = checkHandler({...handler, keyword:kw}, triggerPayload) - if (res) { - flag = true - } - }) - return flag - } else { - return checkHandler(handler, triggerPayload) - } - }).sort((a,b) => Number(a.preference) > Number(b.preference) ? 1 : -1) - // https://github.com/WebexSamples/webex-node-bot-framework/blob/master/lib/framework.js#L1155 - // Sort by preference - // Check highest & lowest preference - // filter out any items that don't have preference - const [low] = matchedHandlers - const lowPref = low?.preference - const highPref = matchedHandlers[matchedHandlers.length - 1]?.preference - - if (lowPref !== highPref) { - matchedHandlers = matchedHandlers.filter(handler => handler.preference === lowPref) - } - - matchedHandlers.forEach(match => { - const { handler } = match - handler(this.botRef, triggerPayload) - }) - - if (!matchedHandlers.length && noMatch && noMatch.handler) { - const {handler} = noMatch - handler(this.botRef, triggerPayload) - } - } - - snippet(ref: (string | object)): string { - return snippet(ref) - } - - htmlSnippet(ref: (string | object), dataType='html'): string { - return snippet(ref, dataType) - } - - public async get(url:string, config:AxiosRequestConfig={}):Promise> { - return this.request({url, method: 'GET', ...config}) - } - - public async post(url, config:AxiosRequestConfig={}):Promise { - return this.request({url, method: 'POST', ...config}) - } - - public async getFile(fileUrl: string, opts:AxiosRequestConfig={}): Promise> { - /** - * Bummer: need to add additional dependency :/ - * "request" is available in framework, however painful to get streams + deprecated: https://github.com/request/request/issues/3142 - * - */ - let requestOpts = { - method: 'GET' as Method, - url: fileUrl, - headers: { - Authorization: `Bearer ${this.token}`, - }, - ...opts - } - try { - const res = await axios(requestOpts) - const { headers, data } = res - const { fileName, extension } = extractFileData(headers['content-disposition']) - const type = headers['content-type'] - - const payload = { - data, - extension, - fileName, - type, - markdownSnippet: (type === 'application/json' || (typeof data === 'string' && data.length < 900)) ? this.snippet(data) : '' - } - - return payload - - } catch(e) { - throw e - } - } - - // public markdownTable(data: any) { - // // todo - // return data - // } - - public async send(payload: ToMessage) { - return this.botRef.webex.messages.create(payload) - } - - public genContextName(key:string) { - return `${this.ContextKey}_${key}` - } - - public degenContextName(key:string) { - return key.replace(`${this.ContextKey}_`,'') - } - - public async saveContext(key: string, data?:T): Promise{ - let writeData = data ? data : { _active: true } - return this.saveData(`${this.genContextName(key)}`, writeData) - } - - public async getContext(key:string):Promise { - const res = await this.getData(this.genContextName(key)) - return res - } - - public async contextActive(key:string):Promise { - const ctx = await this.getContext(key) - return ctx ? true : false - } - - public async deleteContext(key:string):Promise { - const res = await this.deleteData(this.genContextName(key)) - return res - } - - public async getAllContexts(): Promise { - const fullRef = await this.botRef.recall() - const keys = Object.keys(fullRef) || [] - const actives = keys.filter(key => key.includes(this.ContextKey)) - .map(key => this.degenContextName(key)) - return actives - } - - public async sendURL(url: string, title?:string, buttonTitle='Go') { - const card = new SpeedyCard() - if (title) { - card.setTitle(title).setUrl(url, buttonTitle) - } else { - card.setSubtitle(url).setUrl(url, buttonTitle) - } - this.botRef.sendCard(card.render(), url) - } - - public async saveData(key: string, data): Promise{ - return this.botRef.store(key, data) - } - - public async deleteData(key: string): Promise{ - return new Promise(async resolve => { - try { - const res = await this.botRef.forget(key) - resolve(res) - } catch(e) { - resolve(null) - } - }) - } - - /** - * - * Storage aliases - * getData: bot.recall - * deleteData: bot.forget don't throw, resolve to null - * - */ - public async getData(key:string): Promise { - return new Promise(async resolve => { - try { - const res = await this.botRef.recall(key) - resolve(res) - } catch(e) { - resolve(null) - } - }) - } - public resolveFilePath(...filePieces: string[]) { - return resolve(...filePieces) - } - - public prepareLocalFile(...filePieces: string[]) { - const target = resolve(...filePieces) - const stream = createReadStream(target) - return stream - } - - public sendFile(...filePieces: string[]) { - try { - const stream = this.prepareLocalFile(...filePieces) - this.botRef.uploadStream(stream) - } catch(e) { - throw e - } - } - - public async sendDataAsFile(data: T, extensionOrFileName: string, fallbackText=' ') { - const fullFileName = this.handleExt(extensionOrFileName) - - const formData = new FormData(); - formData.append('files', data, fullFileName) - formData.append('roomId', this.botRef.room.id) - formData.append('text', fallbackText) - const formDataHeaders = formData.getHeaders() - const headers = { - ...formDataHeaders, - Authorization: `Bearer ${this.token}`, - } - return axios.post(this.API.messages, formData, { headers }) - } - - public async edit(message: string | Message, newData: string) { - let id = message - let roomId = this.botRef.room.id - - if (typeof message === 'object') { - const { id:msgId, roomId:msgRoomId } = message as Message - id = msgId as string - roomId = msgRoomId as string - } - - const submitData = { - roomId, - markdown: newData - } - const headers = { - Authorization: `Bearer ${this.token}`, - } - const url = `${this.API.messages}/${id}` - return axios.put(url, submitData, { headers }) - } - - public async getUsers(): Promise { - const {items} = await this.botRef.webex.memberships.list({roomId: this.botRef.room.id}) - // Remove any items where email includes @webex.bot - const botPrefix = '@webex.bot' - return items.filter(({personEmail}) => !personEmail.includes(botPrefix)) - } - - public async sendAll(msg: string | object, list?: string[]) { - const userList = list ? list : await this.getUsers() - userList.forEach(user => { - const { personEmail } = user - if (typeof msg === 'string') { - this.send({ - toPersonEmail: user.personEmail, - markdown: msg as string - }) - } else { - this.dmCard(personEmail, msg, 'Sorry it does not appear your client supports Adaptive Cards') - } - }) - } - - public killFile(path:string) { - return new Promise(resolve => { - unlink(path, (err) => { - if (err) { - resolve(err) - } else { - resolve({}) - } - }) - }) - } - - public async sendDataFromUrl(resourceUrl: string, fallbackText=' ') { - return this.botRef.webex.messages.create({roomId: this.botRef.room.id, files: [resourceUrl], text:fallbackText}) - } - - public async sendSnippet(data: string | object, label='', dataType='json', fallbackText='It appears your client does not support markdown') { - let markdown - if (dataType === 'json') { - markdown = this.snippet(data) - } else { - markdown = this.htmlSnippet(data) - } - - if (label) { - markdown = label + ' \n ' + markdown - } - return this.botRef.webex.messages.create({roomId: this.botRef.room.id, markdown, text: fallbackText}) - } - - public handleExt(input: string):string { - const hasDot = input.indexOf('.') > -1 - let fileName = '' - const [prefix, ext] = input.split('.') - - if (hasDot) { - if (!prefix || prefix === '*') { - // '.json' case, generate prefix - fileName = `${this.generateFileName()}.${ext}` - } else { - // 'a.json' case, pass through - fileName = input - } - } else { - // 'json' case, generate prefix, add . - fileName = `${this.generateFileName()}.${prefix}` - } - return fileName - } - - public generateFileName(): string { - return `${this.rando()}_${this.rando()}` - } - - public rando(): string { - return `${Math.random().toString(36).slice(2)}` - } - - public dmCard(personId: string, jsonData: unknown, fallback?: string) { - return this.botRef.dm(personId as string, { - // Fallback text for clients that don't render cards is required - markdown: fallback ? fallback : "If you see this message your client cannot render buttons and cards.", - attachments: [{ - "contentType": "application/vnd.microsoft.card.adaptive", - "content": jsonData - }] - }); - } - - - // Alias to other helpers - - public sendTemplate(utterances: string | string[], template: { [key: string]: any }): Promise { - const res = fillTemplate(utterances, template) - return this.botRef.webex.messages.create({roomId: this.botRef.room.id, text: res}) - } - - public sendRandom(utterances: string[]) { - const res = pickRandom(utterances) - return this.botRef.webex.messages.create({roomId: this.botRef.room.id, text: res}) - } - - public log(...payload) { - return log(...payload) - } - - public checkMatch(candidate, list:(RegExp | string)[]): boolean { - const checkRegex = (regex:RegExp, text: string) => regex.test(text) - return list.some((element) => { - if (typeof element === 'string') { - if (candidate === element) { - return true - } - } - if (typeof element === 'object') { - checkRegex(element, candidate) - } - }) - } - - public async sendChips(chipPayload: ChipPayload, title = '') { - // Register 'n Render chips - const newChips:Chip[] = [] - if (Array.isArray(chipPayload)) { - chipPayload.forEach(chip => { - if (typeof chip === 'string') { - const payload = { - label: chip - } - newChips.push(payload) - } - const {label, keyword, handler} = chip as Chip - if (label) { - if (typeof handler === 'function') { - newChips.push({label, handler}) - } else { - if (keyword) { - newChips.push({label, keyword}) - } else { - newChips.push({label}) - } - } - } - }) - } - const chips = await this.getData(chipLabel) || [] - const keys = newChips.map(({label}) => label) - const writeChips = chips.filter(chip => !keys.includes(chip.label)).concat(newChips) - - await this.saveData(chipLabel, writeChips) - - // Render chips in chat - const labelsKeywords = newChips.map(({label, keyword}) => { - return { - label, - keyword - } - }) - const card = new SpeedyCard().setChips(labelsKeywords) - if (title) { - card.setSubtitle(title) - } - this.botRef.sendCard(card.render(), title) - } - - public async setChipsConfig(config: ChipConfig) { - return this.saveData(chipConfigLabel, config) - } - - public async $trigger(text: string, trigger: Trigger) { - const payload = { - text, - personId: trigger.person.id, - roomId: trigger.attachmentAction ? trigger.attachmentAction.roomId : trigger.message.roomId, - } - this.botRef.framework.onMessageCreated(payload as Message) - } - - public clearScreen(repeatCount=50) { - const newLine = '\n' - const repeatClamp = repeatCount > 7000 ? 5000 : repeatCount// 7439 char limit - const clearScreen = `${newLine.repeat(repeatClamp)}` - return this.botRef.webex.messages.create({roomId: this.botRef.room.id, markdown: clearScreen, text: clearScreen,}) - } - - - public _auth(fn: Function) { - return fn.call(this, this.token) - } - - public async getCounter(key: string): Promise { - const counterKey = this.__buildCounter(key) - const counter = await this.getData(counterKey) - if (counter === null) { - await this.setCounter(key) - return 0 - } else { - return counter - } - } - - public async setCounter(key: string, val = 0) { - const counterKey = this.__buildCounter(key) - return this.saveData(counterKey, val) - } - - public async increaseCounter(key: string): Promise { - const counterKey = this.__buildCounter(key) - const counterRef = await this.getCounter(counterKey) - const addOne = counterRef + 1 - await this.setCounter(key, addOne) - return addOne - } - - public async decreaseCounter(key: string): Promise { - const counterKey = this.__buildCounter(key) - const counterRef = await this.getCounter(counterKey) - const minusOne = counterRef - 1 - await this.setCounter(counterKey, minusOne) - return minusOne - } - - public async thread(thread: [string | object, string]) { - let [root, reply] = thread - let firstMsg = root - const prepMsg = (card, fallback?) => { - const rootMsg = { - markdown: fallback ? fallback : "If you see this message your client cannot render buttons and cards.", - attachments: [{ - "contentType": "application/vnd.microsoft.card.adaptive", - "content": card - }] - } - return rootMsg - } - - if (typeof root === 'object') { - firstMsg = prepMsg(root) - } - this.botRef.say(firstMsg).then(({id}) => { - const msgObj = { - parentId: id, - markdown: reply - } - this.botRef.say(msgObj) - }) - } - - /** - * Send a message to a room - * @param roomId roomID to which bot MUST be a member - * @param msgOrCard string | Adaptive Card: https://developer.webex.com/docs/api/guides/cards - * @param config How to handle error situation - * @param config.throwOnError flag to throw if error (ie target room does not exist or bot is not member of it) - * @param config.fallbackText Fallback text if Adaptive Card not support on client - * - * ex. - * - * - * ```ts - * import { $, SpeedyCard, pickRandom } from "speedybot"; - export const handlers = [ - { - keyword: ["hi", "hello", "hey", "yo", "watsup", "hola"], - async handler(bot, trigger) { - const $bot = $(bot); - - // Ex1. Send text to a specific room - const roomId = "aaa-bbb-ccc-ddd"; // NOTE: This is a ROOM ID not a room name! - $bot.sendRoom(roomId, "My special message to the room"); - - // Ex2. Send a card to specific room (https://developer.webex.com/docs/api/guides/cards) - const myCard = new SpeedyCard() - .setTitle("This is a card!") - .setSubtitle("I want a beer plz") - .setUrl( - pickRandom([ - "https://www.youtube.com/watch?v=3GwjfUFyY6M", - "https://www.youtube.com/watch?v=d-diB65scQU", - ]), - "Take a moment to celebrate" - ) - .setTable([ - [`Bot's Date`, new Date().toDateString()], - ["Bot's Uptime", `${String(process.uptime()).substring(0, 25)}s`], - ]); - $bot.sendRoom(roomId, myCard.render()); - }, - helpText: "Handler that runs when the user greets the bot", - }]; - ``` - * - * - */ - public async sendRoom(roomId: string, msgOrCard: string | any, config: {throwOnError: boolean, fallbackText: string} = - { - throwOnError: false, - fallbackText:'If you see this message your client cannot render buttons and cards' - }) { - const isCard = typeof msgOrCard === 'object' - const {throwOnError, fallbackText } = config - try { - if (isCard) { - const payload = { - roomId, - markdown: fallbackText, - attachments: [{ - "contentType": "application/vnd.microsoft.card.adaptive", - "content": msgOrCard - }] - } - return this.botRef.webex.messages.create(payload) - // send card - } else if (typeof msgOrCard === 'string') { - return this.botRef.webex.messages.create({roomId, markdown: msgOrCard }) - } - } catch(e) { - if (throwOnError) { - throw e - } - this.log(`There was an error attempting to send a message to ${roomId}`) - this.log('Error', e) - } - } - - - private __buildCounter(key: string=''): string { - const prefix = `___$counter_` - if (!key.includes(prefix)) { - return `${prefix}${key}` - } else { - return key - } - - } -} - -export interface FileConfig { - type?: 'json' | 'buffer' | 'text' -} - -export const $ = (botRef: BotInst | any):$Botutils => { - // memo? - return new $Botutils(botRef) -} - -export interface Chip { - label: string; - keyword?: string; // Trigger a specific "keyword"/handler - handler?: (bot: BotInst, trigger: Trigger) => void; - // args?: () => Promise -} - -export type ChipPayload = string[] | Chip[] | (string | Chip)[] -export interface ChipConfig { - disappearOnTap?: boolean; -} \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index fe8bddc..8fde50d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,26 +1,164 @@ -export { Speedybot, SpeedybotWebhook, Speedytunnel, Launch } from './speedybot' -export { SpeedybotConfig } from './speedybot' +/** + ╱╭━━━╮╱╭━━━╮╱╭━━━╮╱╭━━━╮╱╭━━━╮╱╭╮╱╱╭╮╱╭━━╮╱╱╭━━━╮╱╭━━━━╮╱ +╱┃╭━╮┃╱┃╭━╮┃╱┃╭━━╯╱┃╭━━╯╱╰╮╭╮┃╱┃╰╮╭╯┃╱┃╭╮┃╱╱┃╭━╮┃╱┃╭╮╭╮┃╱ +╱┃╰━━╮╱┃╰━╯┃╱┃╰━━╮╱┃╰━━╮╱╱┃┃┃┃╱╰╮╰╯╭╯╱┃╰╯╰╮╱┃┃╱┃┃╱╰╯┃┃╰╯╱ +╱╰━━╮┃╱┃╭━━╯╱┃╭━━╯╱┃╭━━╯╱╱┃┃┃┃╱╱╰╮╭╯╱╱┃╭━╮┃╱┃┃╱┃┃╱╱╱┃┃╱╱╱ +╱┃╰━╯┃╱┃┃╱╱╱╱┃╰━━╮╱┃╰━━╮╱╭╯╰╯┃╱╱╱┃┃╱╱╱┃╰━╯┃╱┃╰━╯┃╱╱╱┃┃╱╱╱ +╱╰━━━╯╱╰╯╱╱╱╱╰━━━╯╱╰━━━╯╱╰━━━╯╱╱╱╰╯╱╱╱╰━━━╯╱╰━━━╯╱╱╱╰╯╱╱╱ + */ -// Types: framework -export { FrameworkInst, BotHandler,WebhookHandler, Message, ToMessage, BotInst, Trigger, passThru } from './framework' -export { bad, help, ascii_art, log, good, askQuestion, loud } from './logger' -// helpers -export { fillTemplate, pickRandom, snippet, Storage, Locker, $, globoStore } from './helpers' -export { Chip, ChipPayload, ChipConfig } from './helpers' +export * from "./types"; +export { SpeedyBot } from "./speedybot"; +export { SpeedyCard } from "./cards"; +export const CONSTANTS = { + submitToken: "_private_speedybot_", + CHIP_LABEL: "speedybot_CHIP_CLICK", + invalidMessage: "Invalid message passed to sendTo", + unwrapLabel: "🎁 Unwrap", + destroyLabel: "🔥 Destroy", + action_delete: "delete", +}; +export type { SurveyQuestion, SurveyQuestionType } from "./cards"; -// make adaptive cards less painful w/ base templates -export { SpeedyCard } from './cards' -export const placeholder = '__REPLACE__ME__' +export const botTokenKey = "BOT_TOKEN"; +export const botPlaceholder = "__REPLACE__ME__"; -// special internal values for suggestion "chip" engine -export const chipLabel = '___$CHIPS' -export const chipConfigLabel = `${chipLabel}_$config` +import { RequestOps } from "./types"; -// special internal values for $prompt'ing -export const $promptActiveKey = '$promptActive' -export const $prompts = '$prompts' +// Workhorse makeRequest w/ fetch, can be stubbed for testing -// Vote -export const vote_prefix = '$$_VOTE_$$' +class RequestError extends Error { + statusCode: number; + url: string; -export { HookBot, AbbreviatedSpeedyCard, Hooks, IncomingWebhook, SpeedyGuard } from './webhook' \ No newline at end of file + constructor(message: string, statusCode: number, url: string) { + super(message); + this.statusCode = statusCode; + this.url = url; + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, RequestError); + } + } +} + +export const mainRequester = async ( + url: string, + body: any, + opts: RequestOps = {} +) => { + // escape hatch to pass init directly to fetch + if ("rawInit" in opts) { + try { + const response = await fetch(url, opts.rawInit); + if (!response.ok) { + throw new RequestError( + `The request to ${url} failed with status ${response.status}${ + response.status === 401 + ? " (You may need to double-check your access token)" + : "" + }`, + response.status, + url + ); + } + return response; + } catch (error) { + throw error; // Re-throw custom error or new/exciting error + } + } + + const defaultConfig = { + method: "POST", + "content-type": "application/json;charset=UTF-8", + raw: false, + }; + + const contentType = opts["content-type"] || defaultConfig["content-type"]; + const init: { + method: string; + headers: any; + body?: any; + [key: string]: any; + } = { + method: opts.method ? opts.method : defaultConfig.method, + headers: { + "content-type": contentType, + Authorization: `Bearer ${opts.token}`, + ...(opts.headers || {}), + }, + }; + if ( + opts.method === "POST" || + opts.method === "PUT" || + opts.method === "PATCH" + ) { + init.body = opts.raw ? body : JSON.stringify(body); + } + try { + const response = await fetch(url, init); + if (!response.ok) { + throw new RequestError( + `The request to ${url} failed with status ${response.status}${ + response.status === 401 + ? " (You may need to double-check your access token)" + : "" + }`, + response.status, + url + ); + } + return response; + } catch (error) { + throw error; + } +}; + +export const logoRoll = (idx?: number) => { + const variants = [ + ` + ███████╗██████╗ ███████╗███████╗██████╗ ██╗ ██╗██████╗ ██████╗ ████████╗ + ██╔════╝██╔══██╗██╔════╝██╔════╝██╔══██╗╚██╗ ██╔╝██╔══██╗██╔═══██╗╚══██╔══╝ + ███████╗██████╔╝█████╗ █████╗ ██║ ██║ ╚████╔╝ ██████╔╝██║ ██║ ██║ + ╚════██║██╔═══╝ ██╔══╝ ██╔══╝ ██║ ██║ ╚██╔╝ ██╔══██╗██║ ██║ ██║ + ███████║██║ ███████╗███████╗██████╔╝ ██║ ██████╔╝╚██████╔╝ ██║ + ╚══════╝╚═╝ ╚══════╝╚══════╝╚═════╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ + https://speedybot.js.org`, + ` + ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ + ░░███░███░░████░████░███░░█░█░███░░░██░░███░ + ░█ ░█ █░█ ░█ ░█ █░███░█ █░█ █░ █ ░ + ░ ██░░███ ░███░░███░░█░░█░ █ ░███ ░█░░█░░█░░ + ░░ █░█ ░░█ ░░█ ░░█░░█░░█░░█ █░█░░█░░█░░ + ░███ ░█░░░░████░████░███ ░░█░░███ ░ ██ ░░█░░ + ░ ░░ ░░░░ ░ ░ ░░░ ░░ ░░░ ░░░ ░░ + ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ + https://speedybot.js.org`, + ` + ╱╭━━━╮╱╭━━━╮╱╭━━━╮╱╭━━━╮╱╭━━━╮╱╭╮╱╱╭╮╱╭━━╮╱╱╭━━━╮╱╭━━━━╮╱ + ╱┃╭━╮┃╱┃╭━╮┃╱┃╭━━╯╱┃╭━━╯╱╰╮╭╮┃╱┃╰╮╭╯┃╱┃╭╮┃╱╱┃╭━╮┃╱┃╭╮╭╮┃╱ + ╱┃╰━━╮╱┃╰━╯┃╱┃╰━━╮╱┃╰━━╮╱╱┃┃┃┃╱╰╮╰╯╭╯╱┃╰╯╰╮╱┃┃╱┃┃╱╰╯┃┃╰╯╱ + ╱╰━━╮┃╱┃╭━━╯╱┃╭━━╯╱┃╭━━╯╱╱┃┃┃┃╱╱╰╮╭╯╱╱┃╭━╮┃╱┃┃╱┃┃╱╱╱┃┃╱╱╱ + ╱┃╰━╯┃╱┃┃╱╱╱╱┃╰━━╮╱┃╰━━╮╱╭╯╰╯┃╱╱╱┃┃╱╱╱┃╰━╯┃╱┃╰━╯┃╱╱╱┃┃╱╱╱ + ╱╰━━━╯╱╰╯╱╱╱╱╰━━━╯╱╰━━━╯╱╰━━━╯╱╱╱╰╯╱╱╱╰━━━╯╱╰━━━╯╱╱╱ ╱`, + ` + ─╔═══╗─╔═══╗─╔═══╗─╔═══╗─╔═══╗─╔╗──╔╗─╔══╗──╔═══╗─╔════╗─ + ─║╔═╗║─║╔═╗║─║╔══╝─║╔══╝─╚╗╔╗║─║╚╗╔╝║─║╔╗║──║╔═╗║─║╔╗╔╗║─ + ─║╚══╗─║╚═╝║─║╚══╗─║╚══╗──║║║║─╚╗╚╝╔╝─║╚╝╚╗─║║─║║─╚╝║║╚╝─ + ─╚══╗║─║╔══╝─║╔══╝─║╔══╝──║║║║──╚╗╔╝──║╔═╗║─║║─║║───║║─── + ─║╚═╝║─║║────║╚══╗─║╚══╗─╔╝╚╝║───║║───║╚═╝║─║╚═╝║───║║─── + ─╚═══╝─╚╝────╚═══╝─╚═══╝─╚═══╝───╚╝───╚═══╝─╚═══╝───╚╝───`, + ` + ╔═╗ ╔═╗ ╔═╗ ╔═╗ ╔╦╗ ╦ ╦ ╔╗ ╔═╗ ╔╦╗ + ╚═╗ ╠═╝ ║╣ ║╣ ║║ ╚╦╝ ╠╩╗ ║ ║ ║ + ╚═╝ ╩ ╚═╝ ╚═╝ ═╩╝ ╩ ╚═╝ ╚═╝ ╩ `, + ]; + + if (idx) { + const logo = + variants[idx] || variants[Math.floor(Math.random() * variants.length)]; + return logo; + } + const logo = variants[Math.floor(Math.random() * variants.length)]; + return logo; +}; diff --git a/src/launcher.ts b/src/launcher.ts deleted file mode 100644 index dc216f6..0000000 --- a/src/launcher.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { SpeedybotConfig, Launch} from './index' -import { BotHandler, FrameworkInst } from './' -import { bad, loud } from './' -import handlers from './../settings/handlers' -import Config from './../settings/config.json' - -export async function boot(config: SpeedybotConfig, handlers: BotHandler[]): Promise { - try { - const inst = await Launch(config, handlers) - const phrase = config.webhookUrl ? `Webhook available here: ${config.webhookUrl}` : 'Connected using websockets' - loud(`Bot started -${phrase} -Ask your bot "healthcheck" to verify connectionn -`) - return inst - } catch (e) { - bad(e); - throw e; - } -} - -boot(Config, handlers) \ No newline at end of file diff --git a/src/logger.ts b/src/logger.ts deleted file mode 100644 index 3711bd1..0000000 --- a/src/logger.ts +++ /dev/null @@ -1,110 +0,0 @@ -import colors from 'simple-log-colors'; -import { pickRandom } from './index' -import { createInterface } from 'readline'; - -export function log(...payload) { console.log.apply(console, payload as [any?, ...any[]]); } - -export function warning(...payload) { - log(colors.yellow(...payload)) -} - -export function bad(...payload) { - color('red', `\n\n# ----------------PROBLEM!------------------- #\n\n`) - log(colors.red(...payload)) - color('red', `\n\n# ------------------------------------------- #\n\n`) - -} - -export function good(...payload) { - log(colors.green(...payload)) -} - -export function color(color = "red", ...payload) { - try { - log(colors[color](...payload)) - } catch { - log(colors['red'](...payload)) - } -} - -export function red(...payload) { return color('red', ...payload) } - -export function loud(...payload) { - color('red', `\n\n# ---------------------------------------- #\n\n`) - log(colors.yellow(...payload)) - color('red', `\n\n# ---------------------------------------- #\n\n`) -} - -export function askQuestion(question: string): Promise { - const rl = createInterface({ - input: process.stdin, - output: process.stdout, - }); - - return new Promise((resolve, reject) => { - rl.question(question, function (res) { - resolve(res); - rl.close(); - }); - }); -} - -export async function yesNo(question): Promise { - const yay = ['yes', 'y', 'yah', '1', 1, 'true', true]; - const res = await askQuestion(`(y/n) ${question}`); - return yay.includes(res.toLowerCase()); -} - -export const ascii_art = (colorChoice?:string) => { - let colorFallback = colorChoice - if (!colorFallback) { - const opts = ['red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white'] - colorFallback = pickRandom(opts) - } - color(colorFallback, ` -███████╗██████╗ ███████╗███████╗██████╗ ██╗ ██╗██████╗ ██████╗ ████████╗ -██╔════╝██╔══██╗██╔════╝██╔════╝██╔══██╗╚██╗ ██╔╝██╔══██╗██╔═══██╗╚══██╔══╝ -███████╗██████╔╝█████╗ █████╗ ██║ ██║ ╚████╔╝ ██████╔╝██║ ██║ ██║ -╚════██║██╔═══╝ ██╔══╝ ██╔══╝ ██║ ██║ ╚██╔╝ ██╔══██╗██║ ██║ ██║ -███████║██║ ███████╗███████╗██████╔╝ ██║ ██████╔╝╚██████╔╝ ██║ -╚══════╝╚═╝ ╚══════╝╚══════╝╚═════╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ -`) - -} -export const help = () => { - - ascii_art() - log(` -See here for a step-by-step guide: https://github.com/valgaze/speedybot/blob/master/quickstart.md -_________________________________ - -Speedybot makes it easy to QUICKLY stand up a bot without having to worry about infrastructe details - -ex. You can edit a single file to handle all your bots logic, receive user data from forms, catch file-upload events and easily extend/integrate with third-party services - -Before you start, you'll need a WebEx bot token - -- Create one and save the token from here: https://developer.webex.com/my-apps/new/bot - -## [CLI] Fast setup & boot -Run the following to scaffold & boot - -$ npx speedybot setup xxxxyyyyzzz_bot_token_here_xxxxyyyyzzz - - -## [Git] Setup & boot -Or alteratively, run - -$ git clone https://github.com/valgaze/speedybot-starter speedybot -$ cd speedybot-starter -$ npm run setup -# Save your bot token to speedybot/settings/config.json under the "token" field -$ npm start - -Once your agent is running: - -- Start a 1-1 session with the bot & ask it "healthcheck" to verify all's well - -If any trouble, see here: https://github.com/valgaze/speedybot/blob/master/quickstart.md`) - -} \ No newline at end of file diff --git a/src/speedybot.ts b/src/speedybot.ts index a547242..3b39331 100644 --- a/src/speedybot.ts +++ b/src/speedybot.ts @@ -1,627 +1,1423 @@ -/** - * -███████╗██████╗ ███████╗███████╗██████╗ ██╗ ██╗██████╗ ██████╗ ████████╗ -██╔════╝██╔══██╗██╔════╝██╔════╝██╔══██╗╚██╗ ██╔╝██╔══██╗██╔═══██╗╚══██╔══╝ -███████╗██████╔╝█████╗ █████╗ ██║ ██║ ╚████╔╝ ██████╔╝██║ ██║ ██║ -╚════██║██╔═══╝ ██╔══╝ ██╔══╝ ██║ ██║ ╚██╔╝ ██╔══██╗██║ ██║ ██║ -███████║██║ ███████╗███████╗██████╔╝ ██║ ██████╔╝╚██████╔╝ ██║ -╚══════╝╚═╝ ╚══════╝╚══════╝╚═════╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ -* -**/ +import { CONSTANTS, mainRequester } from "./index"; +import { + CoreMakerequest, + Destination, + ENVELOPES, + EventTypes, + Message, + MessageResponse, + Message_Details, + File_Details, + Room_Details, + SelfData, + SpeedyFile, + SpeedyFileUtils, + StubbedRes, + Submit_Details, + ToMessage, +} from "./types"; +import { AttachedData, $Magic, SpeedyError, Webhook } from "./types"; import { - FrameworkInst, - BotHandler, - ToMessage, - BotInst, - Trigger, - WebhookHandler, - Message - } from "./framework"; - import { ValidatewebhookUrl, pickRandom, snippet } from "./helpers"; - import { placeholder, chipLabel, chipConfigLabel, ChipConfig, ascii_art, SpeedyCard, $, vote_prefix} from "./"; - // TODO: make peer dependency or option to "pass-in" as parameter - import Botframework from "webex-node-bot-framework"; - import BotWebhook from "webex-node-bot-framework/webhook"; - + AbbreviatedSpeedyCard, + HeaderConfig, + SpeedyCard, + checkers, +} from "./cards"; + +import { Middleware, MessageTypes } from "./types"; + +// props Nick to camel case +export class SpeedyBot { + /** + * @hidden + */ + private middlewares: Array> = []; + + /** + * @hidden + */ + private topMiddleware: Middleware | null = null; + + /** + * @hidden + */ + private fallbackText = "Your client does not support Adaptive Cards"; + + /** + * @hidden + */ + private errorHandler!: (e: SpeedyError) => void | unknown; + + constructor( + private _token: string = "", + private makeRequest: CoreMakerequest = mainRequester + ) {} + + /** + * @hidden + */ + private secrets: Record = {} as Record< + S, + string | number + >; + // private _secrets: Record = {}; + + addSecret(key: S, value: string | number) { + this.secrets[key] = value; + } + + addSecrets(payload: { [key: string]: string | number }) { + Object.entries(payload).forEach(([k, v]) => this.addSecret(k as S, v)); + } + + getSecret(key: S): string | number | undefined { + return this.secrets[key]; + } + + /** + * @hidden + */ + public API = { + messages: "https://webexapis.com/v1/messages", + attachments: "https://webexapis.com/v1/attachment/actions", + user: { + self: "https://webexapis.com/v1/people/me", + getPersonDetails: "https://webexapis.com/v1/people", + }, + rooms: "https://webexapis.com/v1/rooms", + roomDetails: "https://webexapis.com/v1/rooms", + webhooks: "https://webexapis.com/v1/webhooks", + }; + /** - * Minimal config to get up and running. If you need a token... - * Create new bot: https://developer.webex.com/my-apps/new/bot - * Get an existing bot's token (tap "regenerate"): https://developer.webex.com/my-apps + * Sets the token to transact with APIs (needed to send messages, receive webhooks, files, etc) + * @param token * - * Leave webhookUrl blank to use websockets + * @returns */ - export interface SpeedybotConfig { - token: string; - webhookUrl?: string; - } - - export class Speedybot { - frameworkRef!: FrameworkInst; - initialized = false; - - // Chat/framework handler mappings - Magickeywords = { - "<@help>": "help", - "<@catchall>": /(.*?)/, - "<@nomatch>": '__INTERNAL__' - }; - - MagicFrameworkkeywords = { - "<@submit>": "attachmentAction", - "<@spawn>": "spawn", - "<@despawn>": "despawn", - "<@fileupload>": "files", - }; - - chips: { label: string; handler: null | Function }[] = []; - - WebhookKeyword = "<@webhook>"; - - constructor(config: SpeedybotConfig) { - const inst: FrameworkInst = new Botframework(config); - this.frameworkRef = inst; - this.frameworkRef[vote_prefix] = new Map() - } - - send(payload: ToMessage) { - this.frameworkRef.webex.messages.create(payload); - } - - // Send card is a bit tricky in the <@webhook> case since we don't have any - // existing room binding - // For now, just make 2 different methods - sendCardToRoom( - roomId, - cardPayload: any, - fallbackText = "Your client does not appear to support rendering adaptive cards" - ) { - const card = { - roomId, - markdown: fallbackText, - attachments: [ - { - contentType: "application/vnd.microsoft.card.adaptive", - content: cardPayload, - }, - ], - }; - this.frameworkRef.webex.messages.create(card); - } - - sendCardToPerson( - email, - cardPayload: any, - fallbackText = "Your client does not appear to support rendering adaptive cards" - ) { - const card = { - toPersonEmail: email, - markdown: fallbackText, - attachments: [ - { - contentType: "application/vnd.microsoft.card.adaptive", - content: cardPayload, - }, - ], - }; - this.frameworkRef.webex.messages.create(card); - } - - async start(): Promise { - const inst = this.frameworkRef; - return new Promise(async (resolve, reject) => { - try { - await inst.start(); - inst.on("initialized", () => { - this.initialized = true; - return resolve(inst); - }); - } catch (e) { - reject(e); - } - }); + setToken(token: string): this { + this._token = token; + return this; + } + + getToken(): string { + return this._token; + } + + setFallbackText(t: string) { + this.fallbackText = t; + } + + insertStepToFront(middleware: Middleware): void { + if (this.topMiddleware) { + this.middlewares.unshift(this.topMiddleware); } - - addHandler(botHandler: BotHandler) { - // https://github.com/WebexSamples/webex-node-bot-framework/blob/master/lib/framework.js#L1663 - const frameworkRef = this.frameworkRef; - const registerHandler = ( - keyword: string | RegExp, - handler, - helpText, - preference = 0 - ) => { - frameworkRef.hears(keyword, handler, helpText, preference); - }; - const registerFrameworkHandler = (eventName: string, handler) => { - frameworkRef.on(eventName, handler); - }; - - const { keyword, handler } = botHandler; - let trigger = keyword; - if (trigger instanceof Array) { - trigger.forEach((alias) => { - const newHandler = { - ...botHandler, - keyword: alias, - }; - this.addHandler(newHandler); - }); - } else { - if (typeof keyword === "string") { - const specialFramework = this.MagicFrameworkkeywords[keyword]; - if (specialFramework) { - return registerFrameworkHandler(specialFramework, handler); - } - trigger = this.Magickeywords[keyword] || keyword; - } - const { helpText, preference } = botHandler; - return registerHandler( - trigger as string | RegExp, - handler, - helpText, - preference - ); - } + this.topMiddleware = middleware; + } + + pickRandom

(list: P[]): P; + pickRandom

(min: number, max: number): number; + pickRandom

(listOrMin: P[] | number, max?: number): P | number; + pickRandom

(listOrMin: P[] | number, max?: number): P | number { + if (Array.isArray(listOrMin)) { + const items = listOrMin as P[]; + return items[Math.floor(Math.random() * items.length)]; + } else { + const min = listOrMin as number; + return Math.floor(Math.random() * (max! - min + 1)) + min; } + } - registerHandlersWithHelp( - handlers: BotHandler[], - helpHandler?: (handlers: BotHandler[]) => BotHandler - ) { - let submitter: BotHandler | null = null - let catchall_er: BotHandler | null = null - let noMatch_er: BotHandler | null = null - let helper: BotHandler | null = null - let healthcheck_er: BotHandler | null = null - const magicKeywords = ['<@spawn>', '<@despawn>', '<@fileupload>',] - const tidyHandlers = handlers.filter((botHandler: BotHandler) => { - const { keyword } = botHandler - - if (typeof keyword === 'string') { - if (keyword === '<@submit>') { - submitter = botHandler - return false - } + /** + * Core part of SpeedyBot Listener, it MUST return `$.next` (continues chain) or `$.end` + * + * The $ parameter's `$.send` and `$.reply` methods will be autobound to incoming message + * + * ```ts + * const Bot = new SpeedyBot(); + * Bot.addStep(async ($) => { + * await Bot.sendTo($.author.email, "my message"); + * const parentMessageID = $.id; + * await Bot.replyTo(parentMessageID, $.author.email, "my great reply message"); + * await $.send("Hello the right person"); + * await $.reply("Reply to the right message"); + * return $.next; + * }); + * + * ``` + * + */ + addStep(middleware: Middleware): void { + this.middlewares.push(middleware); + } - if (keyword === '<@catchall>') { - catchall_er = botHandler - return false - } + addStepSequence(middlewares: Middleware[]): void { + this.middlewares.push(...middlewares); + } - if (keyword === '<@nomatch>') { - noMatch_er = botHandler - return false + public regex(reg: RegExp, cb: Middleware) { + this.addStep(async ($) => { + if ($.text) { + if (reg instanceof RegExp) { + const matched = reg.test($.text.toLowerCase()); + if (matched) { + return await cb($); } + } + } + return $.next; + }); + } - if (keyword === '<@help>' || keyword === 'help') { - helper = botHandler - return false - } + /** + * Shorthand-handler for files w/ image types + * + * For use w/ vision + text prompting systems + * @param cb + * + * + * @param formats + */ + public onCamera(cb: Middleware, formats: string[] = []) { + this.addStep(async ($) => { + if ($.file) { + const { extension } = $.file; + const photos = ["png", "jpg", "jpeg", ...formats]; + if (photos.includes(extension)) { + return await cb($); + } + } + return $.next; + }); + } - if (keyword === '<@healthcheck>' || keyword === 'healthcheck') { - healthcheck_er = botHandler - return false - } - - if (magicKeywords.includes(keyword)) { - this.addHandler(botHandler) - return false - } + public exact(keyword: string, cb: Middleware) { + this.insertStepToFront(async ($) => { + if (typeof keyword === "string") { + if ($.text === keyword) { + return await cb($); + } + } + return $.next; + }); + } - return true - } else { - return true // special keywords should be a string + public contains(keyword: string | string[], cb: Middleware) { + // should do a checkStrings option + this.addStep(async ($) => { + if (typeof keyword === "string") { + if ($.text?.toLowerCase().includes(keyword.toLowerCase())) { + return await cb($); } - }) - - // "chips" handler - const rootChipHandler = async (bot: BotInst, trigger: Trigger) => { - const getData = async (key: string): Promise => { - return new Promise(async (resolve) => { - try { - const res = await bot.recall(key); - resolve(res); - } catch (e) { - resolve(null); - } - }); - }; - - // HACK: pass the button-tap value through the handler system - const sendMsg = (trigger: Trigger) => { - const payload = { - roomId: trigger.attachmentAction.roomId, - personId: trigger.person.id, - text: trigger.attachmentAction.inputs.chip_action, + } else if (Array.isArray(keyword)) { + for (const item of keyword) { + if ($.text?.toLowerCase().includes(item.toLowerCase())) { + return await cb($); } - bot.framework.onMessageCreated(payload as Message); } + } + return $.next; + }); + } + private onReject(e: SpeedyError): void { + if (this.errorHandler) { + this.errorHandler(e); + } + } - // Vanish "card" element on tap - const { disappearOnTap } = await getData(chipConfigLabel) || { disappearOnTap: false } - if (disappearOnTap) { - const msgId = trigger.attachmentAction.messageId - await bot.censor(msgId as string) - } + public captureError(func: (e: SpeedyError) => void | unknown) { + this.errorHandler = func; + } + + /** + * Main workhorse that takes in a webhook and passes it through provided flows + * + * ```ts + * import + * + * ``` + * @param env + * @param startingCtx + * @returns + */ + async runMiddleware( + env: ENVELOPES, + startingCtx: { [key: string]: string | number } = {} + ): Promise { + const { roomId } = env.data; + const botInst = this; + try { + const messageType = this.detectType(env); + let roomType = ""; + if ("roomType" in env.data) { + roomType = env.data.roomType; + } + // retrieve message + author details + const { details, author: authorData } = await this.buildDetails( + messageType, + env + ); + + const [authorEmail] = authorData.emails; + const [, authorDomain] = authorEmail.toLowerCase().split("@"); + + // Flick these on as needed for middlewares + let filePayload: SpeedyFileUtils | undefined = undefined; + let attachedData: AttachedData | undefined = undefined; + let textData: string | undefined; + let mentionedPeople: string[] = []; + let messageId = ""; + let parentIdVal; - const registeredChips = (await getData(chipLabel)) || []; - const { chip_action } = trigger.attachmentAction - ? trigger.attachmentAction.inputs - : { chip_action: "" }; + // Don't handle messages sent from bot itself + // currently NOT blocking other bots, could be cool if they had own protocol to transact + const proceed = await this.checkAuthor(authorData); + if (!proceed) { + return false; // no self-referential + } + + if (messageType === "card") { + const { inputs, messageId: id } = details as Submit_Details; + attachedData = inputs as AttachedData; + messageId = id; + // no room type on attachmentActions :( + const roomData = await this.getRoom(roomId); + roomType = roomData.type; - if (!registeredChips.length) { - return sendMsg(trigger) + // But if it's a chip, attach to text & bail + const chipToken = CONSTANTS.CHIP_LABEL; + const isChip = inputs[chipToken]; + if (isChip) { + textData = inputs[chipToken]; + attachedData = undefined; } - // Check for stashed handlers associated with a chip - for (const chip of registeredChips) { - const { label, handler, keyword } = chip; - if (chip_action === label || chip_action === keyword) { - if (typeof handler === "function") { - handler.call(this, bot, trigger); - } else { - sendMsg(trigger) - } - } + const isDelete = + inputs[CONSTANTS.submitToken] === CONSTANTS.action_delete; + if (isDelete) { + await this.deleteMessage(id); + return true; } } - const Speedybot = this - const rootHandlers: BotHandler[] = [ - { - keyword: '<@catchall>', - async handler(bot, trigger) { - const $bot = $(bot) + if (messageType === "text" || messageType === "file") { + const { + parentId, + id, + roomType: roomType_val, + text = textData, + files, + mentionedPeople: mentionedPeople_val = [], + } = details as File_Details | Message_Details; + parentIdVal = parentId; + mentionedPeople = mentionedPeople_val; + attachedData = undefined; + messageId = id; + roomType = roomType_val; + textData = text ?? ""; + textData = + roomType === "group" + ? textData.split(" ").slice(1).join(" ") || "" + : textData; - // todo: opt flag to disable this? + if (files && files.length) { + const [targetUrl] = files; // Only support for single files for now + try { + let fileData: SpeedyFile = await this.peekFile(targetUrl); + filePayload = { + ...fileData, + async getData() { + const { data } = await botInst.getFile(targetUrl); + return data as T; + }, + }; + } catch (e) { + const err = { + message: "There was an issue obtaining file data", + error: e, + e, + roomId, + }; + this.onReject(err); + return false; + } + } + } - // if the user enters "$clear" - if (trigger.text === '$clear') { - return $bot.clearScreen() + // type AttachedData = Record; + + const $Magic: $Magic = { + next: true, + end: false, + messageType, + id: messageId, + author: { + domain: authorDomain, + email: authorEmail, + id: authorData.id, + org: authorData.orgId, + name: authorData.displayName, + type: authorData.type, + profilePic: authorData.avatar, + }, + text: textData, + msg: { + parentId: parentIdVal, + roomId, + roomType, + mentionedPeople: mentionedPeople.slice(1), // strip @-mention of bot itself + }, + file: filePayload, + data: attachedData, + ctx: startingCtx, + buildDMLink(target: string, label: string): string { + const url = `webexteams://im?email=${target}`; + return this.buildLink(url, label ?? url); + }, + debug() { + return { + messageType: this.messageType, + text: this.text ?? "", + data: this.data, + messageId: this.id, + author: { + id: this.author.id, + name: this.author.name, + email: this.author.email, + }, + hasFile: !!this.file, + msg: { + parentId: this.msg.parentId, + roomId: this.msg.roomId, + roomType: this.msg.roomType, + mentionedPeople: this.msg.mentionedPeople, + }, + }; + }, + async thread( + threadData: [string | SpeedyCard, ...string[]] & { + length: 1 | 2 | 3 | 4 | 5 | 6; } + ) { + let [root, ...messages] = threadData; + const maxEntries = Math.min(messages.length, 5); + const { id: parentId, roomId } = await this.send(root); + for (let i = 0; i < maxEntries; i++) { + const msg = messages[i]; + let msgObj: ToMessage = { + parentId, + }; - // check if $prompt input is expected - const promptActive = await $bot.promptActive() - // if the user enters "$exit" - if (trigger.text === '$exit') { - if (promptActive) { - // return $bot.deactivatePrompt() - return $bot.promptActive(false) + if (typeof msg === "string") { + msgObj["markdown"] = msg; + msgObj["text"] = msg; + msgObj["roomId"] = roomId; } - } - // help is special, don't run catchall & nomatch - if (trigger.text === 'help' || trigger.text === 'healthcheck') { - return + await botInst._send(msgObj); } + return true; - if (promptActive) { - // fetch active prompts - const promptObj = await $bot.getPrompt() - if (promptObj) { - - const res = trigger.text - const { success, validate = (val) => true, retry} = promptObj - const isValid = await validate(res) - - if (isValid) { - await $bot.endPrompt() - success(bot, trigger, res) - } else { - // Ideas: - // - Tell user they can use the "$exit" keyword to bail out - // - Maybe re-run the initial prompt? - if (typeof retry === 'string') { - return bot.say(retry) - } else if(Array.isArray(retry)) { - return $bot.sendRandom(retry) - } else if (typeof retry === 'function') { - return retry(bot, trigger, res) - } - } - } + // type Thread = [root: string | SpeedyCard, ...messages: Array] & { length: 1 | 2 | 3 | 4 5}; + }, + + send(msg: Message) { + return botInst.sendTo(roomId, msg); + }, + reply(msg: string) { + return botInst.replyTo(roomId, messageId, msg); + }, + edit(messageObj: MessageResponse, msg: string) { + return botInst.editMessage(messageObj.roomId, messageObj.id, msg); + }, + card(config?: Partial) { + return botInst.card(config); + }, + buildLink(target: string, label?: string, noBold = false) { + let link = `[${label || target}](${target})`; + if (!noBold) { + link = `**${link}**`; + } + return link; + }, + buildDataSnippet(data: any, type = "json"): string { + const msg = ` +\`\`\`${type} +${type === "json" ? JSON.stringify(data, null, 2) : data} +\`\`\``; + return msg; + }, + pickRandom: (listOrMin: T[] | number, max?: number): T | number => { + if (Array.isArray(listOrMin)) { + const items = listOrMin as T[]; + return items[Math.floor(Math.random() * items.length)]; } else { - // if user has a custom catchall, run it here 1st - if (catchall_er && catchall_er.handler && !Speedybot.isChip(trigger)) { - const {handler} = catchall_er - handler(bot, trigger) - } + const min = listOrMin as number; + return Math.floor(Math.random() * (max! - min + 1)) + min; + } + }, + async sendFile(data: T, fileExtension: string) { + return botInst.sendFileTo(roomId, data, fileExtension); + }, + async getFile( + url: string, + opts?: { responseType?: "arraybuffer" | "json" } + ) { + const fileData: SpeedyFile = await botInst.peekFile(url); + const filePayload = { + ...fileData, + async getData() { + const { data } = await botInst.getFile(url); + return data as T; + }, + }; + return filePayload; + }, + fillTemplate( + utterances: string[], + template: { [key: string]: string | number } + ) { + let payload; + if (typeof utterances !== "string") { + payload = this.pickRandom(utterances) || ""; + } else { + payload = utterances; + } - if (noMatch_er) { - $bot.matchInvokeHandlers(tidyHandlers, trigger, noMatch_er) - } else { - $bot.matchInvokeHandlers(tidyHandlers, trigger) + const replacer: any = ( + utterance: string, + target: string, + replacement: string + ) => { + if (!utterance.includes(`$[${target}]`)) { + return utterance; } + return replacer( + utterance.replace(`$[${target}]`, replacement), + target, + replacement + ); + }; + + for (const key in template) { + const val = template[key]; + payload = replacer(payload, key, val); } + + return payload; }, - helpText: '_internal' - }, - { - keyword: '<@submit>', - handler(bot, trigger) { - if (!Speedybot.isChip(trigger)) { - return submitter?.handler(bot, trigger) - } else { - return rootChipHandler(bot, trigger); - } + async clearScreen(repeatCount = 50) { + const newLine = "\n"; + const repeatClamp = repeatCount > 7000 ? 5000 : repeatCount; // 7439 char limit + const clearScreen = `${newLine.repeat(repeatClamp)}`; + const requestOptions = { + method: "POST", + headers: { + Authorization: `Bearer ${botInst.getToken()}`, + "content-type": "application/json;charset=UTF-8", + }, + body: JSON.stringify({ + roomId, + text: clearScreen, + markdown: clearScreen, + }), + }; + const res = await botInst.makeRequest( + botInst.API.messages, + {}, + { rawInit: requestOptions } + ); + return res as MessageResponse; }, - helpText: '_internal' - }] + }; + + if (this.topMiddleware) { + const result = await this.topMiddleware($Magic); + if (result === false || !result) { + return false; + } + } + + for (const middleware of this.middlewares) { + const result = await middleware($Magic); + if (!result) { + break; + } + } + } catch (e) { + const defaultMessage = `There was a catastrophic error ${e}`; + let payload: SpeedyError = { + message: defaultMessage, + status: "00000", + e, + }; + if (typeof e === "object" && e !== null) { + const { message = defaultMessage, status = "00000" } = e as Partial<{ + message: string; + status: string; + }>; + payload = { message, status, roomId, e }; + } + this.onReject(payload); + } - if (!helper) { - helper = this.defaultHelpHandler(tidyHandlers) - this.addHandler(helper) + return true; + } + + /** + * @hidden + */ + private resolveDestination( + candidate: string | { personId: string } + ): { toPersonEmail: string } | { roomId: string } | { toPersonId: string } { + let target!: Destination; + if (typeof candidate === "string") { + if (checkers.isEmail(candidate)) { + target = { toPersonEmail: candidate }; } else { - const { handler } = helper - this.addHandler({ - keyword: 'help', - handler, - helpText: '_internal_Help_function' - }) + target = { roomId: candidate }; } + } else if (typeof candidate === "object" && "personId" in candidate) { + target = { toPersonId: candidate.personId }; + } + return target; + } - if (!healthcheck_er) { - healthcheck_er = this.defaultHealthcheck() + /** + * + * Send a message to a room, email, or personId + * + * ```ts + * + * import { SpeedyBot } from 'speedybot' + * // 1) Initialize your bot w/ config + * const Bot = new SpeedyBot({ token: '__REPLACE__ME__'}); + * + * Bot.sendTo('targetEmail@account.com', '**here is a message**') + * Bot.sendTo('aaa-bbb-ccc-ddd-eee-fff', '**Here is a message to a room**') + * Bot.sendTo({toPersonId: 'xxxyyyzzz', '**here is a message**') + * + * + * ``` + * + * + */ + async sendTo( + emailOrRoomId: string | { personId: string }, + message: Message + ): Promise { + const target = this.resolveDestination(emailOrRoomId); + if (typeof message === "string") { + const payload = { + ...target, + markdown: message, + }; + return this._send(payload); + } else if (typeof message === "object") { + const payload: ToMessage = { + ...target, + markdown: this.fallbackText, + text: this.fallbackText, + attachments: [ + { + contentType: "application/vnd.microsoft.card.adaptive", + content: + "build" in message && typeof message.build === "function" + ? message.build() + : message, + }, + ], + }; + return this._send(payload); + } + throw new Error("Invalid message passed to sendTo"); + } + + /** + * @hidden + */ + public async _send(payload: ToMessage): Promise { + const res = (await this.makeRequest(this.API.messages, payload, { + method: "POST", + token: this.getToken(), + })) as StubbedRes; + const json = await res.json(); + return json; + } + + public async validateToken(token: string) { + let valid = false; + try { + const res = await this.getSelf(token); + if (res.id) { + valid = true; } - this.addHandler(healthcheck_er) + } catch (e) { + valid = false; + } + return valid; + } - rootHandlers.forEach(handler => { - this.addHandler(handler) - }) + /** + * + * Convenience helper that creates a SpeedyCard + * + * ![cards](media://demo_sendcard.gif) + * + * ```ts + * import { SpeedyBot } from 'speedybot-mini' + * // 1) Initialize your bot w/ config + * const CultureBot = new SpeedyBot('tokenPlaceholder'); + * + * // 2) Export your bot + * export default CultureBot; + * + * // 3) Do whatever you want! + * + * CultureBot.contains(["hi", "hey"], + * async ($bot, msg) => { + * const cardData = $bot.card({ + * title: "SpeedyBot Hub", + * subTitle: "Sign the paperwork", + * chips: ["ping", "pong", "hi",], + * image: "https://github.com/valgaze/speedybot-mini/raw/deploy/docs/assets/logo.png?raw=true", + * url: "https://github.com/valgaze/speedybot-mini" + * }); + * $bot.send(cardData); + * }) + * + * ``` + */ + card( + config?: Partial + ): SpeedyCard { + const card = new SpeedyCard(); + const { + title = "", + subTitle = "", + image = "", + data = {}, + chips = [], + table = [], + choices = [], + backgroundImage = "", + } = config ?? {}; + + if (backgroundImage) { + card.setBackgroundImage; + } + if (title) { + card.addTitle(title); } - isChip(trigger: Trigger) { - return trigger?.attachmentAction?.inputs - ? Boolean(trigger.attachmentAction.inputs.chip_action) - : false; + if (subTitle) { + card.addSubtitle(subTitle); } - - - loadHandlers(...handlers: unknown[]) { - return this.registerHandlersWithHelp(this.flatten(...handlers)); + + if (image) { + card.setBackgroundImage(image); } - - // Take unknown number of args, lists, etc - flatten(...handlers: unknown[]): BotHandler[] { - return Array.prototype.concat.call([], ...handlers); + + if (Object.keys(data).length) { + card.attachData(data); } - - defaultHelpHandler(handlerList: BotHandler[]) { - return { - keyword: 'help', - handler(bot: BotInst, trigger: Trigger) { - const text = handlerList - .map((handler) => { - const { keyword } = handler; - let label = keyword; - if (keyword instanceof Array) { - label = keyword[0]; - } - return `${label}: ${handler.helpText}`; - }) - .join("\n\n"); - - const cardJSON = { - $schema: "http://adaptivecards.io/schemas/adaptive-card.json", - type: "AdaptiveCard", - version: "1.0", - body: [ - { - type: "TextBlock", - size: "Medium", - weight: "Bolder", - text: "Commands available to you", - }, - { - type: "RichTextBlock", - inlines: [ - { - type: "TextRun", - text: text, - }, - ], - }, - ], - }; - return bot.sendCard( - cardJSON, - `Your client doesn't support rendering adpative cards. Help data: ${text}` - ); - }, - helpText: `Get help info`, - }; + + if (chips.length) { + card.addChips(chips); + } + + if (choices.length) { + card.addPickerDropdown(choices); + } + + if (table) { + if (Array.isArray(table) && table.length) { + card.addTable(table); + } else { + if (Object.entries(table).length) { + card.addTable(table); + } + } } - - public snippet(data: object | string): string { - return snippet(data); + return card; + } + + public stashCard( + secret: string | number, + message?: string, + unwrapLabel = CONSTANTS.unwrapLabel, + destroyLabel = CONSTANTS.destroyLabel + ): SpeedyCard { + return this.card({ title: message || "Info" }) + .addDeleteButton(destroyLabel) + .addSubcard(this.card().addSubtitle(String(secret)), unwrapLabel); + } + + public errorCard(title: string, message: string) { + return this.card().addBlock( + this.card().addTitle(title).addSubtitle(message), + { backgroundColor: "Attention" } + ); + } + + public successCard(title: string, message: string) { + return this.card().addBlock( + this.card().addTitle(title).addSubtitle(message), + { backgroundColor: "Good" } + ); + } + + /** + * Edit a message + */ + public async editMessage( + roomId: string, + messageId: string, + message: string + ): Promise { + const url = `https://webexapis.com/v1/messages/${messageId}`; + const editPayload = { + roomId, + markdown: message, + }; + + const res = (await this.makeRequest(url, editPayload, { + token: this.getToken(), + method: "PUT", + })) as StubbedRes; + + const json: MessageResponse = await res.json(); + return json; + } + + public async replyTo( + param1: MessageResponse | string, + param2: string | undefined, + param3?: string + ): Promise { + let roomId: string; + let messageId: string; + let msg: string; + + if (typeof param1 === "object") { + // Handle the overload when param1 is an object (MessageResponse) + roomId = param1.roomId; // Use the roomId from param1 + messageId = param1.id; // Use the messageId from param1 + msg = param2 || ""; // Use param2 as the message, default to an empty string if not provided + } else { + // Handle the overload when param1 is a string + roomId = param1; // Use param1 as the roomId + messageId = param2 || ""; // Use param2 as the messageId, default to an empty string if not provided + msg = param3 || ""; // Use param3 as the message, default to an empty string if not provided } - defaultHealthcheck() { + const payload: ToMessage = { + markdown: msg, + text: msg, + parentId: messageId, + roomId, + }; + return this._send(payload); + } + + private detectType(envelope: ENVELOPES): MessageTypes { + let type: EventTypes = "text"; + if (envelope.resource === "messages") { + if ("files" in envelope.data && envelope.data.files?.length) { + const { files = [] } = envelope.data; + if (files.length) { + type = "file"; + } + } + } else if (envelope.resource === "attachmentActions") { + type = "card"; + } + return type; + } + + public async deleteMessage(msgId: string) { + const url = `${this.API.messages}/${msgId}`; + const res = await this.makeRequest( + url, + {}, + { + token: this.getToken(), + method: "DELETE", + } + ); + return res; + } + + public async deleteWebhook(webhookId: string) { + const url = `${this.API.webhooks}/${webhookId}`; + await this.makeRequest( + url, + {}, + { + token: this.getToken(), + method: "DELETE", + } + ); + return; + } + + async getWebhooks(): Promise<{ items: Webhook[] }> { + const url = `${this.API.webhooks}`; + const res = (await this.makeRequest( + url, + {}, + { + method: "GET", + token: this.getToken(), + } + )) as StubbedRes<{ items: Webhook[] }>; + const json = await res.json(); + return json; + } + + async fetchWebhooks(): Promise< + { + id: string; + name: string; + resource: string; + targetUrl: string; + }[] + > { + const webhooks = (await this.getWebhooks()) || []; + const list = webhooks.items.map((webhook) => { + const { id, name, resource, targetUrl } = webhook; return { - keyword: ["healthcheck"], - handler(bot, trigger) { - // Pick a random response for healthcheck - const choices = [ - `At the tone, the time will be ${new Date()}`, - `${new Date()}, healthcheck is GOOD`, - `Health Status: Good (${new Date()})`, - ]; - bot.say(pickRandom(choices)); - - // Adapative Card: https://developer.webex.com/docs/api/guides/cards - const cardPayload = new SpeedyCard() - .setTitle("System is 👍") - .setSubtitle("If you see this card, everything is working") - .setImage("https://raw.githubusercontent.com/valgaze/speedybot/master/docs/assets/chocolate_chip_cookies.png") // Cookie image courtesy of Daniel Lopez: https://unsplash.com/photos/aT7CE57EZL8 & https://unsplash.com/@soydanielwolf - .setUrl( - pickRandom([ - "https://www.youtube.com/watch?v=3GwjfUFyY6M", - "https://www.youtube.com/watch?v=d-diB65scQU", - ]), - "Take a moment to celebrate" - ) - .setTable([ - [`Bot's Date`, new Date().toDateString()], - ["Bot's Uptime", `${String(process.uptime()).substring(0, 25)}s`], - ]); - return bot.sendCard( - cardPayload.render(), - "Your client does not currently support Adaptive Cards :(" - ); - }, - helpText: - "Test the health of your bot. Otherwise there may be an issue with your tunnel, server, or network)", + id, + name, + resource, + targetUrl, }; + }); + return list; + } + + Setup(url, secret) { + return Promise.all([ + this.createFirehose(url, secret), + this.createAttachmentActionsWebhook(url, secret), + ]).catch((e) => { + throw e; + }); + } + + async getRecentRooms( + limit = 100 + ): Promise<{ type: string; title: string; id: string }[]> { + const url = `${this.API.rooms}?max=${limit}&sortBy=lastactivity`; + const res = (await this.makeRequest( + url, + {}, + { + method: "GET", + token: this.getToken(), + } + )) as StubbedRes<{ items: Room_Details[] }>; + const json = await res.json(); + return json.items.map((item) => { + const { type, title, id } = item; + return { + type, + title, + id, + }; + }); + } + + /** + * @hidden + */ + public async createAttachmentActionsWebhook(url, secret?) { + const payload: { + resource: string; + event: string; + targetUrl: string; + name: string; + secret?: string; + } = { + resource: "attachmentActions", + event: "created", + targetUrl: url, + name: `${new Date().toISOString()}_attachmentActions`, + }; + if (secret) { + payload.secret = secret; } - - webhook() { - return BotWebhook(this.frameworkRef); + return this.createWebhook(payload); + } + + /** + * @hidden + */ + public async createFirehose(url, secret) { + const payload: { + resource: string; + event: string; + targetUrl: string; + name: string; + secret?: string; + } = { + resource: "messages", + event: "created", + targetUrl: url, + name: `${new Date().toISOString()}_firehose`, + }; + if (secret) { + payload.secret = secret; } + return this.createWebhook(payload); } - + + async createWebhook(payload: { + resource: string; + event: string; + targetUrl: string; + name: string; + secret?: string; + }) { + const url = `${this.API.webhooks}`; + const res = (await this.makeRequest(url, payload, { + method: "POST", + token: this.getToken(), + })) as StubbedRes; + const json = await res.json(); + return json as Webhook; + } + + private async checkAuthor(authorObj: SelfData): Promise { + const data = await this.getSelf(); + const { id } = data; + return id !== authorObj.id; + } + + public async getSelf(token?: string): Promise { + const url = this.API?.user?.self; + const res = (await this.makeRequest( + url, + {}, + { + method: "GET", + token: token ?? this.getToken(), + } + )) as Response; + const json = (await res.json()) as SelfData; + return json; + } + + public async whoAmI(): Promise { + const selfData = await this.getSelf(); + const { items: webhooks } = await this.getWebhooks(); + return { + ...selfData, + webhooks, + }; + } + + // Incoming webhook details + + /** + * @hidden + */ + private async buildDetails( + type: "card" | "text" | "file", + envelope: ENVELOPES + ): Promise<{ + author: SelfData; + details: Message_Details | File_Details | Submit_Details; + }> { + const [author, data] = await Promise.all([ + this.getPerson(envelope.data.personId), + this.getData(type, envelope), + ]); + return { + author, + details: data, + }; + } + + public async getPerson(personId: string): Promise { + const url = `${this.API.user.getPersonDetails}/${personId}`; + const res = (await this.makeRequest( + url, + {}, + { + method: "GET", + token: this.getToken(), + } + )) as StubbedRes; + const json = await res.json(); + return json; + } + + public async getRoom(roomId: string): Promise { + const url = `${this.API.roomDetails}/${roomId}`.replace(" ", ""); + const res = (await this.makeRequest( + url, + {}, + { + method: "GET", + token: this.getToken(), + } + )) as StubbedRes; + const json = await res.json(); + return json; + } + + /** + * @hidden + */ + private async getData( + type: EventTypes, + envelope: ENVELOPES + ): Promise { + let url = this.API.messages; + if (type === "card") { + url = this.API.attachments; + } + const { data } = envelope; + const { id } = data; + url = `${url}/${id}`; + const res = (await this.makeRequest( + url, + {}, + { + method: "GET", + token: this.getToken(), + } + )) as Response; + const json = await res.json(); + if (type === "card") { + return json as Submit_Details; + } + if (type === "text") { + return json as Message_Details; + } + if (type === "file") { + return json as File_Details; + } + return json as Message_Details | Submit_Details | File_Details; + } + + private generateFileName() { + return `${this.rando()}_${this.rando()}`; + } + /** - * SpeedybotWebhook - * With express requires body-parser + * Generate a random string of 11 characters (letters + numbers) + */ + public rando(): string { + return Math.random().toString(36).slice(2); + } + + /** + * @hidden + */ + private handleExtension(input = "") { + const hasDot = input.indexOf(".") > -1; + let fileName = ""; + const [prefix, ext] = input.split("."); + if (hasDot) { + if (!prefix || prefix === "*") { + // '.json' case, generate prefix + fileName = `${this.generateFileName()}.${ext}`; + } else { + // 'a.json' case, pass through + fileName = input; + } + } else { + // 'json' case, generate prefix, add . + fileName = `${this.generateFileName()}.${prefix}`; + } + return fileName; + } + + /** + * + * Send a file to a destination-- a downloadable file will be generated + * + * At minimum, provide the file data & desired file extension * - * ex. app.post('/mywebhook', SpeedybotWebhook(config, handlers)) - * @param config: SpeedybotConfig - * @param handlers: Bothandler[] - * @returns Promise + * ```ts + * + * import { SpeedyBot } from 'speedybot' + * const Bot = new SpeedyBot('__REPLACE__ME__') + * const myData = { a: 1, b: 2, c: [1,2,3,'hello', 'bonjour']} + * $bot.sendFileTo('target@email.com', myData, 'json') + * + * ``` */ - export const SpeedybotWebhook = ( - config: SpeedybotConfig, - handlers: (BotHandler | WebhookHandler)[], - app?: any - ) => { - const { webhookUrl = "" } = config; - ValidatewebhookUrl(webhookUrl); - if (config.token === placeholder) { + public async sendFileTo( + destination: string | { personId: string }, + data: any, + extensionOrFileName: string, + textLabel: string = "", + contentType: string | null = null + ) { + const target = this.resolveDestination(destination); + + if (!extensionOrFileName) { throw new Error( - `Placeholder detected under 'token' in config.json! See here for instructions: https://github.com/valgaze/speedybot-starter/blob/master/quickstart.md Exiting...` + `$(bot).sendDataAsFile: Missing filename/extension parameter, ex "myfile.png" or "*.png"` ); } - const speedybot = new Speedybot(config); - const webhookHandlers: WebhookHandler[] = []; - const standardHandlers = handlers.filter((handler) => { - const { keyword } = handler; - if (typeof keyword === "string") { - const isWebhook = keyword.includes(speedybot.WebhookKeyword); - if (isWebhook) { - webhookHandlers.push(handler as WebhookHandler); - return false; + let finalContentType: string | null = contentType; + if (!finalContentType) { + finalContentType = this.guessContentType(extensionOrFileName); + if (!finalContentType) { + throw new Error( + `$(bot).sendDataAsFile: Missing 'content-type' parameter, ex "image/png"` + ); + } + } + const fullFileName = this.handleExtension(extensionOrFileName); + const formData = new FormData(); + + const isJSON = + data && typeof data === "object" && finalContentType.includes("json"); + formData.append( + "files", + new Blob([isJSON ? JSON.stringify(data, null, 2) : data], { + type: finalContentType, + }), + fullFileName + ); + + const [entry] = Object.entries(target); + const [finalDestination, v] = entry; + formData.append(finalDestination, v); // ex, toPersonEmail, a@a.com + formData.append("text", textLabel); + const requestOptions = { + method: "POST", + headers: { + Authorization: `Bearer ${this.getToken()}`, + }, + body: formData, + }; + const res = (await this.makeRequest( + this.API.messages, + {}, + { rawInit: requestOptions } + )) as Response; + const json = await res.json(); + return json as MessageResponse; + } + + /** + * Get a (secured) file's contents, probably would use this for examining uploaded files + * like JSON, excel (xlsx), etc + * + * ```ts + * + * import { SpeedyBot } from 'speedybot' + * + * const Bot = new SpeedyBot('__REPLACE__ME__') + * Bot.on('file', $ => { + * const fileData = Bot.getFile($.details.urls) + * + * }) + * // 1) Initialize your bot w/ config + * const CultureBot = new SpeedyBot(config); + * + * // 2) Export your bot + * export default CultureBot; + * + * // 3) Do whatever you want! + * + * CultureBot.contains(["hi", "hey"], + * async ($bot, msg) => { + * const [fileUrl] = trigger.message.files || [] + * const fileData = await $bot.getFile(fileUrl, { + * responseType: 'arraybuffer', + * }) + * const { fileName, extension, type } = fileData + * $bot.say( + * `The file you uploaded (${fileName}), is a ${extension} file of type ${type}` + * ) + * // with fileData.data you have access to an arrayBuffer with the raw bytes of that file + * }) + * + * ``` + * */ + public async getFile( + url: string, + opts: { + responseType?: "arraybuffer" | "json"; + } = {} + ): Promise { + const res = (await this.makeRequest( + url, + {}, + { + method: "GET", + token: this.getToken(), + } + )) as StubbedRes; + const { + contentType: type, + name: fileName, + extension, + } = this.extractFiledata(res as StubbedRes); + + // data could be binary if user needs it + const shouldProbablyBeArrayBuffer = + (!type.includes("json") && !type.includes("text")) || + type.includes("image"); + let data: ArrayBuffer | string | {} | object = res; + if (opts.responseType === "arraybuffer" || shouldProbablyBeArrayBuffer) { + try { + data = await res.arrayBuffer(); + } catch (e) { + // failed, fallback + data = {}; + } + } else { + try { + if (type.includes("json")) { + data = (await res.json()) as object; } else { - return true; + // should we not presume text? + data = await res.text(); } - } else { - return true; // regex | (string|regex)[] + } catch (e) { + data = {}; } - }); - - speedybot.loadHandlers(standardHandlers); - speedybot.start(); - - // TODO: support other route handler schemas-- koa, hapi, sails, etc - if (app) { - webhookHandlers.forEach((webhook) => { - const { method = "post", route, handler } = webhook; - app[method](route, async (req, res) => { - return handler.call(speedybot, req, res); - }); - }); } - - // Main webhook specifically for incoming chat webhooks - return async (req, res) => { - return speedybot.webhook()(req); + const payload = { + url: url, + name: fileName, + extension, + contentType: type, + data, }; - /** - * Maybe in future, grab the route from webhookUrl in config - * ex. - * const config = { webhookUrl: 'https://hostname123.net/mywebhookroute' } - * app.use(SpeedybotWebhook(config, handlerList)) // <-- checks for /mywebhookroute & Handles - * - * Or maybe validate - * app.post('/mywebhookroute_bongo', SpeedybotWebhook(config, handlerList)) // <-- compare webhookUrl & req.originalUrl - * Make sure it matches req.originalUrl - * ex. app.use(SpeedybotWebhook(config, handlerList)) - * // Use /webhookFun without specifying like app.post('/webhookFun', SpeedybotWebhook(config, handlerList)) - * - */ - }; - + return payload; + } + + private extractFiledata(res: StubbedRes) { + const type = res.headers.get("content-type"); + const contentDispo = res.headers.get("content-disposition"); + const fileName = contentDispo + ?.split(";")[1] + .split("=")[1] + .replace(/\"/g, ""); + const extension = fileName.split(".").pop() || ""; + + return { contentType: type, extension, name: fileName }; + } + + public async peekFile(url: string): Promise> { + const res = await this.makeRequest( + url, + {}, + { + method: "HEAD", + token: this.getToken(), + } + ); + return { url, ...this.extractFiledata(res as StubbedRes) }; + } + /** - * Speedytunnel: You likely don't need/want this, just leave webhookUrl blank - * and you can use websockets - * @param app: express app instance - * @param port: port to tunnel - * @param tunnel: nGrok boot that returns Promise - * @param config: token - * @param handlers: list of handlers - * @param rest: a series of handlers (separated by commas), a list of handlers, or a combination of both + * @hidden */ - export interface miniNgrok { - port?: string | number; - addr?: string | number; - } - export type tunnlerFunc = (config: miniNgrok) => Promise; - - export const Speedytunnel = async ( - app: any, - port: string | number, - tunneler: tunnlerFunc, - config: SpeedybotConfig, - handlers: BotHandler[] - ) => { - const tunnelUrl = await tunneler({ port }); - const webhookRoute = "speedywebhook"; - const { token, webhookUrl = "" } = config; - if (webhookUrl) { - console.log( - `WARNING: webhookUrl ('${webhookUrl}' detected in config, igoring and booting with tunnel ${tunnelUrl}` - ); + private guessContentType(extensionOrFileName: string) { + // Most users probably won't know/care about content-types, attempt to guess it from + // file-extension if explicit content-type isn't + const hasDot = extensionOrFileName.indexOf(".") > -1; + let extension = ""; + const pieces = extensionOrFileName.split("."); + const hasMultipleDots = pieces.length > 2; // Little trick: if only one dot, there should only be 2 elements + const [prefix, ext] = pieces; + if (hasDot) { + // ".png" + // "a.png" + // "*.png" + if (!prefix || prefix === "*") { + extension = ext; + } + // a.b.c.png + if (hasMultipleDots) { + // last piece will be extension + extension = pieces.pop() as string; + } + } else { + // "png" + extension = prefix; } - const speedyConfig = { - token, - webhookUrl: `${tunnelUrl}/${webhookRoute}`, + + const mapping: { [key: string]: string } = { + doc: "application/msword", + docx: "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + xls: "application/vnd.ms-excel", + xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + ppt: "application/vnd.ms-powerpoint", + pptx: "application/vnd.openxmlformats-officedocument.presentationml.presentation", + pdf: "application/pdf", + jpg: "image/jpeg", + jpeg: "image/jpeg", + bmp: "image/bmp", + gif: "image/gif", + png: "image/png", + txt: "text/plain", + csv: "text/csv", + html: "text/html", + json: "application/json", + "*": "application/octet-stream", // #gbogh + mp3: "audio/mpeg", + mp4: "video/mp4", + mpeg: "video/mpeg", + mpkg: "application/vnd.apple.installer+xml", + vf: "application/json", // voiceflow }; - app.post(`/${webhookRoute}`, SpeedybotWebhook(speedyConfig, handlers)); - }; - + const res = mapping[extension] || null; + return res; + } + + fuzzyMatch(candidate: string, options: string[]): boolean { + const lowerCaseCandidate = candidate.toLowerCase(); + return options.some((option) => + option.toLowerCase().includes(lowerCaseCandidate) + ); + } + /** - * - * @param config: Speedybot Config - * @param handlerList: list of botHandlers - * @returns Framework instance + * Convert a list of pairs into an object for secrets consumption. + * @param arr - The list of pairs to convert. + * @returns The converted object. + * @example + * ```typescript + * const input: string[] = ['secret1=value1', 'secret2=value2', 'secret3=value3']; + * const output = convertToHash(input); + * console.log(output); + * // Output: + * // { + * // secret1: 'value1', + * // secret2: 'value2', + * // secret3: 'value3' + * // } + * ``` */ - export const Launch = async ( - config: SpeedybotConfig, - handlerList: BotHandler[] - ) => { - if (config.token === placeholder) { - throw new Error( - `Placeholder detected in config.json! See here for instructions: https://github.com/valgaze/speedybot/blob/master/quickstart.md Exiting...` - ); - } - ascii_art(); - const speedybot = new Speedybot(config); - // Filterout webhooks - const tidyHandlerList = handlerList.filter( - ({ keyword }) => - !(typeof keyword === "string" && keyword === speedybot.WebhookKeyword) - ); - speedybot.loadHandlers(tidyHandlerList); - const frameworkRef = await speedybot.start(); - return frameworkRef; - }; - - export const speedybotKoa = () => { - return (ctx) => { - // do some koa middle ware stuff - }; - }; - \ No newline at end of file + public convertToHash(arr: string[]): { [key: string]: string } { + return arr.reduce((hash, item) => { + const [key, value] = item.split("="); + hash[key] = value; + return hash; + }, {}); + } + + public appCard( + appName: string, + logoUrl: string, + config: Omit = {} + ) { + return this.card().addHeader(appName, { iconURL: logoUrl, ...config }); + } +} diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..7b37fcb --- /dev/null +++ b/src/types.ts @@ -0,0 +1,417 @@ +import { SpeedyCard, AbbreviatedSpeedyCard } from "./cards"; + +export type SpeedyConfig = Partial<{ + allowedEmails: string[]; +}>; +// errors +export type SpeedyError = { + e: unknown; + message: string; + status?: string | number; + roomId?: string; // RoomId to send a handler to user if necessary, ex `Bot.sendTo(roomId, "there was a bad, bad error") +}; + +// Messages: text, files, form submissions (attachment actions) +export type Card = { + // handle raw spec + type: string; + body: unknown[]; + actions?: any[]; + $schema: string; + version: string; +}; +export type Message = string | number | Card | SpeedyCard; + +export type SpeedyFile = { + url: string; + name: string; + extension: string; + contentType: string; +}; + +export type SpeedyFileUtils = SpeedyFile & { + getData(): Promise; +}; + +// $Magic, main parameter, others +export type MessageTypes = "card" | "file" | "text"; + +interface commonData { + next: boolean; + end: boolean; + messageType: "card" | "file" | "text"; + id: string; // Message id + + /** + * Author details + * + * ``` + + domain: string; (@bongo.co) + email: string; (joe@bongo.com) + id: string; (abcdefghijk123456789) + org: string; (lmnopqrstuv) + name: string; + type: "person" | "bot" | "appuser"; + profilePic: string; + + ``` + * + * + */ + author: { + domain: string; + email: string; + id: string; + org: string; + name: string; + type: "person" | "bot" | "appuser"; + profilePic: string; + }; + msg: { + parentId?: string; + roomId: string; + roomType: string; + mentionedPeople: string[]; + }; + ctx: { + [key: string]: string | number | boolean; + }; +} + +export type EventTypes = "text" | "file" | "card"; + +export type AttachedData = { + [key: string]: boolean | number | string | Record | AttachedData; +}; + +interface CardData extends commonData { + // messageType: "card"; + messageType: MessageTypes; + data?: T; + file?: SpeedyFileUtils; // not included w/ submissions + text?: string; // not included w/ submissions +} + +interface TextData extends commonData { + // messageType: "text"; + messageType: MessageTypes; + data?: T; // not included w/ text + file?: SpeedyFileUtils; // not included w/ text + text: string; +} + +interface FileData extends commonData { + // messageType: "file"; + messageType: MessageTypes; + data?: T; // not included w/ file + file: SpeedyFileUtils; // guaranteed + text?: string; // not guaranteed +} + +export type IncomingItem = TextData | FileData | CardData; + +export type Destination = + | { roomId: string } + | { toPersonEmail: string } + | { toPersonId: string }; + +export type NestedData = string | number | boolean | AttachedData; + +export type $Magic = { + buildDataSnippet(data: any, type?: string): string; + debug(): DebugInfo; + send(m: Message): Promise; + reply(message: string): Promise; + clearScreen(c?: number): Promise; + fillTemplate( + utterances: string[], + template: { [key: string]: string | number } + ): string; + buildDMLink(target: string, label: string): string; + card(config?: Partial): SpeedyCard; + edit(m: MessageResponse, e: string): Promise; + pickRandom

(list: P[]): P; + pickRandom

(min: number, max: number): number; + pickRandom

(listOrMin: P[] | number, max?: number): P | number; + sendFile: ( + data: T, + fileExtension: string + ) => Promise; + getFile( + url: string, + opts?: { responseType?: "arraybuffer" | "json" } + ): Promise<{ + getData(): Promise; + url: string; + name: string; + extension: string; + contentType: string; + }>; + thread( + threadData: [string | SpeedyCard, ...string[]] & { + length: 1 | 2 | 3 | 4 | 5 | 6; + } + ); + buildLink(destinationURL: string, label?: string, noBold?: boolean): string; +} & IncomingItem; + +export type Middleware = ( + $: $Magic +) => boolean | Promise; + +// message payloads + +export type MessageResponse = { + id: string; + roomId: string; + roomType: string; // "direct" | "group"; + text: string; + markdown?: string; + html?: string; + personId: string; + personEmail: string; + created: string; + updated?: string; + files?: string[]; +}; + +export type DebugInfo = { + messageType: string; + messageId: string; + text: string; + hasFile: boolean; + data?: unknown; + author: { + id: string; + name: string; + email: string; + }; + msg: { + parentId?: string; + roomId: string; + roomType: string; + mentionedPeople: string[]; + }; +}; + +// Pass to create message +export type ToMessage = { + roomId?: string; + parentId?: string; + toPersonId?: string; + toPersonEmail?: string; + text?: string; + markdown?: string; + files?: string[]; + attachments?: { + contentType?: string; + content?: unknown; // rendered card + }[]; +}; + +// Webhooks +export interface Webhook { + id: string; + name: string; + targetUrl: string; + resource: string; + event: string; + orgId: string; + createdBy: string; + appId: string; + ownedBy: string; + status: string; + created: string; + secret?: string; +} + +// Card submissions +export type Submit_Details = { + id: string; + type: string; + messageId: string; + inputs: T; + personId: string; + personEmail: string; // tweaking official webhook spec + roomId: string; + created: Date | string; +}; + +export type AA_Details = { + id: string; + type: string; + messageId: string; + inputs: any; + personId: string; + roomId: string; + created: Date | string; +}; + +// Get Self data from token +export type SelfData = { + id: string; + emails: string[]; + phoneNumbers: any[]; + displayName: string; + nickName: string; + userName: string; + avatar: string; + orgId: string; + created: Date; + status: string; + type: "person" | "bot" | "appuser"; // appuser = https://developer.webex.com/docs/guest-issuer + firstName: string; + lastName: string; + lastModified: Date; + lastActivity: string; +}; + +// only partializes 1 level down +/** + * Utility type + * Add a secret to your Speedybot bot instance. Note bot tokens are special are are still set by {@link setToken} + * **Note:** Once you add a secret it is accessible on the instance so be careful + * + * + * ## Example + * + * ```ts + * + * import { DeepPartial, Speedybot } from 'speedybot' + * + * // 1) Initialize your bot w/ its token + * const Bot = new Speedybot('__REPLACE__ME__'); + * + * // 2) Export your bot + * export default CultureBot; + * + * // 3) Add middleware "steps" to validate + process incoming messages + * + * // Retry logic if file not working + * const specialValue = `bingo12345678` + * + * type DataPayload = { + * specialValue: string; + * message?: string; + * } + * + * Bot.addStep>(async $ => { + * if ($.data) { + * if ($.data.specialValue === specialValue) { + * await $.send(`Welcome! you said ${$.data.mesage}`) + * } else { + * await $.send(`Welcome!`) + * } + * $.end + * } else { + * const data: DataPayload = { + * specialValue, + * } + * $.send($.card().addTitle('Please make a submission').addTextArea()) + * + * } + * }) + * + * ``` + */ +export type DeepPartial = { + [P in keyof T]?: T[P] extends object ? DeepPartial : T[P]; +}; + +export type ENVELOPES = MessageEnvelope | AA_Envelope; +export type AA_Envelope = { + id: string; + name: string; + targetUrl: string; + resource: "attachmentActions"; + event: string; + orgId: string; + createdBy: string; + appId: string; + ownedBy: string; + status: string; + created: Date | string; + actorId: string; + data: { + id: string; + type: string; + messageId: string; + personId: string; + roomId: string; + created: Date | string; + }; +}; +// Messages, text +export type MessageEnvelope = { + id: string; + name: string; + targetUrl: string; + resource: "messages"; + event: string; + orgId: string; + createdBy: string; + appId: string; + ownedBy: string; + status: string; + created: Date | string; + actorId: string; + data: Message_Details; +}; + +// File submissions (can optionally include text) +export type File_Details = Message_Details & { files: string[] } & { + text?: string; +}; + +// Text submissions +export type Message_Details = { + id: string; + roomId: string; + roomType: string; + text: string; + personId: string; + personEmail: string; + html?: string; + mentionedPeople?: string[]; + created: Date | string; + files?: string[]; + parentId?: string; +}; + +// Make Request +export type RequestOps = { + "content-type"?: string; + method?: "POST" | "PUT" | "GET" | "DELETE" | "HEAD" | "PATCH"; + headers?: any; + raw?: boolean; + [key: string]: any; +}; +export type CoreMakerequest = ( + url: string, + body: any, + opts: RequestOps +) => Promise | T; + +export type StubbedRes = { + headers: { + get(q: string): string; + }; + arrayBuffer(): Promise; + text(): Promise; + json(): Promise; +}; + +// Room +export type Room_Details = { + id: string; + title: string; + type: string; + isLocked: boolean; + lastActivity: string; + creatorId: string; + created: string; + ownerId: string; + isPublic: boolean; + isReadOnly: boolean; +}; diff --git a/src/webhook.ts b/src/webhook.ts deleted file mode 100644 index 177334d..0000000 --- a/src/webhook.ts +++ /dev/null @@ -1,304 +0,0 @@ -import axios, { AxiosError} from 'axios' - -import { SpeedyCard } from "./cards" -import { ToMessage, Message } from './framework' -import { checkers } from "./helpers" -import { SpeedybotConfig } from './speedybot' - -export const finale = () => ` -Server(less) Time: ${new Date().toString()} -* -* ╔═╗ ╔═╗ ╔═╗ ╔═╗ ╔╦╗ ╦ ╦ ╔╗ ╔═╗ ╔╦╗ -* ╚═╗ ╠═╝ ║╣ ║╣ ║║ ╚╦╝ ╠╩╗ ║ ║ ║ -* ╚═╝ ╩ ╚═╝ ╚═╝ ═╩╝ ╩ ╚═╝ ╚═╝ ╩ HUB -* -* Setup Instructions (make your own bot): https://github.com/valgaze/speedybot-hub -* ` - -export type IncomingHookHandler< R=any, S=any> = ( - $handlerBot: HookBot, - request: R, - response?: S - ) => Promise | void - - export type IncomingWebhook = { - method?: string - handler: IncomingHookHandler - validate?( - request: R, - ): { proceed: boolean } | Promise<{ proceed: boolean }> - } - - - export type AbbreviatedSpeedyCard = { - title: string - subTitle: string - image: string - url: string - urlLabel: string - data: { [key: string]: any } - chips: (string | { label: string; keyword?: string })[] - table: string[][] | { [key: string]: string } - choices: (string | number)[] - backgroundImage: string - } - - export class HookBot { - // Environment variables available to Speedybot-hub - private fallbackText = - 'Sorry, it appears your client does not support rendering Adaptive Cards, see here for more info: https://developer.webex.com/docs/api/guides/cards' - private token = '' - private API = { - getMessageDetails: 'https://webexapis.com/v1/messages', - getAttachmentDetails: 'https://webexapis.com/v1/attachment/actions', - getMembershipDetails: 'https://webexapis.com/v1/memberships', - getPersonDetails: 'https://webexapis.com/v1/people', - sendMessage: 'https://webexapis.com/v1/messages', - createWebhook: 'https://webexapis.com/v1/webhooks', - deleteWebhook: `https://webexapis.com/v1/webhooks`, - getWebhooks: 'https://webexapis.com/v1/webhooks', - getSelf: 'https://webexapis.com/v1/people/me', - deleteMessage: 'https://webexapis.com/v1/messages', - } - - constructor(public config: {token: string}) { - this.token = config.token - } - - private async makeRequest(payload: ToMessage): Promise { - const headers = { - Authorization: `Bearer ${this.token}`, - } - // HACK: couldn't get try/catch won't catch axios 400 error - // todo: swap out w/ fetch/isomorphic-fetch - let res - res = await axios.post(this.API.sendMessage, payload, { headers }).catch((e: Error | AxiosError) => { - if (axios.isAxiosError(e)) { - const { name, message } = e - return { - name, - message - } - } else { - const { name, message } = e - return { - name, - message - } - } - - }) - return res - } - - /** - * - * Send a 1-1/DM message to a user based on their email or personId - * - * You can send a string or a card - * - * ```ts - * { - * keyword: 'biscotti', - * async handler($bot, trigger) { - * - * $bot.dm('username@domain.com', 'Here is a secret message') - * - * $bot.dm('aaa-bbb-ccc-ddd-eee', $bot.card({title:'biscotti', subTitle:'Is it biscotti or biscotto?', chips:['biscotti','biscotto']})) - * - * } - * } - * ``` - * - */ - public async dm( - personIdOrEmail: string, - message: string | SpeedyCard | string[], - fallback?: string, - roomIdOveride?:string - ): Promise { - const payload: ToMessage = { - text: this.fallbackText, - } - if (checkers.isEmail(personIdOrEmail)) { - payload['toPersonEmail'] = personIdOrEmail - } else { - payload['toPersonId'] = personIdOrEmail - } - - if (roomIdOveride) { - delete payload['toPersonEmail'] - delete payload['toPersonId'] - payload['roomId'] = roomIdOveride - } - - if (typeof message === 'string') { - payload['markdown'] = message - payload['text'] = message - } - - const isCard = checkers.isCard(message) - - if (isCard) { - if (fallback) { - payload['text'] = fallback - } - const cardPayload = [ - { - contentType: 'application/vnd.microsoft.card.adaptive', - content: - typeof message !== 'string' && - 'render' in message && - typeof message.render === 'function' - ? message.render() - : message, - }, - ] - payload['attachments'] = cardPayload - } - - const res = await this.makeRequest(payload) - return res as Message - } - - public async sendRoom(roomId: string, content: string | SpeedyCard | string[]) { - return this.dm('_override_', content, 'It appears your client does not support Adaptive Cards', roomId) - } - - /** - * - * Convenience helper that creates a SpeedyCard - * - * ![cards](media://demo_sendcard.gif) - * - * - * ```ts - * { - * keyword: 'bingo', - * async handler($bot, trigger) { - * const cardData = $bot.card({ - * title: "Speedybot Hub", - * subTitle: "Sign the paperwork", - * chips: ["ping", "pong", "hi", "files"], - * image: "https://i.imgur.com/LybLW7J.gif", - * url: "https://github.com/valgaze/speedybot-hub" - * }); - * $bot.send(cardData); - * - * } - * } - * - * ``` - */ - card( - config: Partial = {} - ): SpeedyCard { - const card = new SpeedyCard() - const { - title = '', - subTitle = '', - image = '', - url = '', - // urlLabel = '', - data = {}, - chips = [], - table = [], - // choices = [], - // backgroundImage = '', - } = config - - // if (backgroundImage) { - // card.setBackgroundImage(backgroundImage) - // } - if (title) { - card.setTitle(title) - } - - if (subTitle) { - card.setSubtitle(subTitle) - } - - if (image) { - card.setImage(image) - } - - if (url) { - card.setUrl(url) - } - - // if (urlLabel) { - // card.setUrlLabel(urlLabel) - // } - - if (Object.keys(data).length) { - card.setData(data) - } - - if (chips.length) { - card.setChips(chips) - } - - // if (choices.length) { - // card.setChoices(choices) - // } - - if (table) { - if (Array.isArray(table) && table.length) { - card.setTable(table) - } else { - // if (Object.entries(table).length) { - // card.setTable(table) - // } - } - } - return card - } - } - - export type Hooks = { - [key: string]: IncomingWebhook - } - - - /** - * - * Middleware "router" for all requests - * @param hooks - * @param config - * @returns - */ - export const SpeedyGuard = ( - hooks: Hooks, - config: SpeedybotConfig - ): any | void => { - // todo: genericize all this junk - return async (request, response, next) => { - const { path } = request // todo: genericize for v8 isolates, fetch, etc - if (path in hooks) { - try { - const ref = hooks[path as keyof typeof hooks] - const { method } = ref - if (method?.toLowerCase() !== request?.method?.toLowerCase() ) { - return response.status(400).send(`Error: Expected method '${method}', got '${request.method}'`) - } - if ('validate' in ref && typeof ref.validate === 'function') { - const { proceed } = await ref.validate(request) - if (proceed) { - const $hookBot = new HookBot({token: config.token}) - return await ref.handler($hookBot, request, response) - } else { - return response.status(400).send('Validation failed') - } - } - const $hookBot = new HookBot({token:config.token}) - ref.handler($hookBot, request) - response.status(200).send(finale()) - } catch(e) { - console.log('(Error): ', e) - response.status(400).send('Internal Service Error') - } - } else { - next() - } - } - } \ No newline at end of file diff --git a/test/card.test.ts b/test/card.test.ts deleted file mode 100644 index c0ca813..0000000 --- a/test/card.test.ts +++ /dev/null @@ -1,103 +0,0 @@ -import test from "ava"; -import {SpeedyCard} from './../src' - - -test("Sanity test", (t) => { - const expected = { - "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", - "type": "AdaptiveCard", - "version": "1.0", - "body": [{ - "type": "TextBlock", - "text": "System is 👍", - "weight": "Bolder", - "size": "Large", - "wrap": true - }] - } - const cardPayload = new SpeedyCard().setTitle('System is 👍') - - - const actual = cardPayload.render() - t.deepEqual(actual, expected); -}); - -test("Kitchen sink", (t) => { - const expected = { - "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", - "type": "AdaptiveCard", - "version": "1.0", - "body": [ - { - "type": "TextBlock", - "text": "System is 👍", - "weight": "Bolder", - "size": "Large", - "wrap": true - }, - { - "type": "TextBlock", - "text": "If you see this card, everything is working", - "size": "Medium", - "isSubtle": true, - "wrap": true, - "weight": "Lighter" - }, - { - "type": "FactSet", - "facts": [ - { - "title": "Bot's Uptime", - "value": "12.492006583s" - } - ] - }, - { - "type": "Image", - "url": "https://i.imgur.com/SW78JRd.jpg", - "horizontalAlignment": "Center", - "size": "Large" - }, - { - "type": "Input.Text", - "placeholder": "What's on your mind?", - "id": "inputData" - } - ], - "actions": [ - { - "type": "Action.Submit", - "title": "Submit", - "data": { - "mySpecialData": { - "a": 1, - "b": 2 - } - } - } - ] - } - const cardPayload = new SpeedyCard().setTitle('System is 👍') - .setSubtitle('If you see this card, everything is working') - .setImage('https://i.imgur.com/SW78JRd.jpg') - .setInput(`What's on your mind?`) - .setTable([["Bot's Uptime", `12.492006583s`]]) - .setData({mySpecialData: { a:1,b:2}}) - - const actual = cardPayload.render() - t.deepEqual(actual, expected); -}); - -test("Date and Time Pickers", (t) => { - const expected = { $schema: 'http://adaptivecards.io/schemas/adaptive-card.json', type: 'AdaptiveCard', version: '1.0', body: [ { type: 'TextBlock', text: 'xxx', weight: 'Bolder', size: 'Large', wrap: true }, { type: 'TextBlock', text: 'Hi subtlte', size: 'Medium', isSubtle: true, wrap: true, weight: 'Lighter' }, { type: 'Input.ChoiceSet', id: 'selectedChoice', value: '0', isMultiSelect: false, isVisible: true, choices: [ { title: 'a', value: 'a' }, { title: 'b', value: 'b' }, { title: 'c', value: 'c' } ] }, { type: 'TextBlock', text: 'Choose yer date', wrap: true }, { id: 'selectedDate', type: 'Input.Date' }, { type: 'TextBlock', text: 'Select a time', wrap: true }, { id: 'selectedTime', type: 'Input.Time' } ], actions: [ { type: 'Action.Submit', title: 'Submit', data: { a: 1 } } ] } - - const myCard = new SpeedyCard().setTitle('xxx') - .setSubtitle('Hi subtlte') - .setData({a:1}) - .setTime('selectedTime') - .setDate('selectedDate', 'Choose yer date') - .setChoices(['a','b','c'], {id: 'selectedChoice'}) - - const actual = myCard.render() - t.deepEqual(actual, expected); -}); diff --git a/test/cards.test.ts b/test/cards.test.ts new file mode 100644 index 0000000..3d472ca --- /dev/null +++ b/test/cards.test.ts @@ -0,0 +1,1541 @@ +import { describe, expect, it } from "vitest"; +import { SpeedyBot } from "./../src/speedybot"; +import { token } from "./common"; +describe("Card Buider", () => { + it("Kitchen Sink", async () => { + const Bot = new SpeedyBot(token); + const card = Bot.card() + .addTitle("huh") + .addSubtitle("Subtitle") + .addText("New one") + .addText("new one!") + .addPickerDropdown(["a", "b", "c", "d"]) + .addMultiSelect(["yay", "nay", "way", "zay"]) + .addPickerTime("My time pick") + .addPickerDate("My date picker", "mySpecialDateKeyhere") + .addMultiSelect(["a", "b", "c", "d"]) + .addTextInput("Hello enter text") + .addTable([ + ["Allen", "Dulles"], + ["William", "Donovan"], + ]) + .setSubmitButtonTitle("yo"); + const cardRender = { + $schema: "http://adaptivecards.io/schemas/adaptive-card.json", + type: "AdaptiveCard", + version: "1.0", + body: [ + { + type: "TextBlock", + text: "huh", + size: "ExtraLarge", + isSubtle: true, + wrap: true, + weight: "Bolder", + }, + { + type: "TextBlock", + text: "Subtitle", + size: "Medium", + isSubtle: true, + wrap: true, + weight: "Lighter", + }, + { + type: "TextBlock", + text: "New one", + wrap: true, + size: "Medium", + horizontalAlignment: "Left", + }, + { + type: "TextBlock", + text: "new one!", + wrap: true, + size: "Medium", + horizontalAlignment: "Left", + }, + { + type: "Input.ChoiceSet", + id: "addPickerDropdown_result", + value: "0", + isMultiSelect: false, + isVisible: true, + choices: [ + { title: "a", value: "a" }, + { title: "b", value: "b" }, + { title: "c", value: "c" }, + { title: "d", value: "d" }, + ], + }, + { + type: "Input.ChoiceSet", + id: "addMultiSelect_result", + value: "0", + isMultiSelect: true, + isVisible: true, + choices: [ + { title: "yay", value: "yay" }, + { title: "nay", value: "nay" }, + { title: "way", value: "way" }, + { title: "zay", value: "zay" }, + ], + style: "expanded", + }, + { + type: "TextBlock", + text: "My time pick", + size: "Medium", + isSubtle: true, + wrap: true, + weight: "Lighter", + }, + { type: "Input.Time", id: "addPickerTime_result" }, + { + type: "TextBlock", + text: "My date picker", + size: "Medium", + isSubtle: true, + wrap: true, + weight: "Lighter", + }, + { type: "Input.Date", id: "mySpecialDateKeyhere" }, + { + type: "Input.ChoiceSet", + id: "addMultiSelect_result_2", + value: "0", + isMultiSelect: true, + isVisible: true, + choices: [ + { title: "a", value: "a" }, + { title: "b", value: "b" }, + { title: "c", value: "c" }, + { title: "d", value: "d" }, + ], + style: "expanded", + }, + { + id: "addTextInput_result", + placeholder: "Hello enter text", + type: "Input.Text", + }, + { + type: "FactSet", + separator: false, + facts: [ + { title: "Allen", value: "Dulles" }, + { title: "William", value: "Donovan" }, + ], + }, + ], + actions: [{ type: "Action.Submit", title: "yo" }], + }; + expect(card.build()).toEqual(cardRender); + }); + + it("Attaches single chip", async () => { + const Bot = new SpeedyBot(token); + const card = Bot.card().addTitle("Chip below").addChip("my_chip"); + + const cardRender = { + $schema: "http://adaptivecards.io/schemas/adaptive-card.json", + type: "AdaptiveCard", + version: "1.0", + body: [ + { + type: "TextBlock", + text: "Chip below", + size: "ExtraLarge", + isSubtle: true, + wrap: true, + weight: "Bolder", + }, + ], + actions: [ + { + type: "Action.Submit", + title: "my_chip", + data: { speedybot_CHIP_CLICK: "my_chip" }, + }, + ], + }; + expect(card.build()).toEqual(cardRender); + }); + + it("Attaches single chip with custom label", async () => { + const Bot = new SpeedyBot(token); + const card = Bot.card() + .addTitle("Chip below") + .addChip({ title: "my label", value: "actual_text" }); + + const cardRender = { + $schema: "http://adaptivecards.io/schemas/adaptive-card.json", + type: "AdaptiveCard", + version: "1.0", + body: [ + { + type: "TextBlock", + text: "Chip below", + size: "ExtraLarge", + isSubtle: true, + wrap: true, + weight: "Bolder", + }, + ], + actions: [ + { + type: "Action.Submit", + title: "my label", + data: { speedybot_CHIP_CLICK: "actual_text" }, + }, + ], + }; + expect(card.build()).toEqual(cardRender); + }); + + it("Attaches multiple chips", async () => { + const Bot = new SpeedyBot(token); + const card = Bot.card() + .addTitle("Chip below") + .addChips(["my chip", "mychip2", "mychip3"]); + + const cardRender = { + $schema: "http://adaptivecards.io/schemas/adaptive-card.json", + type: "AdaptiveCard", + version: "1.0", + body: [ + { + type: "TextBlock", + text: "Chip below", + size: "ExtraLarge", + isSubtle: true, + wrap: true, + weight: "Bolder", + }, + ], + actions: [ + { + type: "Action.Submit", + title: "my chip", + data: { speedybot_CHIP_CLICK: "my chip" }, + }, + { + type: "Action.Submit", + title: "mychip2", + data: { speedybot_CHIP_CLICK: "mychip2" }, + }, + { + type: "Action.Submit", + title: "mychip3", + data: { speedybot_CHIP_CLICK: "mychip3" }, + }, + ], + }; + expect(card.build()).toEqual(cardRender); + }); + + it("Attaches multiple chips w/ custom labels", async () => { + const Bot = new SpeedyBot(token); + const card = Bot.card() + .addTitle("Chip below") + .addChips([ + { value: "my_target", title: "label1" }, + { value: "my_target2", title: "label2" }, + ]); + + const cardRender = { + $schema: "http://adaptivecards.io/schemas/adaptive-card.json", + type: "AdaptiveCard", + version: "1.0", + body: [ + { + type: "TextBlock", + text: "Chip below", + size: "ExtraLarge", + isSubtle: true, + wrap: true, + weight: "Bolder", + }, + ], + actions: [ + { + type: "Action.Submit", + title: "label1", + data: { speedybot_CHIP_CLICK: "my_target" }, + }, + { + type: "Action.Submit", + title: "label2", + data: { speedybot_CHIP_CLICK: "my_target2" }, + }, + ], + }; + expect(card.build()).toEqual(cardRender); + }); + + it("Attaches multiple chips w/ custom labels + one without", async () => { + const Bot = new SpeedyBot(token); + const card = Bot.card() + .addTitle("Chip below") + .addChips([ + { value: "my_target", title: "label1" }, + { value: "my_target2", title: "label2" }, + "label 3", + ]); + + const cardRender = { + $schema: "http://adaptivecards.io/schemas/adaptive-card.json", + type: "AdaptiveCard", + version: "1.0", + body: [ + { + type: "TextBlock", + text: "Chip below", + size: "ExtraLarge", + isSubtle: true, + wrap: true, + weight: "Bolder", + }, + ], + actions: [ + { + type: "Action.Submit", + title: "label1", + data: { speedybot_CHIP_CLICK: "my_target" }, + }, + { + type: "Action.Submit", + title: "label2", + data: { speedybot_CHIP_CLICK: "my_target2" }, + }, + { + type: "Action.Submit", + title: "label 3", + data: { speedybot_CHIP_CLICK: "label 3" }, + }, + ], + }; + expect(card.build()).toEqual(cardRender); + }); + + it("Attaches multiple chips w/ custom labels, one without keyword", async () => { + const Bot = new SpeedyBot(token); + const card = Bot.card() + .addTitle("Chip below") + .addChips([ + { value: "my_target", title: "label1" }, + { title: "label2" }, + "label 3", + ]); + + const cardRender = { + $schema: "http://adaptivecards.io/schemas/adaptive-card.json", + type: "AdaptiveCard", + version: "1.0", + body: [ + { + type: "TextBlock", + text: "Chip below", + size: "ExtraLarge", + isSubtle: true, + wrap: true, + weight: "Bolder", + }, + ], + actions: [ + { + type: "Action.Submit", + title: "label1", + data: { speedybot_CHIP_CLICK: "my_target" }, + }, + { + type: "Action.Submit", + title: "label2", + data: { speedybot_CHIP_CLICK: "label2" }, + }, + { + type: "Action.Submit", + title: "label 3", + data: { speedybot_CHIP_CLICK: "label 3" }, + }, + ], + }; + expect(card.build()).toEqual(cardRender); + }); + + it("Attaches multiple chips w/ subcard", async () => { + const Bot = new SpeedyBot(token); + const card = Bot.card() + .addTitle("Chip below") + .addSubcard(Bot.card().addTitle("Sub-card here")) + .addChips([ + { value: "my_target", title: "label1" }, + { title: "label2" }, + "label 3", + ]); + + const cardRender = { + $schema: "http://adaptivecards.io/schemas/adaptive-card.json", + type: "AdaptiveCard", + version: "1.0", + body: [ + { + type: "TextBlock", + text: "Chip below", + size: "ExtraLarge", + isSubtle: true, + wrap: true, + weight: "Bolder", + }, + ], + actions: [ + { + type: "Action.ShowCard", + title: "", + card: { + $schema: "http://adaptivecards.io/schemas/adaptive-card.json", + type: "AdaptiveCard", + version: "1.0", + body: [ + { + type: "TextBlock", + text: "Sub-card here", + size: "ExtraLarge", + isSubtle: true, + wrap: true, + weight: "Bolder", + }, + ], + }, + }, + { + type: "Action.Submit", + title: "label1", + data: { speedybot_CHIP_CLICK: "my_target" }, + }, + { + type: "Action.Submit", + title: "label2", + data: { speedybot_CHIP_CLICK: "label2" }, + }, + { + type: "Action.Submit", + title: "label 3", + data: { speedybot_CHIP_CLICK: "label 3" }, + }, + ], + }; + expect(card.build()).toEqual(cardRender); + }); + + it("Attaches data", async () => { + const Bot = new SpeedyBot(token); + const card = Bot.card() + .addTitle("Here's some data") + .attachData({ a: 1, b: 2 }); + + const cardRender = { + $schema: "http://adaptivecards.io/schemas/adaptive-card.json", + type: "AdaptiveCard", + version: "1.0", + body: [ + { + type: "TextBlock", + text: "Here's some data", + size: "ExtraLarge", + isSubtle: true, + wrap: true, + weight: "Bolder", + }, + ], + actions: [ + { type: "Action.Submit", title: "Submit", data: { a: 1, b: 2 } }, + ], + }; + expect(card.build()).toEqual(cardRender); + }); + + it("Adds Table data", async () => { + const Bot = new SpeedyBot(token); + const card = Bot.card() + .addTitle("Here's some data") + .attachData({ a: 1, b: 2 }) + .addTable({ a: 1, b: 2, c: 3, d: "abc" }); + + const cardRender = { + $schema: "http://adaptivecards.io/schemas/adaptive-card.json", + type: "AdaptiveCard", + version: "1.0", + body: [ + { + type: "TextBlock", + text: "Here's some data", + size: "ExtraLarge", + isSubtle: true, + wrap: true, + weight: "Bolder", + }, + { + type: "FactSet", + separator: false, + facts: [ + { title: "a", value: 1 }, + { title: "b", value: 2 }, + { title: "c", value: 3 }, + { title: "d", value: "abc" }, + ], + }, + ], + actions: [ + { type: "Action.Submit", title: "Submit", data: { a: 1, b: 2 } }, + ], + }; + + expect(card.build()).toEqual(cardRender); + }); + + it("Adds background image", async () => { + const Bot = new SpeedyBot(token); + const card = Bot.card() + .addTitle("Here's some data") + .attachData({ a: 1, b: 2 }) + .setBackgroundImage( + "https://raw.githubusercontent.com/valgaze/speedybot/deploy/docs/assets/logo.png" + ); + + const cardRender = { + $schema: "http://adaptivecards.io/schemas/adaptive-card.json", + type: "AdaptiveCard", + version: "1.0", + body: [ + { + type: "TextBlock", + text: "Here's some data", + size: "ExtraLarge", + isSubtle: true, + wrap: true, + weight: "Bolder", + }, + ], + backgroundImage: + "https://raw.githubusercontent.com/valgaze/speedybot/deploy/docs/assets/logo.png", + actions: [ + { type: "Action.Submit", title: "Submit", data: { a: 1, b: 2 } }, + ], + }; + + expect(card.build()).toEqual(cardRender); + }); + + it("Adds an image", async () => { + const Bot = new SpeedyBot(token); + const card = Bot.card() + .addTitle("Here's some data") + .attachData({ a: 1, b: 2 }) + .setBackgroundImage( + "https://raw.githubusercontent.com/valgaze/speedybot/deploy/docs/assets/logo.png" + ) + .addTextarea("Placeholder 1234") + .addImage( + "https://raw.githubusercontent.com/valgaze/speedybot/deploy/docs/assets/logo.png" + ); + + const cardRender = { + $schema: "http://adaptivecards.io/schemas/adaptive-card.json", + type: "AdaptiveCard", + version: "1.0", + body: [ + { + type: "TextBlock", + text: "Here's some data", + size: "ExtraLarge", + isSubtle: true, + wrap: true, + weight: "Bolder", + }, + { + id: "addTextarea_result", + placeholder: "Placeholder 1234", + type: "Input.Text", + isMultiline: true, + }, + { + horizontalAlignment: "Center", + size: "ExtraLarge", + type: "Image", + url: "https://raw.githubusercontent.com/valgaze/speedybot/deploy/docs/assets/logo.png", + }, + ], + backgroundImage: + "https://raw.githubusercontent.com/valgaze/speedybot/deploy/docs/assets/logo.png", + actions: [ + { type: "Action.Submit", title: "Submit", data: { a: 1, b: 2 } }, + ], + }; + + expect(card.build()).toEqual(cardRender); + }); + + it("Adds textarea", async () => { + const Bot = new SpeedyBot(token); + const card = Bot.card() + .addTitle("Here's some data") + .attachData({ a: 1, b: 2 }) + .setBackgroundImage( + "https://raw.githubusercontent.com/valgaze/speedybot/deploy/docs/assets/logo.png" + ) + .addTextarea("Placeholder 1234"); + + const cardRender = { + $schema: "http://adaptivecards.io/schemas/adaptive-card.json", + type: "AdaptiveCard", + version: "1.0", + body: [ + { + type: "TextBlock", + text: "Here's some data", + size: "ExtraLarge", + isSubtle: true, + wrap: true, + weight: "Bolder", + }, + { + id: "addTextarea_result", + placeholder: "Placeholder 1234", + type: "Input.Text", + isMultiline: true, + }, + ], + backgroundImage: + "https://raw.githubusercontent.com/valgaze/speedybot/deploy/docs/assets/logo.png", + actions: [ + { type: "Action.Submit", title: "Submit", data: { a: 1, b: 2 } }, + ], + }; + expect(card.build()).toEqual(cardRender); + }); + + it("Adds a link", async () => { + const Bot = new SpeedyBot(token); + const card = Bot.card() + .addTitle("Here's some data") + .attachData({ a: 1, b: 2 }) + .setBackgroundImage( + "https://raw.githubusercontent.com/valgaze/speedybot/deploy/docs/assets/logo.png" + ) + .addTextarea("Placeholder 1234") + .addLink("https://github.com/valgaze/speedybot", "See speedybot"); + + const cardRender = { + $schema: "http://adaptivecards.io/schemas/adaptive-card.json", + type: "AdaptiveCard", + version: "1.0", + body: [ + { + type: "TextBlock", + text: "Here's some data", + size: "ExtraLarge", + isSubtle: true, + wrap: true, + weight: "Bolder", + }, + { + id: "addTextarea_result", + placeholder: "Placeholder 1234", + type: "Input.Text", + isMultiline: true, + }, + { + type: "TextBlock", + text: "**[See speedybot](https://github.com/valgaze/speedybot)**", + wrap: true, + size: "Medium", + horizontalAlignment: "Left", + }, + ], + backgroundImage: + "https://raw.githubusercontent.com/valgaze/speedybot/deploy/docs/assets/logo.png", + actions: [ + { type: "Action.Submit", title: "Submit", data: { a: 1, b: 2 } }, + ], + }; + expect(card.build()).toEqual(cardRender); + }); + + it("Adds a link, no label", async () => { + const Bot = new SpeedyBot(token); + const card = Bot.card() + .addTitle("Here's some data") + .attachData({ a: 1, b: 2 }) + .setBackgroundImage( + "https://raw.githubusercontent.com/valgaze/speedybot/deploy/docs/assets/logo.png" + ) + .addTextarea("Placeholder 1234") + .addLink("https://github.com/valgaze/speedybot"); + + const cardRender = { + $schema: "http://adaptivecards.io/schemas/adaptive-card.json", + type: "AdaptiveCard", + version: "1.0", + body: [ + { + type: "TextBlock", + text: "Here's some data", + size: "ExtraLarge", + isSubtle: true, + wrap: true, + weight: "Bolder", + }, + { + id: "addTextarea_result", + placeholder: "Placeholder 1234", + type: "Input.Text", + isMultiline: true, + }, + { + type: "TextBlock", + text: "**[https://github.com/valgaze/speedybot](https://github.com/valgaze/speedybot)**", + wrap: true, + size: "Medium", + horizontalAlignment: "Left", + }, + ], + backgroundImage: + "https://raw.githubusercontent.com/valgaze/speedybot/deploy/docs/assets/logo.png", + actions: [ + { type: "Action.Submit", title: "Submit", data: { a: 1, b: 2 } }, + ], + }; + expect(card.build()).toEqual(cardRender); + }); + + it("Adds a subcard (using SpeedyCard)", async () => { + const Bot = new SpeedyBot(token); + const card = Bot.card() + .addTitle("Here's some data") + .attachData({ a: 1, b: 2 }) + .setBackgroundImage( + "https://raw.githubusercontent.com/valgaze/speedybot/deploy/docs/assets/logo.png" + ) + .addTextarea("Placeholder 1234") + .addImage( + "https://raw.githubusercontent.com/valgaze/speedybot/deploy/docs/assets/logo.png" + ) + .addSubcard(Bot.card().addTitle("My title")); + + const cardRender = { + $schema: "http://adaptivecards.io/schemas/adaptive-card.json", + type: "AdaptiveCard", + version: "1.0", + body: [ + { + type: "TextBlock", + text: "Here's some data", + size: "ExtraLarge", + isSubtle: true, + wrap: true, + weight: "Bolder", + }, + { + id: "addTextarea_result", + placeholder: "Placeholder 1234", + type: "Input.Text", + isMultiline: true, + }, + { + horizontalAlignment: "Center", + size: "ExtraLarge", + type: "Image", + url: "https://raw.githubusercontent.com/valgaze/speedybot/deploy/docs/assets/logo.png", + }, + ], + backgroundImage: + "https://raw.githubusercontent.com/valgaze/speedybot/deploy/docs/assets/logo.png", + actions: [ + { + type: "Action.ShowCard", + title: "", + card: { + $schema: "http://adaptivecards.io/schemas/adaptive-card.json", + type: "AdaptiveCard", + version: "1.0", + body: [ + { + type: "TextBlock", + text: "My title", + size: "ExtraLarge", + isSubtle: true, + wrap: true, + weight: "Bolder", + }, + ], + }, + }, + { type: "Action.Submit", title: "Submit", data: { a: 1, b: 2 } }, + ], + }; + expect(card.build()).toEqual(cardRender); + }); + + it("Adds a subcard (using raw card json)", async () => { + const Bot = new SpeedyBot(token); + const card = Bot.card() + .addTitle("Here's some data") + .attachData({ a: 1, b: 2 }) + .setBackgroundImage( + "https://raw.githubusercontent.com/valgaze/speedybot/deploy/docs/assets/logo.png" + ) + .addTextarea("Placeholder 1234") + .addImage( + "https://raw.githubusercontent.com/valgaze/speedybot/deploy/docs/assets/logo.png" + ) + .addSubcard({ + type: "AdaptiveCard", + body: [ + { + type: "ColumnSet", + columns: [ + { + type: "Column", + items: [ + { + type: "Image", + style: "Person", + url: "https://developer.webex.com/images/webex-logo-icon-non-contained.svg", + size: "Medium", + height: "50px", + }, + ], + width: "auto", + }, + { + type: "Column", + items: [ + { + type: "TextBlock", + text: "Webex App", + weight: "Lighter", + color: "Accent", + }, + { + type: "TextBlock", + weight: "Bolder", + text: "Buttons and Cards Release", + horizontalAlignment: "Left", + wrap: true, + color: "Light", + size: "Large", + spacing: "Small", + }, + ], + width: "stretch", + }, + ], + }, + { + type: "ColumnSet", + columns: [ + { + type: "Column", + width: 35, + items: [ + { + type: "TextBlock", + text: "Release Date:", + color: "Light", + }, + { + type: "TextBlock", + text: "Product:", + weight: "Lighter", + color: "Light", + spacing: "Small", + }, + { + type: "TextBlock", + text: "OS:", + weight: "Lighter", + color: "Light", + spacing: "Small", + }, + ], + }, + { + type: "Column", + width: 65, + items: [ + { + type: "TextBlock", + text: "Aug 6, 2019", + color: "Light", + }, + { + type: "TextBlock", + text: "Webex Teams", + color: "Light", + weight: "Lighter", + spacing: "Small", + }, + { + type: "TextBlock", + text: "Mac, Windows, Web", + weight: "Lighter", + color: "Light", + spacing: "Small", + }, + ], + }, + ], + spacing: "Padding", + horizontalAlignment: "Center", + }, + { + type: "TextBlock", + text: "We're making it easier for you to interact with bots and integrations in Webex Teams. When your bot sends information in a space that includes a card with buttons, you can now easily interact with it.", + wrap: true, + }, + { + type: "TextBlock", + text: "Buttons and Cards Resources:", + }, + { + type: "ColumnSet", + columns: [ + { + type: "Column", + width: "auto", + items: [ + { + type: "Image", + altText: "", + url: "https://developer.webex.com/images/link-icon.png", + size: "Small", + width: "30px", + }, + ], + spacing: "Small", + }, + { + type: "Column", + width: "auto", + items: [ + { + type: "TextBlock", + text: "[Developer Portal Buttons and Cards Guide]()", + horizontalAlignment: "Left", + size: "Medium", + }, + ], + verticalContentAlignment: "Center", + horizontalAlignment: "Left", + spacing: "Small", + }, + ], + }, + { + type: "ActionSet", + actions: [ + { + type: "Action.Submit", + title: "Subscribe to Release Notes", + data: { + subscribe: true, + }, + }, + ], + horizontalAlignment: "Left", + spacing: "None", + }, + ], + $schema: "http://adaptivecards.io/schemas/adaptive-card.json", + version: "1.3", + }); + + const cardRender = { + $schema: "http://adaptivecards.io/schemas/adaptive-card.json", + type: "AdaptiveCard", + version: "1.0", + body: [ + { + type: "TextBlock", + text: "Here's some data", + size: "ExtraLarge", + isSubtle: true, + wrap: true, + weight: "Bolder", + }, + { + id: "addTextarea_result", + placeholder: "Placeholder 1234", + type: "Input.Text", + isMultiline: true, + }, + { + horizontalAlignment: "Center", + size: "ExtraLarge", + type: "Image", + url: "https://raw.githubusercontent.com/valgaze/speedybot/deploy/docs/assets/logo.png", + }, + ], + backgroundImage: + "https://raw.githubusercontent.com/valgaze/speedybot/deploy/docs/assets/logo.png", + actions: [ + { + type: "Action.ShowCard", + title: "", + card: { + type: "AdaptiveCard", + body: [ + { + type: "ColumnSet", + columns: [ + { + type: "Column", + items: [ + { + type: "Image", + style: "Person", + url: "https://developer.webex.com/images/webex-logo-icon-non-contained.svg", + size: "Medium", + height: "50px", + }, + ], + width: "auto", + }, + { + type: "Column", + items: [ + { + type: "TextBlock", + text: "Webex App", + weight: "Lighter", + color: "Accent", + }, + { + type: "TextBlock", + weight: "Bolder", + text: "Buttons and Cards Release", + horizontalAlignment: "Left", + wrap: true, + color: "Light", + size: "Large", + spacing: "Small", + }, + ], + width: "stretch", + }, + ], + }, + { + type: "ColumnSet", + columns: [ + { + type: "Column", + width: 35, + items: [ + { + type: "TextBlock", + text: "Release Date:", + color: "Light", + }, + { + type: "TextBlock", + text: "Product:", + weight: "Lighter", + color: "Light", + spacing: "Small", + }, + { + type: "TextBlock", + text: "OS:", + weight: "Lighter", + color: "Light", + spacing: "Small", + }, + ], + }, + { + type: "Column", + width: 65, + items: [ + { + type: "TextBlock", + text: "Aug 6, 2019", + color: "Light", + }, + { + type: "TextBlock", + text: "Webex Teams", + color: "Light", + weight: "Lighter", + spacing: "Small", + }, + { + type: "TextBlock", + text: "Mac, Windows, Web", + weight: "Lighter", + color: "Light", + spacing: "Small", + }, + ], + }, + ], + spacing: "Padding", + horizontalAlignment: "Center", + }, + { + type: "TextBlock", + text: "We're making it easier for you to interact with bots and integrations in Webex Teams. When your bot sends information in a space that includes a card with buttons, you can now easily interact with it.", + wrap: true, + }, + { type: "TextBlock", text: "Buttons and Cards Resources:" }, + { + type: "ColumnSet", + columns: [ + { + type: "Column", + width: "auto", + items: [ + { + type: "Image", + altText: "", + url: "https://developer.webex.com/images/link-icon.png", + size: "Small", + width: "30px", + }, + ], + spacing: "Small", + }, + { + type: "Column", + width: "auto", + items: [ + { + type: "TextBlock", + text: "[Developer Portal Buttons and Cards Guide]()", + horizontalAlignment: "Left", + size: "Medium", + }, + ], + verticalContentAlignment: "Center", + horizontalAlignment: "Left", + spacing: "Small", + }, + ], + }, + { + type: "ActionSet", + actions: [ + { + type: "Action.Submit", + title: "Subscribe to Release Notes", + data: { subscribe: true }, + }, + ], + horizontalAlignment: "Left", + spacing: "None", + }, + ], + $schema: "http://adaptivecards.io/schemas/adaptive-card.json", + version: "1.3", + }, + }, + { type: "Action.Submit", title: "Submit", data: { a: 1, b: 2 } }, + ], + }; + expect(card.build()).toEqual(cardRender); + }); + + it("Add various colors to text", () => { + const Bot = new SpeedyBot(token); + const card = Bot.card() + .addText("Accent", { size: "ExtraLarge", color: "Accent" }) + .addText("Attention", { size: "ExtraLarge", color: "Attention" }) + .addText("Dark", { size: "ExtraLarge", color: "Dark" }) + .addText("Default", { size: "ExtraLarge", color: "Default" }) + .addText("Good", { size: "ExtraLarge", color: "Good" }) + .addText("Light", { size: "ExtraLarge", color: "Light" }) + .addText("Warning", { size: "ExtraLarge", color: "Warning" }) + .build(); + + const renderedCard = { + $schema: "http://adaptivecards.io/schemas/adaptive-card.json", + type: "AdaptiveCard", + version: "1.0", + body: [ + { + type: "TextBlock", + text: "Accent", + wrap: true, + color: "Accent", + size: "ExtraLarge", + horizontalAlignment: "Left", + }, + { + type: "TextBlock", + text: "Attention", + wrap: true, + color: "Attention", + size: "ExtraLarge", + horizontalAlignment: "Left", + }, + { + type: "TextBlock", + text: "Dark", + wrap: true, + color: "Dark", + size: "ExtraLarge", + horizontalAlignment: "Left", + }, + { + type: "TextBlock", + text: "Default", + wrap: true, + color: "Default", + size: "ExtraLarge", + horizontalAlignment: "Left", + }, + { + type: "TextBlock", + text: "Good", + wrap: true, + color: "Good", + size: "ExtraLarge", + horizontalAlignment: "Left", + }, + { + type: "TextBlock", + text: "Light", + wrap: true, + color: "Light", + size: "ExtraLarge", + horizontalAlignment: "Left", + }, + { + type: "TextBlock", + text: "Warning", + wrap: true, + color: "Warning", + size: "ExtraLarge", + horizontalAlignment: "Left", + }, + ], + }; + expect(card).toEqual(renderedCard); + }); + + it("renders a stashcard", () => { + const Bot = new SpeedyBot(token); + const card = Bot.stashCard( + "mySecret", + "here is a message", + "🎁 Unwrap", + "🔥 Destroy" + ).build(); + const renderedCard = { + $schema: "http://adaptivecards.io/schemas/adaptive-card.json", + type: "AdaptiveCard", + version: "1.0", + body: [ + { + type: "TextBlock", + text: "here is a message", + size: "ExtraLarge", + isSubtle: true, + wrap: true, + weight: "Bolder", + }, + ], + actions: [ + { + type: "Action.Submit", + title: "🔥 Destroy", + data: { _private_speedybot_: "delete" }, + }, + { + type: "Action.ShowCard", + title: "🎁 Unwrap", + card: { + $schema: "http://adaptivecards.io/schemas/adaptive-card.json", + type: "AdaptiveCard", + version: "1.0", + body: [ + { + type: "TextBlock", + text: "mySecret", + size: "Medium", + isSubtle: true, + wrap: true, + weight: "Lighter", + }, + ], + }, + }, + ], + }; + expect(card).toEqual(renderedCard); + }); + + it("renders a complex card with blocks", () => { + const Bot = new SpeedyBot(token); + const card = Bot.card() + .addTitle("LA Snack Attack Adventure!") + .addSubtitle("Where 🌴 Palm Trees meet 🥨Pretzels!") + .addText( + "Venues, vistas & victuals – Los Angeles has 'em all! Pick some choices and we'll plan a trip" + ) + .addText("Your LA Territory", { + size: "Medium", + color: "Accent", + align: "Center", + }) + .addText( + "Steer through the steep streets of Silver Lake, amble in the alleys of Echo Park or cycle along the river in Frogtown-", + { + size: "Small", + color: "Dark", + align: "Left", + } + ) + .addPickerDropdown([ + "Pacific Palisades", + "Santa Monica", + "Venice", + "Marina del Rey", + "Playa del Rey", + "Beverly Hills", + "West Hollywood", + "Hollywood", + "Silver Lake", + "Echo Park", + "Arts District", + "Downtown LA", + "Griffith Park", + ]) + .addText("Architectural Aesthetics", { + size: "Medium", + color: "Attention", + align: "Left", + }) + .addSingleSelect([ + "Mid-Century Modern", + "Art Deco", + "Contemporary Masterpieces", + "Historical Landmarks", + ]) + .addBlock( + Bot.card().addText("Snack Attack", { + size: "Medium", + color: "Accent", + align: "Center", + }), + { backgroundColor: "Warning" } + ) + .addText("Let's grab some grub!", { + size: "Medium", + color: "Good", + align: "Right", + }) + .addMultiSelect([ + "Republique - A Classic Lunch", + "Guisados - Tacos for the Soul", + "The Getty Center - Café, with a view!", + "Sqirl - The Brunch Bunch", + "Boba Guys - Best-In-Town Matcha", + "Churro Borough - LA’s Signature Sweet", + ]) + + .addBlock( + Bot.card() + .addText("La-La Land Discovery!", { + size: "Medium", + color: "Good", + align: "Center", + }) + .addText( + "It's a big city with a lot of people and a lot of fun, come visit", + { + size: "Small", + color: "Dark", + align: "Left", + } + ), + { backgroundColor: "Accent" } + ); + const renderedCard = { + $schema: "http://adaptivecards.io/schemas/adaptive-card.json", + type: "AdaptiveCard", + version: "1.0", + body: [ + { + type: "TextBlock", + text: "LA Snack Attack Adventure!", + size: "ExtraLarge", + isSubtle: true, + wrap: true, + weight: "Bolder", + }, + { + type: "TextBlock", + text: "Where 🌴 Palm Trees meet 🥨Pretzels!", + size: "Medium", + isSubtle: true, + wrap: true, + weight: "Lighter", + }, + { + type: "TextBlock", + text: "Venues, vistas & victuals – Los Angeles has 'em all! Pick some choices and we'll plan a trip", + wrap: true, + size: "Medium", + horizontalAlignment: "Left", + }, + { + type: "TextBlock", + text: "Your LA Territory", + wrap: true, + size: "Medium", + horizontalAlignment: "Center", + color: "Accent", + }, + { + type: "TextBlock", + text: "Steer through the steep streets of Silver Lake, amble in the alleys of Echo Park or cycle along the river in Frogtown-", + wrap: true, + size: "Small", + horizontalAlignment: "Left", + color: "Dark", + }, + { + type: "Input.ChoiceSet", + id: "addPickerDropdown_result", + value: "0", + isMultiSelect: false, + isVisible: true, + choices: [ + { title: "Pacific Palisades", value: "Pacific Palisades" }, + { title: "Santa Monica", value: "Santa Monica" }, + { title: "Venice", value: "Venice" }, + { title: "Marina del Rey", value: "Marina del Rey" }, + { title: "Playa del Rey", value: "Playa del Rey" }, + { title: "Beverly Hills", value: "Beverly Hills" }, + { title: "West Hollywood", value: "West Hollywood" }, + { title: "Hollywood", value: "Hollywood" }, + { title: "Silver Lake", value: "Silver Lake" }, + { title: "Echo Park", value: "Echo Park" }, + { title: "Arts District", value: "Arts District" }, + { title: "Downtown LA", value: "Downtown LA" }, + { title: "Griffith Park", value: "Griffith Park" }, + ], + }, + { + type: "TextBlock", + text: "Architectural Aesthetics", + wrap: true, + size: "Medium", + horizontalAlignment: "Left", + color: "Attention", + }, + { + type: "Input.ChoiceSet", + id: "addSingleSelectresult", + value: "0", + isMultiSelect: false, + isVisible: true, + style: "expanded", + choices: [ + { title: "Mid-Century Modern", value: "Mid-Century Modern" }, + { title: "Art Deco", value: "Art Deco" }, + { + title: "Contemporary Masterpieces", + value: "Contemporary Masterpieces", + }, + { title: "Historical Landmarks", value: "Historical Landmarks" }, + ], + }, + { + type: "Container", + height: "stretch", + items: [ + { + type: "TextBlock", + text: "Snack Attack", + wrap: true, + size: "Medium", + horizontalAlignment: "Center", + color: "Accent", + }, + ], + style: "Warning", + }, + { + type: "TextBlock", + text: "Let's grab some grub!", + wrap: true, + size: "Medium", + horizontalAlignment: "Right", + color: "Good", + }, + { + type: "Input.ChoiceSet", + id: "addMultiSelect_result", + value: "0", + isMultiSelect: true, + isVisible: true, + choices: [ + { + title: "Republique - A Classic Lunch", + value: "Republique - A Classic Lunch", + }, + { + title: "Guisados - Tacos for the Soul", + value: "Guisados - Tacos for the Soul", + }, + { + title: "The Getty Center - Café, with a view!", + value: "The Getty Center - Café, with a view!", + }, + { + title: "Sqirl - The Brunch Bunch", + value: "Sqirl - The Brunch Bunch", + }, + { + title: "Boba Guys - Best-In-Town Matcha", + value: "Boba Guys - Best-In-Town Matcha", + }, + { + title: "Churro Borough - LA’s Signature Sweet", + value: "Churro Borough - LA’s Signature Sweet", + }, + ], + style: "expanded", + }, + { + type: "Container", + height: "stretch", + items: [ + { + type: "TextBlock", + text: "La-La Land Discovery!", + wrap: true, + size: "Medium", + horizontalAlignment: "Center", + color: "Good", + }, + { + type: "TextBlock", + text: "It's a big city with a lot of people and a lot of fun, come visit", + wrap: true, + size: "Small", + horizontalAlignment: "Left", + color: "Dark", + }, + ], + style: "Accent", + }, + ], + actions: [{ type: "Action.Submit", title: "Submit" }], + }; + expect(card.build()).toEqual(renderedCard); + }); +}); diff --git a/test/common.ts b/test/common.ts new file mode 100644 index 0000000..aef04d5 --- /dev/null +++ b/test/common.ts @@ -0,0 +1,318 @@ +export const token = + "2kD2rqamZqbmphaulqYrV5amVqu9WOq11Re6bWR9YiW5N9ybFkPnkaeRl5O7mRfIncSe6jaFNsKf6UJEoOZS6lnFJDOU25R3mrrq5uo"; +import { RequestOps } from "../src/types"; + +// mock data + +export const getData = async (url: string, method) => { + const hash = { + "https://webexapis.com/v1/messages": BotData, + "https://webexapis.com/v1/messages/": BotData, + "https://webexapis.com/v1/attachment/actions:": BotData, + "https://webexapis.com/v1/people/me": BotData, + "https://webexapis.com/v1/people": BotData, // add id + "https://webexapis.com/v1/rooms": BotData, + "https://webexapis.com/v1/rooms/": BotData, // get details of specific room + "https://webexapis.com/v1/webhooks": BotData, + }; + Object.keys(hash).forEach((key) => { + if (url.includes(key)) { + // [x] https://webexapis.com/v1/rooms/1234, GET + // [x] https://webexapis.com/v1/people/1234, + // https://webexapis.com/v1/messages/1234 + } + }); + return hash; +}; +export const createMockRequest = () => { + const requestDetails = { + method: "", + url: "", + body: {} as any, + token: "", + history: [] as string[], + rawInit: { + body: new FormData(), + headers: {}, + }, + }; + + const makeRequestMock = async ( + url: string, + body: unknown, + opts: RequestOps + ) => { + // todo: make pretty w/ handlers and more elegant + const isMsg = url.includes(`https://webexapis.com/v1/messages`); // + const isAA = url.includes(`https://webexapis.com/v1/attachment/actions`); // + const isPeopleData = url.includes(`https://webexapis.com/v1/people`); // + const isMeData = url.includes(`https://webexapis.com/v1/people/me`); // tough + const isRoom = url.includes(`https://webexapis.com/v1/rooms`); // + const isWebhook = url.includes(`https://webexapis.com/v1/webhooks`); + + let method = opts.method?.toLowerCase() ?? "get"; + let TheData: any = { + url, + body, + items: [{ type: "", title: "_", id: "_" }], + }; + if (isMsg) { + if (method === "put") { + TheData = message_details; + } + if (method === "get") { + TheData = message_details; + } + if (method === "post") { + TheData = MsgRes; + } + if (method === "delete") { + TheData = {}; + } + } + + if (isAA) { + TheData = aa_details; + } + + if (isPeopleData) { + TheData = PeopleData; + } + + if (isMeData) { + TheData = BotData; // should be a bot? + } + + if (isRoom) { + TheData = { + items: [ + { + type: "direct", + title: "The room", + id: "the room id", + }, + ], + }; + } + + if (isWebhook) { + if (method === "post") { + TheData = webhookRes; + } + + if (method === "get") { + TheData = { items: [webhookRes] }; + } + + if (method === "delete") { + TheData = {}; + } + } + requestDetails.method = opts.method || "POST"; + requestDetails.token = opts.token; + requestDetails.url = url; + requestDetails.body = body; + requestDetails.history.push(url); + requestDetails.rawInit = opts.rawInit; + // const $default = { url, body, items: [{ type: "", title: "_", id: "_" }] }; + + return { + json() { + return { + ...TheData, + // ...$default, + }; + }, + }; + }; + + return { makeRequestMock, requestDetails }; +}; + +// Helper types/placeholder +import { MessageEnvelope, Message_Details } from "../src/types"; + +export const MsgRes = { + id: "idPlaceholder1234", + roomId: "roomId_placeholder", + roomType: "direct", + text: "sample message", + markdown: "sample message", + personId: "personIdPlacheholder", + personEmail: "joe@joe.com", + created: "1997-0219T23:37:26.474Z", +}; + +export const aa_envelope = { + id: "idPlaceholder1234", + name: "1997-0219T23:37:26.396Z_attachmentActions", + targetUrl: "https://speedybot-hub.valgaze.workers.dev", + resource: "attachmentActions", + event: "created", + orgId: "orgId_placeholder", + createdBy: "createdBy_placeholder", + appId: "appId_placeholder", + ownedBy: "creator", + status: "active", + created: "1997-0219T23:37:26.474Z", + actorId: "personId_placeholder", + data: { + id: "aaId_placeholder", + type: "submit", + messageId: "messageIdAA_placeholder", + personId: "personId_placeholder", + roomId: "roomId_placeholder", + created: "2022-10-17T05:08:21.128Z", + }, +}; + +export const aa_details = { + id: "aaId_placeholder", + type: "submit", + messageId: "messageIdAA_placeholder", + inputs: { + chip_action: "ping", + }, + personId: "personId_placeholder", + roomId: "roomId_placeholder", + created: "2022-10-17T05:08:21.128Z", +}; + +export const file_envelope = { + id: "file_idPlaceholder1234", + name: "1997-0219T23:37:26.396Z_firehose", + targetUrl: "https://speedybot-hub.valgaze.workers.dev", + resource: "messages", + event: "created", + orgId: "orgId_placeholder", + createdBy: "createdBy_placeholder", + appId: "appId_placeholder", + ownedBy: "creator", + status: "active", + created: "1997-0219T23:37:26.468Z", + actorId: "personId_placeholder", + data: { + id: "fileId_placeholder", + roomId: "roomId_placeholder", + roomType: "direct", + files: ["https://webexapis.com/v1/contents/fileId_placeholder"], + personId: "personId_placeholder", + personEmail: "person@organization.com", + created: "2022-10-17T05:07:39.115Z", + isVoiceClip: false, + }, +}; + +export const file_details = { + id: "fileId_placeholder", + roomId: "roomId_placeholder", + roomType: "direct", + text: "aaa", + files: ["https://webexapis.com/v1/contents/fileId_placeholder"], + personId: "personId_placeholder", + personEmail: "person@organization.com", + created: "2022-10-17T05:07:39.115Z", + isVoiceClip: false, +}; + +export const message_envelope = { + id: "Y2lzY29zcGFyazovL3VybjpURUFNOnVzLXdlc3QtMl9yL1dFQkhPT0svYWI1YTljNGEtMGE2My00OGIyLThhN2QtNDc4YzY3MzY4Yzcx", + name: "1997-0219T23:37:26.396Z_firehose", + targetUrl: "https://speedybot-hub.valgaze.workers.dev", + resource: "messages", + event: "created", + orgId: "orgId_placeholder", + createdBy: "createdBy_placeholder", + appId: "appId_placeholder", + ownedBy: "creator", + status: "active", + created: "1997-0219T23:37:26.468Z", + actorId: "personId_placeholder", + data: { + id: "messagePayloadId_placeholder", + roomId: "roomId_placeholder", + roomType: "direct", + personId: "personId_placeholder", + personEmail: "person@organization.com", + created: "2022-10-17T05:23:03.900Z", + }, +}; + +export const message_details = { + id: "messagePayloadId_placeholder", + roomId: "roomId_placeholder", + roomType: "direct", + text: "ping", + personId: "personId_placeholder", + personEmail: "person@organization.com", + created: "2022-10-17T05:23:03.900Z", +}; + +export const BotData = { + id: "idPlaceholder", + emails: ["speedybot@webex.bot"], + phoneNumbers: [], + displayName: "speedybot", + nickName: "speedybot", + userName: "speedybot", + avatar: "https://avatar-prod-us-east-2.webexcontent.com/aaabbbccc", + orgId: "orgIdPlaceholder", + created: "1997-07-17T00:25:21.532Z", + status: "unknown", + type: "bot", +}; + +export const PeopleData = { + id: "idPlaceholder", + emails: ["person@person.bot"], + phoneNumbers: [], + displayName: "thePerson", + nickName: "thePerson", + userName: "thePerson", + avatar: "https://avatar-prod-us-east-2.webexcontent.com/aaabbbccc", + orgId: "orgIdPlaceholder", + created: "1997-07-17T00:25:21.532Z", + status: "unknown", + type: "person", +}; + +export const RoomDeets = { + id: "idPlacdeholder13456", + title: "Room Title", + type: "direct", + isLocked: false, + lastActivity: "1997-07-17T00:25:21.532Z", + creatorId: "creatorId1234", + created: "1996-07-17T00:25:21.532Z", + ownerId: "ownerIdPlaceholder1345", + isPublic: false, + isReadOnly: false, +}; + +export const webhookRes = { + id: "idPlaceholder", + name: "Anonymized_Firehose", + targetUrl: "https://fake-url.example", + resource: "messages", + event: "created", + orgId: "orgPlaceholder", + createdBy: "creatorPlaceholder", + appId: "appPlaceholder", + ownedBy: "anonymized", + status: "active", + created: "1998-10-30T00:00:00.000Z", +}; + +export const APIMapper = (url, method: "GET" | "POST") => { + const map = { "https://webexapis.com/v1/people/me": BotData }; + return map[url]; +}; + +export const makeMessage = ( + text: string +): { envelope: MessageEnvelope; details: Message_Details } => { + return { + envelope: message_envelope as MessageEnvelope, + details: { ...message_details, text }, + }; +}; diff --git a/test/csv_sample.csv b/test/csv_sample.csv deleted file mode 100644 index 2009ee6..0000000 --- a/test/csv_sample.csv +++ /dev/null @@ -1,2 +0,0 @@ -a,1 -b,2 \ No newline at end of file diff --git a/test/files.test.ts b/test/files.test.ts index 5ca4bd6..73a85c9 100644 --- a/test/files.test.ts +++ b/test/files.test.ts @@ -1,47 +1,16 @@ -import test from "ava"; -// import { resolve } from 'fs' -import { $, placeholder} from './../src' +import { describe, expect, it } from "vitest"; +import { SpeedyBot } from "../src/speedybot"; +import { createMockRequest, token } from "./common"; -const fakeBot = {framework: { - options: { - token: placeholder - } -}} -const inst = $(fakeBot) - -test("$uperpower, handleExt helper passes through full filename", (t) => { - const sample = 'a.json' - const actual = inst.handleExt(sample) - t.deepEqual(actual, sample); -}); - -test("$uperpower, handleExt helper generates a file name when given just an extension", (t) => { - const sample = '.json' - const actual = inst.handleExt('a.json') - const result = actual.includes(sample) && actual.length > sample.length - - t.deepEqual(result, true); -}); - -test("$uperpower, handleExt helper generates a file name when given just an extension without a dot", (t) => { - const sample = '.json' - const actual = inst.handleExt('.json') - console.log("#", actual) - const result = actual.includes(sample) && actual.length > sample.length - - t.deepEqual(result, true); +describe("Various Messages", () => { + it("Sends a json as a file to an email", async () => { + const { makeRequestMock, requestDetails } = createMockRequest(); + const inst = new SpeedyBot(token, makeRequestMock); + await inst.sendFileTo("joe@joe.com", { a: 1, b: 2, c: 3 }, "json"); + expect(requestDetails.url).toBe("https://webexapis.com/v1/messages"); + expect(requestDetails.method).toEqual("POST"); + expect(requestDetails.rawInit.body.get("toPersonEmail")).toEqual( + "joe@joe.com" + ); + }); }); - - -test("$uperpower, random name will generate distinct names", (t) => { - const sample = inst.generateFileName() - const sample2 = inst.generateFileName() - t.notDeepEqual(sample, sample2) -}); - -test("$uperpower context: name ops are inverses of each other", (t) => { - const key = 'my_key' - const sample = inst.genContextName(key) - const sample2 = inst.degenContextName(sample) - t.deepEqual(key, sample2) -}); \ No newline at end of file diff --git a/test/messages.test.ts b/test/messages.test.ts new file mode 100644 index 0000000..8798557 --- /dev/null +++ b/test/messages.test.ts @@ -0,0 +1,80 @@ +import { describe, expect, it } from "vitest"; +import { SpeedyBot } from "../src/speedybot"; +import { createMockRequest, token } from "./common"; + +describe("Various Messages", () => { + it("Sends a message to a roomId", async () => { + const { makeRequestMock, requestDetails } = createMockRequest(); + const inst = new SpeedyBot(token, makeRequestMock); + await inst.sendTo("roomId", "message message"); + expect(requestDetails.url).toBe("https://webexapis.com/v1/messages"); + expect(requestDetails.body).toEqual({ + markdown: "message message", + roomId: "roomId", + }); + expect(requestDetails.method).toEqual("POST"); + }); + + it("Sends a message to an email", async () => { + const { makeRequestMock, requestDetails } = createMockRequest(); + const inst = new SpeedyBot(token, makeRequestMock); + await inst.sendTo("joe@joe.com", "message message"); + expect(requestDetails.url).toBe("https://webexapis.com/v1/messages"); + expect(requestDetails.body).toEqual({ + markdown: "message message", + toPersonEmail: "joe@joe.com", + }); + expect(requestDetails.method).toEqual("POST"); + }); + + it("Sends a message when provided a personId", async () => { + const { makeRequestMock, requestDetails } = createMockRequest(); + const inst = new SpeedyBot(token, makeRequestMock); + await inst.sendTo({ personId: "aaabbbccc" }, "message message"); + expect(requestDetails.url).toBe("https://webexapis.com/v1/messages"); + expect(requestDetails.body).toEqual({ + markdown: "message message", + toPersonId: "aaabbbccc", + }); + expect(requestDetails.method).toEqual("POST"); + }); + + it("Edits a message", async () => { + const { makeRequestMock, requestDetails } = createMockRequest(); + const inst = new SpeedyBot(token, makeRequestMock); + await inst.editMessage("roomId", "mesageId", "message"); + expect(requestDetails.url).toBe( + "https://webexapis.com/v1/messages/mesageId" + ); + expect(requestDetails.body).toEqual({ + markdown: "message", + roomId: "roomId", + }); + expect(requestDetails.method).toEqual("PUT"); + }); + + it("Replies to a message", async () => { + const { makeRequestMock, requestDetails } = createMockRequest(); + const inst = new SpeedyBot(token, makeRequestMock); + await inst.replyTo("roomId", "mesageId", "message"); + expect(requestDetails.url).toBe("https://webexapis.com/v1/messages"); + expect(requestDetails.body).toEqual({ + text: "message", + markdown: "message", + parentId: "mesageId", + roomId: "roomId", + }); + expect(requestDetails.method).toEqual("POST"); + }); + + it("Deletes a message", async () => { + const { makeRequestMock, requestDetails } = createMockRequest(); + const inst = new SpeedyBot(token, makeRequestMock); + await inst.deleteMessage("mesageId"); + expect(requestDetails.url).toBe( + "https://webexapis.com/v1/messages/mesageId" + ); + expect(requestDetails.body).toEqual({}); + expect(requestDetails.method).toEqual("DELETE"); + }); +}); diff --git a/test/middleware.test.ts b/test/middleware.test.ts new file mode 100644 index 0000000..0acdb84 --- /dev/null +++ b/test/middleware.test.ts @@ -0,0 +1,19 @@ +import { describe, expect, it } from "vitest"; +import { SpeedyBot } from "../src/speedybot"; +import { createMockRequest, token, message_envelope } from "./common"; +import { ENVELOPES } from "../src"; + +describe("Various Messages", () => { + it("Handles an incoming message", async () => { + const { makeRequestMock, requestDetails } = createMockRequest(); + const inst = new SpeedyBot(token, makeRequestMock); + + // text passes through + inst.addStep(async ($) => { + console.log("beer"); + expect($.text).toBe("beer"); + return $.next; + }); + await inst.runMiddleware(message_envelope as ENVELOPES); + }); +}); diff --git a/test/sanity.test.ts b/test/sanity.test.ts deleted file mode 100644 index 9c3dde6..0000000 --- a/test/sanity.test.ts +++ /dev/null @@ -1,10 +0,0 @@ -import test from 'ava'; - -test('foo', t => { - t.pass(); -}); - -test('bar', async t => { - const bar = Promise.resolve('bar'); - t.is(await bar, 'bar'); -}); diff --git a/test/speedycard.test.ts b/test/speedycard.test.ts deleted file mode 100644 index 646df81..0000000 --- a/test/speedycard.test.ts +++ /dev/null @@ -1,14 +0,0 @@ -import test from "ava"; -import { SpeedyCard } from './../src' - - -test("Kitchen sink SpeedyCard", (t) => { - const expected = { $schema: 'http://adaptivecards.io/schemas/adaptive-card.json', type: 'AdaptiveCard', version: '1.0', body: [ { type: 'TextBlock', text: 'Do you want a snack', weight: 'Bolder', size: 'Large', wrap: true }, { type: 'Input.Text', placeholder: 'I am a placeholder', id: 'inputData' } ], actions: [ { type: 'Action.Submit', title: 'no', data: { chip_action: 'no' } }, { type: 'Action.Submit', title: 'Sure', data: { chip_action: 'yes' } }, { type: 'Action.Submit', title: 'Submit', data: {} } ] } - const actual = new SpeedyCard().setTitle('Do you want a snack') - .setChips(['no', { keyword: 'yes', label: 'Sure'}]) - .setInput('I am a placeholder') - .render() - - // console.log(JSON.stringify(actual, null, 2)) - t.deepEqual(actual, expected); -}); \ No newline at end of file diff --git a/test/template.test.ts b/test/template.test.ts deleted file mode 100644 index 3bd0865..0000000 --- a/test/template.test.ts +++ /dev/null @@ -1,44 +0,0 @@ -import test from "ava"; -import { fillTemplate } from './../src' - -test("Should pick a random choice and fill the template", (t) => { - let pass = false; - - const payload = { - phrases: ["Hey $[name], how's it going?", "Hi $[name], here's your $[flavor]"], - template: { - name: 'Joe', - flavor: 'mint' - } - } - const { phrases, template } = payload - - const renderedChoices = [`Hey Joe, how's it going?`, `Hi Joe, here's your mint`]; - const res = fillTemplate(phrases, template) - - if (renderedChoices.includes(res)) { - pass = true; - } - - t.deepEqual(true, pass); -}); - -test("Should take a string & fill in the template", (t) => { - let pass = false; - - const payload = { - phrases: `What directory to install speedybot ? (defaults to '$[directory]')`, - template: { - directory: 'speedybot', - } - } - const { phrases, template } = payload - - const renderedChoices = [`What directory to install speedybot ? (defaults to 'speedybot')`]; - const res = fillTemplate(phrases, template) - if (renderedChoices.includes(res)) { - pass = true; - } - - t.deepEqual(true, pass); -}); \ No newline at end of file diff --git a/test/validate_webhookurl.test.ts b/test/validate_webhookurl.test.ts deleted file mode 100644 index 7f219c6..0000000 --- a/test/validate_webhookurl.test.ts +++ /dev/null @@ -1,38 +0,0 @@ -import test from "ava"; -import { ValidatewebhookUrl } from './../src/helpers' - - -// ex. good: https://123-456-789.ngrok.io/webhookroute -// ex. bad: https://123-456-789.ngrok.io/ -// ex. bad: https://123-456-789.ngrok.io -test("Should return true if valid", (t) => { - const webhookUrl = 'https://123-456-789.ngrok.io/webhookroute' - const expected = true - const actual = ValidatewebhookUrl(webhookUrl) - t.deepEqual(actual, expected); -}); - -test("Should throw if no ending path", (t) => { - const webhookUrl = 'https://123-456-789.ngrok.io' - try { - ValidatewebhookUrl(webhookUrl) - t.fail('Should throw error'); - } catch (e) { - t.pass() - } -}); - - -test("Should throw if no ending path, ends in slash", (t) => { - const webhookUrl = 'https://123-456-789.ngrok.io/' - try { - ValidatewebhookUrl(webhookUrl) - t.fail('Should throw error'); - } catch (e) { - t.pass() - } finally { - // no op - } - -}); - diff --git a/test/various.test.ts b/test/various.test.ts new file mode 100644 index 0000000..3d2f03a --- /dev/null +++ b/test/various.test.ts @@ -0,0 +1,375 @@ +import { describe, expect, it } from "vitest"; +import { createMockRequest, token } from "./common"; +import { SpeedyBot } from "../src/speedybot"; +import { logoRoll, mainRequester } from "../src"; +import { checkers } from "../src/cards"; +describe("Private methods", () => { + it("[Private] get self data ", async () => { + const { makeRequestMock, requestDetails } = createMockRequest(); + const inst = new SpeedyBot(token, makeRequestMock); + const HACK_FOR_PRIVATE_METHODS = Object.getPrototypeOf(inst); + + await HACK_FOR_PRIVATE_METHODS.getSelf.call(inst); // rebind this context 🙃 + + expect(requestDetails.url).toBe("https://webexapis.com/v1/people/me"); + expect(requestDetails.body).toEqual({}); + expect(requestDetails.method).toEqual("GET"); + }); + + it("[Private] guess content type ", async () => { + const inst = new SpeedyBot(token); + const HACK_FOR_PRIVATE_METHODS = Object.getPrototypeOf(inst); + const res = HACK_FOR_PRIVATE_METHODS.guessContentType.call(inst, "json"); + + expect(res).toBe("application/json"); + }); + + it("[Private] guess content type w/ * ", async () => { + const inst = new SpeedyBot(token); + const HACK_FOR_PRIVATE_METHODS = Object.getPrototypeOf(inst); + const res = HACK_FOR_PRIVATE_METHODS.guessContentType.call(inst, "*.json"); + + expect(res).toBe("application/json"); + }); + + it("[Private] guess content type w/ *.txt ", async () => { + const inst = new SpeedyBot(token); + const HACK_FOR_PRIVATE_METHODS = Object.getPrototypeOf(inst); + const res = HACK_FOR_PRIVATE_METHODS.guessContentType.call(inst, "*.txt"); + + expect(res).toBe("text/plain"); + }); + + it("[Private] guess content type w/ .fileExtension ", async () => { + const inst = new SpeedyBot(token); + const HACK_FOR_PRIVATE_METHODS = Object.getPrototypeOf(inst); + const res = HACK_FOR_PRIVATE_METHODS.guessContentType.call(inst, ".json"); + + expect(res).toBe("application/json"); + }); +}); + +describe("Why not?", () => { + it("Random values ", async () => { + const inst = new SpeedyBot(token); + expect(inst.rando()).to.not.equal(inst.rando()); + }); + + it("Author Data ", async () => { + const { makeRequestMock, requestDetails } = createMockRequest(); + + const inst = new SpeedyBot(token, makeRequestMock); + const data = await inst.getPerson("authorId"); + expect(requestDetails.url).toEqual( + "https://webexapis.com/v1/people/authorId" + ); + expect(requestDetails.token).toBe(token); + expect(requestDetails.method).toBe("GET"); + }); + + it("Recent rooms", async () => { + const { makeRequestMock, requestDetails } = createMockRequest(); + const inst = new SpeedyBot(token, makeRequestMock); + inst.setFallbackText("My fallback text"); + await inst.getRecentRooms(); + expect(requestDetails.url).toBe( + "https://webexapis.com/v1/rooms?max=100&sortBy=lastactivity" + ); + expect(requestDetails.method).toEqual("GET"); + }); + + it("Set fallback messsage", async () => { + const { makeRequestMock, requestDetails } = createMockRequest(); + const inst = new SpeedyBot(token, makeRequestMock); + inst.setFallbackText("My fallback text"); + await inst.sendTo("roomId", inst.card().addTitle("yay")); + expect(requestDetails.url).toBe("https://webexapis.com/v1/messages"); + expect(requestDetails.body).toEqual({ + roomId: "roomId", + markdown: "My fallback text", + text: "My fallback text", + attachments: [ + { + contentType: "application/vnd.microsoft.card.adaptive", + content: { + $schema: "http://adaptivecards.io/schemas/adaptive-card.json", + type: "AdaptiveCard", + version: "1.0", + body: [ + { + type: "TextBlock", + text: "yay", + size: "ExtraLarge", + isSubtle: true, + wrap: true, + weight: "Bolder", + }, + ], + }, + }, + ], + }); + + expect(requestDetails.method).toEqual("POST"); + }); +}); + +describe("Who am I?", () => { + it("Gets user info + webhooks", async () => { + const { makeRequestMock, requestDetails } = createMockRequest(); + const inst = new SpeedyBot(token, makeRequestMock); + await inst.whoAmI(); + expect(requestDetails.history).toEqual([ + "https://webexapis.com/v1/people/me", + "https://webexapis.com/v1/webhooks", + ]); + expect(requestDetails.method).toEqual("GET"); + }); +}); + +describe("Logo roll", () => { + it("Rolls a logo", async () => { + const logo = logoRoll(); + console.log(logo); + expect(logo).toBeDefined(); + }); +}); + +describe("Checkers: isEmail", () => { + it("isEmail returns true for an email", async () => { + const candidate = "joe@joe.com"; + expect(checkers.isEmail(candidate)).toBe(true); + }); + + it("isEmail returns false for an email", async () => { + const candidate = "joe34567890"; + expect(checkers.isEmail(candidate)).toBe(false); + }); +}); + +describe("Checkers: isSpeedycard", () => { + it("isSpeedyCard returns true for a SpeedyCard", async () => { + const bot = new SpeedyBot(token); + const candidate = bot.card().addTitle("a card"); + expect(checkers.isSpeedyCard(candidate)).toBe(true); + }); + + it("isSpeedyCard returns false for a non-speedycard", async () => { + const bot = new SpeedyBot(token); + const candidate = { a: 1, b: "not a card" }; + expect(checkers.isSpeedyCard(candidate)).toBe(false); + }); +}); + +describe("Checkers: isCard", () => { + it("isCard returns true for a SpeedyCard", async () => { + const bot = new SpeedyBot(token); + const candidate = bot.card().addTitle("a card"); + expect(checkers.isCard(candidate)).toBe(true); + }); + + it("isCard returns false for a non-speedycard", async () => { + const bot = new SpeedyBot(token); + const candidate = { a: 1, b: "not a card" }; + expect(checkers.isCard(candidate)).toBe(false); + }); + + it("isCard returns true for a valid adaptive card", async () => { + const bot = new SpeedyBot(token); + const candidate = { + type: "AdaptiveCard", + body: [ + { + type: "ColumnSet", + columns: [ + { + type: "Column", + items: [ + { + type: "Image", + style: "Person", + url: "https://developer.webex.com/images/webex-logo-icon-non-contained.svg", + size: "Medium", + height: "50px", + }, + ], + width: "auto", + }, + { + type: "Column", + items: [ + { + type: "TextBlock", + text: "Webex App", + weight: "Lighter", + color: "Accent", + }, + { + type: "TextBlock", + weight: "Bolder", + text: "Buttons and Cards Release", + horizontalAlignment: "Left", + wrap: true, + color: "Light", + size: "Large", + spacing: "Small", + }, + ], + width: "stretch", + }, + ], + }, + { + type: "ColumnSet", + columns: [ + { + type: "Column", + width: 35, + items: [ + { type: "TextBlock", text: "Release Date:", color: "Light" }, + { + type: "TextBlock", + text: "Product:", + weight: "Lighter", + color: "Light", + spacing: "Small", + }, + { + type: "TextBlock", + text: "OS:", + weight: "Lighter", + color: "Light", + spacing: "Small", + }, + ], + }, + { + type: "Column", + width: 65, + items: [ + { type: "TextBlock", text: "Aug 6, 2019", color: "Light" }, + { + type: "TextBlock", + text: "Webex Teams", + color: "Light", + weight: "Lighter", + spacing: "Small", + }, + { + type: "TextBlock", + text: "Mac, Windows, Web", + weight: "Lighter", + color: "Light", + spacing: "Small", + }, + ], + }, + ], + spacing: "Padding", + horizontalAlignment: "Center", + }, + { + type: "TextBlock", + text: "We're making it easier for you to interact with bots and integrations in Webex Teams. When your bot sends information in a space that includes a card with buttons, you can now easily interact with it.", + wrap: true, + }, + { type: "TextBlock", text: "Buttons and Cards Resources:" }, + { + type: "ColumnSet", + columns: [ + { + type: "Column", + width: "auto", + items: [ + { + type: "Image", + altText: "", + url: "https://developer.webex.com/images/link-icon.png", + size: "Small", + width: "30px", + }, + ], + spacing: "Small", + }, + { + type: "Column", + width: "auto", + items: [ + { + type: "TextBlock", + text: "[Developer Portal Buttons and Cards Guide]()", + horizontalAlignment: "Left", + size: "Medium", + }, + ], + verticalContentAlignment: "Center", + horizontalAlignment: "Left", + spacing: "Small", + }, + ], + }, + { + type: "ActionSet", + actions: [ + { + type: "Action.Submit", + title: "Subscribe to Release Notes", + data: { subscribe: true }, + }, + ], + horizontalAlignment: "Left", + spacing: "None", + }, + ], + $schema: "http://adaptivecards.io/schemas/adaptive-card.json", + version: "1.3", + }; + expect(checkers.isCard(candidate)).toBe(true); + }); + + it("isCard returns false for an invalid adaptive card", async () => { + const bot = new SpeedyBot(token); + const candidate = { message: "big phony card" }; + expect(checkers.isCard(candidate)).toBe(false); + }); +}); + +describe("Checkers: isCard", () => { + it("isCard returns true for a SpeedyCard", async () => { + const bot = new SpeedyBot(token); + const candidate = bot.card().addTitle("a card"); + expect(checkers.isCard(candidate)).toBe(true); + }); + + it("isCard returns false for a non-speedycard", async () => { + const bot = new SpeedyBot(token); + const candidate = { a: 1, b: "not a card" }; + expect(checkers.isCard(candidate)).toBe(false); + }); +}); + +describe("Fuzzy matching", () => { + it("Matches fuzzily", async () => { + const bot = new SpeedyBot(token); + const candidate = "hi"; + expect(bot.fuzzyMatch(candidate, ["yo", "hi"])).toBe(true); + }); + + it("Matches fuzzily, case-insenitive", async () => { + const bot = new SpeedyBot(token); + const candidate = "hI"; + expect(bot.fuzzyMatch(candidate, ["yo", "hi"])).toBe(true); + }); + + it("Matches fuzzily, case-insenitive on list", async () => { + const bot = new SpeedyBot(token); + const candidate = "hi"; + expect(bot.fuzzyMatch(candidate, ["yo", "Hi"])).toBe(true); + }); + + it("Reports false when no match", async () => { + const bot = new SpeedyBot(token); + const candidate = "hiii"; + expect(bot.fuzzyMatch(candidate, ["yo", "Hi"])).toBe(false); + }); +}); diff --git a/test/webhook.test.ts b/test/webhook.test.ts new file mode 100644 index 0000000..e1afd43 --- /dev/null +++ b/test/webhook.test.ts @@ -0,0 +1,77 @@ +import { describe, expect, it } from "vitest"; +import { SpeedyBot } from "../src/speedybot"; +import { createMockRequest, token } from "./common"; + +describe("Webhooks", () => { + it("Get webhooks", async () => { + const { makeRequestMock, requestDetails } = createMockRequest(); + const inst = new SpeedyBot(token, makeRequestMock); + await inst.getWebhooks(); + expect(requestDetails.url).toBe("https://webexapis.com/v1/webhooks"); + expect(requestDetails.method).toEqual("GET"); + }); + + it("Get webhooks", async () => { + const { makeRequestMock, requestDetails } = createMockRequest(); + const inst = new SpeedyBot(token, makeRequestMock); + await inst.getWebhooks(); + expect(requestDetails.url).toBe("https://webexapis.com/v1/webhooks"); + expect(requestDetails.method).toEqual("GET"); + }); + + it("Webhooks createAttachmentActionsWebhook [no secret]", async () => { + const { makeRequestMock, requestDetails } = createMockRequest(); + const inst = new SpeedyBot(token, makeRequestMock); + const url = "https://www.phonyurl.com"; + await inst.createAttachmentActionsWebhook(url); + expect(requestDetails.url).toBe("https://webexapis.com/v1/webhooks"); + expect(requestDetails.method).toEqual("POST"); + expect(requestDetails.body.targetUrl).toEqual(url); + expect(requestDetails.body.resource).toEqual("attachmentActions"); + expect(requestDetails.body.secret).toEqual(undefined); + }); + + it("Webhooks createAttachmentActionsWebhook [w/ secret]", async () => { + const { makeRequestMock, requestDetails } = createMockRequest(); + const inst = new SpeedyBot(token, makeRequestMock); + const url = "https://www.phonyurl.com"; + const secret = "TheSecret"; + await inst.createAttachmentActionsWebhook(url, secret); + expect(requestDetails.url).toBe("https://webexapis.com/v1/webhooks"); + expect(requestDetails.method).toEqual("POST"); + expect(requestDetails.body.targetUrl).toEqual(url); + expect(requestDetails.body.resource).toEqual("attachmentActions"); + expect(requestDetails.body.secret).toEqual(secret); + }); + + it("Webhooks createFirehose [w/ secret]", async () => { + const { makeRequestMock, requestDetails } = createMockRequest(); + const inst = new SpeedyBot(token, makeRequestMock); + const url = "https://www.phonyurl.com"; + const secret = "TheSecret"; + const event = "created"; + await inst.createFirehose(url, secret); + expect(requestDetails.url).toBe("https://webexapis.com/v1/webhooks"); + expect(requestDetails.method).toEqual("POST"); + expect(requestDetails.body.targetUrl).toEqual(url); + expect(requestDetails.body.resource).toEqual("messages"); + expect(requestDetails.body.secret).toEqual(secret); + expect(requestDetails.body.event).toEqual(event); + }); + + it("Webhooks fetchWebhooks", async () => { + const { makeRequestMock, requestDetails } = createMockRequest(); + const inst = new SpeedyBot(token, makeRequestMock); + await inst.fetchWebhooks(); + expect(requestDetails.url).toBe("https://webexapis.com/v1/webhooks"); + expect(requestDetails.method).toEqual("GET"); + }); + + it("Webhooks destroy webhooks", async () => { + const { makeRequestMock, requestDetails } = createMockRequest(); + const inst = new SpeedyBot(token, makeRequestMock); + await inst.deleteWebhook("a"); + expect(requestDetails.url).toBe("https://webexapis.com/v1/webhooks/a"); + expect(requestDetails.method).toEqual("DELETE"); + }); +}); diff --git a/tsconfig.json b/tsconfig.json index 2870ec7..0bd134b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,11 +3,12 @@ "declaration": true, "resolveJsonModule": true, "module": "commonjs", - "esModuleInterop": true, - "target": "es5", + "target": "ES2016", "noImplicitAny": false, "moduleResolution": "node", + "removeComments": true, "sourceMap": true, + "skipLibCheck": true, "strict": true, "noFallthroughCasesInSwitch": true, "noImplicitReturns": false, @@ -16,19 +17,9 @@ "baseUrl": ".", "forceConsistentCasingInFileNames": true, "paths": { - "*": [ - "node_modules/*", - ] + "*": ["node_modules/*"] } }, - "include": [ - "src/**/*", - "test/**/*", - "package.json" - ], - "exclude": [ - "src/frontend", - "node_modules", - "dist" - ] -} \ No newline at end of file + "include": ["src/**/*", "package.json"], + "exclude": ["node_modules", "dist", "@vitest"] +}