diff --git a/.env.template b/.env.template deleted file mode 100644 index 180dbd6..0000000 --- a/.env.template +++ /dev/null @@ -1,2 +0,0 @@ -# The absolute path to the Foundry installation to create symlinks to -FOUNDRY_ROOT="" diff --git a/.forgejo/workflows/draft-release.yaml b/.forgejo/workflows/draft-release.yaml deleted file mode 100644 index e667615..0000000 --- a/.forgejo/workflows/draft-release.yaml +++ /dev/null @@ -1,96 +0,0 @@ -on: [ workflow_dispatch ] -jobs: - create-artifacts: - name: "Create artifacts" - runs-on: act - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Install dependencies - run: npm clean-install - - - id: version - run: cat system.json | echo version=`jq -r ".version"` >> "$FORGEJO_OUTPUT" - - - name: Assert that the tag doesn't exist - run: node scripts/tagExists.mjs - env: - TAG_NAME: "v${{steps.version.outputs.version}}" - - # Compendia steps - - name: Build compendia - run: "npm run data:build" - - name: Remove compendia source - run: "rm -rf packs/**/_source" - - - name: Compress files - run: zip -r release.zip langs module styles templates README.md assets - - - name: Upload artifacts - uses: https://data.forgejo.org/forgejo/upload-artifact@v4 - with: - path: | - system.json - release.zip - scripts/*.mjs - package-lock.json - package.json - retention-days: 7 - if-no-files-found: error - - - forgejo-release: - name: "Create Forgejo release" - runs-on: act - needs: - - create-artifacts - if: vars.RELEASE_TO_FORGEJO == 'yes' - steps: - - name: Download artifacts - uses: https://data.forgejo.org/forgejo/download-artifact@v4 - with: - merge-multiple: true - - - name: Install dependencies - run: npm i - - - id: version - run: cat system.json | echo version=`jq -r ".version"` >> "$FORGEJO_OUTPUT" - - - name: Update manifest - run: node scripts/prepareManifest.mjs - env: - DOWNLOAD_URL: "${{forgejo.server_url}}/${{forgejo.repository}}/releases/download/v${{steps.version.outputs.version}}/release.zip" - LATEST_URL: "${{forgejo.server_url}}/${{forgejo.repository}}/releases/download/latest/system.json" - - - name: Add manifest into release archive - run: zip release.zip --update system.json - - - name: Upload archive to s3 - run: node scripts/uploadToS3.mjs - env: - TAG: "v${{steps.version.outputs.version}}" - FILE: "release.zip" - S3_BUCKET: "${{vars.S3_BUCKET}}" - S3_REGION: "${{vars.S3_REGION}}" - S3_KEY: "${{secrets.S3_KEY}}" - S3_SECRET: "${{secrets.S3_SECRET}}" - S3_ENDPOINT: "${{vars.S3_ENDPOINT}}" - - - name: Upload manifest to s3 - run: node scripts/uploadToS3.mjs - env: - TAG: "v${{steps.version.outputs.version}}" - FILE: "system.json" - S3_BUCKET: "${{vars.S3_BUCKET}}" - S3_REGION: "${{vars.S3_REGION}}" - S3_KEY: "${{secrets.S3_KEY}}" - S3_SECRET: "${{secrets.S3_SECRET}}" - S3_ENDPOINT: "${{vars.S3_ENDPOINT}}" - - - name: Create draft release - run: node scripts/createForgejoRelease.mjs - env: - TAG: "v${{steps.version.outputs.version}}" - CDN_URL: "${{vars.CDN_URL}}" diff --git a/.forgejo/workflows/publish-release.yaml b/.forgejo/workflows/publish-release.yaml deleted file mode 100644 index 63fa76f..0000000 --- a/.forgejo/workflows/publish-release.yaml +++ /dev/null @@ -1,9 +0,0 @@ -on: - release: - types: [published] -jobs: - release-to-foundry: - runs-on: docker - steps: - - name: retrieve release URLS - - name: publish to Foundry diff --git a/.github/workflows/draft-release.yaml b/.github/workflows/draft-release.yaml new file mode 100644 index 0000000..e8c1a16 --- /dev/null +++ b/.github/workflows/draft-release.yaml @@ -0,0 +1,58 @@ +name: Create Draft Release +on: [workflow_dispatch] +jobs: + everything: + runs-on: ubuntu-latest + steps: + # Checkout the repository + - uses: actions/checkout@v4 + + # Install node and NPM + - uses: actions/setup-node@v4 + with: + node-version: "20" + + # Install required packages + - run: npm install + + - name: Reading the system.json for the version + id: "version" + run: cat system.json | echo version=`jq -r ".version"` >> "$GITHUB_OUTPUT" + + # Check that tag doesn't exist + - uses: mukunku/tag-exists-action@v1.5.0 + id: check-tag + with: + tag: "v${{ steps.version.outputs.version }}" + + - name: "Ensure that the tag doesn't exist" + if: ${{ steps.check-tag.outputs.exists == 'true' }} + run: exit 1 + + - name: Ensure there are specific files to release + if: ${{ vars.files_to_release == '' }} + run: exit 1 + + # Compile the stuff that needs to be compiled + - run: npm run build + - run: node scripts/buildCompendia.mjs + + - name: Move system.json to a temp file + id: manifest-move + run: mv system.json system.temp.json + + - name: Update the download property in the manifest + id: manifest-update + run: cat system.temp.json | jq -r --tab '.download = "https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.version }}/${{ vars.zip_name }}.zip"' > system.json + + - name: Create the zip + run: zip -r ${{ vars.zip_name || 'release' }}.zip ${{ vars.files_to_release }} + + - name: Create the draft release + uses: ncipollo/release-action@v1 + with: + tag: "v${{ steps.version.outputs.version }}" + commit: ${{ github.ref }} + draft: true + generateReleaseNotes: true + artifacts: "${{vars.zip_name || 'release'}}.zip,system.json" diff --git a/.gitignore b/.gitignore index f3a0af4..1726f87 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,2 @@ node_modules/ -deprecated -.env -/foundry +.styles \ No newline at end of file diff --git a/.promo/hjonk-samples.png b/.promo/hjonk-samples.png deleted file mode 100644 index 7151a06..0000000 Binary files a/.promo/hjonk-samples.png and /dev/null differ diff --git a/.vscode/settings.json b/.vscode/settings.json index cc64012..3f6e97a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -8,9 +8,9 @@ "git.branchProtection": [], "files.exclude": { "*.lock": true, + ".styles": false, "node_modules": true, "packs": true, - "foundry": true }, "html.customData": [ "./.vscode/components.html-data.json" diff --git a/README.md b/README.md index 4fca88e..0a9ac76 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,4 @@ # Text-Based Actors This is an intentionally bare-bones system that features a text-only character sheet, allowing the playing of games that may not otherwise have a Foundry system -implementation. - -## Unlisted Releases -Some of the versions of Text-Based Actors are not available in the [Releases list](https://git.varify.ca/Foundry/taf/releases), -these versions are installable manually by using the appropriate manifest link -below: - -| Version | Manifest URL -| ------- | ------------ -| v2.2.1 | https://cdn.varify.ca/Foundry/taf/v2.2.1/system.json -| v2.2.0 | https://cdn.varify.ca/Foundry/taf/v2.2.0/system.json -| v2.1.0 | https://cdn.varify.ca/Foundry/taf/v2.1.0/system.json -| v2.0.0 | https://cdn.varify.ca/Foundry/taf/v2.0.0/system.json -| v1.1.0 | https://cdn.varify.ca/Foundry/taf/v1.1.0/system.json -| v1.0.0 | https://cdn.varify.ca/Foundry/taf/v1.0.0/system.json +implementation. \ No newline at end of file diff --git a/assets/icons/disconnected.svg b/assets/icons/disconnected.svg deleted file mode 100644 index c47a732..0000000 --- a/assets/icons/disconnected.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/assets/icons/drag-handle.svg b/assets/icons/drag-handle.svg deleted file mode 100644 index 987e23e..0000000 --- a/assets/icons/drag-handle.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/augments.d.ts b/augments.d.ts index a08bb60..df16590 100644 --- a/augments.d.ts +++ b/augments.d.ts @@ -1,8 +1,3 @@ -declare global { - class Hooks extends foundry.helpers.Hooks {}; - const fromUuid = foundry.utils.fromUuid; -} - interface Actor { /** The system-specific data */ system: any; diff --git a/eslint.config.mjs b/eslint.config.mjs index 04422dc..f412e22 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -4,7 +4,7 @@ import stylistic from "@stylistic/eslint-plugin"; export default [ // Tell eslint to ignore files that I don't mind being formatted slightly differently - { ignores: [ `scripts/`, `foundry/*` ] }, + { ignores: [ `scripts/` ] }, { languageOptions: { globals: globals.browser, @@ -16,11 +16,14 @@ export default [ languageOptions: { globals: { CONFIG: `writable`, - CONST: `readonly`, game: `readonly`, Handlebars: `readonly`, Hooks: `readonly`, ui: `readonly`, + Actor: `readonly`, + Actors: `readonly`, + Item: `readonly`, + Items: `readonly`, ActorSheet: `readonly`, ItemSheet: `readonly`, foundry: `readonly`, @@ -28,8 +31,6 @@ export default [ ActiveEffect: `readonly`, Dialog: `readonly`, renderTemplate: `readonly`, - fromUuid: `readonly`, - fromUuidSync: `readonly`, }, }, }, @@ -41,7 +42,6 @@ export default [ languageOptions: { globals: { Logger: `readonly`, - taf: `readonly`, }, }, rules: { @@ -49,7 +49,6 @@ export default [ "func-names": [`warn`, `as-needed`], "grouped-accessor-pairs": `error`, "no-alert": `error`, - "no-empty": [`error`, { allowEmptyCatch: true }], "no-implied-eval": `error`, "no-invalid-this": `error`, "no-lonely-if": `error`, @@ -73,7 +72,7 @@ export default [ "@stylistic/eol-last": `warn`, "@stylistic/operator-linebreak": [`warn`, `before`], "@stylistic/indent": [`warn`, `tab`], - "@stylistic/brace-style": [`off`], + "@stylistic/brace-style": [`warn`, `1tbs`, { "allowSingleLine": true }], "@stylistic/quotes": [`warn`, `backtick`, { "avoidEscape": true }], "@stylistic/comma-dangle": [`warn`, { arrays: `always-multiline`, objects: `always-multiline`, imports: `always-multiline`, exports: `always-multiline`, functions: `always-multiline` }], "@stylistic/comma-style": [`warn`, `last`], diff --git a/jsconfig.json b/jsconfig.json index 6811918..231558c 100644 --- a/jsconfig.json +++ b/jsconfig.json @@ -1,19 +1,7 @@ { "compilerOptions": { - "module": "es2022", - "target": "es2022", "types": [ "./augments.d.ts" - ], - "paths": { - "@client/*": ["./foundry/client/*"], - "@common/*": ["./foundry/common/*"], - } - }, - "include": [ - "module/**/*", - "foundry/client/client.mjs", - "foundry/client/global.d.mts", - "foundry/common/primitives/global.d.mts" - ] + ] + } } diff --git a/langs/en-ca.json b/langs/en-ca.json deleted file mode 100644 index 1136454..0000000 --- a/langs/en-ca.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "TYPES": { - "Actor": { - "player": "Player" - } - }, - "taf": { - "settings": { - "canPlayersManageAttributes": { - "name": "Players Can Manage Attributes", - "hint": "This allows players who have edit access to a document to be able to edit what attributes those characters have via the attribute editor" - } - }, - "sheet-names": { - "PlayerSheet": "Player Sheet" - }, - "misc": { - "Key": "Key", - "Value": "Value", - "no-data-submitted": "No data submitted", - "data-query-notif-header": "Data Query Notification" - }, - "Apps": { - "QueryStatus": { - "title": "Information Request Status", - "user-disconnected-tooltip": "This user is not logged in to Foundry", - "cancel-request": "Cancel Request", - "finish-early": "Finish Request Early", - "send-request": "Send Request" - }, - "TAFDocumentSheetConfig": { - "Sizing": "Sizing", - "Width": { - "label": "Width" - }, - "Height": { - "label": "Height" - }, - "Resizable": { - "label": "Resizable" - }, - "tabs": { - "foundry": "Foundry", - "system": "Text-Based Actors" - } - } - }, - "sockets": { - "user-list-required": "A list fo users must be provided" - }, - "notifs": { - "error": { - "missing-id": "An ID must be provided", - "invalid-socket": "Invalid socket data received, this means a module or system bug is present.", - "unknown-socket-event": "An unknown socket event was received: {event}", - "malformed-socket-payload": "Socket event \"{event}\" received with malformed payload. Details: {details}" - } - } - } -} diff --git a/module/api.mjs b/module/api.mjs deleted file mode 100644 index 33eab44..0000000 --- a/module/api.mjs +++ /dev/null @@ -1,36 +0,0 @@ -// Apps -import { Ask } from "./apps/Ask.mjs"; -import { AttributeManager } from "./apps/AttributeManager.mjs"; -import { PlayerSheet } from "./apps/PlayerSheet.mjs"; -import { QueryStatus } from "./apps/QueryStatus.mjs"; - -// Utils -import { attributeSorter } from "./utils/attributeSort.mjs"; -import { DialogManager } from "./utils/DialogManager.mjs"; -import { localizer } from "./utils/localizer.mjs"; -import { QueryManager } from "./utils/QueryManager.mjs"; -import { toID } from "./utils/toID.mjs"; - -const { deepFreeze } = foundry.utils; - -Object.defineProperty( - globalThis, - `taf`, - { - value: deepFreeze({ - DialogManager, - QueryManager, - Apps: { - Ask, - AttributeManager, - PlayerSheet, - QueryStatus, - }, - utils: { - attributeSorter, - localizer, - toID, - }, - }), - }, -); diff --git a/module/apps/Ask.mjs b/module/apps/Ask.mjs deleted file mode 100644 index e6d3ce4..0000000 --- a/module/apps/Ask.mjs +++ /dev/null @@ -1,133 +0,0 @@ -import { __ID__, filePath } from "../consts.mjs"; - -const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api; - -const validInputTypes = [ - `checkbox`, - `details`, - `divider`, - `error`, - `input`, - `select`, -]; - -export class Ask extends HandlebarsApplicationMixin(ApplicationV2) { - // #region Options - static DEFAULT_OPTIONS = { - tag: `dialog`, - classes: [ - __ID__, - `dialog`, // accesses some Foundry-provided styling - `Ask`, - ], - position: { - width: 330, - }, - window: { - title: `Questions`, - resizable: true, - minimizable: true, - contentTag: `form`, - }, - form: { - closeOnSubmit: true, - submitOnChange: false, - handler: this.#submit, - }, - actions: { - cancel: this.#cancel, - }, - }; - - static PARTS = { - inputs: { - template: filePath(`templates/Ask/inputs.hbs`), - templates: validInputTypes.map(type => filePath(`templates/Ask/inputs/${type}.hbs`)), - }, - controls: { - template: filePath(`templates/Ask/controls.hbs`), - }, - }; - // #endregion Options - - // #region Instance - _inputs = []; - alwaysUseAnswerObject = false; - - /** @type {string | undefined} */ - _description = undefined; - - /** @type {Function | undefined} */ - _userOnConfirm; - - /** @type {Function | undefined} */ - _userOnCancel; - - /** @type {Function | undefined} */ - _userOnClose; - - constructor({ - inputs = [], - description = undefined, - onConfirm, - onCancel, - onClose, - alwaysUseAnswerObject, - ...options - } = {}) { - super(options); - this.alwaysUseAnswerObject = alwaysUseAnswerObject; - - for (const input of inputs) { - if (!validInputTypes.includes(input.type)) { - input.details = `Invalid input type provided: ${input.type}`; - input.type = `error`; - }; - }; - - this._inputs = inputs; - this._description = description; - this._userOnCancel = onCancel; - this._userOnConfirm = onConfirm; - this._userOnClose = onClose; - }; - // #endregion Instance - - // #region Lifecycle - async _onFirstRender() { - super._onFirstRender(); - this.element.show(); - }; - - async _prepareContext() { - return { - inputs: this._inputs, - description: this._description, - }; - }; - - async _onClose() { - super._onClose(); - this._userOnClose?.(); - }; - // #endregion Lifecycle - - // #region Actions - /** @this {AskDialog} */ - static async #submit(_event, _element, formData) { - const answers = formData.object; - const keys = Object.keys(answers); - if (keys.length === 1 && !this.alwaysUseAnswerObject) { - this._userOnConfirm?.(answers[keys[0]]); - return; - }; - this._userOnConfirm?.(answers); - }; - - /** @this {AskDialog} */ - static async #cancel() { - this._userOnCancel?.(); - this.close(); - }; - // #endregion Actions -}; diff --git a/module/apps/AttributeManager.mjs b/module/apps/AttributeManager.mjs deleted file mode 100644 index c81bb1a..0000000 --- a/module/apps/AttributeManager.mjs +++ /dev/null @@ -1,266 +0,0 @@ -import { __ID__, filePath } from "../consts.mjs"; -import { attributeSorter } from "../utils/attributeSort.mjs"; -import { toID } from "../utils/toID.mjs"; - -const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api; -const { deepClone, diffObject, mergeObject, performIntegerSort, randomID, setProperty } = foundry.utils; -const { DragDrop, TextEditor } = foundry.applications.ux; - -export class AttributeManager extends HandlebarsApplicationMixin(ApplicationV2) { - - // #region Options - static DEFAULT_OPTIONS = { - tag: `form`, - classes: [ - __ID__, - `AttributeManager`, - ], - position: { - width: 400, - height: `auto`, - }, - window: { - resizable: true, - }, - form: { - submitOnChange: false, - closeOnSubmit: true, - handler: this.#onSubmit, - }, - actions: { - addNew: this.#addNew, - removeAttribute: this.#remove, - }, - }; - - static PARTS = { - attributes: { template: filePath(`templates/AttributeManager/attribute-list.hbs`) }, - controls: { template: filePath(`templates/AttributeManager/controls.hbs`) }, - }; - // #endregion Options - - // #region Instance Data - /** @type {string | null} */ - #doc = null; - - #attributes; - - constructor({ document , ...options } = {}) { - super(options); - this.#doc = document; - this.#attributes = deepClone(document.system.attr); - }; - - get title() { - return `Attributes: ${this.#doc.name}`; - }; - // #endregion Instance Data - - // #region Lifecycle - async _onRender(context, options) { - await super._onRender(context, options); - - const elements = this.element - .querySelectorAll(`[data-bind]`); - for (const input of elements) { - input.addEventListener(`change`, this.#bindListener.bind(this)); - }; - - new DragDrop.implementation({ - dragSelector: `.draggable`, - permissions: { - dragstart: this._canDragStart.bind(this), - drop: this._canDragDrop.bind(this), - }, - callbacks: { - dragstart: this._onDragStart.bind(this), - drop: this._onDrop.bind(this), - }, - }).bind(this.element); - }; - // #endregion Lifecycle - - // #region Data Prep - async _preparePartContext(partId) { - const ctx = {}; - - ctx.actor = this.#doc; - - switch (partId) { - case `attributes`: { - await this._prepareAttributeContext(ctx); - }; - }; - - return ctx; - }; - - async _prepareAttributeContext(ctx) { - const attrs = []; - for (const [id, data] of Object.entries(this.#attributes)) { - if (data == null) { continue }; - attrs.push({ - id, - name: data.name, - displayName: data.isNew ? `New Attribute` : data.name, - sort: data.sort, - isRange: data.isRange, - isNew: data.isNew ?? false, - }); - }; - ctx.attrs = attrs.sort(attributeSorter); - }; - // #endregion Data Prep - - // #region Actions - /** - * @param {Event} event - */ - async #bindListener(event) { - const target = event.target; - const data = target.dataset; - const binding = data.bind; - - let value = target.value; - switch (target.type) { - case `checkbox`: { - value = target.checked; - }; - }; - - setProperty(this.#attributes, binding, value); - await this.render({ parts: [ `attributes` ]}); - }; - - /** @this {AttributeManager} */ - static async #addNew() { - const id = randomID(); - this.#attributes[id] = { - name: ``, - sort: Number.MAX_SAFE_INTEGER, - isRange: false, - isNew: true, - }; - await this.render({ parts: [ `attributes` ]}); - }; - - /** @this {AttributeManager} */ - static async #remove($e, element) { - const attribute = element.closest(`[data-attribute]`)?.dataset.attribute; - if (!attribute) { return }; - delete this.#attributes[attribute]; - this.#attributes[`-=${attribute}`] = null; - await this.render({ parts: [ `attributes` ] }); - }; - - /** @this {AttributeManager} */ - static async #onSubmit() { - const entries = Object.entries(this.#attributes) - .map(([id, attr]) => { - if (attr == null) { - return [ id, attr ]; - }; - - if (attr.isNew) { - delete attr.isNew; - return [ toID(attr.name), attr ]; - }; - - return [ id, attr ]; - }); - const data = Object.fromEntries(entries); - - const diff = diffObject( - this.#doc.system.attr, - data, - { inner: false, deletionKeys: true }, - ); - - await this.#doc.update({ "system.attr": diff }); - }; - // #endregion Actions - - // #region Drag & Drop - _canDragStart() { - return this.#doc.isOwner; - }; - - _canDragDrop() { - return this.#doc.isOwner; - }; - - _onDragStart(event) { - const target = event.currentTarget.closest(`[data-attribute]`); - if (`link` in event.target.dataset) { return }; - let dragData; - - if (target.dataset.attribute) { - const attributeID = target.dataset.attribute; - const attribute = this.#attributes[attributeID]; - dragData = { - _id: attributeID, - sort: attribute.sort, - }; - }; - - if (!dragData) { return }; - event.dataTransfer.setDragImage(target, 16, 23); - event.dataTransfer.setData(`text/plain`, JSON.stringify(dragData)); - }; - - _onDrop(event) { - const dropped = TextEditor.implementation.getDragEventData(event); - - const dropTarget = event.target.closest(`[data-attribute]`); - if (!dropTarget) { return }; - const targetID = dropTarget.dataset.attribute; - let target; - - // Not moving location, ignore drop event - if (targetID === dropped._id) { return }; - - // Determine all of the siblings and create sort data - const siblings = []; - for (const element of dropTarget.parentElement.children) { - const siblingID = element.dataset.attribute; - const attr = this.#attributes[siblingID]; - const sibling = { - _id: siblingID, - sort: attr.sort, - }; - if (siblingID && siblingID !== dropped._id) { - siblings.push(sibling); - }; - if (siblingID === targetID) { - target = sibling; - } - }; - - const sortUpdates = performIntegerSort( - dropped, - { - target, - siblings, - }, - ); - - const updateEntries = sortUpdates.map(({ target, update }) => { - return [ `${target._id}.sort`, update.sort ]; - }); - const update = Object.fromEntries(updateEntries); - - mergeObject( - this.#attributes, - update, - { - insertKeys: false, - insertValues: false, - inplace: true, - performDeletions: false, - }, - ); - - this.render({ parts: [ `attributes` ] }); - }; - // #endregion Drag & Drop -}; diff --git a/module/apps/PlayerSheet.mjs b/module/apps/PlayerSheet.mjs deleted file mode 100644 index 257182a..0000000 --- a/module/apps/PlayerSheet.mjs +++ /dev/null @@ -1,164 +0,0 @@ -import { __ID__, filePath } from "../consts.mjs"; -import { AttributeManager } from "./AttributeManager.mjs"; -import { attributeSorter } from "../utils/attributeSort.mjs"; -import { TAFDocumentSheetConfig } from "./TAFDocumentSheetConfig.mjs"; - -const { HandlebarsApplicationMixin } = foundry.applications.api; -const { ActorSheetV2 } = foundry.applications.sheets; -const { getProperty } = foundry.utils; - -export class PlayerSheet extends HandlebarsApplicationMixin(ActorSheetV2) { - - // #region Options - static DEFAULT_OPTIONS = { - classes: [ - __ID__, - `PlayerSheet`, - ], - position: { - width: 575, - height: 740, - }, - window: { - resizable: true, - }, - form: { - submitOnChange: true, - closeOnSubmit: false, - }, - actions: { - manageAttributes: this.#manageAttributes, - configureSheet: this.#configureSheet, - }, - }; - - static PARTS = { - header: { template: filePath(`templates/PlayerSheet/header.hbs`) }, - attributes: { template: filePath(`templates/PlayerSheet/attributes.hbs`) }, - content: { template: filePath(`templates/PlayerSheet/content.hbs`) }, - }; - // #endregion Options - - // #region Lifecycle - _initializeApplicationOptions(options) { - const sizing = getProperty(options.document, `flags.${__ID__}.PlayerSheet.size`) ?? {}; - - options.window ??= {}; - switch (sizing.resizable) { - case `false`: - options.window.resizable ??= false; - break; - case `true`: - options.window.resizable ??= true; - break; - }; - - options.position ??= {}; - if (sizing.width) { - options.position.width ??= sizing.width; - }; - if (sizing.height) { - options.position.height ??= sizing.height; - }; - - return super._initializeApplicationOptions(options); - }; - - _getHeaderControls() { - const controls = super._getHeaderControls(); - - controls.push({ - icon: `fa-solid fa-at`, - label: `Manage Attributes`, - action: `manageAttributes`, - visible: () => { - const isGM = game.user.isGM; - const allowPlayerEdits = game.settings.get(__ID__, `canPlayersManageAttributes`); - const editable = this.isEditable; - return isGM || (allowPlayerEdits && editable); - }, - }); - - return controls; - }; - - async close() { - this.#attributeManager?.close(); - this.#attributeManager = null; - return super.close(); - }; - // #endregion Lifecycle - - // #region Data Prep - async _preparePartContext(partID) { - let ctx = { - actor: this.actor, - system: this.actor.system, - editable: this.isEditable, - }; - - switch (partID) { - case `attributes`: { - await this._prepareAttributes(ctx); - break; - }; - case `content`: { - await this._prepareContent(ctx); - break; - }; - }; - - return ctx; - }; - - async _prepareAttributes(ctx) { - ctx.hasAttributes = this.actor.system.hasAttributes; - - const attrs = []; - for (const [id, data] of Object.entries(this.actor.system.attr)) { - attrs.push({ - ...data, - id, - path: `system.attr.${id}`, - }); - }; - ctx.attrs = attrs.toSorted(attributeSorter); - }; - - async _prepareContent(ctx) { - const TextEditor = foundry.applications.ux.TextEditor.implementation; - ctx.enriched = { - system: { - content: await TextEditor.enrichHTML(this.actor.system.content), - }, - }; - }; - // #endregion Data Prep - - // #region Actions - #attributeManager = null; - /** @this {PlayerSheet} */ - static async #manageAttributes() { - this.#attributeManager ??= new AttributeManager({ document: this.actor }); - if (this.#attributeManager.rendered) { - await this.#attributeManager.bringToFront(); - } else { - await this.#attributeManager.render({ force: true }); - }; - }; - - static async #configureSheet(event) { - event.stopPropagation(); - if ( event.detail > 1 ) { return } - - // const docSheetConfigWidth = TAFDocumentSheetConfig.DEFAULT_OPTIONS.position.width; - new TAFDocumentSheetConfig({ - document: this.document, - position: { - top: this.position.top + 40, - left: this.position.left + ((this.position.width - 60) / 2), - }, - }).render({ force: true }); - }; - // #endregion Actions -}; diff --git a/module/apps/QueryStatus.mjs b/module/apps/QueryStatus.mjs deleted file mode 100644 index 5139bb2..0000000 --- a/module/apps/QueryStatus.mjs +++ /dev/null @@ -1,111 +0,0 @@ -import { __ID__, filePath } from "../consts.mjs"; -import { cancel, finish, get as getQuery, requery } from "../utils/QueryManager.mjs"; -import { Logger } from "../utils/Logger.mjs"; - -const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api; - -export class QueryStatus extends HandlebarsApplicationMixin(ApplicationV2) { - // #region Options - static DEFAULT_OPTIONS = { - classes: [ - __ID__, - `QueryStatus`, - ], - position: { - width: 300, - height: `auto`, - }, - window: { - title: `taf.Apps.QueryStatus.title`, - resizable: true, - }, - actions: { - promptUser: this.promptUser, - finishEarly: this.finishEarly, - cancelRequest: this.cancelRequest, - }, - }; - - static PARTS = { - users: { - template: filePath(`templates/QueryStatus/users.hbs`), - }, - controls: { - template: filePath(`templates/QueryStatus/controls.hbs`), - }, - }; - // #endregion Options - - // #region Instance - /** @type {string} */ - #requestID; - - constructor({ - requestID, - ...opts - }) { - if (!requestID) { - Logger.error(`A requestID must be provided for QueryStatus applications`); - return null; - }; - super(opts); - this.#requestID = requestID; - }; - - get requestID() { - return this.#requestID; - }; - // #endregion Instance - - // #region Lifecycle - async _preparePartContext(partID) { - const ctx = {}; - - switch (partID) { - case `users`: { - this._prepareUsers(ctx); - break; - }; - }; - - return ctx; - }; - - async _prepareUsers(ctx) { - const query = getQuery(this.#requestID); - if (!query) { return }; - - const users = []; - for (const userID of query.users) { - const user = game.users.get(userID); - users.push({ - id: userID, - name: user.name, - active: user.active, - answers: query.responses[userID] ?? null, - status: query.status[userID], - }); - }; - ctx.users = users; - }; - // #endregion Lifecycle - - // #region Actions - /** @this {QueryStatus} */ - static async promptUser($e, element) { - const userID = element.closest(`[data-user-id]`)?.dataset.userId; - if (!userID) { return }; - requery(this.#requestID, [ userID ]); - }; - - /** @this {QueryStatus} */ - static async cancelRequest() { - cancel(this.#requestID); - }; - - /** @this {QueryStatus} */ - static async finishEarly() { - finish(this.#requestID); - }; - // #endregion Actions -}; diff --git a/module/apps/TAFDocumentSheetConfig.mjs b/module/apps/TAFDocumentSheetConfig.mjs deleted file mode 100644 index 760e462..0000000 --- a/module/apps/TAFDocumentSheetConfig.mjs +++ /dev/null @@ -1,171 +0,0 @@ -import { __ID__, filePath } from "../consts.mjs"; -import { getDefaultSizing } from "../utils/getSizing.mjs"; - -const { diffObject, expandObject, flattenObject } = foundry.utils; -const { DocumentSheetConfig } = foundry.applications.apps; -const { CONST } = foundry; - -export class TAFDocumentSheetConfig extends DocumentSheetConfig { - - // #region Options - static DEFAULT_OPTIONS = { - classes: [`taf`], - form: { - handler: this.#onSubmit, - }, - }; - - static get PARTS() { - const { form, footer } = super.PARTS; - return { - tabs: { template: `templates/generic/tab-navigation.hbs` }, - foundryTab: { - ...form, - template: filePath(`templates/TAFDocumentSheetConfig/foundry.hbs`), - templates: [ `templates/sheets/document-sheet-config.hbs` ], - }, - systemTab: { - template: filePath(`templates/TAFDocumentSheetConfig/system.hbs`), - classes: [`standard-form`], - }, - footer, - }; - }; - - static TABS = { - main: { - initial: `system`, - labelPrefix: `taf.Apps.TAFDocumentSheetConfig.tabs`, - tabs: [ - { id: `system` }, - { id: `foundry` }, - ], - }, - }; - // #endregion Options - - // #region Data Prep - async _preparePartContext(partID, context, options) { - this._prepareTabs(`main`); - - context.meta = { - idp: this.id, - }; - - switch (partID) { - case `foundryTab`: { - await this._prepareFormContext(context, options); - break; - }; - case `systemTab`: { - await this._prepareSystemSettingsContext(context, options); - break; - }; - case `footer`: { - await this._prepareFooterContext(context, options); - break; - }; - }; - return context; - }; - - async _prepareSystemSettingsContext(context, _options) { - // Inherited values for placeholders - const defaults = getDefaultSizing(); - context.placeholders = { - ...defaults, - resizable: defaults.resizable ? `Resizable` : `Not Resizable`, - }; - - // Custom values from document itself - const sheetConfig = this.document.getFlag(__ID__, `PlayerSheet`) ?? {}; - const sizing = sheetConfig.size ?? {}; - context.values = { - width: sizing.width, - height: sizing.height, - resizable: sizing.resizable ?? ``, - }; - - // Static prep - context.resizeOptions = [ - { label: `Default (${context.placeholders.resizable})`, value: `` }, - { label: `Resizable`, value: `true` }, - { label: `No Resizing`, value: `false` }, - ]; - }; - // #endregion Data Prep - - // #region Actions - /** @this {TAFDocumentSheetConfig} */ - static async #onSubmit(event, form, formData) { - const foundryReopen = await TAFDocumentSheetConfig.#submitFoundry.call(this, event, form, formData); - const systemReopen = await TAFDocumentSheetConfig.#submitSystem.call(this, event, form, formData); - if (foundryReopen || systemReopen) { - this.document._onSheetChange({ sheetOpen: true }); - }; - }; - - /** - * This method is mostly the form submission handler that foundry uses in - * DocumentSheetConfig, however because we clobber that in order to save our - * own config stuff as well, we need to duplicate Foundry's handling and tweak - * it a bit to make it work nicely with our custom saving. - * - * @this {TAFDocumentSheetConfig} - */ - static async #submitFoundry(_event, _form, formData) { - const { object } = formData; - const { documentName, type = CONST.BASE_DOCUMENT_TYPE } = this.document; - - // Update themes. - const themes = game.settings.get(`core`, `sheetThemes`); - const defaultTheme = foundry.utils.getProperty(themes, `defaults.${documentName}.${type}`); - const documentTheme = themes.documents?.[this.document.uuid]; - const themeChanged = (object.defaultTheme !== defaultTheme) || (object.theme !== documentTheme); - if (themeChanged) { - foundry.utils.setProperty(themes, `defaults.${documentName}.${type}`, object.defaultTheme); - themes.documents ??= {}; - themes.documents[this.document.uuid] = object.theme; - await game.settings.set(`core`, `sheetThemes`, themes); - } - - // Update sheets. - const { defaultClass } = this.constructor.getSheetClassesForSubType(documentName, type); - const sheetClass = this.document.getFlag(`core`, `sheetClass`) ?? ``; - const defaultSheetChanged = object.defaultClass !== defaultClass; - const documentSheetChanged = object.sheetClass !== sheetClass; - - if (themeChanged || (game.user.isGM && defaultSheetChanged)) { - if (game.user.isGM && defaultSheetChanged) { - const setting = game.settings.get(`core`, `sheetClasses`); - foundry.utils.setProperty(setting, `${documentName}.${type}`, object.defaultClass); - await game.settings.set(`core`, `sheetClasses`, setting); - } - - // This causes us to manually rerender the sheet due to the theme or default - // sheet class changing resulting in no update making it to the client-document's - // _onUpdate handling - if (!documentSheetChanged) { - return true; - } - } - - // Update the document-specific override. - if (documentSheetChanged) { - this.document.setFlag(`core`, `sheetClass`, object.sheetClass); - }; - return false; - }; - - /** @this {TAFDocumentSheetConfig} */ - static async #submitSystem(_event, _form, formData) { - const { FLAGS: flags } = expandObject(formData.object); - const diff = flattenObject(diffObject(this.document.flags, flags)); - const hasChanges = Object.keys(diff).length > 0; - if (hasChanges) { - await this.document.update({ flags }); - }; - return hasChanges; - }; - // #endregion Actions -}; diff --git a/module/apps/elements/Icon.mjs b/module/apps/elements/Icon.mjs deleted file mode 100644 index 50e1d5b..0000000 --- a/module/apps/elements/Icon.mjs +++ /dev/null @@ -1,11 +0,0 @@ -import { TafSVGLoader } from "./svgLoader.mjs"; - -/** -Attributes: -@property {string} name - The name of the icon, takes precedence over the path -@property {string} path - The path of the icon file -*/ -export class TafIcon extends TafSVGLoader { - static elementName = `taf-icon`; - static _stylePath = `icon.css`; -}; diff --git a/module/apps/elements/_index.mjs b/module/apps/elements/_index.mjs deleted file mode 100644 index dce2b24..0000000 --- a/module/apps/elements/_index.mjs +++ /dev/null @@ -1,24 +0,0 @@ -import { Logger } from "../../utils/Logger.mjs"; -import { TafIcon } from "./Icon.mjs"; -import { TafSVGLoader } from "./svgLoader.mjs"; - -const components = [ - TafSVGLoader, - TafIcon, -]; - -export function registerCustomComponents() { - (CONFIG.CACHE ??= {}).componentListeners ??= []; - for (const component of components) { - if (!window.customElements.get(component.elementName)) { - Logger.debug(`Registering component "${component.elementName}"`); - window.customElements.define( - component.elementName, - component, - ); - if (component.formAssociated) { - CONFIG.CACHE.componentListeners.push(component.elementName); - } - }; - } -}; diff --git a/module/consts.mjs b/module/consts.mjs deleted file mode 100644 index 0d33f25..0000000 --- a/module/consts.mjs +++ /dev/null @@ -1,9 +0,0 @@ -export const __ID__ = `taf`; - -// MARK: filePath -export function filePath(path) { - if (path.startsWith(`/`)) { - path = path.slice(1); - }; - return `systems/${__ID__}/${path}`; -}; diff --git a/module/data/Player.mjs b/module/data/Player.mjs deleted file mode 100644 index b2ad529..0000000 --- a/module/data/Player.mjs +++ /dev/null @@ -1,30 +0,0 @@ -export class PlayerData extends foundry.abstract.TypeDataModel { - static defineSchema() { - const fields = foundry.data.fields; - return { - content: new fields.HTMLField({ - blank: true, - trim: true, - initial: ``, - }), - attr: new fields.TypedObjectField( - new fields.SchemaField({ - name: new fields.StringField({ blank: false, trim: true }), - sort: new fields.NumberField({ min: 1, initial: 1, integer: true, nullable: false }), - value: new fields.NumberField({ min: 0, initial: 0, integer: true, nullable: false }), - max: new fields.NumberField({ min: 0, initial: null, integer: true, nullable: true }), - isRange: new fields.BooleanField({ initial: false, nullable: false }), - }), - { - initial: {}, - nullable: false, - required: true, - }, - ), - }; - }; - - get hasAttributes() { - return Object.keys(this.attr).length > 0; - }; -}; diff --git a/module/documents/Actor.mjs b/module/documents/Actor.mjs deleted file mode 100644 index ff72c77..0000000 --- a/module/documents/Actor.mjs +++ /dev/null @@ -1,45 +0,0 @@ -const { Actor } = foundry.documents; - -export class TAFActor extends Actor { - async modifyTokenAttribute(attribute, value, isDelta = false, isBar = true) { - const attr = foundry.utils.getProperty(this.system, attribute); - const current = isBar ? attr.value : attr; - const update = isDelta ? current + value : value; - if ( update === current ) { - return this; - }; - - // Determine the updates to make to the actor data - let updates; - if (isBar) { - updates = {[`system.${attribute}.value`]: Math.clamp(update, 0, attr.max)}; - } else { - updates = {[`system.${attribute}`]: update}; - }; - - // Allow a hook to override these changes - const allowed = Hooks.call(`modifyTokenAttribute`, {attribute, value, isDelta, isBar}, updates, this); - - return allowed !== false ? this.update(updates) : this; - }; - - getRollData() { - const data = {}; - - if (`attr` in this.system) { - for (const attrID in this.system.attr) { - const attr = this.system.attr[attrID]; - if (attr.isRange) { - data[attrID] = { - value: attr.value, - max: attr.max, - }; - } else { - data[attrID] = attr.value; - }; - }; - }; - - return data; - }; -}; diff --git a/module/documents/Item.mjs b/module/documents/Item.mjs deleted file mode 100644 index 683187e..0000000 --- a/module/documents/Item.mjs +++ /dev/null @@ -1,7 +0,0 @@ -const { Item } = foundry.documents; - -export class TAFItem extends Item { - async _preCreate() { - return false; - }; -}; diff --git a/module/documents/Token.mjs b/module/documents/Token.mjs deleted file mode 100644 index 068c737..0000000 --- a/module/documents/Token.mjs +++ /dev/null @@ -1,109 +0,0 @@ -const { TokenDocument } = foundry.documents; -const { getProperty, getType, hasProperty, isSubclass } = foundry.utils; - -export class TAFTokenDocument extends TokenDocument { - - /** - * @override - * This override's purpose is to make it so that Token attributes and bars can - * be accessed from the data model's values directly instead of relying on only - * the schema, which doesn't account for my TypedObjectField of attributes. - */ - static getTrackedAttributes(data, _path = []) { - - // Case 1 - Infer attributes from schema structure. - if ( (data instanceof foundry.abstract.DataModel) || isSubclass(data, foundry.abstract.DataModel) ) { - return this._getTrackedAttributesFromObject(data, _path); - } - if ( data instanceof foundry.data.fields.SchemaField ) { - return this._getTrackedAttributesFromSchema(data, _path); - } - - // Case 2 - Infer attributes from object structure. - if ( [`Object`, `Array`].includes(getType(data)) ) { - return this._getTrackedAttributesFromObject(data, _path); - } - - // Case 3 - Retrieve explicitly configured attributes. - if ( !data || (typeof data === `string`) ) { - const config = this._getConfiguredTrackedAttributes(data); - if ( config ) { - return config; - } - data = undefined; - } - - // Track the path and record found attributes - if ( data !== undefined ) { - return {bar: [], value: []}; - } - - // Case 4 - Infer attributes from system template. - const bar = new Set(); - const value = new Set(); - for ( const [type, model] of Object.entries(game.model.Actor) ) { - const dataModel = CONFIG.Actor.dataModels?.[type]; - const inner = this.getTrackedAttributes(dataModel ?? model, _path); - inner.bar.forEach(attr => bar.add(attr.join(`.`))); - inner.value.forEach(attr => value.add(attr.join(`.`))); - } - - return { - bar: Array.from(bar).map(attr => attr.split(`.`)), - value: Array.from(value).map(attr => attr.split(`.`)), - }; - }; - - /** - * @override - */ - getBarAttribute(barName, {alternative} = {}) { - const attribute = alternative || this[barName]?.attribute; - - if (!attribute || !this.actor) { - return null; - }; - const system = this.actor.system; - - // Get the current attribute value - const data = getProperty(system, attribute); - if (data == null) { - return null; - }; - - if (Number.isNumeric(data)) { - let editable = hasProperty(system, attribute); - return { - type: `value`, - attribute, - value: Number(data), - editable, - }; - }; - - if (`value` in data && `max` in data) { - let editable = hasProperty(system, `${attribute}.value`); - const isRange = getProperty(system, `${attribute}.isRange`); - if (isRange) { - return { - type: `bar`, - attribute, - value: parseInt(data.value || 0), - max: parseInt(data.max || 0), - editable, - }; - } else { - return { - type: `value`, - attribute: `${attribute}.value`, - value: Number(data.value), - editable, - }; - }; - }; - - // Otherwise null - return null; - }; - -}; diff --git a/module/handlebarsHelpers/_index.mjs b/module/handlebarsHelpers/_index.mjs deleted file mode 100644 index b613f61..0000000 --- a/module/handlebarsHelpers/_index.mjs +++ /dev/null @@ -1,7 +0,0 @@ -import { filePath } from "../consts.mjs"; -import { options } from "./options.mjs"; - -export default { - systemFilePath: filePath, - "taf-options": options, -}; diff --git a/module/hooks/init.mjs b/module/hooks/init.mjs deleted file mode 100644 index f3db2fb..0000000 --- a/module/hooks/init.mjs +++ /dev/null @@ -1,48 +0,0 @@ -// Apps -import { PlayerSheet } from "../apps/PlayerSheet.mjs"; - -// Data Models -import { PlayerData } from "../data/Player.mjs"; - -// Documents -import { TAFActor } from "../documents/Actor.mjs"; -import { TAFItem } from "../documents/Item.mjs"; -import { TAFTokenDocument } from "../documents/Token.mjs"; - -// Settings -import { registerWorldSettings } from "../settings/world.mjs"; - -// Utils -import { __ID__ } from "../consts.mjs"; -import helpers from "../handlebarsHelpers/_index.mjs"; -import { Logger } from "../utils/Logger.mjs"; -import { registerCustomComponents } from "../apps/elements/_index.mjs"; -import { registerSockets } from "../sockets/_index.mjs"; - -Hooks.on(`init`, () => { - Logger.debug(`Initializing`); - - CONFIG.Token.documentClass = TAFTokenDocument; - CONFIG.Actor.documentClass = TAFActor; - - CONFIG.Actor.dataModels.player = PlayerData; - - // We disable items in the system for now - CONFIG.Item.documentClass = TAFItem; - delete CONFIG.ui.sidebar.TABS.items; - - foundry.documents.collections.Actors.registerSheet( - __ID__, - PlayerSheet, - { - makeDefault: true, - label: `taf.sheet-names.PlayerSheet`, - }, - ); - - registerWorldSettings(); - - registerSockets(); - registerCustomComponents(); - Handlebars.registerHelper(helpers); -}); diff --git a/module/hooks/userConnected.mjs b/module/hooks/userConnected.mjs deleted file mode 100644 index ed50f34..0000000 --- a/module/hooks/userConnected.mjs +++ /dev/null @@ -1,6 +0,0 @@ -import { userActivity } from "../utils/QueryManager.mjs"; - -Hooks.on(`userConnected`, (user, connected) => { - if (user.isSelf) { return }; - userActivity(user.id, connected); -}); diff --git a/module/main.mjs b/module/main.mjs deleted file mode 100644 index 05cf7d9..0000000 --- a/module/main.mjs +++ /dev/null @@ -1,3 +0,0 @@ -import "./api.mjs"; -import "./hooks/init.mjs"; -import "./hooks/userConnected.mjs"; diff --git a/module/settings/world.mjs b/module/settings/world.mjs deleted file mode 100644 index 78462d7..0000000 --- a/module/settings/world.mjs +++ /dev/null @@ -1,12 +0,0 @@ -import { __ID__ } from "../consts.mjs"; - -export function registerWorldSettings() { - game.settings.register(__ID__, `canPlayersManageAttributes`, { - name: `taf.settings.canPlayersManageAttributes.name`, - hint: `taf.settings.canPlayersManageAttributes.hint`, - config: true, - type: Boolean, - default: false, - scope: `world`, - }); -}; diff --git a/module/sockets/_index.mjs b/module/sockets/_index.mjs deleted file mode 100644 index f824c9e..0000000 --- a/module/sockets/_index.mjs +++ /dev/null @@ -1,33 +0,0 @@ -import { Logger } from "../utils/Logger.mjs"; -import { queryCancel } from "./query/cancel.mjs"; -import { queryNotify } from "./query/notify.mjs"; -import { queryPrompt } from "./query/prompt.mjs"; -import { querySubmit } from "./query/submit.mjs"; - -const events = { - // Data Request sockets - "query.cancel": queryCancel, - "query.notify": queryNotify, - "query.prompt": queryPrompt, - "query.submit": querySubmit, -}; - -export function registerSockets() { - Logger.info(`Setting up socket listener`); - - game.socket.on(`system.taf`, (data, userID) => { - const { event, payload } = data ?? {}; - if (event == null || payload === undefined) { - ui.notifications.error(game.i18n.format(`taf.notifs.error.invalid-socket`)); - return; - }; - - if (events[event] == null) { - ui.notifications.error(game.i18n.format(`taf.notifs.error.unknown-socket-event`, { event })); - return; - }; - - const user = game.users.get(userID); - events[event](payload, user); - }); -}; diff --git a/module/sockets/query/cancel.mjs b/module/sockets/query/cancel.mjs deleted file mode 100644 index f8eeddc..0000000 --- a/module/sockets/query/cancel.mjs +++ /dev/null @@ -1,19 +0,0 @@ -import { DialogManager } from "../../utils/DialogManager.mjs"; -import { localizer } from "../../utils/localizer.mjs"; - -export async function queryCancel(payload) { - const { id } = payload; - - if (!id) { - ui.notifications.error(localizer( - `taf.notifs.error.malformed-socket-payload`, - { - event: `query.cancel`, - details: `taf.notifs.error.missing-id`, - }, - )); - return; - }; - - await DialogManager.close(id); -}; diff --git a/module/sockets/query/notify.mjs b/module/sockets/query/notify.mjs deleted file mode 100644 index 624e7b2..0000000 --- a/module/sockets/query/notify.mjs +++ /dev/null @@ -1,25 +0,0 @@ -import { localizer } from "../../utils/localizer.mjs"; -import { respondedToQueries } from "../../utils/QueryManager.mjs"; - -export function queryNotify(payload) { - const { id, userID, content, includeGM } = payload; - - if (userID !== game.user.id) { return }; - - // Ensure that each user can only get one notification about a query - if (!respondedToQueries.has(id)) { return }; - - let whisper = [game.user.id]; - if (includeGM) { - whisper = game.users.filter(u => u.isGM).map(u => u.id); - }; - - ChatMessage.implementation.create({ - flavor: localizer(`taf.misc.data-query-notif-header`), - content, - whisper, - style: CONST.CHAT_MESSAGE_STYLES.OOC, - }); - - respondedToQueries.delete(id); -}; diff --git a/module/sockets/query/prompt.mjs b/module/sockets/query/prompt.mjs deleted file mode 100644 index 8b1700f..0000000 --- a/module/sockets/query/prompt.mjs +++ /dev/null @@ -1,54 +0,0 @@ -import { DialogManager } from "../../utils/DialogManager.mjs"; -import { localizer } from "../../utils/localizer.mjs"; -import { respondedToQueries } from "../../utils/QueryManager.mjs"; - -export async function queryPrompt(payload) { - const { - id, - users, - config, - request, - } = payload; - - if (!id) { - ui.notifications.error(localizer( - `taf.notifs.error.malformed-socket-payload`, - { - event: `query.cancel`, - details: `taf.notifs.error.missing-id`, - }, - )); - return; - }; - - // null/undefined is a special case for "all users but me" by default - if (users != null && !Array.isArray(users)) { - ui.notifications.error(localizer( - `taf.notifs.error.malformed-socket-payload`, - { - event: `query.cancel`, - details: `taf.sockets.user-list-required`, - }, - )); - return; - }; - - if (users != null && !users.includes(game.user.id)) { return }; - - request.id = id; - const result = await DialogManager.ask(request, config); - if (result.state === `fronted`) { - return; - } else if (result.state === `errored`) { - ui.notifications.error(result.error); - } else if (result.state === `prompted`) { - respondedToQueries.add(request.id); - game.socket.emit(`system.taf`, { - event: `query.submit`, - payload: { - id: request.id, - answers: result.answers, - }, - }); - }; -}; diff --git a/module/sockets/query/submit.mjs b/module/sockets/query/submit.mjs deleted file mode 100644 index 023ed38..0000000 --- a/module/sockets/query/submit.mjs +++ /dev/null @@ -1,23 +0,0 @@ -import { addResponse, has as hasQuery } from "../../utils/QueryManager.mjs"; -import { localizer } from "../../utils/localizer.mjs"; - -export function querySubmit(payload, user) { - const { - id, - answers, - } = payload; - - if (!id) { - ui.notifications.error(localizer( - `taf.notifs.error.malformed-socket-payload`, - { - event: `query.cancel`, - details: `taf.notifs.error.missing-id`, - }, - )); - return; - }; - - if (!hasQuery(id)) { return }; - addResponse(id, user.id, answers); -}; diff --git a/module/utils/DialogManager.mjs b/module/utils/DialogManager.mjs deleted file mode 100644 index ab330f3..0000000 --- a/module/utils/DialogManager.mjs +++ /dev/null @@ -1,114 +0,0 @@ -import { Ask } from "../apps/Ask.mjs"; - -/** @type {Map} */ -const promises = new Map(); - -/** @type {Map} */ -const dialogs = new Map(); - -export function close(id) { - dialogs.get(id)?.close(); - dialogs.delete(id); - promises.delete(id); -}; - -/** - * Asks the user to provide a simple piece of information, this is primarily - * intended to be used within macros so that it can have better info gathering - * as needed. This returns an object of input keys/labels to the value the user - * input for that label, if there is only one input, this will return the value - * without an object wrapper, allowing for easier access. - * - * @param {AskConfig} data - * @param {AskOptions} opts - * @returns {AskResult} - */ -export async function ask( - data, - { - onlyOneWaiting = true, - alwaysUseAnswerObject = true, - } = {}, -) { - if (!data.id) { - return { - state: `errored`, - error: `An ID must be provided`, - }; - }; - if (!data.inputs.length) { - return { - state: `errored`, - error: `At least one input must be provided`, - }; - }; - const id = data.id; - - // Don't do multi-thread waiting - if (dialogs.has(id)) { - const app = dialogs.get(id); - app.bringToFront(); - if (onlyOneWaiting) { - return { state: `fronted` }; - } else { - return promises.get(id); - }; - }; - - let autofocusClaimed = false; - for (const i of data.inputs) { - i.id ??= foundry.utils.randomID(16); - i.key ??= i.label; - - switch (i.type) { - case `input`: { - i.inputType ??= `text`; - } - } - - // Only ever allow one input to claim autofocus - i.autofocus &&= !autofocusClaimed; - autofocusClaimed ||= i.autofocus; - - // Set the value's attribute name if it isn't specified explicitly - if (!i.valueAttribute) { - switch (i.inputType) { - case `checkbox`: - i.type = `checkbox`; - delete i.valueAttribute; - delete i.inputType; - break; - default: - i.valueAttribute = `value`; - }; - }; - }; - - const promise = new Promise((resolve) => { - const app = new Ask({ - ...data, - alwaysUseAnswerObject, - onClose: () => { - dialogs.delete(id); - promises.delete(id); - resolve({ state: `prompted` }); - }, - onConfirm: (answers) => resolve({ state: `prompted`, answers }), - }); - app.render({ force: true }); - dialogs.set(id, app); - }); - - promises.set(id, promise); - return promise; -}; - -export function size() { - return dialogs.size; -}; - -export const DialogManager = { - close, - ask, - size, -}; diff --git a/module/utils/QueryManager.mjs b/module/utils/QueryManager.mjs deleted file mode 100644 index abf1096..0000000 --- a/module/utils/QueryManager.mjs +++ /dev/null @@ -1,289 +0,0 @@ -import { filePath } from "../consts.mjs"; -import { Logger } from "./Logger.mjs"; -import { QueryStatus } from "../apps/QueryStatus.mjs"; - -/** - * An object containing information about the current status for all - * users involved with the data request. - * @typedef {Record< - * string, - * "finished" | "waiting" | "disconnected" | "unprompted" - * >} UserStatus - */ - -/** - * @typedef QueryData - * @property {string[]} users - * @property {Function} resolve - * @property {Record} responses - * @property {(() => Promise)|null} onSubmit - * @property {QueryStatus|null} app - * @property {UserStatus} status - * @property {object} request The data used to form the initial request - * @property {object} config The data used to create the initial config - */ - -/** - * This internal API is used in order to prevent the query.notify event - * from being fired off in situations where the user hasn't responded, - * wasn't part of the query, or has already been notified. - * @type {Set} - */ -export const respondedToQueries = new Set(); - -/** @type {Map} */ -const queries = new Map(); - -/** @type {Map} */ -const promises = new Map(); - -async function sendBasicNotification(requestID, userID, answers) { - const content = await foundry.applications.handlebars.renderTemplate( - filePath(`templates/query-response.hbs`), - { answers }, - ); - - await notify(requestID, userID, content, { includeGM: false }); -}; - -export function has(requestID) { - return queries.has(requestID); -}; - -/** @returns {Omit} */ -export function get(requestID) { - if (!queries.has(requestID)) { return null }; - const query = queries.get(requestID); - const cloned = foundry.utils.deepClone(query); - - delete cloned.onSubmit; - delete cloned.resolve; - delete cloned.app; - - return foundry.utils.deepFreeze(cloned); -}; - -export async function query( - request, - { - onSubmit = sendBasicNotification, - users = null, - showStatusApp = true, - ...config - } = {}, -) { - if (!request.id) { - ui.notifications.error(game.i18n.localize(`taf.notifs.error.missing-id`)); - return; - }; - - game.socket.emit(`system.taf`, { - event: `query.prompt`, - payload: { - id: request.id, - users, - request, - config, - }, - }); - - if (promises.has(request.id)) { - return null; - }; - - users ??= game.users - .filter(u => u.id !== game.user.id) - .map(u => u.id); - - const promise = new Promise((resolve) => { - - /** @type {UserStatus} */ - const status = {}; - for (const user of users) { - status[user] = game.users.get(user).active ? `waiting` : `disconnected`; - }; - - queries.set( - request.id, - { - users, - request, - config, - responses: {}, - resolve, - onSubmit, - app: null, - status, - }, - ); - }); - - if (showStatusApp) { - const app = new QueryStatus({ requestID: request.id }); - app.render({ force: true }); - queries.get(request.id).app = app; - }; - - return promise; -}; - -export async function requery(requestID, users) { - const query = queries.get(requestID); - if (!query) { return }; - - game.socket.emit(`system.taf`, { - event: `query.prompt`, - payload: { - id: requestID, - users, - request: query.request, - config: query.config, - }, - }); - - for (const user of users) { - query.status[user] = `waiting`; - }; - query.app?.render({ parts: [ `users` ] }); -}; - -export async function addResponse(requestID, userID, answers) { - if (!queries.has(requestID)) { return }; - const query = queries.get(requestID); - - // User closed the popup manually - if (answers == null) { - query.status[userID] = `unprompted`; - } - - // User submitted the answers as expected - else { - query.responses[userID] = answers; - query.status[userID] = `finished`; - await query.onSubmit?.(requestID, userID, answers); - }; - - await maybeResolve(requestID); -}; - -async function maybeResolve(requestID) { - const query = queries.get(requestID); - - // Determine how many users are considered "finished" - let finishedUserCount = 0; - for (const user of query.users) { - const hasApp = query.app != null; - - switch (query.status[user]) { - case `finished`: { - finishedUserCount++; - break; - }; - case `cancelled`: - case `disconnected`: - case `unprompted`: { - if (!hasApp) { - finishedUserCount++; - }; - break; - }; - }; - }; - - // Ensure that we have a finished response from everyone prompted - if (query.users.length === finishedUserCount) { - query.app?.close(); - query.resolve(query.responses); - queries.delete(requestID); - promises.delete(requestID); - } else { - query.app?.render({ parts: [ `users` ] }); - }; -}; - -export async function notify(requestID, userID, content, { includeGM = false } = {}) { - // Prevent sending notifications for not-your queries - if (!queries.has(requestID)) { return }; - - game.socket.emit(`system.taf`, { - event: `query.notify`, - payload: { - id: requestID, - userID, - content, - includeGM, - }, - }); -}; - -export async function finish(requestID) { - // prevent finishing other people's queries - if (!queries.has(requestID)) { return }; - - const query = queries.get(requestID); - query.app?.close(); - query.resolve(query.responses); - queries.delete(requestID); - promises.delete(requestID); - - game.socket.emit(`system.taf`, { - event: `query.cancel`, - payload: { id: requestID }, - }); -}; - -export async function cancel(requestID) { - // prevent cancelling other people's queries - if (!queries.has(requestID)) { return }; - - const query = queries.get(requestID); - query.app?.close(); - query.resolve(null); - queries.delete(requestID); - promises.delete(requestID); - - game.socket.emit(`system.taf`, { - event: `query.cancel`, - payload: { id: requestID }, - }); -}; - -export async function setApplication(requestID, app) { - if (!queries.has(requestID)) { return }; - if (!(app instanceof QueryStatus)) { return }; - const query = queries.get(requestID); - if (query.app) { - Logger.error(`Cannot set an application for a query that has one already`); - return; - }; - query.app = app; -}; - -export async function userActivity(userID, connected) { - for (const [id, query] of queries.entries()) { - if (query.users.includes(userID)) { - - // Update the user's status to allow for the app to re-prompt them - if (query.status[userID] !== `finished`) { - if (connected) { - query.status[userID] = `unprompted`; - } else { - query.status[userID] = `disconnected`; - }; - maybeResolve(id); - }; - - query.app?.render({ parts: [ `users` ] }); - }; - }; -}; - -export const QueryManager = { - has, get, - query, requery, - addResponse, - notify, - finish, cancel, - setApplication, - userActivity, -}; diff --git a/module/utils/attributeSort.mjs b/module/utils/attributeSort.mjs deleted file mode 100644 index 7e114d3..0000000 --- a/module/utils/attributeSort.mjs +++ /dev/null @@ -1,6 +0,0 @@ -export function attributeSorter(a, b) { - if (a.sort === b.sort) { - return a.name.localeCompare(b.name); - }; - return Math.sign(a.sort - b.sort); -}; diff --git a/module/utils/getSizing.mjs b/module/utils/getSizing.mjs deleted file mode 100644 index 63e6822..0000000 --- a/module/utils/getSizing.mjs +++ /dev/null @@ -1,32 +0,0 @@ -import { PlayerSheet } from "../apps/PlayerSheet.mjs"; - -/** - * @typedef SheetSizing - * @property {number} width The initial width of the application - * @property {number} height The initial height of the application - * @property {boolean} resizable Whether or not the application - * is able to be resized with a drag handle. - */ - -/** - * Retrieves the computed default sizing data based on world settings - * and the sheet class' DEFAULT_OPTIONS - * @returns {SheetSizing} - */ -export function getDefaultSizing() { - /** @type {SheetSizing} */ - const sizing = { - width: undefined, - height: undefined, - resizable: undefined, - }; - - // TODO: defaults from world settings - - // Defaults from the sheet class itself - sizing.height ||= PlayerSheet.DEFAULT_OPTIONS.position.height; - sizing.width ||= PlayerSheet.DEFAULT_OPTIONS.position.width; - sizing.resizable ||= PlayerSheet.DEFAULT_OPTIONS.window.resizable; - - return sizing; -}; diff --git a/module/utils/localizer.mjs b/module/utils/localizer.mjs deleted file mode 100644 index 7988039..0000000 --- a/module/utils/localizer.mjs +++ /dev/null @@ -1,32 +0,0 @@ -const config = Object.preventExtensions({ - subKeyPattern: /@(?[a-zA-Z.]+)/gm, - maxDepth: 10, -}); - -export function localizer(key, args = {}, depth = 0) { - /** @type {string} */ - let localized = game.i18n.format(key, args); - const subkeys = localized.matchAll(config.subKeyPattern); - - // Short-cut to help prevent infinite recursion - if (depth > config.maxDepth) { - return localized; - }; - - /* - Helps prevent recursion on the same key so that we aren't doing excess work. - */ - const localizedSubkeys = new Map(); - for (const match of subkeys) { - const subkey = match.groups.key; - if (localizedSubkeys.has(subkey)) { continue }; - localizedSubkeys.set(subkey, localizer(subkey, args, depth + 1)); - }; - - return localized.replace( - config.subKeyPattern, - (_fullMatch, subkey) => { - return localizedSubkeys.get(subkey); - }, - ); -}; diff --git a/module/utils/toID.mjs b/module/utils/toID.mjs deleted file mode 100644 index 312766e..0000000 --- a/module/utils/toID.mjs +++ /dev/null @@ -1,13 +0,0 @@ -/** - * A helper method that converts an arbitrary string into a format that can be - * used as an object key easily. - * - * @param {string} text The text to convert - * @returns The converted ID - */ -export function toID(text) { - return text - .toLowerCase() - .replace(/\s+/g, `_`) - .replace(/\W/g, ``); -}; diff --git a/package-lock.json b/package-lock.json index 27b1468..961d542 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,943 +5,26 @@ "packages": { "": { "devDependencies": { - "@aws-sdk/client-s3": "^3.934.0", "@eslint/js": "^9.8.0", "@foundryvtt/foundryvtt-cli": "^1.0.3", + "@league-of-foundry-developers/foundry-vtt-types": "^9.280.0", "@stylistic/eslint-plugin": "^2.6.1", - "axios": "^1.13.2", - "dotenv": "^17.2.2", "eslint": "^9.8.0", - "globals": "^15.9.0" - } - }, - "node_modules/@aws-crypto/crc32": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", - "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-crypto/crc32c": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", - "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/sha1-browser": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", - "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/supports-web-crypto": "^5.2.0", - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha256-browser": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", - "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-js": "^5.2.0", - "@aws-crypto/supports-web-crypto": "^5.2.0", - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha256-js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", - "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-crypto/supports-web-crypto": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", - "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", - "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "^3.222.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3": { - "version": "3.934.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.934.0.tgz", - "integrity": "sha512-dtg77FGTgt8WlqgrRriCOie/SUl0x0cx2itPgK6fkf3pRK0t1betQ0EUZM6VYQcj+hqVMzh/XRcr1TDm5n5eVw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha1-browser": "5.2.0", - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.934.0", - "@aws-sdk/credential-provider-node": "3.934.0", - "@aws-sdk/middleware-bucket-endpoint": "3.930.0", - "@aws-sdk/middleware-expect-continue": "3.930.0", - "@aws-sdk/middleware-flexible-checksums": "3.934.0", - "@aws-sdk/middleware-host-header": "3.930.0", - "@aws-sdk/middleware-location-constraint": "3.930.0", - "@aws-sdk/middleware-logger": "3.930.0", - "@aws-sdk/middleware-recursion-detection": "3.933.0", - "@aws-sdk/middleware-sdk-s3": "3.934.0", - "@aws-sdk/middleware-ssec": "3.930.0", - "@aws-sdk/middleware-user-agent": "3.934.0", - "@aws-sdk/region-config-resolver": "3.930.0", - "@aws-sdk/signature-v4-multi-region": "3.934.0", - "@aws-sdk/types": "3.930.0", - "@aws-sdk/util-endpoints": "3.930.0", - "@aws-sdk/util-user-agent-browser": "3.930.0", - "@aws-sdk/util-user-agent-node": "3.934.0", - "@smithy/config-resolver": "^4.4.3", - "@smithy/core": "^3.18.2", - "@smithy/eventstream-serde-browser": "^4.2.5", - "@smithy/eventstream-serde-config-resolver": "^4.3.5", - "@smithy/eventstream-serde-node": "^4.2.5", - "@smithy/fetch-http-handler": "^5.3.6", - "@smithy/hash-blob-browser": "^4.2.6", - "@smithy/hash-node": "^4.2.5", - "@smithy/hash-stream-node": "^4.2.5", - "@smithy/invalid-dependency": "^4.2.5", - "@smithy/md5-js": "^4.2.5", - "@smithy/middleware-content-length": "^4.2.5", - "@smithy/middleware-endpoint": "^4.3.9", - "@smithy/middleware-retry": "^4.4.9", - "@smithy/middleware-serde": "^4.2.5", - "@smithy/middleware-stack": "^4.2.5", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/node-http-handler": "^4.4.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/smithy-client": "^4.9.5", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.8", - "@smithy/util-defaults-mode-node": "^4.2.11", - "@smithy/util-endpoints": "^3.2.5", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-retry": "^4.2.5", - "@smithy/util-stream": "^4.5.6", - "@smithy/util-utf8": "^4.2.0", - "@smithy/util-waiter": "^4.2.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.934.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.934.0.tgz", - "integrity": "sha512-gsgJevqhY0j3x014ejhXtHLCA6o83FYm3rJoZG7tqoy3DnWerLv/FHaAnHI/+Q+csadqjoFkWGQTOedPoOunzA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.934.0", - "@aws-sdk/middleware-host-header": "3.930.0", - "@aws-sdk/middleware-logger": "3.930.0", - "@aws-sdk/middleware-recursion-detection": "3.933.0", - "@aws-sdk/middleware-user-agent": "3.934.0", - "@aws-sdk/region-config-resolver": "3.930.0", - "@aws-sdk/types": "3.930.0", - "@aws-sdk/util-endpoints": "3.930.0", - "@aws-sdk/util-user-agent-browser": "3.930.0", - "@aws-sdk/util-user-agent-node": "3.934.0", - "@smithy/config-resolver": "^4.4.3", - "@smithy/core": "^3.18.2", - "@smithy/fetch-http-handler": "^5.3.6", - "@smithy/hash-node": "^4.2.5", - "@smithy/invalid-dependency": "^4.2.5", - "@smithy/middleware-content-length": "^4.2.5", - "@smithy/middleware-endpoint": "^4.3.9", - "@smithy/middleware-retry": "^4.4.9", - "@smithy/middleware-serde": "^4.2.5", - "@smithy/middleware-stack": "^4.2.5", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/node-http-handler": "^4.4.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/smithy-client": "^4.9.5", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.8", - "@smithy/util-defaults-mode-node": "^4.2.11", - "@smithy/util-endpoints": "^3.2.5", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-retry": "^4.2.5", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/core": { - "version": "3.934.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.934.0.tgz", - "integrity": "sha512-b6k916ZxSrBwQPzeirncTIQXGnhps0HFOUakFt0ZEzjksePYUiEoU/SQ7VeY1j9JeAdJ24ejqddCiyLt99/3lg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.930.0", - "@aws-sdk/xml-builder": "3.930.0", - "@smithy/core": "^3.18.2", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/signature-v4": "^5.3.5", - "@smithy/smithy-client": "^4.9.5", - "@smithy/types": "^4.9.0", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.934.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.934.0.tgz", - "integrity": "sha512-bnpIGYm7Jy46dxZa1cxMQ1sF0n2iBIT+TpOPHK51sz1N2dYOicUVWUHMDgU2xIFOVcKaqV+GV4VyicMmvDBcBQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.934.0", - "@aws-sdk/types": "3.930.0", - "@smithy/property-provider": "^4.2.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.934.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.934.0.tgz", - "integrity": "sha512-WJcfFik7MPIgjE8lmuDcCqddHKRMpifzoBzTZWqUJJWYXIy0rDfNzt6pn3/TMLwVgnCGjnXlw6dChTxLzO60RQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.934.0", - "@aws-sdk/types": "3.930.0", - "@smithy/fetch-http-handler": "^5.3.6", - "@smithy/node-http-handler": "^4.4.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/smithy-client": "^4.9.5", - "@smithy/types": "^4.9.0", - "@smithy/util-stream": "^4.5.6", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.934.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.934.0.tgz", - "integrity": "sha512-3vVKGe1F2S09G9kC0ZcpWh09opyrGOgQETllqWbuxlTVd7zBgrZWloItLIvneSDP+dWvdLFUbkD7WDWNCeGiig==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.934.0", - "@aws-sdk/credential-provider-env": "3.934.0", - "@aws-sdk/credential-provider-http": "3.934.0", - "@aws-sdk/credential-provider-process": "3.934.0", - "@aws-sdk/credential-provider-sso": "3.934.0", - "@aws-sdk/credential-provider-web-identity": "3.934.0", - "@aws-sdk/nested-clients": "3.934.0", - "@aws-sdk/types": "3.930.0", - "@smithy/credential-provider-imds": "^4.2.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.934.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.934.0.tgz", - "integrity": "sha512-nguy36xi8nbH346dJjCmwWtOgfS4VfL7yHP+EEGmma+yg+J7mxgs8kA1NGQdJ8B46GdjlJPpI1P9pm7Pmz7nOw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.934.0", - "@aws-sdk/credential-provider-http": "3.934.0", - "@aws-sdk/credential-provider-ini": "3.934.0", - "@aws-sdk/credential-provider-process": "3.934.0", - "@aws-sdk/credential-provider-sso": "3.934.0", - "@aws-sdk/credential-provider-web-identity": "3.934.0", - "@aws-sdk/types": "3.930.0", - "@smithy/credential-provider-imds": "^4.2.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.934.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.934.0.tgz", - "integrity": "sha512-PhvpAgoJ88IOuqlUws9nvHuPex2jK+WS+0s00BQcRTwqPP0jtLT7eql6UfCRduwv2sIy3m1wnWDUubvbpejp/Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.934.0", - "@aws-sdk/types": "3.930.0", - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.934.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.934.0.tgz", - "integrity": "sha512-7wO86w95V9MZSYo2dunBKruKHdAUmgg9ccOSJSYGnPip1PPBK/rgSgQ8mDlYtFAW3/82bdeM/668QcgLT4+ofA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/client-sso": "3.934.0", - "@aws-sdk/core": "3.934.0", - "@aws-sdk/token-providers": "3.934.0", - "@aws-sdk/types": "3.930.0", - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.934.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.934.0.tgz", - "integrity": "sha512-hb+lvFxiAPcAvUorB0hrUd1kDjDRXhZgCi5426I8KUpGzZ+ALh8/ep0KXAiYe2yg9ZkyMUbMaMvYYhMFcbXRFA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.934.0", - "@aws-sdk/nested-clients": "3.934.0", - "@aws-sdk/types": "3.930.0", - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.930.0.tgz", - "integrity": "sha512-cnCLWeKPYgvV4yRYPFH6pWMdUByvu2cy2BAlfsPpvnm4RaVioztyvxmQj5PmVN5fvWs5w/2d6U7le8X9iye2sA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.930.0", - "@aws-sdk/util-arn-parser": "3.893.0", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", - "@smithy/util-config-provider": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.930.0.tgz", - "integrity": "sha512-5HEQ+JU4DrLNWeY27wKg/jeVa8Suy62ivJHOSUf6e6hZdVIMx0h/kXS1fHEQNNiLu2IzSEP/bFXsKBaW7x7s0g==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.930.0", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.934.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.934.0.tgz", - "integrity": "sha512-kAV0fhwUhh/CV8hR5iip+du5QSXvIsONERVY/iJPbiBItqsmFaWcwiZE9E+ORJPNyoT/3X17632W33pCweKGDQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/crc32": "5.2.0", - "@aws-crypto/crc32c": "5.2.0", - "@aws-crypto/util": "5.2.0", - "@aws-sdk/core": "3.934.0", - "@aws-sdk/types": "3.930.0", - "@smithy/is-array-buffer": "^4.2.0", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-stream": "^4.5.6", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.930.0.tgz", - "integrity": "sha512-x30jmm3TLu7b/b+67nMyoV0NlbnCVT5DI57yDrhXAPCtdgM1KtdLWt45UcHpKOm1JsaIkmYRh2WYu7Anx4MG0g==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.930.0", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.930.0.tgz", - "integrity": "sha512-QIGNsNUdRICog+LYqmtJ03PLze6h2KCORXUs5td/hAEjVP5DMmubhtrGg1KhWyctACluUH/E/yrD14p4pRXxwA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.930.0", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/middleware-logger": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.930.0.tgz", - "integrity": "sha512-vh4JBWzMCBW8wREvAwoSqB2geKsZwSHTa0nSt0OMOLp2PdTYIZDi0ZiVMmpfnjcx9XbS6aSluLv9sKx4RrG46A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.930.0", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.933.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.933.0.tgz", - "integrity": "sha512-qgrMlkVKzTCAdNw2A05DC2sPBo0KRQ7wk+lbYSRJnWVzcrceJhnmhoZVV5PFv7JtchK7sHVcfm9lcpiyd+XaCA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.930.0", - "@aws/lambda-invoke-store": "^0.2.0", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.934.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.934.0.tgz", - "integrity": "sha512-eU2R7pVOhCxnkDzq9mW+xh4WvCA3mdXVUHezIcJNFyKCKKv/c9I4WFcnMnUy+wnCWO2mzN/gwSgQxADkvxfLNQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.934.0", - "@aws-sdk/types": "3.930.0", - "@aws-sdk/util-arn-parser": "3.893.0", - "@smithy/core": "^3.18.2", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/signature-v4": "^5.3.5", - "@smithy/smithy-client": "^4.9.5", - "@smithy/types": "^4.9.0", - "@smithy/util-config-provider": "^4.2.0", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-stream": "^4.5.6", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.930.0.tgz", - "integrity": "sha512-N2/SvodmaDS6h7CWfuapt3oJyn1T2CBz0CsDIiTDv9cSagXAVFjPdm2g4PFJqrNBeqdDIoYBnnta336HmamWHg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.930.0", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.934.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.934.0.tgz", - "integrity": "sha512-68giGM2Zm9K6Qas14ws3Qo5wafpn0I8/L64fS9E6Rc6Tu0k+So73hupysw+9ZOzHwQS5FEBUqLOMtbUibAcjNA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.934.0", - "@aws-sdk/types": "3.930.0", - "@aws-sdk/util-endpoints": "3.930.0", - "@smithy/core": "^3.18.2", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/nested-clients": { - "version": "3.934.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.934.0.tgz", - "integrity": "sha512-kRO61EMrDR4UuPlKAkziG6urcYXlhrFW/Ce5PjWFdjkm0ZOge75OFV1vhf/vE4Pmoop9jaAONX4E5BaIYrIQfg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.934.0", - "@aws-sdk/middleware-host-header": "3.930.0", - "@aws-sdk/middleware-logger": "3.930.0", - "@aws-sdk/middleware-recursion-detection": "3.933.0", - "@aws-sdk/middleware-user-agent": "3.934.0", - "@aws-sdk/region-config-resolver": "3.930.0", - "@aws-sdk/types": "3.930.0", - "@aws-sdk/util-endpoints": "3.930.0", - "@aws-sdk/util-user-agent-browser": "3.930.0", - "@aws-sdk/util-user-agent-node": "3.934.0", - "@smithy/config-resolver": "^4.4.3", - "@smithy/core": "^3.18.2", - "@smithy/fetch-http-handler": "^5.3.6", - "@smithy/hash-node": "^4.2.5", - "@smithy/invalid-dependency": "^4.2.5", - "@smithy/middleware-content-length": "^4.2.5", - "@smithy/middleware-endpoint": "^4.3.9", - "@smithy/middleware-retry": "^4.4.9", - "@smithy/middleware-serde": "^4.2.5", - "@smithy/middleware-stack": "^4.2.5", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/node-http-handler": "^4.4.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/smithy-client": "^4.9.5", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.8", - "@smithy/util-defaults-mode-node": "^4.2.11", - "@smithy/util-endpoints": "^3.2.5", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-retry": "^4.2.5", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.930.0.tgz", - "integrity": "sha512-KL2JZqH6aYeQssu1g1KuWsReupdfOoxD6f1as2VC+rdwYFUu4LfzMsFfXnBvvQWWqQ7rZHWOw1T+o5gJmg7Dzw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.930.0", - "@smithy/config-resolver": "^4.4.3", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.934.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.934.0.tgz", - "integrity": "sha512-cLphxVoHapSdouAdLSDEwR2Bktjg5dc11EpSpaLo8jcFpAXhFaDllKBfDfws0EqGY6N2CMqEjqPqxDFzmmQOQA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.934.0", - "@aws-sdk/types": "3.930.0", - "@smithy/protocol-http": "^5.3.5", - "@smithy/signature-v4": "^5.3.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/token-providers": { - "version": "3.934.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.934.0.tgz", - "integrity": "sha512-M0WEmgXDdUxapSfjplqJoVCBMcn0vQ5Jou0X/XiQwyVDbfvIyNSHUHyMXEIBAew9kVx9sfMMEYz3LXewvQxdCA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.934.0", - "@aws-sdk/nested-clients": "3.934.0", - "@aws-sdk/types": "3.930.0", - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/types": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.930.0.tgz", - "integrity": "sha512-we/vaAgwlEFW7IeftmCLlLMw+6hFs3DzZPJw7lVHbj/5HJ0bz9gndxEsS2lQoeJ1zhiiLqAqvXxmM43s0MBg0A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.893.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.893.0.tgz", - "integrity": "sha512-u8H4f2Zsi19DGnwj5FSZzDMhytYF/bCh37vAtBsn3cNDL3YG578X5oc+wSX54pM3tOxS+NY7tvOAo52SW7koUA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/util-endpoints": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.930.0.tgz", - "integrity": "sha512-M2oEKBzzNAYr136RRc6uqw3aWlwCxqTP1Lawps9E1d2abRPvl1p1ztQmmXp1Ak4rv8eByIZ+yQyKQ3zPdRG5dw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.930.0", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", - "@smithy/util-endpoints": "^3.2.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/util-locate-window": { - "version": "3.893.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.893.0.tgz", - "integrity": "sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.930.0.tgz", - "integrity": "sha512-q6lCRm6UAe+e1LguM5E4EqM9brQlDem4XDcQ87NzEvlTW6GzmNCO0w1jS0XgCFXQHjDxjdlNFX+5sRbHijwklg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.930.0", - "@smithy/types": "^4.9.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.934.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.934.0.tgz", - "integrity": "sha512-vPRR4PaqNmuOQJSzq4EAVwFHUaSpPtgDgCEc7AYbArIy+59fckb6JNddlrjx4w4iWbqO0d+7OC5PtRcIk0AcZA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/middleware-user-agent": "3.934.0", - "@aws-sdk/types": "3.930.0", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } - } - }, - "node_modules/@aws-sdk/xml-builder": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.930.0.tgz", - "integrity": "sha512-YIfkD17GocxdmlUVc3ia52QhcWuRIUJonbF8A2CYfcWNV3HzvAqpcPeC0bYUhkK+8e8YO1ARnLKZQE0TlwzorA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.9.0", - "fast-xml-parser": "5.2.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws/lambda-invoke-store": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.0.tgz", - "integrity": "sha512-D1jAmAZQYMoPiacfgNf7AWhg3DFN3Wq/vQv3WINt9znwjzHp2x+WzdJFxxj7xZL7V1U79As6G8f7PorMYWBKsQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.0.0" + "globals": "^15.9.0", + "sass": "^1.77.8" } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, - "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.4.3" + "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "funding": { - "url": "https://opencollective.com/eslint" - }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } @@ -951,7 +34,6 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -960,23 +42,21 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", "dev": true, - "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/config-array": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", - "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.17.1.tgz", + "integrity": "sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^2.1.7", + "@eslint/object-schema": "^2.1.4", "debug": "^4.3.1", "minimatch": "^3.1.2" }, @@ -984,62 +64,11 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/config-array/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/config-array/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, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", - "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.17.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/core": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", - "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", "dev": true, - "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -1058,23 +87,11 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=18" }, @@ -1082,70 +99,37 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/eslintrc/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, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/@eslint/js": { - "version": "9.39.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", - "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", + "version": "9.8.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.8.0.tgz", + "integrity": "sha512-MfluB7EUfxXtv3i/++oh89uzAr4PDI4nn201hsp+qaXqsjAWzinlZEHEfPgAX4doIlKvPG/i0A9dpKxOLII8yA==", "dev": true, - "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" } }, "node_modules/@eslint/object-schema": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", - "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", - "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.17.0", - "levn": "^0.4.1" - }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@foundryvtt/foundryvtt-cli": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@foundryvtt/foundryvtt-cli/-/foundryvtt-cli-1.1.0.tgz", - "integrity": "sha512-ergKZDUSgQ79168r38ORyN4v/UTliA40rxElaUh5iS27Qw9H8Ep/ll8j3/HfiikO3XUDwYxZLfDJfbcyj2i9TQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@foundryvtt/foundryvtt-cli/-/foundryvtt-cli-1.0.3.tgz", + "integrity": "sha512-M8NrMXFYpOEsLAbgRWfuMvUa9F6HwrROLtqhhBljqfVS1lgm0RJJY/7MObuXsTJOC6+Uu+QOPZTlw4k+hguG7w==", "dev": true, - "license": "MIT", "dependencies": { - "chalk": "^5.4.1", - "classic-level": "^1.4.1", + "chalk": "^5.2.0", + "classic-level": "^1.2.0", "esm": "^3.2.25", "js-yaml": "^4.1.0", - "mkdirp": "^3.0.1", - "nedb-promises": "^6.2.3", - "yargs": "^17.7.2" + "mkdirp": "^3.0.0", + "nedb-promises": "^6.2.1", + "yargs": "^17.7.1" }, "bin": { "fvtt": "fvtt.mjs" @@ -1154,28 +138,16 @@ "node": ">17.0.0" } }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "node_modules/@foundryvtt/foundryvtt-cli/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, - "license": "Apache-2.0", "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, - "engines": { - "node": ">=18.18.0" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/@humanwhocodes/module-importer": { @@ -1183,7 +155,6 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -1193,11 +164,10 @@ } }, "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", + "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=18.18" }, @@ -1206,12 +176,27 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@league-of-foundry-developers/foundry-vtt-types": { + "version": "9.280.0", + "resolved": "https://registry.npmjs.org/@league-of-foundry-developers/foundry-vtt-types/-/foundry-vtt-types-9.280.0.tgz", + "integrity": "sha512-Dv8/+kgAnI2F5snSWcnMnZsgO/87AFyBruflluZkWDbP7Pm5qi32GlNYCDEg7HMKybzyKmgLV2qXMmYPHtCT7w==", + "dev": true, + "dependencies": { + "@pixi/graphics-smooth": "0.0.22", + "@types/jquery": "~3.5.9", + "@types/simple-peer": "~9.11.1", + "handlebars": "4.7.7", + "pixi-particles": "4.3.1", + "pixi.js": "5.3.11", + "socket.io-client": "4.3.2", + "tinymce": "5.10.1" + } + }, "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, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -1225,7 +210,6 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } @@ -1235,7 +219,6 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -1244,6 +227,2133 @@ "node": ">= 8" } }, + "node_modules/@pixi/accessibility": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/accessibility/-/accessibility-5.3.11.tgz", + "integrity": "sha512-/oSizd8/g6KUCeAlknMLJ9CRxBt+vWs6e2DrOctMoRupEHcmhICCjIyAp5GF6RZy9T9gNHDOU5p7vo7qEyVxgQ==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/accessibility/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/accessibility/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/accessibility/node_modules/@pixi/display": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.11.tgz", + "integrity": "sha512-rxUyB+RMJ7esEa11HdvzsularDGkYlRqpUn1ju9ZsRuB/Qo9JiVolywvWGSWxN/WnDGfrU2GjDpq9id10nwiag==", + "dev": true, + "dependencies": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/accessibility/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/accessibility/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/accessibility/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/accessibility/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/accessibility/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/app": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/app/-/app-5.3.11.tgz", + "integrity": "sha512-ZWrOjGvVl+lK5OJQT3OqSnSRtU2XgQSe/ULg2uGsSWUqMkJews33JIGOjvk4tIsjm4ekSKiPZRMdYFHzPfgEJg==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11" + } + }, + "node_modules/@pixi/app/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/app/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/app/node_modules/@pixi/display": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.11.tgz", + "integrity": "sha512-rxUyB+RMJ7esEa11HdvzsularDGkYlRqpUn1ju9ZsRuB/Qo9JiVolywvWGSWxN/WnDGfrU2GjDpq9id10nwiag==", + "dev": true, + "dependencies": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/app/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/app/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/app/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/app/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/app/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/constants": { + "version": "6.5.10", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-6.5.10.tgz", + "integrity": "sha512-PUF2Y9YISRu5eVrVVHhHCWpc/KmxQTg3UH8rIUs8UI9dCK41/wsPd3pEahzf7H47v7x1HCohVZcFO3XQc1bUDw==", + "dev": true, + "peer": true + }, + "node_modules/@pixi/core": { + "version": "6.5.10", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-6.5.10.tgz", + "integrity": "sha512-Gdzp5ENypyglvsh5Gv3teUZnZnmizo4xOsL+QqmWALdFlJXJwLJMVhKVThV/q/095XR6i4Ou54oshn+m4EkuFw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/offscreencanvas": "^2019.6.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + }, + "peerDependencies": { + "@pixi/constants": "6.5.10", + "@pixi/extensions": "6.5.10", + "@pixi/math": "6.5.10", + "@pixi/runner": "6.5.10", + "@pixi/settings": "6.5.10", + "@pixi/ticker": "6.5.10", + "@pixi/utils": "6.5.10" + } + }, + "node_modules/@pixi/display": { + "version": "6.5.10", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-6.5.10.tgz", + "integrity": "sha512-NxFdDDxlbH5fQkzGHraLGoTMucW9pVgXqQm13TSmkA3NWIi/SItHL4qT2SI8nmclT9Vid1VDEBCJFAbdeuQw1Q==", + "dev": true, + "peer": true, + "peerDependencies": { + "@pixi/constants": "6.5.10", + "@pixi/math": "6.5.10", + "@pixi/settings": "6.5.10", + "@pixi/utils": "6.5.10" + } + }, + "node_modules/@pixi/extensions": { + "version": "6.5.10", + "resolved": "https://registry.npmjs.org/@pixi/extensions/-/extensions-6.5.10.tgz", + "integrity": "sha512-EIUGza+E+sCy3dupuIjvRK/WyVyfSzHb5XsxRaxNrPwvG1iIUIqNqZ3owLYCo4h17fJWrj/yXVufNNtUKQccWQ==", + "dev": true, + "peer": true + }, + "node_modules/@pixi/extract": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/extract/-/extract-5.3.11.tgz", + "integrity": "sha512-YeBrpIO3E5HUgcdKEldCUqwwDNHm5OBe98YFcdLr5Z0+dQaHnxp9Dm4n75/NojoGb5guYdrV00x+gU2UPHsVdw==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/extract/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/extract/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/extract/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/extract/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/extract/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/extract/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/extract/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/filter-alpha": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/filter-alpha/-/filter-alpha-5.3.11.tgz", + "integrity": "sha512-HC4PbiEqDWSi3A715av7knFqD3knSXRxPJKG9mWat2CU9eCizSw+JxXp/okMU/fL4ewooiqQWVU2l1wXOHhVFw==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11" + } + }, + "node_modules/@pixi/filter-alpha/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/filter-alpha/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/filter-alpha/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/filter-alpha/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/filter-alpha/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/filter-alpha/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/filter-alpha/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/filter-blur": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/filter-blur/-/filter-blur-5.3.11.tgz", + "integrity": "sha512-iW5cOMEcDiJidOV95bUfhxdcvwM9JzCoWAd+92gAie8L+ElRSHpu1jxXbKHjo/QczQV1LulOlheyDaJNpaBCDg==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11", + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/filter-blur/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/filter-blur/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/filter-blur/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/filter-blur/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/filter-blur/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/filter-blur/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/filter-blur/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/filter-color-matrix": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/filter-color-matrix/-/filter-color-matrix-5.3.11.tgz", + "integrity": "sha512-u9NT4+N1I3XV9ygwsmF8/jIwCLqNCLeFOdM4f73kbw/UmakZZ6i6xjjJMc5YFUpC25qDr1TFlqgdGGGHAPl4ug==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11" + } + }, + "node_modules/@pixi/filter-color-matrix/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/filter-color-matrix/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/filter-color-matrix/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/filter-color-matrix/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/filter-color-matrix/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/filter-color-matrix/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/filter-color-matrix/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/filter-displacement": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/filter-displacement/-/filter-displacement-5.3.11.tgz", + "integrity": "sha512-CTIy7C/L9I1X3VNx4nMzQbMFvznsGk2viQh0dSo8r5NLgmaAdxhkGI0KUpNjLBz30278tzFfNuRe59K1y1kHuw==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11", + "@pixi/math": "5.3.11" + } + }, + "node_modules/@pixi/filter-displacement/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/filter-displacement/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/filter-displacement/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/filter-displacement/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/filter-displacement/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/filter-displacement/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/filter-displacement/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/filter-fxaa": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/filter-fxaa/-/filter-fxaa-5.3.11.tgz", + "integrity": "sha512-0ahjui5385e1vRvd7zCc0n5W8ULtNI1uVbDJHP9ueeiF25TKC0GqtZzntNwrQPoU46q8zXdnIGjzMpikbbAasg==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11" + } + }, + "node_modules/@pixi/filter-fxaa/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/filter-fxaa/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/filter-fxaa/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/filter-fxaa/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/filter-fxaa/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/filter-fxaa/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/filter-fxaa/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/filter-noise": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/filter-noise/-/filter-noise-5.3.11.tgz", + "integrity": "sha512-98WC9Nd5u2F03Ned9T3vnbmO/YF1jLSioZ623z9wjqpd5DosZgRtYTSGxjVcXTSfpviIuiJpkyF+X097pbVprg==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11" + } + }, + "node_modules/@pixi/filter-noise/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/filter-noise/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/filter-noise/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/filter-noise/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/filter-noise/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/filter-noise/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/filter-noise/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/graphics": { + "version": "6.5.10", + "resolved": "https://registry.npmjs.org/@pixi/graphics/-/graphics-6.5.10.tgz", + "integrity": "sha512-KPHGJ910fi8bRQQ+VcTIgrK+bKIm8yAQaZKPqMtm14HzHPGcES6HkgeNY1sd7m8J4aS9btm5wOSyFu0p5IzTpA==", + "dev": true, + "peer": true, + "peerDependencies": { + "@pixi/constants": "6.5.10", + "@pixi/core": "6.5.10", + "@pixi/display": "6.5.10", + "@pixi/math": "6.5.10", + "@pixi/sprite": "6.5.10", + "@pixi/utils": "6.5.10" + } + }, + "node_modules/@pixi/graphics-smooth": { + "version": "0.0.22", + "resolved": "https://registry.npmjs.org/@pixi/graphics-smooth/-/graphics-smooth-0.0.22.tgz", + "integrity": "sha512-qq2u+BJBIDBuuSTc2Xzm1D/8RiiKBdxnVDiMb7Go5v8achnV5ctC6m+rf8Mq0sWm66mbOqu1aq/9efT4A4sPrA==", + "dev": true, + "engines": { + "node": ">=14", + "npm": ">=7" + }, + "peerDependencies": { + "@pixi/constants": "^6.0.4", + "@pixi/core": "^6.0.4", + "@pixi/display": "^6.0.4", + "@pixi/graphics": "^6.0.4", + "@pixi/math": "^6.0.4", + "@pixi/utils": "^6.0.4" + } + }, + "node_modules/@pixi/interaction": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/interaction/-/interaction-5.3.11.tgz", + "integrity": "sha512-n2K99CYyBcrf8NPxpzmZ5IlJ9TEplsSZfJ/uzMNOEnTObKl4wAhxs51Nb58raH3Ouzwu14YHOpqYrBTEoT1yPA==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/interaction/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/interaction/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/interaction/node_modules/@pixi/display": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.11.tgz", + "integrity": "sha512-rxUyB+RMJ7esEa11HdvzsularDGkYlRqpUn1ju9ZsRuB/Qo9JiVolywvWGSWxN/WnDGfrU2GjDpq9id10nwiag==", + "dev": true, + "dependencies": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/interaction/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/interaction/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/interaction/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/interaction/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/interaction/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/loaders": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/loaders/-/loaders-5.3.11.tgz", + "integrity": "sha512-1HAeb/NFXyhNhZWAbVkngsTPBGpjZEPhQflBTrKycRaub7XDSZ8F0fwPltpKKVRWNDT+HBgU/zDNE2fpjzqfYg==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11", + "@pixi/utils": "5.3.11", + "resource-loader": "^3.0.1" + } + }, + "node_modules/@pixi/loaders/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/loaders/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/loaders/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/loaders/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/loaders/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/loaders/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/loaders/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/math": { + "version": "6.5.10", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-6.5.10.tgz", + "integrity": "sha512-fxeu7ykVbMGxGV2S3qRTupHToeo1hdWBm8ihyURn3BMqJZe2SkZEECPd5RyvIuuNUtjRnmhkZRnF3Jsz2S+L0g==", + "dev": true, + "peer": true + }, + "node_modules/@pixi/mesh": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/mesh/-/mesh-5.3.11.tgz", + "integrity": "sha512-KWKKksEr0YuUX1uz1FmpIa/Y37b/0pvFUS+87LoyYq0mRtGbKsTY5i3lBPG/taHwN7a2DQAX3JZpw6yhGKoGpA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/mesh-extras": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/mesh-extras/-/mesh-extras-5.3.11.tgz", + "integrity": "sha512-1GTCMMUW1xv/72x26cxRysblBXW0wU77TNgqtSIMZ1M6JbleObChklWTvwi9MzQO2vQ3S6Hvcsa5m5EiM2hSPQ==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/core": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/mesh": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/mesh-extras/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/mesh-extras/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/mesh-extras/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/mesh-extras/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/mesh-extras/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/mesh-extras/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/mesh-extras/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/mesh/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/mesh/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/mesh/node_modules/@pixi/display": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.11.tgz", + "integrity": "sha512-rxUyB+RMJ7esEa11HdvzsularDGkYlRqpUn1ju9ZsRuB/Qo9JiVolywvWGSWxN/WnDGfrU2GjDpq9id10nwiag==", + "dev": true, + "dependencies": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/mesh/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/mesh/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/mesh/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/mesh/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/mesh/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/mixin-cache-as-bitmap": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/mixin-cache-as-bitmap/-/mixin-cache-as-bitmap-5.3.11.tgz", + "integrity": "sha512-uQUxatGTTD5zfQ0pWdjibVjT+xEEZJ/xZDZtm/GxC7HSHd4jgoJBcTXWVhbhzwpLPVTnD8+sMnRrGlhoKcpTpQ==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/sprite": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/mixin-cache-as-bitmap/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/mixin-cache-as-bitmap/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/mixin-cache-as-bitmap/node_modules/@pixi/display": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.11.tgz", + "integrity": "sha512-rxUyB+RMJ7esEa11HdvzsularDGkYlRqpUn1ju9ZsRuB/Qo9JiVolywvWGSWxN/WnDGfrU2GjDpq9id10nwiag==", + "dev": true, + "dependencies": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/mixin-cache-as-bitmap/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/mixin-cache-as-bitmap/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/mixin-cache-as-bitmap/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/mixin-cache-as-bitmap/node_modules/@pixi/sprite": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/sprite/-/sprite-5.3.11.tgz", + "integrity": "sha512-RM6Sp8kqzsBdX/hDAO25HZywe9VU4uhOronUOQ5Ve0zRe+trdBWQYfi7+5kAcvzqkp25Izc0C+e+4YCqe5OaHQ==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/mixin-cache-as-bitmap/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/mixin-cache-as-bitmap/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/mixin-get-child-by-name": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/mixin-get-child-by-name/-/mixin-get-child-by-name-5.3.11.tgz", + "integrity": "sha512-fWFVxWtMYcwJttrgDNmZ4CJrx316p8ToNliC2ILmJZW77me7I4GzJ57gSHQU1xFwdHoOYRC4fnlrZoK5qJ9lDw==", + "dev": true, + "dependencies": { + "@pixi/display": "5.3.11" + } + }, + "node_modules/@pixi/mixin-get-child-by-name/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/mixin-get-child-by-name/node_modules/@pixi/display": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.11.tgz", + "integrity": "sha512-rxUyB+RMJ7esEa11HdvzsularDGkYlRqpUn1ju9ZsRuB/Qo9JiVolywvWGSWxN/WnDGfrU2GjDpq9id10nwiag==", + "dev": true, + "dependencies": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/mixin-get-child-by-name/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/mixin-get-child-by-name/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/mixin-get-child-by-name/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/mixin-get-global-position": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/mixin-get-global-position/-/mixin-get-global-position-5.3.11.tgz", + "integrity": "sha512-wrS9i+UUodLM5XL2N0Y+XSKiqLRdJV3ltFUWG6+jPT5yoP0HsKtx3sFAzX526RwIYwRzRusbc/quxHfRA4tvgg==", + "dev": true, + "dependencies": { + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11" + } + }, + "node_modules/@pixi/mixin-get-global-position/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/mixin-get-global-position/node_modules/@pixi/display": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.11.tgz", + "integrity": "sha512-rxUyB+RMJ7esEa11HdvzsularDGkYlRqpUn1ju9ZsRuB/Qo9JiVolywvWGSWxN/WnDGfrU2GjDpq9id10nwiag==", + "dev": true, + "dependencies": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/mixin-get-global-position/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/mixin-get-global-position/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/mixin-get-global-position/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/particles": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/particles/-/particles-5.3.11.tgz", + "integrity": "sha512-+mkt/inWXtRrxQc07RZ29uNIDWV1oMsrRBVBIvHgpR92Kn8EjIDRgoSXNu0jiZ18gRKKCBhwsS4dCXGsZRQ/sA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/particles/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/particles/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/particles/node_modules/@pixi/display": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.11.tgz", + "integrity": "sha512-rxUyB+RMJ7esEa11HdvzsularDGkYlRqpUn1ju9ZsRuB/Qo9JiVolywvWGSWxN/WnDGfrU2GjDpq9id10nwiag==", + "dev": true, + "dependencies": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/particles/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/particles/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/particles/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/particles/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/particles/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/polyfill": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/polyfill/-/polyfill-5.3.11.tgz", + "integrity": "sha512-yQOngcnn+2/L7n6L/g45hCnIDLWdnWmmcCY3UKJrOgbNX+JtLru1RR8AGLifkdsa0R5u48x584YQGqkTAChWVA==", + "dev": true, + "dependencies": { + "es6-promise-polyfill": "^1.2.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/@pixi/prepare": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/prepare/-/prepare-5.3.11.tgz", + "integrity": "sha512-TvjGeg7xPKjv5NxbM5NXReno9yxUCw/N0HtDEtEFRVeBLN3u0Q/dZsXxL6gIvkHoS09NFW+7AwsYQLZrVbppjA==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/graphics": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/text": "5.3.11", + "@pixi/ticker": "5.3.11" + } + }, + "node_modules/@pixi/prepare/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/prepare/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/prepare/node_modules/@pixi/display": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.11.tgz", + "integrity": "sha512-rxUyB+RMJ7esEa11HdvzsularDGkYlRqpUn1ju9ZsRuB/Qo9JiVolywvWGSWxN/WnDGfrU2GjDpq9id10nwiag==", + "dev": true, + "dependencies": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/prepare/node_modules/@pixi/graphics": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/graphics/-/graphics-5.3.11.tgz", + "integrity": "sha512-HLu53LV6mRlY0uFSIM2OrCuL7xqXzeJs5d2QfmUJfKJVVZ9sbHDS+6/N/f0tXzvkRPYhSKXvcNPsNn4HmlIE9w==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/sprite": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/prepare/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/prepare/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/prepare/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/prepare/node_modules/@pixi/sprite": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/sprite/-/sprite-5.3.11.tgz", + "integrity": "sha512-RM6Sp8kqzsBdX/hDAO25HZywe9VU4uhOronUOQ5Ve0zRe+trdBWQYfi7+5kAcvzqkp25Izc0C+e+4YCqe5OaHQ==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/prepare/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/prepare/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/runner": { + "version": "6.5.10", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-6.5.10.tgz", + "integrity": "sha512-4HiHp6diCmigJT/DSbnqQP62OfWKmZB7zPWMdV1AEdr4YT1QxzXAW1wHg7dkoEfyTHqZKl0tm/zcqKq/iH7tMA==", + "dev": true, + "peer": true + }, + "node_modules/@pixi/settings": { + "version": "6.5.10", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-6.5.10.tgz", + "integrity": "sha512-ypAS5L7pQ2Qb88yQK72bXtc7sD8OrtLWNXdZ/gnw5kwSWCFaOSoqhKqJCXrR5DQtN98+RQefwbEAmMvqobhFyw==", + "dev": true, + "peer": true, + "peerDependencies": { + "@pixi/constants": "6.5.10" + } + }, + "node_modules/@pixi/sprite": { + "version": "6.5.10", + "resolved": "https://registry.npmjs.org/@pixi/sprite/-/sprite-6.5.10.tgz", + "integrity": "sha512-UiK+8LgM9XQ/SBDKjRgZ8WggdOSlFRXqiWjEZVmNkiyU8HvXeFzWPRhpc8RR1zDwAUhZWKtMhF8X/ba9m+z2lg==", + "dev": true, + "peer": true, + "peerDependencies": { + "@pixi/constants": "6.5.10", + "@pixi/core": "6.5.10", + "@pixi/display": "6.5.10", + "@pixi/math": "6.5.10", + "@pixi/settings": "6.5.10", + "@pixi/utils": "6.5.10" + } + }, + "node_modules/@pixi/sprite-animated": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/sprite-animated/-/sprite-animated-5.3.11.tgz", + "integrity": "sha512-xU1b6H8nJ1l05h7cBGw2DGo4QdLj7xootstZUx2BrTVX5ZENn5mjAGVD0uRpk8yt7Q6Bj7M+PS7ktzAgBW/hmQ==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11", + "@pixi/sprite": "5.3.11", + "@pixi/ticker": "5.3.11" + } + }, + "node_modules/@pixi/sprite-animated/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/sprite-animated/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/sprite-animated/node_modules/@pixi/display": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.11.tgz", + "integrity": "sha512-rxUyB+RMJ7esEa11HdvzsularDGkYlRqpUn1ju9ZsRuB/Qo9JiVolywvWGSWxN/WnDGfrU2GjDpq9id10nwiag==", + "dev": true, + "dependencies": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/sprite-animated/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/sprite-animated/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/sprite-animated/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/sprite-animated/node_modules/@pixi/sprite": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/sprite/-/sprite-5.3.11.tgz", + "integrity": "sha512-RM6Sp8kqzsBdX/hDAO25HZywe9VU4uhOronUOQ5Ve0zRe+trdBWQYfi7+5kAcvzqkp25Izc0C+e+4YCqe5OaHQ==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/sprite-animated/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/sprite-animated/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/sprite-tiling": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/sprite-tiling/-/sprite-tiling-5.3.11.tgz", + "integrity": "sha512-KUiWsIumjrnp9QKGMe1BqtrV9Hxm91KoaiOlCBk/gw8753iKvuMmH+/Z0RnzeZylJ1sJsdonTWy/IaLi1jnd0g==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/sprite": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/sprite-tiling/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/sprite-tiling/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/sprite-tiling/node_modules/@pixi/display": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.11.tgz", + "integrity": "sha512-rxUyB+RMJ7esEa11HdvzsularDGkYlRqpUn1ju9ZsRuB/Qo9JiVolywvWGSWxN/WnDGfrU2GjDpq9id10nwiag==", + "dev": true, + "dependencies": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/sprite-tiling/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/sprite-tiling/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/sprite-tiling/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/sprite-tiling/node_modules/@pixi/sprite": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/sprite/-/sprite-5.3.11.tgz", + "integrity": "sha512-RM6Sp8kqzsBdX/hDAO25HZywe9VU4uhOronUOQ5Ve0zRe+trdBWQYfi7+5kAcvzqkp25Izc0C+e+4YCqe5OaHQ==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/sprite-tiling/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/sprite-tiling/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/spritesheet": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/spritesheet/-/spritesheet-5.3.11.tgz", + "integrity": "sha512-Y9Wiwcz/YOuS1v73Ij9KWQakYBzZfldEy3H8T4GPLK+S19/sypntdkNtRZbmR2wWfhJ4axYEB2/Df86aOAU2qA==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11", + "@pixi/loaders": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/spritesheet/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/spritesheet/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/spritesheet/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/spritesheet/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/spritesheet/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/spritesheet/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/spritesheet/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/text": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/text/-/text-5.3.11.tgz", + "integrity": "sha512-PmWvJv0wiKyyz3fahnxM19+m8IbF2vpDKIImqb5472WyxRGzKyVBW90xrADf5202tdKMk4b8hqvpof2XULr5PA==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/sprite": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/text-bitmap": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/text-bitmap/-/text-bitmap-5.3.11.tgz", + "integrity": "sha512-Bjc/G4VHaPXc9HJsvyYOm5cNTHdqmX6AgzBAlCfltuMAlnveUgUPuX8D/MJHRRnoVSDHSmCBtnJgTc0y/nIeCw==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/loaders": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/mesh": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/text": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/text-bitmap/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/text-bitmap/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/text-bitmap/node_modules/@pixi/display": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.11.tgz", + "integrity": "sha512-rxUyB+RMJ7esEa11HdvzsularDGkYlRqpUn1ju9ZsRuB/Qo9JiVolywvWGSWxN/WnDGfrU2GjDpq9id10nwiag==", + "dev": true, + "dependencies": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/text-bitmap/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/text-bitmap/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/text-bitmap/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/text-bitmap/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/text-bitmap/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/text/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/text/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/text/node_modules/@pixi/display": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.11.tgz", + "integrity": "sha512-rxUyB+RMJ7esEa11HdvzsularDGkYlRqpUn1ju9ZsRuB/Qo9JiVolywvWGSWxN/WnDGfrU2GjDpq9id10nwiag==", + "dev": true, + "dependencies": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/text/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/text/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/text/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/text/node_modules/@pixi/sprite": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/sprite/-/sprite-5.3.11.tgz", + "integrity": "sha512-RM6Sp8kqzsBdX/hDAO25HZywe9VU4uhOronUOQ5Ve0zRe+trdBWQYfi7+5kAcvzqkp25Izc0C+e+4YCqe5OaHQ==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/text/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/text/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/ticker": { + "version": "6.5.10", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-6.5.10.tgz", + "integrity": "sha512-UqX1XYtzqFSirmTOy8QAK4Ccg4KkIZztrBdRPKwFSOEiKAJoGDCSBmyQBo/9aYQKGObbNnrJ7Hxv3/ucg3/1GA==", + "dev": true, + "peer": true, + "peerDependencies": { + "@pixi/extensions": "6.5.10", + "@pixi/settings": "6.5.10" + } + }, + "node_modules/@pixi/utils": { + "version": "6.5.10", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-6.5.10.tgz", + "integrity": "sha512-4f4qDMmAz9IoSAe08G2LAxUcEtG9jSdudfsMQT2MG+OpfToirboE6cNoO0KnLCvLzDVE/mfisiQ9uJbVA9Ssdw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/earcut": "^2.1.0", + "earcut": "^2.2.4", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + }, + "peerDependencies": { + "@pixi/constants": "6.5.10", + "@pixi/settings": "6.5.10" + } + }, "node_modules/@seald-io/binary-search-tree": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@seald-io/binary-search-tree/-/binary-search-tree-1.0.3.tgz", @@ -1251,810 +2361,67 @@ "dev": true }, "node_modules/@seald-io/nedb": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@seald-io/nedb/-/nedb-4.1.2.tgz", - "integrity": "sha512-bDr6TqjBVS2rDyYM9CPxAnotj5FuNL9NF8o7h7YyFXM7yruqT4ddr+PkSb2mJvvw991bqdftazkEo38gykvaww==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@seald-io/nedb/-/nedb-4.0.4.tgz", + "integrity": "sha512-CUNcMio7QUHTA+sIJ/DC5JzVNNsHe743TPmC4H5Gij9zDLMbmrCT2li3eVB72/gF63BPS8pWEZrjlAMRKA8FDw==", "dev": true, - "license": "MIT", "dependencies": { "@seald-io/binary-search-tree": "^1.0.3", - "localforage": "^1.10.0", - "util": "^0.12.5" + "localforage": "^1.9.0", + "util": "^0.12.4" } }, - "node_modules/@smithy/abort-controller": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.5.tgz", - "integrity": "sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/chunked-blob-reader": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.2.0.tgz", - "integrity": "sha512-WmU0TnhEAJLWvfSeMxBNe5xtbselEO8+4wG0NtZeL8oR21WgH1xiO37El+/Y+H/Ie4SCwBy3MxYWmOYaGgZueA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/chunked-blob-reader-native": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.2.1.tgz", - "integrity": "sha512-lX9Ay+6LisTfpLid2zZtIhSEjHMZoAR5hHCR4H7tBz/Zkfr5ea8RcQ7Tk4mi0P76p4cN+Btz16Ffno7YHpKXnQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-base64": "^4.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/config-resolver": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.3.tgz", - "integrity": "sha512-ezHLe1tKLUxDJo2LHtDuEDyWXolw8WGOR92qb4bQdWq/zKenO5BvctZGrVJBK08zjezSk7bmbKFOXIVyChvDLw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/node-config-provider": "^4.3.5", - "@smithy/types": "^4.9.0", - "@smithy/util-config-provider": "^4.2.0", - "@smithy/util-endpoints": "^3.2.5", - "@smithy/util-middleware": "^4.2.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/core": { - "version": "3.18.4", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.18.4.tgz", - "integrity": "sha512-o5tMqPZILBvvROfC8vC+dSVnWJl9a0u9ax1i1+Bq8515eYjUJqqk5XjjEsDLoeL5dSqGSh6WGdVx1eJ1E/Nwhw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/middleware-serde": "^4.2.6", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-stream": "^4.5.6", - "@smithy/util-utf8": "^4.2.0", - "@smithy/uuid": "^1.1.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/credential-provider-imds": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.5.tgz", - "integrity": "sha512-BZwotjoZWn9+36nimwm/OLIcVe+KYRwzMjfhd4QT7QxPm9WY0HiOV8t/Wlh+HVUif0SBVV7ksq8//hPaBC/okQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/node-config-provider": "^4.3.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/eventstream-codec": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.5.tgz", - "integrity": "sha512-Ogt4Zi9hEbIP17oQMd68qYOHUzmH47UkK7q7Gl55iIm9oKt27MUGrC5JfpMroeHjdkOliOA4Qt3NQ1xMq/nrlA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^4.9.0", - "@smithy/util-hex-encoding": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/eventstream-serde-browser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.5.tgz", - "integrity": "sha512-HohfmCQZjppVnKX2PnXlf47CW3j92Ki6T/vkAT2DhBR47e89pen3s4fIa7otGTtrVxmj7q+IhH0RnC5kpR8wtw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/eventstream-serde-universal": "^4.2.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.5.tgz", - "integrity": "sha512-ibjQjM7wEXtECiT6my1xfiMH9IcEczMOS6xiCQXoUIYSj5b1CpBbJ3VYbdwDy8Vcg5JHN7eFpOCGk8nyZAltNQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/eventstream-serde-node": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.5.tgz", - "integrity": "sha512-+elOuaYx6F2H6x1/5BQP5ugv12nfJl66GhxON8+dWVUEDJ9jah/A0tayVdkLRP0AeSac0inYkDz5qBFKfVp2Gg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/eventstream-serde-universal": "^4.2.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/eventstream-serde-universal": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.5.tgz", - "integrity": "sha512-G9WSqbST45bmIFaeNuP/EnC19Rhp54CcVdX9PDL1zyEB514WsDVXhlyihKlGXnRycmHNmVv88Bvvt4EYxWef/Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/eventstream-codec": "^4.2.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/fetch-http-handler": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.6.tgz", - "integrity": "sha512-3+RG3EA6BBJ/ofZUeTFJA7mHfSYrZtQIrDP9dI8Lf7X6Jbos2jptuLrAAteDiFVrmbEmLSuRG/bUKzfAXk7dhg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/protocol-http": "^5.3.5", - "@smithy/querystring-builder": "^4.2.5", - "@smithy/types": "^4.9.0", - "@smithy/util-base64": "^4.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/hash-blob-browser": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.6.tgz", - "integrity": "sha512-8P//tA8DVPk+3XURk2rwcKgYwFvwGwmJH/wJqQiSKwXZtf/LiZK+hbUZmPj/9KzM+OVSwe4o85KTp5x9DUZTjw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/chunked-blob-reader": "^5.2.0", - "@smithy/chunked-blob-reader-native": "^4.2.1", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/hash-node": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.5.tgz", - "integrity": "sha512-DpYX914YOfA3UDT9CN1BM787PcHfWRBB43fFGCYrZFUH0Jv+5t8yYl+Pd5PW4+QzoGEDvn5d5QIO4j2HyYZQSA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.9.0", - "@smithy/util-buffer-from": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/hash-stream-node": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.2.5.tgz", - "integrity": "sha512-6+do24VnEyvWcGdHXomlpd0m8bfZePpUKBy7m311n+JuRwug8J4dCanJdTymx//8mi0nlkflZBvJe+dEO/O12Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.9.0", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/invalid-dependency": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.5.tgz", - "integrity": "sha512-2L2erASEro1WC5nV+plwIMxrTXpvpfzl4e+Nre6vBVRR2HKeGGcvpJyyL3/PpiSg+cJG2KpTmZmq934Olb6e5A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/is-array-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", - "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/md5-js": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.2.5.tgz", - "integrity": "sha512-Bt6jpSTMWfjCtC0s79gZ/WZ1w90grfmopVOWqkI2ovhjpD5Q2XRXuecIPB9689L2+cCySMbaXDhBPU56FKNDNg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.9.0", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/middleware-content-length": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.5.tgz", - "integrity": "sha512-Y/RabVa5vbl5FuHYV2vUCwvh/dqzrEY/K2yWPSqvhFUwIY0atLqO4TienjBXakoy4zrKAMCZwg+YEqmH7jaN7A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/middleware-endpoint": { - "version": "4.3.11", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.11.tgz", - "integrity": "sha512-eJXq9VJzEer1W7EQh3HY2PDJdEcEUnv6sKuNt4eVjyeNWcQFS4KmnY+CKkYOIR6tSqarn6bjjCqg1UB+8UJiPQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/core": "^3.18.4", - "@smithy/middleware-serde": "^4.2.6", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", - "@smithy/util-middleware": "^4.2.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/middleware-retry": { - "version": "4.4.11", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.11.tgz", - "integrity": "sha512-EL5OQHvFOKneJVRgzRW4lU7yidSwp/vRJOe542bHgExN3KNThr1rlg0iE4k4SnA+ohC+qlUxoK+smKeAYPzfAQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/node-config-provider": "^4.3.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/service-error-classification": "^4.2.5", - "@smithy/smithy-client": "^4.9.7", - "@smithy/types": "^4.9.0", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-retry": "^4.2.5", - "@smithy/uuid": "^1.1.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/middleware-serde": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.6.tgz", - "integrity": "sha512-VkLoE/z7e2g8pirwisLz8XJWedUSY8my/qrp81VmAdyrhi94T+riBfwP+AOEEFR9rFTSonC/5D2eWNmFabHyGQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/middleware-stack": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.5.tgz", - "integrity": "sha512-bYrutc+neOyWxtZdbB2USbQttZN0mXaOyYLIsaTbJhFsfpXyGWUxJpEuO1rJ8IIJm2qH4+xJT0mxUSsEDTYwdQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/node-config-provider": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.5.tgz", - "integrity": "sha512-UTurh1C4qkVCtqggI36DGbLB2Kv8UlcFdMXDcWMbqVY2uRg0XmT9Pb4Vj6oSQ34eizO1fvR0RnFV4Axw4IrrAg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/node-http-handler": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.5.tgz", - "integrity": "sha512-CMnzM9R2WqlqXQGtIlsHMEZfXKJVTIrqCNoSd/QpAyp+Dw0a1Vps13l6ma1fH8g7zSPNsA59B/kWgeylFuA/lw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/abort-controller": "^4.2.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/querystring-builder": "^4.2.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/property-provider": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.5.tgz", - "integrity": "sha512-8iLN1XSE1rl4MuxvQ+5OSk/Zb5El7NJZ1td6Tn+8dQQHIjp59Lwl6bd0+nzw6SKm2wSSriH2v/I9LPzUic7EOg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/protocol-http": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.5.tgz", - "integrity": "sha512-RlaL+sA0LNMp03bf7XPbFmT5gN+w3besXSWMkA8rcmxLSVfiEXElQi4O2IWwPfxzcHkxqrwBFMbngB8yx/RvaQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/querystring-builder": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.5.tgz", - "integrity": "sha512-y98otMI1saoajeik2kLfGyRp11e5U/iJYH/wLCh3aTV/XutbGT9nziKGkgCaMD1ghK7p6htHMm6b6scl9JRUWg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.9.0", - "@smithy/util-uri-escape": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/querystring-parser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.5.tgz", - "integrity": "sha512-031WCTdPYgiQRYNPXznHXof2YM0GwL6SeaSyTH/P72M1Vz73TvCNH2Nq8Iu2IEPq9QP2yx0/nrw5YmSeAi/AjQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/service-error-classification": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.5.tgz", - "integrity": "sha512-8fEvK+WPE3wUAcDvqDQG1Vk3ANLR8Px979te96m84CbKAjBVf25rPYSzb4xU4hlTyho7VhOGnh5i62D/JVF0JQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.9.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/shared-ini-file-loader": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.0.tgz", - "integrity": "sha512-5WmZ5+kJgJDjwXXIzr1vDTG+RhF9wzSODQBfkrQ2VVkYALKGvZX1lgVSxEkgicSAFnFhPj5rudJV0zoinqS0bA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/signature-v4": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.5.tgz", - "integrity": "sha512-xSUfMu1FT7ccfSXkoLl/QRQBi2rOvi3tiBZU2Tdy3I6cgvZ6SEi9QNey+lqps/sJRnogIS+lq+B1gxxbra2a/w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^4.2.0", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", - "@smithy/util-hex-encoding": "^4.2.0", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-uri-escape": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/smithy-client": { - "version": "4.9.7", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.9.7.tgz", - "integrity": "sha512-pskaE4kg0P9xNQWihfqlTMyxyFR3CH6Sr6keHYghgyqqDXzjl2QJg5lAzuVe/LzZiOzcbcVtxKYi1/fZPt/3DA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/core": "^3.18.4", - "@smithy/middleware-endpoint": "^4.3.11", - "@smithy/middleware-stack": "^4.2.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", - "@smithy/util-stream": "^4.5.6", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/types": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.9.0.tgz", - "integrity": "sha512-MvUbdnXDTwykR8cB1WZvNNwqoWVaTRA0RLlLmf/cIFNMM2cKWz01X4Ly6SMC4Kks30r8tT3Cty0jmeWfiuyHTA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/url-parser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.5.tgz", - "integrity": "sha512-VaxMGsilqFnK1CeBX+LXnSuaMx4sTL/6znSZh2829txWieazdVxr54HmiyTsIbpOTLcf5nYpq9lpzmwRdxj6rQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/querystring-parser": "^4.2.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-base64": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", - "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-body-length-browser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", - "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-body-length-node": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz", - "integrity": "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-buffer-from": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", - "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-config-provider": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", - "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.3.10", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.10.tgz", - "integrity": "sha512-3iA3JVO1VLrP21FsZZpMCeF93aqP3uIOMvymAT3qHIJz2YlgDeRvNUspFwCNqd/j3qqILQJGtsVQnJZICh/9YA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/property-provider": "^4.2.5", - "@smithy/smithy-client": "^4.9.7", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.2.13", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.13.tgz", - "integrity": "sha512-PTc6IpnpSGASuzZAgyUtaVfOFpU0jBD2mcGwrgDuHf7PlFgt5TIPxCYBDbFQs06jxgeV3kd/d/sok1pzV0nJRg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/config-resolver": "^4.4.3", - "@smithy/credential-provider-imds": "^4.2.5", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/smithy-client": "^4.9.7", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-endpoints": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.5.tgz", - "integrity": "sha512-3O63AAWu2cSNQZp+ayl9I3NapW1p1rR5mlVHcF6hAB1dPZUQFfRPYtplWX/3xrzWthPGj5FqB12taJJCfH6s8A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/node-config-provider": "^4.3.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-hex-encoding": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", - "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-middleware": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.5.tgz", - "integrity": "sha512-6Y3+rvBF7+PZOc40ybeZMcGln6xJGVeY60E7jy9Mv5iKpMJpHgRE6dKy9ScsVxvfAYuEX4Q9a65DQX90KaQ3bA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-retry": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.5.tgz", - "integrity": "sha512-GBj3+EZBbN4NAqJ/7pAhsXdfzdlznOh8PydUijy6FpNIMnHPSMO2/rP4HKu+UFeikJxShERk528oy7GT79YiJg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/service-error-classification": "^4.2.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-stream": { - "version": "4.5.6", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.6.tgz", - "integrity": "sha512-qWw/UM59TiaFrPevefOZ8CNBKbYEP6wBAIlLqxn3VAIo9rgnTNc4ASbVrqDmhuwI87usnjhdQrxodzAGFFzbRQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/fetch-http-handler": "^5.3.6", - "@smithy/node-http-handler": "^4.4.5", - "@smithy/types": "^4.9.0", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-buffer-from": "^4.2.0", - "@smithy/util-hex-encoding": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-uri-escape": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", - "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-utf8": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", - "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-waiter": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.5.tgz", - "integrity": "sha512-Dbun99A3InifQdIrsXZ+QLcC0PGBPAdrl4cj1mTgJvyc9N2zf7QSxg8TBkzsCmGJdE3TLbO9ycwpY0EkWahQ/g==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/abort-controller": "^4.2.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/uuid": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.0.tgz", - "integrity": "sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } + "node_modules/@socket.io/component-emitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.0.0.tgz", + "integrity": "sha512-2pTGuibAXJswAPJjaKisthqS/NOK5ypG4LYT6tEAV0S/mxW0zOIvYvGK0V8w8+SHxAm6vRMSjqSalFXeBAqs+Q==", + "dev": true }, "node_modules/@stylistic/eslint-plugin": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.13.0.tgz", - "integrity": "sha512-RnO1SaiCFHn666wNz2QfZEFxvmiNRqhzaMXHXxXXKt+MEP7aajlPxUSMIQpKAaJfverpovEYqjBOXDq6dDcaOQ==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.6.1.tgz", + "integrity": "sha512-UT0f4t+3sQ/GKW7875NiIIjZJ1Bh4gd7JNfoIkwIQyWqO7wGd0Pqzu0Ho30Ka8MNF5lm++SkVeqAk26vGxoUpg==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "^8.13.0", - "eslint-visitor-keys": "^4.2.0", - "espree": "^10.3.0", + "@stylistic/eslint-plugin-js": "2.6.1", + "@stylistic/eslint-plugin-jsx": "2.6.1", + "@stylistic/eslint-plugin-plus": "2.6.1", + "@stylistic/eslint-plugin-ts": "2.6.1", + "@types/eslint": "^9.6.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": ">=8.40.0" + } + }, + "node_modules/@stylistic/eslint-plugin-js": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-js/-/eslint-plugin-js-2.6.1.tgz", + "integrity": "sha512-iLOiVzcvqzDGD9U0EuVOX680v+XOPiPAjkxWj+Q6iV2GLOM5NB27tKVOpJY7AzBhidwpRbaLTgg3T4UzYx09jw==", + "dev": true, + "dependencies": { + "@types/eslint": "^9.6.0", + "acorn": "^8.12.1", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": ">=8.40.0" + } + }, + "node_modules/@stylistic/eslint-plugin-jsx": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-jsx/-/eslint-plugin-jsx-2.6.1.tgz", + "integrity": "sha512-5qHLXqxfY6jubAQfDqrifv41fx7gaqA9svDaChxMI6JiHpEBfh+PXxmm3g+B8gJCYVBTC62Rjl0Ny5QabK58bw==", + "dev": true, + "dependencies": { + "@stylistic/eslint-plugin-js": "^2.6.1", + "@types/eslint": "^9.6.0", "estraverse": "^5.3.0", "picomatch": "^4.0.2" }, @@ -2065,51 +2432,113 @@ "eslint": ">=8.40.0" } }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "node_modules/@stylistic/eslint-plugin-plus": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-plus/-/eslint-plugin-plus-2.6.1.tgz", + "integrity": "sha512-z/IYu/q8ipApzNam5utSU+BrXg4pK/Gv9xNbr4eWv/bZppvTWJU62xCO4nw/6r2dHNPnqc7uCHEC7GMlBnPY0A==", "dev": true, - "license": "MIT" + "dependencies": { + "@types/eslint": "^9.6.0", + "@typescript-eslint/utils": "^8.0.0" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/@stylistic/eslint-plugin-ts": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-ts/-/eslint-plugin-ts-2.6.1.tgz", + "integrity": "sha512-Mxl1VMorEG1Hc6oBYPD0+KIJOWkjEF1R0liL7wWgKfwpqOkgmnh5lVdZBrYyfRKOE4RlGcwEFTNai1IW6orgVg==", + "dev": true, + "dependencies": { + "@stylistic/eslint-plugin-js": "2.6.1", + "@types/eslint": "^9.6.0", + "@typescript-eslint/utils": "^8.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": ">=8.40.0" + } + }, + "node_modules/@types/earcut": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@types/earcut/-/earcut-2.1.4.tgz", + "integrity": "sha512-qp3m9PPz4gULB9MhjGID7wpo3gJ4bTGXm7ltNDsmOvsPduTeHp8wSW9YckBj3mljeOh4F0m2z/0JKAALRKbmLQ==", + "dev": true, + "peer": true + }, + "node_modules/@types/eslint": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", + "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/jquery": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.30.tgz", + "integrity": "sha512-nbWKkkyb919DOUxjmRVk8vwtDb0/k8FKncmUKFi+NY+QXqWltooxTrswvz4LspQwxvLdvzBN1TImr6cw3aQx2A==", + "dev": true, + "dependencies": { + "@types/sizzle": "*" + } }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" + "dev": true }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.4.tgz", - "integrity": "sha512-nPiRSKuvtTN+no/2N1kt2tUh/HoFzeEgOm9fQ6XQk4/ApGqjx0zFIIaLJ6wooR1HIoozvj2j6vTi/1fgAz7UYQ==", + "node_modules/@types/node": { + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.4.1.tgz", + "integrity": "sha512-1tbpb9325+gPnKK0dMm+/LMriX0vKxf6RnB0SZUqfyVkQ4fMgUSySqhxE/y8Jvs4NyF1yHzTfG9KlnkIODxPKg==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.46.4", - "@typescript-eslint/types": "^8.46.4", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "undici-types": "~6.19.2" } }, + "node_modules/@types/offscreencanvas": { + "version": "2019.7.3", + "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz", + "integrity": "sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==", + "dev": true, + "peer": true + }, + "node_modules/@types/simple-peer": { + "version": "9.11.8", + "resolved": "https://registry.npmjs.org/@types/simple-peer/-/simple-peer-9.11.8.tgz", + "integrity": "sha512-rvqefdp2rvIA6wiomMgKWd2UZNPe6LM2EV5AuY3CPQJF+8TbdrL5TjYdMf0VAjGczzlkH4l1NjDkihwbj3Xodw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/sizzle": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz", + "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==", + "dev": true + }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.4.tgz", - "integrity": "sha512-tMDbLGXb1wC+McN1M6QeDx7P7c0UWO5z9CXqp7J8E+xGcJuUuevWKxuG8j41FoweS3+L41SkyKKkia16jpX7CA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.0.1.tgz", + "integrity": "sha512-NpixInP5dm7uukMiRyiHjRKkom5RIFA4dfiHvalanD2cF0CLUuQqxfg8PtEUo9yqJI2bBhF+pcSafqnG3UBnRQ==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/visitor-keys": "8.46.4" + "@typescript-eslint/types": "8.0.1", + "@typescript-eslint/visitor-keys": "8.0.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2119,29 +2548,11 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.4.tgz", - "integrity": "sha512-+/XqaZPIAk6Cjg7NWgSGe27X4zMGqrFqZ8atJsX3CWxH/jACqWnrWI68h7nHQld0y+k9eTTjb9r+KU4twLoo9A==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, "node_modules/@typescript-eslint/types": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.4.tgz", - "integrity": "sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.0.1.tgz", + "integrity": "sha512-PpqTVT3yCA/bIgJ12czBuE3iBlM3g4inRSC5J0QOdQFAn07TYrYEQBBKgXH1lQpglup+Zy6c1fxuwTk4MTNKIw==", "dev": true, - "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -2151,22 +2562,19 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.4.tgz", - "integrity": "sha512-7oV2qEOr1d4NWNmpXLR35LvCfOkTNymY9oyW+lUHkmCno7aOmIf/hMaydnJBUTBMRCOGZh8YjkFOc8dadEoNGA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.1.tgz", + "integrity": "sha512-8V9hriRvZQXPWU3bbiUV4Epo7EvgM6RTs+sUmxp5G//dBGy402S7Fx0W0QkB2fb4obCF8SInoUzvTYtc3bkb5w==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.46.4", - "@typescript-eslint/tsconfig-utils": "8.46.4", - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/visitor-keys": "8.46.4", + "@typescript-eslint/types": "8.0.1", + "@typescript-eslint/visitor-keys": "8.0.1", "debug": "^4.3.4", - "fast-glob": "^3.3.2", + "globby": "^11.1.0", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" + "ts-api-utils": "^1.3.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2175,21 +2583,46 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/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/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@typescript-eslint/utils": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.4.tgz", - "integrity": "sha512-AbSv11fklGXV6T28dp2Me04Uw90R2iJ30g2bgLz529Koehrmkbs1r7paFqr1vPCZi7hHwYxYtxfyQMRC8QaVSg==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.0.1.tgz", + "integrity": "sha512-CBFR0G0sCt0+fzfnKaciu9IBsKvEKYwN9UZ+eeogK1fYHg4Qxk1yf/wLQkLXlq8wbU2dFlgAesxt8Gi76E8RTA==", "dev": true, - "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.46.4", - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/typescript-estree": "8.46.4" + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.0.1", + "@typescript-eslint/types": "8.0.1", + "@typescript-eslint/typescript-estree": "8.0.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2199,19 +2632,17 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" + "eslint": "^8.57.0 || ^9.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.4.tgz", - "integrity": "sha512-/++5CYLQqsO9HFGLI7APrxBJYo+5OCMpViuhV8q5/Qa3o5mMrF//eQHks+PXcsAVaLdn817fMuS7zqoXNNZGaw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.1.tgz", + "integrity": "sha512-W5E+o0UfUcK5EgchLZsyVWqARmsM7v54/qEq6PY3YI5arkgmCzHiuk0zKSJJbm71V0xdRna4BGomkCTXz2/LkQ==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.4", - "eslint-visitor-keys": "^4.2.1" + "@typescript-eslint/types": "8.0.1", + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2221,12 +2652,23 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/abstract-level": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.4.tgz", "integrity": "sha512-eUP/6pbXBkMbXFdx4IH2fVgvB7M0JvR7/lIL33zcs0IBcwjdzSSl31TOJsaCzmKSSDF9h8QYSOJux4Nd4YJqFg==", "dev": true, - "license": "MIT", "dependencies": { "buffer": "^6.0.3", "catering": "^2.1.0", @@ -2241,11 +2683,10 @@ } }, "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "dev": true, - "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -2258,7 +2699,6 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -2268,7 +2708,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -2285,7 +2724,6 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -2295,7 +2733,6 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -2306,26 +2743,51 @@ "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/anymatch/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/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, - "license": "Python-2.0" + "dev": 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==", + "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, - "license": "MIT" + "engines": { + "node": ">=8" + } }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, - "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -2336,24 +2798,17 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/axios": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", - "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", - "dev": true, - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" - } + "node_modules/backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA==", + "dev": true }, "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, - "license": "MIT" + "dev": true }, "node_modules/base64-js": { "version": "1.5.1", @@ -2373,24 +2828,28 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, - "node_modules/bowser": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.12.1.tgz", - "integrity": "sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw==", + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "node_modules/braces": { @@ -2398,7 +2857,6 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, - "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -2425,54 +2883,22 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dev": true, - "license": "MIT", - "dependencies": { "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -2486,7 +2912,6 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -2496,31 +2921,68 @@ "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "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" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/classic-level": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.4.1.tgz", "integrity": "sha512-qGx/KJl3bvtOHrGau2WklEZuXhS3zme+jf+fsu6Ej7W7IP/C49v7KNlWIsT1jZu0YnfzSIYDGcEWpCa1wKGWXQ==", "dev": true, "hasInstallScript": true, - "license": "MIT", "dependencies": { "abstract-level": "^1.0.2", "catering": "^2.1.0", @@ -2537,7 +2999,6 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -2552,7 +3013,6 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -2564,35 +3024,19 @@ "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, - "license": "MIT" - }, - "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, - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } + "dev": 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, - "license": "MIT" + "dev": true }, "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -2603,13 +3047,12 @@ } }, "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dev": true, - "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "ms": "2.1.2" }, "engines": { "node": ">=6.0" @@ -2624,15 +3067,13 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, - "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -2645,57 +3086,64 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "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, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/dotenv": { - "version": "17.2.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", - "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, - "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" + "path-type": "^4.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, + "node_modules/earcut": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==", + "dev": 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 + }, + "node_modules/engine.io-client": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.0.3.tgz", + "integrity": "sha512-IH8ZhDIwiLv0d/wXVzmjfV9Y82hbJIDhCGSVUV8o1kcpDe2I6Y3bZA3ZbJy4Ls7k7IVmcy/qn4k9RKWFhUGf5w==", "dev": true, - "license": "MIT" + "dependencies": { + "@socket.io/component-emitter": "~3.0.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.0", + "has-cors": "1.1.0", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~8.2.3", + "xmlhttprequest-ssl": "~2.0.0", + "yeast": "0.1.2" + } + }, + "node_modules/engine.io-parser": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.7.tgz", + "integrity": "sha512-P+jDFbvK6lE3n1OL+q9KuzdOFWkkZ/cMV9gol/SbVfpyqfvrfrFTOFJ6fQm2VC3PZHlU3QPhVwmbsCnauHF2MQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } }, "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "dev": true, - "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, "engines": { "node": ">= 0.4" } @@ -2705,46 +3153,21 @@ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" } }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } + "node_modules/es6-promise-polyfill": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es6-promise-polyfill/-/es6-promise-polyfill-1.2.0.tgz", + "integrity": "sha512-HHb0vydCpoclpd0ySPkRXMmBw80MRt1wM4RBJBlXkux97K7gleabZdsR0gvE1nNPM9mgOZIBTzjjXiPxf4lIqQ==", + "dev": true }, "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -2754,7 +3177,6 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -2763,32 +3185,27 @@ } }, "node_modules/eslint": { - "version": "9.39.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", - "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", + "version": "9.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.8.0.tgz", + "integrity": "sha512-K8qnZ/QJzT2dLKdZJVX6W4XOwBzutMYmt0lqUS+JdXgd+HTYFlonFgkJ8s44d/zMPPCnOOk0kMWCApCPhiOy9A==", "dev": true, - "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.1", - "@eslint/config-helpers": "^0.4.2", - "@eslint/core": "^0.17.0", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.39.1", - "@eslint/plugin-kit": "^0.4.1", - "@humanfs/node": "^0.16.6", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.11.0", + "@eslint/config-array": "^0.17.1", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.8.0", "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", + "@humanwhocodes/retry": "^0.3.0", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", + "cross-spawn": "^7.0.2", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", + "eslint-scope": "^8.0.2", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.1.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -2798,11 +3215,15 @@ "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3" + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" @@ -2812,22 +3233,13 @@ }, "funding": { "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } } }, "node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", + "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -2840,11 +3252,10 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -2852,67 +3263,24 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/esm": { "version": "3.2.25", "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", + "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.15.0", + "acorn": "^8.12.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" + "eslint-visitor-keys": "^4.0.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2926,7 +3294,6 @@ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -2939,7 +3306,6 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -2952,7 +3318,6 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -2962,30 +3327,33 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, + "node_modules/eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", + "dev": true + }, "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, - "license": "MIT" + "dev": true }, "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "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, - "license": "MIT", "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.8" + "micromatch": "^4.0.4" }, "engines": { "node": ">=8.6.0" @@ -2996,7 +3364,6 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -3008,41 +3375,19 @@ "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, - "license": "MIT" + "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-xml-parser": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", - "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "dependencies": { - "strnum": "^2.1.0" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } + "dev": true }, "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, - "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -3052,7 +3397,6 @@ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, - "license": "MIT", "dependencies": { "flat-cache": "^4.0.0" }, @@ -3065,7 +3409,6 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, - "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -3078,7 +3421,6 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -3095,7 +3437,6 @@ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, - "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" @@ -3105,64 +3446,32 @@ } }, "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true }, "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, - "license": "MIT", "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "is-callable": "^1.1.3" } }, - "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "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, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 6" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, "node_modules/function-bind": { @@ -3170,48 +3479,30 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/generator-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", - "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, "engines": { "node": ">= 0.4" @@ -3220,26 +3511,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -3248,11 +3524,10 @@ } }, "node_modules/globals": { - "version": "15.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "version": "15.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz", + "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==", "dev": true, - "license": "MIT", "engines": { "node": ">=18" }, @@ -3260,25 +3535,70 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, - "license": "MIT", + "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": ">= 0.4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "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-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha512-g5VNKdkFuUuVCP9gYfDJHjK2nqdQJ7aDLTnycnc2+RvsOQbuLdF5pm7vuE5J76SEBIQjs4kQY/BWq74JUmjbXA==", + "dev": true + }, "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, - "license": "MIT", "engines": { "node": ">=8" } @@ -3288,7 +3608,6 @@ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, - "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -3296,12 +3615,23 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "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, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3314,7 +3644,6 @@ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, - "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -3330,7 +3659,6 @@ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, - "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -3356,15 +3684,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "BSD-3-Clause" + ] }, "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } @@ -3373,15 +3699,19 @@ "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "dev": true, - "license": "MIT" + "dev": true + }, + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "dev": true }, "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -3398,7 +3728,6 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -3407,18 +3736,16 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/is-arguments": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", - "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, - "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -3427,6 +3754,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-buffer": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", @@ -3446,7 +3785,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "engines": { "node": ">=4" } @@ -3456,7 +3794,6 @@ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3469,7 +3806,6 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3479,23 +3815,17 @@ "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, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-generator-function": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", - "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, - "license": "MIT", "dependencies": { - "call-bound": "^1.0.4", - "generator-function": "^2.0.0", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -3509,7 +3839,6 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -3522,38 +3851,26 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.12.0" } }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "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, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, - "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.16" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -3566,15 +3883,19 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" + "dev": true + }, + "node_modules/ismobilejs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ismobilejs/-/ismobilejs-1.1.1.tgz", + "integrity": "sha512-VaFW53yt8QO61k2WJui0dHf4SlL8lxBofUuUmwBo0ljPk0Drz2TiuDW4jo3wDcv41qy/SxrJ+VAzJ/qYqsmzRw==", + "dev": true }, "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -3586,29 +3907,25 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" + "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, - "license": "MIT" + "dev": true }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, - "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -3618,7 +3935,6 @@ "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" } @@ -3628,7 +3944,6 @@ "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", "dev": true, - "license": "MIT", "dependencies": { "buffer": "^6.0.3", "module-error": "^1.0.1" @@ -3642,7 +3957,6 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -3656,7 +3970,6 @@ "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", "dev": true, - "license": "MIT", "dependencies": { "immediate": "~3.0.5" } @@ -3666,7 +3979,6 @@ "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "lie": "3.1.1" } @@ -3676,7 +3988,6 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -3691,35 +4002,22 @@ "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } + "dev": 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, - "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dev": true, - "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -3733,7 +4031,6 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.6" }, @@ -3741,43 +4038,31 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "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, - "license": "MIT", - "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, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } + "node_modules/mini-signals": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mini-signals/-/mini-signals-1.2.0.tgz", + "integrity": "sha512-alffqMkGCjjTSwvYMVLx+7QeJ6sTuxbXqBkP21my4iWU5+QpTQAJt3h7htA1OKm9F3BpMM0vnu72QIoiJakrLA==", + "dev": true }, "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, + "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/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/mkdirp": { @@ -3785,7 +4070,6 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "dev": true, - "license": "MIT", "bin": { "mkdirp": "dist/cjs/src/bin.js" }, @@ -3801,60 +4085,89 @@ "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" } }, "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, - "license": "MIT" + "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/napi-macros": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz", "integrity": "sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==", - "dev": true, - "license": "MIT" + "dev": true }, "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, - "license": "MIT" + "dev": true }, "node_modules/nedb-promises": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/nedb-promises/-/nedb-promises-6.2.3.tgz", "integrity": "sha512-enq0IjNyBz9Qy9W/QPCcLGh/QORGBjXbIeZeWvIjO3OMLyAvlKT3hiJubP2BKEiFniUlR3L01o18ktqgn5jxqA==", "dev": true, - "license": "MIT", "dependencies": { "@seald-io/nedb": "^4.0.2" } }, + "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-gyp-build": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", - "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz", + "integrity": "sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==", "dev": true, - "license": "MIT", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" } }, + "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/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, - "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -3872,7 +4185,6 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -3888,7 +4200,6 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -3904,7 +4215,6 @@ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -3912,12 +4222,32 @@ "node": ">=6" } }, + "node_modules/parse-uri": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/parse-uri/-/parse-uri-1.0.9.tgz", + "integrity": "sha512-YZfRHHkEZa6qTfPF/xgZ1ErQYCABfud/Vcqp1Q1GNa7RKwv6Oe0YaxXfQQMnQsGdNTo3fwaT0GbVEX7dMAr7tw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", + "dev": true + }, + "node_modules/parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", + "dev": true + }, "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, - "license": "MIT", "engines": { "node": ">=8" } @@ -3927,17 +4257,24 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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, "engines": { "node": ">=8" } }, "node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -3945,12 +4282,172 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "node_modules/pixi-particles": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/pixi-particles/-/pixi-particles-4.3.1.tgz", + "integrity": "sha512-XSqDFgYwm/7FRCgP5I2Fc57d98qvb1ql/x4uTjdP4uXDUGgjdO8OW/2A0HVWS1CkOht/1x6dQzsM1oCJAUlaow==", + "dev": true, + "peerDependencies": { + "pixi.js": ">=4.0.0" + } + }, + "node_modules/pixi.js": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/pixi.js/-/pixi.js-5.3.11.tgz", + "integrity": "sha512-/9td6IHDQqG0Po5lyQ5aKDzrnEVD1SvGourI4Nqp0mvNI0Cbm74tMHLjk1V5foqGPAS9pochENr6Y3ft/2cDiQ==", + "dev": true, + "dependencies": { + "@pixi/accessibility": "5.3.11", + "@pixi/app": "5.3.11", + "@pixi/constants": "5.3.11", + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/extract": "5.3.11", + "@pixi/filter-alpha": "5.3.11", + "@pixi/filter-blur": "5.3.11", + "@pixi/filter-color-matrix": "5.3.11", + "@pixi/filter-displacement": "5.3.11", + "@pixi/filter-fxaa": "5.3.11", + "@pixi/filter-noise": "5.3.11", + "@pixi/graphics": "5.3.11", + "@pixi/interaction": "5.3.11", + "@pixi/loaders": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/mesh": "5.3.11", + "@pixi/mesh-extras": "5.3.11", + "@pixi/mixin-cache-as-bitmap": "5.3.11", + "@pixi/mixin-get-child-by-name": "5.3.11", + "@pixi/mixin-get-global-position": "5.3.11", + "@pixi/particles": "5.3.11", + "@pixi/polyfill": "5.3.11", + "@pixi/prepare": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/sprite": "5.3.11", + "@pixi/sprite-animated": "5.3.11", + "@pixi/sprite-tiling": "5.3.11", + "@pixi/spritesheet": "5.3.11", + "@pixi/text": "5.3.11", + "@pixi/text-bitmap": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/pixi.js/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/pixi.js/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/pixi.js/node_modules/@pixi/display": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.11.tgz", + "integrity": "sha512-rxUyB+RMJ7esEa11HdvzsularDGkYlRqpUn1ju9ZsRuB/Qo9JiVolywvWGSWxN/WnDGfrU2GjDpq9id10nwiag==", + "dev": true, + "dependencies": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/pixi.js/node_modules/@pixi/graphics": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/graphics/-/graphics-5.3.11.tgz", + "integrity": "sha512-HLu53LV6mRlY0uFSIM2OrCuL7xqXzeJs5d2QfmUJfKJVVZ9sbHDS+6/N/f0tXzvkRPYhSKXvcNPsNn4HmlIE9w==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/sprite": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/pixi.js/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/pixi.js/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/pixi.js/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/pixi.js/node_modules/@pixi/sprite": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/sprite/-/sprite-5.3.11.tgz", + "integrity": "sha512-RM6Sp8kqzsBdX/hDAO25HZywe9VU4uhOronUOQ5Ve0zRe+trdBWQYfi7+5kAcvzqkp25Izc0C+e+4YCqe5OaHQ==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/pixi.js/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/pixi.js/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" } @@ -3960,28 +4457,34 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8.0" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true, - "license": "MIT" - }, "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, - "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -4000,15 +4503,37 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] + }, + "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/readdirp/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/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, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4018,17 +4543,25 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "node_modules/resource-loader": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/resource-loader/-/resource-loader-3.0.1.tgz", + "integrity": "sha512-fBuCRbEHdLCI1eglzQhUv9Rrdcmqkydr1r6uHE2cYHvRBrcLXeSmbE/qI/urFt8rPr/IGxir3BUwM5kUK8XoyA==", + "dev": true, + "dependencies": { + "mini-signals": "^1.2.0", + "parse-uri": "^1.0.0" + } + }, + "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, - "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -4053,35 +4586,32 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "node_modules/sass": { + "version": "1.77.8", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.8.tgz", + "integrity": "sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=14.0.0" } }, "node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -4094,7 +4624,6 @@ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, - "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -4112,7 +4641,6 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -4125,17 +4653,90 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/socket.io-client": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.3.2.tgz", + "integrity": "sha512-2B9LqSunN60yV8F7S84CCEEcgbYNfrn7ejIInZtLZ7ppWtiX8rGZAjvdCvbnC8bqo/9RlCNOUsORLyskxSFP1g==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.0.0", + "backo2": "~1.0.2", + "debug": "~4.3.2", + "engine.io-client": "~6.0.1", + "parseuri": "0.0.6", + "socket.io-parser": "~4.1.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.1.2.tgz", + "integrity": "sha512-j3kk71QLJuyQ/hh5F/L2t1goqzdTL0gvDzuhTuNSwihfuFUrcSji0qFZmJJPtG6Rmug153eOPsUizeirf1IIog==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.0.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/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, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -4150,7 +4751,6 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -4163,7 +4763,6 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -4171,25 +4770,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strnum": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", - "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT" - }, "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, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -4197,12 +4782,23 @@ "node": ">=8" } }, + "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 + }, + "node_modules/tinymce": { + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/tinymce/-/tinymce-5.10.1.tgz", + "integrity": "sha512-aIsFTYiuESpoYkCgkoojpVtPwrSvYBxp4mMEGsj20CnUruLCWosywkbYHDII+j7KlQZZn3p+xK89f5gT3QyuGw==", + "dev": true + }, "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, - "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -4211,31 +4807,22 @@ } }, "node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">=18.12" + "node": ">=16" }, "peerDependencies": { - "typescript": ">=4.8.4" + "typescript": ">=4.2.0" } }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -4244,11 +4831,10 @@ } }, "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "dev": true, - "license": "Apache-2.0", "peer": true, "bin": { "tsc": "bin/tsc", @@ -4258,22 +4844,58 @@ "node": ">=14.17" } }, + "node_modules/uglify-js": { + "version": "3.19.2", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.2.tgz", + "integrity": "sha512-S8KA6DDI47nQXJSi2ctQ629YzwOVs+bQML6DAtvy0wgNdpi+0ySpQK0g2pxBq2xfF2z3YCscu7NNA8nXT9PlIQ==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/undici-types": { + "version": "6.19.6", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.6.tgz", + "integrity": "sha512-e/vggGopEfTKSvj4ihnOLTsqhrKRN3LeO6qSN/GxohhuRv8qH9bNQ4B8W7e/vFL+0XTnmHPB4/kegunZGA4Org==", + "dev": true + }, "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, - "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, + "node_modules/url": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", + "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", + "dev": true, + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.12.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, "node_modules/util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", @@ -4287,7 +4909,6 @@ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -4299,18 +4920,15 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, - "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", "has-tostringtag": "^1.0.2" }, "engines": { @@ -4325,17 +4943,21 @@ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "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, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -4348,12 +4970,41 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "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/xmlhttprequest-ssl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "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, - "license": "ISC", "engines": { "node": ">=10" } @@ -4363,7 +5014,6 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -4382,17 +5032,21 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } }, + "node_modules/yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha512-8HFIh676uyGYP6wP13R/j6OJ/1HwJ46snpvzE7aHAN3Ryqh2yX6Xox2B4CUmTwwOIzlG3Bs7ocsP5dZH/R1Qbg==", + "dev": true + }, "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, - "license": "MIT", "engines": { "node": ">=10" }, diff --git a/package.json b/package.json index 2532d39..b58c939 100644 --- a/package.json +++ b/package.json @@ -1,18 +1,16 @@ { "devDependencies": { - "@aws-sdk/client-s3": "^3.934.0", "@eslint/js": "^9.8.0", "@foundryvtt/foundryvtt-cli": "^1.0.3", + "@league-of-foundry-developers/foundry-vtt-types": "^9.280.0", "@stylistic/eslint-plugin": "^2.6.1", - "axios": "^1.13.2", - "dotenv": "^17.2.2", "eslint": "^9.8.0", - "globals": "^15.9.0" + "globals": "^15.9.0", + "sass": "^1.77.8" }, "scripts": { - "data:build": "node scripts/buildCompendia.mjs", - "data:extract": "node scripts/extractCompendia.mjs", - "link": "node scripts/linkFoundry.mjs", + "css": "sass --watch --embed-source-map --no-error-css styles/:.styles/", + "build": "sass --embed-source-map --no-error-css styles/:.styles/", "lint": "eslint --fix", "lint:nofix": "eslint" } diff --git a/scripts/createForgejoRelease.mjs b/scripts/createForgejoRelease.mjs deleted file mode 100644 index ce31668..0000000 --- a/scripts/createForgejoRelease.mjs +++ /dev/null @@ -1,52 +0,0 @@ -import axios from "axios"; - -const { - TAG, - FORGEJO_API_URL: API, - FORGEJO_REPOSITORY: REPO, - FORGEJO_TOKEN: TOKEN, - CDN_URL, -} = process.env; - -async function addReleaseAsset(releaseID, name) { - return axios.post( - `${API}/repos/${REPO}/releases/${releaseID}/assets`, - { external_url: `${CDN_URL}/${REPO}/${TAG}/${name}`, }, - { - headers: { - Authorization: `token ${TOKEN}`, - "Content-Type": `multipart/form-data`, - }, - params: { name }, - } - ); -}; - -async function main() { - - // Initial Release Data - const release = await axios.post( - `${API}/repos/${REPO}/releases`, - { - name: TAG, - tag_name: TAG, - draft: true, - hide_archive_links: true, - }, - { - headers: { Authorization: `token ${TOKEN}` }, - } - ); - - try { - await addReleaseAsset(release.data.id, `release.zip`); - await addReleaseAsset(release.data.id, `system.json`); - } catch (e) { - console.error(`Failed to add assets to the release`); - process.exit(1); - }; - - console.log(`Release created`); -}; - -main(); diff --git a/scripts/linkFoundry.mjs b/scripts/linkFoundry.mjs deleted file mode 100644 index 1cbb71a..0000000 --- a/scripts/linkFoundry.mjs +++ /dev/null @@ -1,47 +0,0 @@ -import { existsSync } from "fs"; -import { symlink, unlink } from "fs/promises"; -import { join } from "path"; -import { config } from "dotenv"; - -config({ quiet: true }); - -const root = process.env.FOUNDRY_ROOT; - -// Early exit -if (!root) { - console.error(`Must provide a FOUNDRY_ROOT environment variable`); - process.exit(1); -}; - -// Assert Foundry exists -if (!existsSync(root)) { - console.error(`Foundry root not found.`); - process.exit(1); -}; - -// Removing existing symlink -if (existsSync(`foundry`)) { - console.log(`Attempting to unlink foundry instance`); - try { - await unlink(`foundry`); - } catch { - console.error(`Failed to unlink foundry folder.`); - process.exit(1); - }; -}; - -// Account for if the root is pointing at an Electron install -let targetRoot = root; -if (existsSync(join(root, `resources`, `app`))) { - console.log(`Switching to use the "${root}/resources/app" directory`); - targetRoot = join(root, `resources`, `app`); -}; - -// Create symlink -console.log(`Linking foundry source into folder`) -try { - await symlink(targetRoot, `foundry`); -} catch (e) { - console.error(e); - process.exit(1); -}; diff --git a/scripts/macros/rollDice.mjs b/scripts/macros/rollDice.mjs new file mode 100644 index 0000000..b2d99b2 --- /dev/null +++ b/scripts/macros/rollDice.mjs @@ -0,0 +1,77 @@ +async function rollDice() { + const sidesOnDice = 6; + + const answers = await DialogManager.ask({ + id: `eat-the-reich-dice-pool`, + question: `Set up your dice pool:`, + inputs: [ + { + key: `statBase`, + inputType: `number`, + defaultValue: 2, + label: `Number of Dice`, + autofocus: true, + }, + { + key: `successThreshold`, + inputType: `number`, + defaultValue: 3, + label: `Success Threshold (d${sidesOnDice} > X)`, + }, + { + key: `critsEnabled`, + inputType: `checkbox`, + defaultValue: true, + label: `Enable Criticals`, + }, + ], + }); + const { statBase, successThreshold, critsEnabled } = answers; + let rollMode = game.settings.get(`core`, `rollMode`); + + + + let successes = 0; + let critsOnly = 0; + const results = []; + for (let i = statBase; i > 0; i--) { + let r = new Roll(`1d${sidesOnDice}`); + await r.evaluate(); + let classes = `roll die d6`; + + // Determine the success count and class modifications for the chat + if (r.total > successThreshold) { + successes++; + } + else { + classes += ` failure` + } + if (r.total === sidesOnDice && critsEnabled) { + successes++; + critsOnly++; + classes += ` success`; + } + + results.push(`
  • ${r.total}
  • `); + } + + let content = `Rolls:
      ${results.join(``)}

    Successes: ${successes}
    Crits: ${critsOnly}`; + + + if (rollMode === CONST.DICE_ROLL_MODES.BLIND) { + ui.notifications.warn(`Cannot make a blind roll from the macro, rolling with mode "Private GM Roll" instead`); + rollMode = CONST.DICE_ROLL_MODES.PRIVATE; + } + + const chatData = ChatMessage.applyRollMode( + { + title: `Dice Pool`, + content, + }, + rollMode, + ); + + await ChatMessage.implementation.create(chatData); +} + +rollDice() \ No newline at end of file diff --git a/scripts/prepareManifest.mjs b/scripts/prepareManifest.mjs deleted file mode 100644 index 34f4236..0000000 --- a/scripts/prepareManifest.mjs +++ /dev/null @@ -1,45 +0,0 @@ -/* -The intent of this script is to do all of the modifications of the -manifest file that we need to do in order to release the system. -This can include removing dev-only fields/attributes that end -users will never, and should never, care about nor need. -*/ -import { readFile, writeFile } from "fs/promises"; - -const MANIFEST_PATH = `system.json`; - -const { - DOWNLOAD_URL, - LATEST_URL, -} = process.env; - -let manifest; -try { - manifest = JSON.parse(await readFile(MANIFEST_PATH, `utf-8`)); - console.log(`Manifest loaded from disk`); -} catch { - console.error(`Failed to parse manifest file.`); - process.exit(1); -}; - -console.log(`Updating download/manifest URLs`) -manifest.download = DOWNLOAD_URL; -manifest.manifest = LATEST_URL; - -// Filter out dev-only resources -if (manifest.esmodules) { - console.log(`Removing dev-only esmodules`); - manifest.esmodules = manifest.esmodules.filter( - filepath => !filepath.startsWith(`dev/`) - ); -}; - -// Remove dev flags -console.log(`Cleaning up flags`); -delete manifest.flags?.hotReload; -if (Object.keys(manifest.flags).length === 0) { - delete manifest.flags; -}; - -await writeFile(MANIFEST_PATH, JSON.stringify(manifest, undefined, `\t`)); -console.log(`Manifest written back to disk`); diff --git a/scripts/tagExists.mjs b/scripts/tagExists.mjs deleted file mode 100644 index 2ddcdbd..0000000 --- a/scripts/tagExists.mjs +++ /dev/null @@ -1,38 +0,0 @@ -import axios from "axios"; - -const { - TAG_NAME, - FORGEJO_API_URL: API_URL, - FORGEJO_REPOSITORY: REPO, - FORGEJO_TOKEN: TOKEN, -} = process.env; - - -async function main() { - - if (!TAG_NAME) { - console.log(`Tag name must not be blank`); - process.exit(1); - }; - - const requestURL = `${API_URL}/repos/${REPO}/tags/${TAG_NAME}`; - - const response = await axios.get( - requestURL, - { - headers: { Authorization: `token ${TOKEN}` }, - validateStatus: () => true, - }, - ); - - // We actually *want* an error when the tag exists, instead of when - // it doesn't - if (response.status === 200) { - console.log(`Tag with name "${TAG_NAME}" already exists`); - process.exit(1); - }; - - console.log(`Tag with name "${TAG_NAME}" not found, proceeding`); -}; - -main(); diff --git a/scripts/uploadToS3.mjs b/scripts/uploadToS3.mjs deleted file mode 100644 index 50c1444..0000000 --- a/scripts/uploadToS3.mjs +++ /dev/null @@ -1,65 +0,0 @@ -import { PutObjectCommand, S3Client } from '@aws-sdk/client-s3'; -import { createReadStream } from "fs"; - -const requiredEnvVariables = [ - `TAG`, `FILE`, - `FORGEJO_REPOSITORY`, - `S3_BUCKET`, `S3_REGION`, `S3_KEY`, `S3_SECRET`, `S3_ENDPOINT`, -]; - -async function main() { - - // Assert all of the required env variables are present - const missing = []; - for (const envVar of requiredEnvVariables) { - if (!(envVar in process.env)) { - missing.push(envVar); - }; - }; - if (missing.length > 0) { - console.error(`Missing the following required environment variables: ${missing.join(`, `)}`); - process.exit(1); - }; - - const { - TAG, - S3_ENDPOINT, - S3_REGION, - S3_KEY, - S3_SECRET, - S3_BUCKET, - FILE, - FORGEJO_REPOSITORY: REPO, - } = process.env; - - const s3Client = new S3Client({ - endpoint: S3_ENDPOINT, - forcePathStyle: false, - region: S3_REGION, - credentials: { - accessKeyId: S3_KEY, - secretAccessKey: S3_SECRET - }, - }); - - const name = FILE.split(`/`).at(-1); - - const params = { - Bucket: S3_BUCKET, - Key: `${REPO}/${TAG}/${name}`, - Body: createReadStream(FILE), - ACL: "public-read", - METADATA: { - "x-repo-version": TAG, - }, - }; - - try { - const response = await s3Client.send(new PutObjectCommand(params)); - console.log("Upload successful"); - } catch (err) { - console.error("Upload to s3 failed"); - }; -}; - -main(); \ No newline at end of file diff --git a/src/components/_index.mjs b/src/components/_index.mjs new file mode 100644 index 0000000..44133d9 --- /dev/null +++ b/src/components/_index.mjs @@ -0,0 +1,32 @@ +import { SystemIcon } from "./icon.mjs"; +import { SystemIncrementer } from "./incrementer.mjs"; +import { SystemRange } from "./range.mjs"; + +/** + * A list of element classes to register, expects all of them to have a static + * property of "elementName" that is the namespaced name that the component will + * be registered under. Any elements that are formAssociated have their name added + * to the "CONFIG.CACHE.componentListeners" array and should be listened to for + * "change" events in sheets. + */ +const components = [ + SystemIcon, + SystemIncrementer, + SystemRange, +]; + +export function registerCustomComponents() { + (CONFIG.CACHE ??= {}).componentListeners ??= []; + for (const component of components) { + if (!window.customElements.get(component.elementName)) { + console.debug(`${game.system.id} | Registering component "${component.elementName}"`); + window.customElements.define( + component.elementName, + component, + ); + if (component.formAssociated) { + CONFIG.CACHE.componentListeners.push(component.elementName); + } + }; + }; +}; diff --git a/module/apps/elements/svgLoader.mjs b/src/components/icon.mjs similarity index 63% rename from module/apps/elements/svgLoader.mjs rename to src/components/icon.mjs index a209ccd..430076d 100644 --- a/module/apps/elements/svgLoader.mjs +++ b/src/components/icon.mjs @@ -1,18 +1,16 @@ -import { filePath } from "../../consts.mjs"; -import { Logger } from "../../utils/Logger.mjs"; -import { StyledShadowElement } from "./StyledShadowElement.mjs"; +import { StyledShadowElement } from "./mixins/Styles.mjs"; /** Attributes: @property {string} name - The name of the icon, takes precedence over the path @property {string} path - The path of the icon file */ -export class TafSVGLoader extends StyledShadowElement(HTMLElement) { - static elementName = `taf-svg`; +export class SystemIcon extends StyledShadowElement(HTMLElement) { + static elementName = `dd-icon`; static formAssociated = false; /* Stuff for the mixin to use */ - static _stylePath = `svg-loader.css`; + static _stylePath = ``; static _cache = new Map(); @@ -22,8 +20,12 @@ export class TafSVGLoader extends StyledShadowElement(HTMLElement) { /** @type {null | string} */ _path; + /* Stored IDs for all of the hooks that are in this component */ + #svgHmr; + constructor() { super(); + // this._shadow = this.attachShadow({ mode: `open`, delegatesFocus: true }); this.#container = document.createElement(`div`); this._shadow.appendChild(this.#container); @@ -32,7 +34,7 @@ export class TafSVGLoader extends StyledShadowElement(HTMLElement) { _mounted = false; async connectedCallback() { super.connectedCallback(); - if (this._mounted) { return }; + if (this._mounted) { return } this._name = this.getAttribute(`name`); this._path = this.getAttribute(`path`); @@ -54,7 +56,7 @@ export class TafSVGLoader extends StyledShadowElement(HTMLElement) { */ let content; if (this._name) { - content = await this.#getIcon(filePath(`assets/${this._name}.svg`)); + content = await this.#getIcon(`./systems/dotdungeon/assets/${this._name}.svg`); }; if (this._path && !content) { @@ -65,12 +67,28 @@ export class TafSVGLoader extends StyledShadowElement(HTMLElement) { this.#container.appendChild(content.cloneNode(true)); }; + /* + This is so that when we get an HMR event from Foundry we can appropriately + handle it using our logic to update the component and the icon cache. + */ + if (game.settings.get(game.system.id, `devMode`)) { + this.#svgHmr = Hooks.on(`${game.system.id}-hmr:svg`, (iconName, data) => { + if (this._name === iconName || this._path?.endsWith(data.path)) { + const svg = this.#parseSVG(data.content); + this.constructor._cache.set(iconName, svg); + this.#container.replaceChildren(svg.cloneNode(true)); + }; + }); + }; + this._mounted = true; }; disconnectedCallback() { super.disconnectedCallback(); - if (!this._mounted) { return }; + if (!this._mounted) { return } + + Hooks.off(`${game.system.id}-hmr:svg`, this.#svgHmr); this._mounted = false; }; @@ -78,7 +96,7 @@ export class TafSVGLoader extends StyledShadowElement(HTMLElement) { async #getIcon(path) { // Cache hit! if (this.constructor._cache.has(path)) { - Logger.debug(`Image ${path} cache hit`); + Logger.debug(`Icon ${path} cache hit`); return this.constructor._cache.get(path); }; @@ -92,7 +110,7 @@ export class TafSVGLoader extends StyledShadowElement(HTMLElement) { return; }; - Logger.debug(`Adding image ${path} to the cache`); + Logger.debug(`Adding icon ${path} to the cache`); const svg = this.#parseSVG(await r.text()); this.constructor._cache.set(path, svg); return svg; diff --git a/src/components/incrementer.mjs b/src/components/incrementer.mjs new file mode 100644 index 0000000..cde1cec --- /dev/null +++ b/src/components/incrementer.mjs @@ -0,0 +1,153 @@ +import { StyledShadowElement } from "./mixins/Styles.mjs"; +import { SystemIcon } from "./icon.mjs"; + +/** +Attributes: +@property {string} name - The path to the value to update +@property {number} value - The actual value of the input +@property {number} min - The minimum value of the input +@property {number} max - The maximum value of the input +@property {number?} smallStep - The step size used for the buttons and arrow keys +@property {number?} largeStep - The step size used for the buttons + Ctrl and page up / down + +Styling: +- `--height`: Controls the height of the element + the width of the buttons (default: 1.25rem) +- `--width`: Controls the width of the number input (default 50px) +*/ +export class SystemIncrementer extends StyledShadowElement(HTMLElement) { + static elementName = `dd-incrementer`; + static formAssociated = true; + + static _stylePath = `v1/components/incrementer.scss`; + + _internals; + #input; + + _min; + _max; + _smallStep; + _largeStep; + + constructor() { + super(); + + // Form internals + this._internals = this.attachInternals(); + this._internals.role = `spinbutton`; + }; + + get form() { + return this._internals.form; + } + + get name() { + return this.getAttribute(`name`); + } + set name(value) { + this.setAttribute(`name`, value); + } + + get value() { + return this.getAttribute(`value`); + }; + set value(value) { + this.setAttribute(`value`, value); + }; + + get type() { + return `number`; + } + + connectedCallback() { + super.connectedCallback(); + this.replaceChildren(); + + // Attribute parsing / registration + const value = this.getAttribute(`value`); + this._min = parseInt(this.getAttribute(`min`) ?? 0); + this._max = parseInt(this.getAttribute(`max`) ?? 0); + this._smallStep = parseInt(this.getAttribute(`smallStep`) ?? 1); + this._largeStep = parseInt(this.getAttribute(`largeStep`) ?? 5); + + this._internals.ariaValueMin = this._min; + this._internals.ariaValueMax = this._max; + + const container = document.createElement(`div`); + + // The input that the user can see / modify + const input = document.createElement(`input`); + this.#input = input; + input.type = `number`; + input.ariaHidden = true; + input.min = this.getAttribute(`min`); + input.max = this.getAttribute(`max`); + input.addEventListener(`change`, this.#updateValue.bind(this)); + input.value = value; + + // plus button + const increment = document.createElement(SystemIcon.elementName); + increment.setAttribute(`name`, `ui/plus`); + increment.setAttribute(`var:size`, `0.75rem`); + increment.setAttribute(`var:fill`, `currentColor`); + increment.ariaHidden = true; + increment.classList.value = `increment`; + increment.addEventListener(`mousedown`, this.#increment.bind(this)); + + // minus button + const decrement = document.createElement(SystemIcon.elementName); + decrement.setAttribute(`name`, `ui/minus`); + decrement.setAttribute(`var:size`, `0.75rem`); + decrement.setAttribute(`var:fill`, `currentColor`); + decrement.ariaHidden = true; + decrement.classList.value = `decrement`; + decrement.addEventListener(`mousedown`, this.#decrement.bind(this)); + + // Construct the DOM + container.appendChild(decrement); + container.appendChild(input); + container.appendChild(increment); + this._shadow.appendChild(container); + + /* + This converts all of the namespace prefixed properties on the element to + CSS variables so that they don't all need to be provided by doing style="" + */ + for (const attrVar of this.attributes) { + if (attrVar.name?.startsWith(`var:`)) { + const prop = attrVar.name.replace(`var:`, ``); + this.style.setProperty(`--` + prop, attrVar.value); + }; + }; + }; + + #updateValue() { + let value = parseInt(this.#input.value); + if (this.getAttribute(`min`)) { + value = Math.max(this._min, value); + } + if (this.getAttribute(`max`)) { + value = Math.min(this._max, value); + } + this.#input.value = value; + this.value = value; + this.dispatchEvent(new Event(`change`, { bubbles: true })); + }; + + /** @param {Event} $e */ + #increment($e) { + $e.preventDefault(); + let value = parseInt(this.#input.value); + value += $e.ctrlKey ? this._largeStep : this._smallStep; + this.#input.value = value; + this.#updateValue(); + }; + + /** @param {Event} $e */ + #decrement($e) { + $e.preventDefault(); + let value = parseInt(this.#input.value); + value -= $e.ctrlKey ? this._largeStep : this._smallStep; + this.#input.value = value; + this.#updateValue(); + }; +}; diff --git a/module/apps/elements/StyledShadowElement.mjs b/src/components/mixins/Styles.mjs similarity index 53% rename from module/apps/elements/StyledShadowElement.mjs rename to src/components/mixins/Styles.mjs index 4929868..b76dd29 100644 --- a/module/apps/elements/StyledShadowElement.mjs +++ b/src/components/mixins/Styles.mjs @@ -1,5 +1,3 @@ -import { filePath } from "../../consts.mjs"; - /** * @param {HTMLElement} Base */ @@ -13,9 +11,9 @@ export function StyledShadowElement(Base) { /** * The stringified CSS to use - * @type {Map} + * @type {string} */ - static _styles = new Map(); + static _styles; /** * The HTML element of the stylesheet @@ -26,6 +24,12 @@ export function StyledShadowElement(Base) { /** @type {ShadowRoot} */ _shadow; + /** + * The hook ID for this element's CSS hot reload + * @type {number} + */ + #cssHmr; + constructor() { super(); @@ -36,28 +40,38 @@ export function StyledShadowElement(Base) { #mounted = false; connectedCallback() { - if (this.#mounted) { return }; + if (this.#mounted) { return } this._getStyles(); + if (game.settings.get(`dotdungeon`, `devMode`)) { + this.#cssHmr = Hooks.on(`dd-hmr:css`, (data) => { + if (data.path.endsWith(this.constructor._stylePath)) { + this._style.innerHTML = data.content; + }; + }); + }; + this.#mounted = true; }; disconnectedCallback() { - if (!this.#mounted) { return }; + if (!this.#mounted) { return } + if (this.#cssHmr != null) { + Hooks.off(`dd-hmr:css`, this.#cssHmr); + this.#cssHmr = null; + }; this.#mounted = false; }; _getStyles() { - // TODO: Cache the CSS content in a more sane way that doesn't break - const stylePath = this.constructor._stylePath; - if (this.constructor._styles.has(stylePath)) { - this._style.innerHTML = this.constructor._styles.get(stylePath); + if (this.constructor._styles) { + this._style.innerHTML = this.constructor._styles; } else { - fetch(filePath(`styles/components/${stylePath}`)) + fetch(`./systems/dotdungeon/.styles/${this.constructor._stylePath}`) .then(r => r.text()) .then(t => { - this.constructor._styles.set(stylePath, t); + this.constructor._styles = t; this._style.innerHTML = t; }); } diff --git a/src/components/range.mjs b/src/components/range.mjs new file mode 100644 index 0000000..f40b985 --- /dev/null +++ b/src/components/range.mjs @@ -0,0 +1,138 @@ +import { StyledShadowElement } from "./mixins/Styles.mjs"; + +/** +Attributes: +@property {string} name - The path to the value to update in the datamodel +@property {number} value - The actual value of the input +@property {number} max - The maximum value that this range has + +@extends {HTMLElement} +*/ +export class SystemRange + extends StyledShadowElement( + HTMLElement, + { mode: `open`, delegatesFocus: true }, + ) { + static elementName = `dd-range`; + static formAssociated = true; + + static observedAttributes = [`max`]; + + static _stylePath = `v3/components/range.css`; + + _internals; + #input; + + constructor() { + super(); + + // Form internals + this._internals = this.attachInternals(); + this._internals.role = `spinbutton`; + }; + + get form() { + return this._internals.form; + }; + + get name() { + return this.getAttribute(`name`); + }; + set name(value) { + this.setAttribute(`name`, value); + }; + + get value() { + try { + return parseInt(this.getAttribute(`value`)); + } catch { + throw new Error(`Failed to parse attribute: "value" - Make sure it's an integer`); + }; + }; + set value(value) { + this.setAttribute(`value`, value); + }; + + get max() { + try { + return parseInt(this.getAttribute(`max`)); + } catch { + throw new Error(`Failed to parse attribute: "max" - Make sure it's an integer`); + }; + }; + set max(value) { + this.setAttribute(`max`, value); + }; + + get type() { + return `number`; + }; + + connectedCallback() { + super.connectedCallback(); + + // Attribute validation + if (!this.hasAttribute(`max`)) { + throw new Error(`dotdungeon | Cannot have a range without a maximum value`); + }; + + // Keyboard accessible input for the thing + this.#input = document.createElement(`input`); + this.#input.type = `number`; + this.#input.min = 0; + this.#input.max = this.max; + this.#input.value = this.value; + this.#input.addEventListener(`change`, () => { + const inputValue = parseInt(this.#input.value); + if (inputValue === this.value) { return }; + this._updateValue.bind(this)(Math.sign(this.value - inputValue)); + this._updateValue(Math.sign(this.value - inputValue)); + }); + this._shadow.appendChild(this.#input); + + // Shadow-DOM construction + this._elements = new Array(this.max); + const container = document.createElement(`div`); + container.classList.add(`container`); + + // Creating the node for filled content + const filledContainer = document.createElement(`div`); + filledContainer.classList.add(`range-increment`, `filled`); + const filledNode = this.querySelector(`[slot="filled"]`); + if (filledNode) { filledContainer.appendChild(filledNode) }; + + const emptyContainer = document.createElement(`div`); + emptyContainer.classList.add(`range-increment`, `empty`); + const emptyNode = this.querySelector(`[slot="empty"]`); + if (emptyNode) { emptyContainer.appendChild(emptyNode) }; + + this._elements.fill(filledContainer, 0, this.value); + this._elements.fill(emptyContainer, this.value); + container.append(...this._elements.map((slot, i) => { + const node = slot.cloneNode(true); + node.setAttribute(`data-index`, i + 1); + node.addEventListener(`click`, () => { + const filled = node.classList.contains(`filled`); + this._updateValue(filled ? -1 : 1); + }); + return node; + })); + this._shadow.appendChild(container); + + /* + This converts all of the namespace prefixed properties on the element to + CSS variables so that they don't all need to be provided by doing style="" + */ + for (const attrVar of this.attributes) { + if (attrVar.name?.startsWith(`var:`)) { + const prop = attrVar.name.replace(`var:`, ``); + this.style.setProperty(`--` + prop, attrVar.value); + }; + }; + }; + + _updateValue(delta) { + this.value += delta; + this.dispatchEvent(new Event(`change`, { bubbles: true })); + }; +}; diff --git a/src/consts.mjs b/src/consts.mjs new file mode 100644 index 0000000..0c13482 --- /dev/null +++ b/src/consts.mjs @@ -0,0 +1,3 @@ +export const FEATURE_FLAGS = Object.freeze({ + ROLLMODECONTENT: `Roll Mode Message Content`, +}); diff --git a/src/documents/ActiveEffect/_proxy.mjs b/src/documents/ActiveEffect/_proxy.mjs new file mode 100644 index 0000000..6f75118 --- /dev/null +++ b/src/documents/ActiveEffect/_proxy.mjs @@ -0,0 +1,11 @@ +import { createDocumentProxy } from "../../utils/createDocumentProxy.mjs"; + +/** + * An object of Foundry-types to in-code Document classes. + */ +const classes = {}; + +/** The class that will be used if no type-specific class is defined */ +const defaultClass = ActiveEffect; + +export const ActiveEffectProxy = createDocumentProxy(defaultClass, classes); diff --git a/src/documents/Actor/Player/Document.mjs b/src/documents/Actor/Player/Document.mjs new file mode 100644 index 0000000..287e30f --- /dev/null +++ b/src/documents/Actor/Player/Document.mjs @@ -0,0 +1,5 @@ +export class Player extends Actor { + getRollData() { + return this.system; + }; +}; diff --git a/src/documents/Actor/Player/Model.mjs b/src/documents/Actor/Player/Model.mjs new file mode 100644 index 0000000..b141450 --- /dev/null +++ b/src/documents/Actor/Player/Model.mjs @@ -0,0 +1,12 @@ +export class PlayerData extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields; + return { + content: new fields.HTMLField({ + blank: true, + trim: true, + initial: ``, + }), + }; + }; +}; diff --git a/src/documents/Actor/_proxy.mjs b/src/documents/Actor/_proxy.mjs new file mode 100644 index 0000000..6e7eb18 --- /dev/null +++ b/src/documents/Actor/_proxy.mjs @@ -0,0 +1,11 @@ +import { createDocumentProxy } from "../../utils/createDocumentProxy.mjs"; + +/** + * An object of Foundry-types to in-code Document classes. + */ +const classes = {}; + +/** The class that will be used if no type-specific class is defined */ +const defaultClass = Actor; + +export const ActorProxy = createDocumentProxy(defaultClass, classes); diff --git a/src/documents/ChatMessage/_proxy.mjs b/src/documents/ChatMessage/_proxy.mjs new file mode 100644 index 0000000..44b44c7 --- /dev/null +++ b/src/documents/ChatMessage/_proxy.mjs @@ -0,0 +1,11 @@ +import { createDocumentProxy } from "../../utils/createDocumentProxy.mjs"; + +/** + * An object of Foundry-types to in-code Document classes. + */ +const classes = {}; + +/** The class that will be used if no type-specific class is defined */ +const defaultClass = ChatMessage; + +export const ChatMessageProxy = createDocumentProxy(defaultClass, classes); diff --git a/src/documents/Item/_proxy.mjs b/src/documents/Item/_proxy.mjs new file mode 100644 index 0000000..8f01bc6 --- /dev/null +++ b/src/documents/Item/_proxy.mjs @@ -0,0 +1,11 @@ +import { createDocumentProxy } from "../../utils/createDocumentProxy.mjs"; + +/** + * An object of Foundry-types to in-code Document classes. + */ +const classes = {}; + +/** The class that will be used if no type-specific class is defined */ +const defaultClass = Item; + +export const ItemProxy = createDocumentProxy(defaultClass, classes); diff --git a/src/helpers/_index.mjs b/src/helpers/_index.mjs new file mode 100644 index 0000000..8d5ed41 --- /dev/null +++ b/src/helpers/_index.mjs @@ -0,0 +1,18 @@ +import { handlebarsLocalizer, localizer } from "../utils/localizer.mjs"; +import { options } from "./options.mjs"; + +export function registerHandlebarsHelpers() { + const helperPrefix = game.system.id; + + return { + // MARK: Complex helpers + [`${helperPrefix}-i18n`]: handlebarsLocalizer, + [`${helperPrefix}-options`]: options, + + // MARK: Simple helpers + [`${helperPrefix}-stringify`]: v => JSON.stringify(v, null, ` `), + [`${helperPrefix}-empty`]: v => v.length == 0, + [`${helperPrefix}-set-has`]: (s, k) => s.has(k), + [`${helperPrefix}-empty-state`]: (v) => v ?? localizer(`${game.system.id}.common.empty`), + }; +}; diff --git a/module/handlebarsHelpers/options.mjs b/src/helpers/options.mjs similarity index 65% rename from module/handlebarsHelpers/options.mjs rename to src/helpers/options.mjs index 664aaa6..b0df8d0 100644 --- a/module/handlebarsHelpers/options.mjs +++ b/src/helpers/options.mjs @@ -1,3 +1,5 @@ +import { localizer } from "../utils/localizer.mjs"; + /** * @typedef {object} Option * @property {string} [label] @@ -6,9 +8,8 @@ */ /** - * @param {string | number} selected The selected value - * @param {Array`, ); }; - return new Handlebars.SafeString(htmlOptions.join(`\n`)); + return htmlOptions.join(`\n`); }; diff --git a/src/hooks/hotReload.mjs b/src/hooks/hotReload.mjs new file mode 100644 index 0000000..0320dd8 --- /dev/null +++ b/src/hooks/hotReload.mjs @@ -0,0 +1,18 @@ +const loaders = { + svg(data) { + const iconName = data.path.split(`/`).slice(-1)[0].slice(0, -4); + Logger.debug(`hot-reloading icon: ${iconName}`); + Hooks.call(`${game.system.id}-hmr:svg`, iconName, data); + }, + js() {window.location.reload()}, + mjs() {window.location.reload()}, + css(data) { + Logger.debug(`Hot-reloading CSS: ${data.path}`); + Hooks.call(`${game.system.id}-hmr:css`, data); + }, +}; + +Hooks.on(`hotReload`, async (data) => { + if (!loaders[data.extension]) {return} + return loaders[data.extension](data); +}); diff --git a/src/hooks/renderChatMessage.mjs b/src/hooks/renderChatMessage.mjs new file mode 100644 index 0000000..15f70a0 --- /dev/null +++ b/src/hooks/renderChatMessage.mjs @@ -0,0 +1,21 @@ +import { FEATURE_FLAGS } from "../consts.mjs"; + +Hooks.on(`renderChatMessage`, (msg, html) => { + + // Short-Circuit when the flag isn't set for the message + if (msg.getFlag(`taf`, `rollModedContent`)) { + return; + } + + const featureFlags = game.settings.get(game.system.id, `flags`); + const featureFlagEnabled = featureFlags.includes(FEATURE_FLAGS.ROLLMODECONTENT); + + const contentElement = html.find(`.message-content`)[0]; + let content = contentElement.innerHTML; + if (featureFlagEnabled && msg.blind && !game.user.isGM) { + content = content.replace(/-=.*?=-/gm, `???`); + } else { + content = content.replace(/-=|=-/gm, ``); + } + contentElement.innerHTML = content; +}); diff --git a/src/main.mjs b/src/main.mjs new file mode 100644 index 0000000..7f4ae1b --- /dev/null +++ b/src/main.mjs @@ -0,0 +1,59 @@ +// Document Imports +import { ActiveEffectProxy } from "./documents/ActiveEffect/_proxy.mjs"; +import { ActorProxy } from "./documents/Actor/_proxy.mjs"; +import { ChatMessageProxy } from "./documents/ChatMessage/_proxy.mjs"; +import { ItemProxy } from "./documents/Item/_proxy.mjs"; + +// DataModel Imports +import { PlayerData } from "./documents/Actor/Player/Model.mjs"; + +// Hook Imports +import "./hooks/renderChatMessage.mjs"; +import "./hooks/hotReload.mjs"; + +// Misc Imports +import "./utils/globalTaf.mjs"; +import "./utils/logger.mjs"; +import "./utils/DialogManager.mjs"; +import { registerCustomComponents } from "./components/_index.mjs"; +import { registerHandlebarsHelpers } from "./helpers/_index.mjs"; +import { registerSettings } from "./settings/_index.mjs"; +import { registerSheets } from "./sheets/_index.mjs"; + +// MARK: init hook +Hooks.once(`init`, () => { + Logger.info(`Initializing`); + CONFIG.ActiveEffect.legacyTransferral = false; + + registerSettings(); + + // Data Models + CONFIG.Actor.dataModels.player = PlayerData; + + // Update document classes + CONFIG.Actor.documentClass = ActorProxy; + CONFIG.Item.documentClass = ItemProxy; + CONFIG.ActiveEffect.documentClass = ActiveEffectProxy; + CONFIG.ChatMessage.documentClass = ChatMessageProxy; + registerSheets(); + + registerHandlebarsHelpers(); + + registerCustomComponents(); +}); + + +// MARK: ready hook +Hooks.once( `ready`, () => { + Logger.info(`Ready`); + + let defaultTab = game.settings.get(game.system.id, `defaultTab`); + if (defaultTab) { + if (!ui.sidebar?.tabs?.[defaultTab]) { + Logger.error(`Couldn't find a sidebar tab with ID:`, defaultTab); + } else { + Logger.debug(`Switching sidebar tab to:`, defaultTab); + ui.sidebar.tabs[defaultTab].activate(); + }; + }; +}); diff --git a/src/settings/_index.mjs b/src/settings/_index.mjs new file mode 100644 index 0000000..0f65987 --- /dev/null +++ b/src/settings/_index.mjs @@ -0,0 +1,10 @@ +import { registerClientSettings } from "./client_settings.mjs"; +import { registerDevSettings } from "./dev_settings.mjs"; +import { registerWorldSettings } from "./world_settings.mjs"; + +export function registerSettings() { + Logger.debug(`Registering settings`); + registerClientSettings(); + registerWorldSettings(); + registerDevSettings(); +}; diff --git a/src/settings/client_settings.mjs b/src/settings/client_settings.mjs new file mode 100644 index 0000000..7dd2708 --- /dev/null +++ b/src/settings/client_settings.mjs @@ -0,0 +1,2 @@ +export function registerClientSettings() { +}; diff --git a/src/settings/dev_settings.mjs b/src/settings/dev_settings.mjs new file mode 100644 index 0000000..229775c --- /dev/null +++ b/src/settings/dev_settings.mjs @@ -0,0 +1,16 @@ +export function registerDevSettings() { + game.settings.register(game.system.id, `devMode`, { + scope: `client`, + type: Boolean, + config: false, + default: false, + requiresReload: true, + }); + + game.settings.register(game.system.id, `defaultTab`, { + scope: `client`, + type: String, + config: false, + requiresReload: false, + }); +}; diff --git a/src/settings/world_settings.mjs b/src/settings/world_settings.mjs new file mode 100644 index 0000000..db4d7ed --- /dev/null +++ b/src/settings/world_settings.mjs @@ -0,0 +1,24 @@ +import { FEATURE_FLAGS } from "../consts.mjs"; + +export function registerWorldSettings() { + game.settings.register(game.system.id, `flags`, { + name: `Feature Flags`, + hint: `World-based feature flags that are used to enable/disable specific behaviours`, + scope: `world`, + type: new foundry.data.fields.SetField( + new foundry.data.fields.StringField( + { + empty: false, + trim: true, + options: Object.values(FEATURE_FLAGS), + }, + ), + { + required: false, + initial: new Set(), + }, + ), + config: true, + requiresReload: true, + }); +}; diff --git a/src/sheets/Player/v1.mjs b/src/sheets/Player/v1.mjs new file mode 100644 index 0000000..162af4d --- /dev/null +++ b/src/sheets/Player/v1.mjs @@ -0,0 +1,26 @@ +export class PlayerSheetv1 extends ActorSheet { + static get defaultOptions() { + let opts = foundry.utils.mergeObject( + super.defaultOptions, + { + template: `systems/${game.system.id}/templates/Player/v1/main.hbs`, + classes: [], + }, + ); + opts.classes = [`actor--player`, `style-v1`]; + return opts; + }; + + async getData() { + const ctx = {}; + + ctx.editable = this.isEditable; + + const actor = ctx.actor = this.actor; + ctx.system = actor.system; + ctx.enriched = { system: {} }; + ctx.enriched.system.content = await TextEditor.enrichHTML(actor.system.content); + + return ctx; + }; +} diff --git a/src/sheets/_index.mjs b/src/sheets/_index.mjs new file mode 100644 index 0000000..073a018 --- /dev/null +++ b/src/sheets/_index.mjs @@ -0,0 +1,11 @@ +import { PlayerSheetv1 } from "./Player/v1.mjs"; + +export function registerSheets() { + Logger.debug(`Registering sheets`); + + Actors.registerSheet(game.system.id, PlayerSheetv1, { + makeDefault: true, + types: [`player`], + label: `Hello`, + }); +}; diff --git a/src/utils/DialogManager.mjs b/src/utils/DialogManager.mjs new file mode 100644 index 0000000..6413abf --- /dev/null +++ b/src/utils/DialogManager.mjs @@ -0,0 +1,178 @@ +import { localizer } from "./localizer.mjs"; + +/** + * A utility class that allows managing Dialogs that are created for various + * purposes such as deleting items, help popups, etc. This is a singleton class + * that upon instantiating after the first time will just return the first instance + */ +export class DialogManager { + + /** @type {Map} */ + static #dialogs = new Map(); + + /** + * Focuses a dialog if it already exists, or creates a new one and renders it. + * + * @param {string} dialogId The ID to associate with the dialog, should be unique + * @param {object} data The data to pass to the Dialog constructor + * @param {DialogOptions} opts The options to pass to the Dialog constructor + * @returns {Dialog} The Dialog instance + */ + static async createOrFocus(dialogId, data, opts = {}) { + if (DialogManager.#dialogs.has(dialogId)) { + const dialog = DialogManager.#dialogs.get(dialogId); + dialog.bringToTop(); + return dialog; + }; + + /* + This makes sure that if I provide a close function as a part of the data, + that the dialog still gets removed from the set once it's closed, otherwise + it could lead to dangling references that I don't care to keep. Or if I don't + provide the close function, it just sets the function as there isn't anything + extra that's needed to be called. + */ + if (data?.close) { + const provided = data.close; + data.close = () => { + DialogManager.#dialogs.delete(dialogId); + provided(); + }; + } else { + data.close = () => DialogManager.#dialogs.delete(dialogId); + }; + + // Create the Dialog with the modified data + const dialog = new Dialog(data, opts); + DialogManager.#dialogs.set(dialogId, dialog); + dialog.render(true); + return dialog; + }; + + /** + * Closes a dialog if it is rendered + * + * @param {string} dialogId The ID of the dialog to close + */ + static async close(dialogId) { + const dialog = DialogManager.#dialogs.get(dialogId); + dialog?.close(); + }; + + static async helpDialog( + helpId, + helpContent, + helpTitle = `dotdungeon.common.help`, + localizationData = {}, + ) { + DialogManager.createOrFocus( + helpId, + { + title: localizer(helpTitle, localizationData), + content: localizer(helpContent, localizationData), + buttons: {}, + }, + { resizable: true }, + ); + }; + + /** + * Asks the user to provide a simple piece of information, this is primarily + * intended to be used within macros so that it can have better info gathering + * as needed. This returns an object of input keys/labels to the value the user + * input for that label, if there is only one input, this will return the value + * without an object wrapper, allowing for easier access. + */ + static async ask(data, opts = {}) { + if (!data.id) { + throw new Error(`Asking the user for input must contain an ID`); + } + if (!data.inputs.length) { + throw new Error(`Must include at least one input specification when prompting the user`); + } + + let autofocusClaimed = false; + for (const i of data.inputs) { + i.id ??= foundry.utils.randomID(16); + i.inputType ??= `text`; + + // Only ever allow one input to claim autofocus + i.autofocus &&= !autofocusClaimed; + autofocusClaimed ||= i.autofocus; + + // Set the value's attribute name if it isn't specified explicitly + if (!i.valueAttribute) { + switch (i.inputType) { + case `checkbox`: + i.valueAttribute = `checked`; + break; + default: + i.valueAttribute = `value`; + }; + }; + }; + + opts.jQuery = true; + data.default ??= `confirm`; + data.title ??= `System Question`; + + data.content = await renderTemplate( + `systems/${game.system.id}/templates/Dialogs/ask.hbs`, + data, + ); + + return new Promise((resolve, reject) => { + DialogManager.createOrFocus( + data.id, + { + ...data, + buttons: { + confirm: { + label: `Confirm`, + callback: (html) => { + const answers = {}; + + /* + Retrieve the answer for every input provided using the ID + determined during initial data prep, and assign the value + to the property of the label in the object. + */ + for (const i of data.inputs) { + const element = html.find(`#${i.id}`)[0]; + let value = element.value; + switch (i.inputType) { + case `number`: + value = parseFloat(value); + break; + case `checkbox`: + value = element.checked; + break; + } + Logger.debug(`Ask response: ${value} (type: ${typeof value})`); + answers[i.key ?? i.label] = value; + if (data.inputs.length === 1) { + resolve(value); + return; + } + } + + resolve(answers); + }, + }, + cancel: { + label: `Cancel`, + callback: () => reject(`User cancelled the prompt`), + }, + }, + }, + opts, + ); + }); + }; + + static get size() { + return DialogManager.#dialogs.size; + } +}; + +globalThis.DialogManager = DialogManager; diff --git a/src/utils/createDocumentProxy.mjs b/src/utils/createDocumentProxy.mjs new file mode 100644 index 0000000..08af7e6 --- /dev/null +++ b/src/utils/createDocumentProxy.mjs @@ -0,0 +1,39 @@ +export function createDocumentProxy(defaultClass, classes) { + // eslint-disable-next-line func-names + return new Proxy(function () {}, { + construct(_target, args) { + const [data] = args; + + if (!classes[data.type]) { + return new defaultClass(...args); + } + + return new classes[data.type](...args); + }, + get(_target, prop, _receiver) { + + if ([`create`, `createDocuments`].includes(prop)) { + return (data, options) => { + if (data.constructor === Array) { + return data.map(i => this.constructor.create(i, options)); + } + + if (!classes[data.type]) { + return defaultClass.create(data, options); + } + + return classes[data.type].create(data, options); + }; + }; + + if (prop == Symbol.hasInstance) { + return (instance) => { + if (instance instanceof defaultClass) {return true} + return Object.values(classes).some(i => instance instanceof i); + }; + }; + + return defaultClass[prop]; + }, + }); +}; diff --git a/src/utils/feature_flags/rollModeMessageContent.mjs b/src/utils/feature_flags/rollModeMessageContent.mjs new file mode 100644 index 0000000..059852a --- /dev/null +++ b/src/utils/feature_flags/rollModeMessageContent.mjs @@ -0,0 +1,10 @@ +import { FEATURE_FLAGS } from "../../consts.mjs"; + +export function hideMessageText(content) { + const featureFlags = game.settings.get(game.system.id, `flags`); + const hideContent = featureFlags.includes(FEATURE_FLAGS.ROLLMODECONTENT); + if (hideContent) { + return `-=${content}=-`; + } + return content; +}; diff --git a/src/utils/globalTaf.mjs b/src/utils/globalTaf.mjs new file mode 100644 index 0000000..3ed03fe --- /dev/null +++ b/src/utils/globalTaf.mjs @@ -0,0 +1,11 @@ +import { FEATURE_FLAGS } from "../consts.mjs"; +import { hideMessageText } from "./feature_flags/rollModeMessageContent.mjs"; + +globalThis.taf = Object.freeze({ + utils: { + hideMessageText, + }, + const: { + FEATURE_FLAGS, + }, +}); diff --git a/src/utils/localizer.mjs b/src/utils/localizer.mjs new file mode 100644 index 0000000..916e54d --- /dev/null +++ b/src/utils/localizer.mjs @@ -0,0 +1,45 @@ +/** A handlebars helper that utilizes the recursive localizer */ +export function handlebarsLocalizer(key, ...args) { + let data = args[0]; + if (args.length === 1) { data = args[0].hash } + if (key instanceof Handlebars.SafeString) {key = key.toString()} + const localized = localizer(key, data); + return localized; +}; + +/** + * A localizer that allows recursively localizing strings so that localized strings + * that want to use other localized strings can. + * + * @param {string} key The localization key to retrieve + * @param {object?} args The arguments provided to the localizer for replacement + * @param {number?} depth The current depth of the localizer + * @returns The localized string + */ +export function localizer(key, args = {}, depth = 0) { + /** @type {string} */ + let localized = game.i18n.format(key, args); + const subkeys = localized.matchAll(/@(?[a-zA-Z.]+)/gm); + + // Short-cut to help prevent infinite recursion + if (depth > 10) { + return localized; + }; + + /* + Helps prevent localization on the same key so that we aren't doing excess work. + */ + const localizedSubkeys = new Map(); + for (const match of subkeys) { + const subkey = match.groups.key; + if (localizedSubkeys.has(subkey)) {continue} + localizedSubkeys.set(subkey, localizer(subkey, args, depth + 1)); + }; + + return localized.replace( + /@(?[a-zA-Z.]+)/gm, + (_fullMatch, subkey) => { + return localizedSubkeys.get(subkey); + }, + ); +}; diff --git a/module/utils/Logger.mjs b/src/utils/logger.mjs similarity index 71% rename from module/utils/Logger.mjs rename to src/utils/logger.mjs index 70c6481..5f9b37e 100644 --- a/module/utils/Logger.mjs +++ b/src/utils/logger.mjs @@ -12,10 +12,10 @@ const augmentedProps = new Set([ ]); /** @type {Console} */ -export const Logger = new Proxy(console, { +globalThis.Logger = new Proxy(console, { get(target, prop, _receiver) { if (augmentedProps.has(prop)) { - return target[prop].bind(target, game.system.id, `|`); + return (...args) => target[prop](game.system.id, `|`, ...args); }; return target[prop]; }, diff --git a/styles/Apps/Ask.css b/styles/Apps/Ask.css deleted file mode 100644 index 4aca7cc..0000000 --- a/styles/Apps/Ask.css +++ /dev/null @@ -1,55 +0,0 @@ -.taf.Ask { - min-width: 330px; - - .prompt { - display: grid; - grid-template-columns: 1fr 2fr; - gap: 1rem; - align-items: center; - } - - .window-content { - gap: 1rem; - overflow: auto; - } - - .dialog-content { - display: flex; - flex-direction: column; - gap: 8px; - } - - .control-row { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 1rem; - } - - label { - color: var(--color-form-label); - font-weight: bold; - } - - p { - margin: 0; - text-indent: 1em; - - &.error { - font-size: 1.1rem; - padding: 6px 8px; - box-shadow: 0 0 10px var(--color-shadow-dark); - color: var(--color-text-light-1); - border-radius: 5px; - text-align: center; - background: var(--color-level-error-bg); - border: 1px solid var(--color-level-error); - text-indent: 0; - } - } - - input[type="checkbox"] { - align-self: center; - justify-self: right; - margin: 0; - } -} diff --git a/styles/Apps/AttributeManager.css b/styles/Apps/AttributeManager.css deleted file mode 100644 index 5bb8567..0000000 --- a/styles/Apps/AttributeManager.css +++ /dev/null @@ -1,50 +0,0 @@ -.taf.AttributeManager { - .attributes { - display: flex; - flex-direction: column; - gap: 8px; - } - - .attribute { - display: grid; - grid-template-columns: min-content 1fr repeat(3, auto); - align-items: center; - gap: 8px; - padding: 8px; - border: 1px solid rebeccapurple; - border-radius: 4px; - - label { - display: flex; - flex-direction: row; - align-items: center; - - &.vertical { - flex-direction: column; - } - } - - /* Used to style the actual element as dragging */ - &:has(taf-icon:active) { - background: var(--background); - } - } - - taf-icon { - cursor: grab; - - &:active { - cursor: grabbing; - } - } - - .controls { - display: flex; - flex-direction: row; - gap: 8px; - - button { - flex-grow: 1; - } - } -} diff --git a/styles/Apps/PlayerSheet.css b/styles/Apps/PlayerSheet.css deleted file mode 100644 index 525f01b..0000000 --- a/styles/Apps/PlayerSheet.css +++ /dev/null @@ -1,58 +0,0 @@ -.taf.PlayerSheet { - .sheet-header, fieldset, .content { - border-radius: 8px; - border: 1px solid rebeccapurple; - } - - .sheet-header { - display: flex; - flex-direction: row; - align-items: center; - gap: 0.5rem; - padding: 4px; - - img { - border-radius: 4px; - } - } - - .attributes { - display: flex; - flex-direction: row; - flex-wrap: wrap; - justify-content: space-around; - gap: 0.5rem; - } - - .attr-range { - display: flex; - flex-direction: row; - align-items: center; - gap: 4px; - width: 100px; - margin: 0 auto; - - > input { - text-align: center; - } - } - - .content { - flex-grow: 1; - overflow: hidden; - --table-row-color-odd: var(--table-header-bg-color); - - &:not(:has(> prose-mirror)) { - padding: 0.5rem; - } - } - - prose-mirror { - height: 100%; - - menu { - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - } - } -} diff --git a/styles/Apps/QueryStatus.css b/styles/Apps/QueryStatus.css deleted file mode 100644 index 4f45ff4..0000000 --- a/styles/Apps/QueryStatus.css +++ /dev/null @@ -1,33 +0,0 @@ -.taf.QueryStatus { - .user-list { - display: flex; - flex-direction: column; - gap: 4px; - list-style-type: none; - margin: 0; - padding: 0; - - li { - display: flex; - flex-direction: column; - margin: 0; - border: 1px solid rebeccapurple; - border-radius: 4px; - padding: 4px 8px; - - > .user-summary { - display: flex; - flex-direction: row; - align-items: center; - /* Same height as the icons used for loading/disconnected */ - height: 35px; - } - } - } - - .control-row { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 1rem; - } -} diff --git a/styles/Apps/TAFDocumentSheetConfig.css b/styles/Apps/TAFDocumentSheetConfig.css deleted file mode 100644 index 247c8fd..0000000 --- a/styles/Apps/TAFDocumentSheetConfig.css +++ /dev/null @@ -1,15 +0,0 @@ -.taf.sheet-config { - - section { - display: flex; - flex-direction: column; - gap: 1rem; - } - - .tab { - display: none; - } - .tab.active { - display: unset; - } -} diff --git a/styles/Apps/common.css b/styles/Apps/common.css deleted file mode 100644 index bbf1212..0000000 --- a/styles/Apps/common.css +++ /dev/null @@ -1,9 +0,0 @@ -.taf { - > .window-content { - padding: 0.5rem; - display: flex; - flex-direction: column; - gap: 0.5rem; - overflow: auto; - } -} diff --git a/styles/components/icon.css b/styles/components/icon.css deleted file mode 100644 index 31ddda5..0000000 --- a/styles/components/icon.css +++ /dev/null @@ -1,23 +0,0 @@ -:host { - display: inline-block; -} - -div { - display: flex; - justify-content: center; - align-items: center; - width: 100%; - height: 100%; -} - -svg { - width: var(--size, 1rem); - height: var(--size, 1rem); - fill: var(--fill); -} - -path { - stroke: var(--stroke); - stroke-width: var(--stroke-width); - stroke-linejoin: var(--stroke-linejoin); -} diff --git a/styles/components/svg-loader.css b/styles/components/svg-loader.css deleted file mode 100644 index b843bc5..0000000 --- a/styles/components/svg-loader.css +++ /dev/null @@ -1,22 +0,0 @@ -:host { - display: inline-block; -} - -div { - display: flex; - justify-content: center; - align-items: center; - width: 100%; - height: 100%; -} - -svg { - fill: var(--fill); - stroke: var(--stroke); -} - -path { - stroke: var(--stroke); - stroke-width: var(--stroke-width); - stroke-linejoin: var(--stroke-linejoin); -} diff --git a/styles/elements/div.css b/styles/elements/div.css deleted file mode 100644 index 69ebd5e..0000000 --- a/styles/elements/div.css +++ /dev/null @@ -1,20 +0,0 @@ -.taf > .window-content div { - &.chip { - display: inline flex; - color: var(--chip-color); - background: var(--chip-background); - border: 1px solid var(--chip-border-color); - border-radius: 4px; - - .key { - padding: 2px 4px; - } - - .value { - padding: 2px 4px; - border-radius: 0 4px 4px 0; - color: var(--chip-value-color); - background: var(--chip-value-background); - } - } -} diff --git a/styles/elements/headers.css b/styles/elements/headers.css deleted file mode 100644 index 2f59e8c..0000000 --- a/styles/elements/headers.css +++ /dev/null @@ -1,5 +0,0 @@ -.taf > .window-content { - h1, h2, h3, h4, h5, h6 { - margin: 0; - } -} diff --git a/styles/elements/hr.css b/styles/elements/hr.css deleted file mode 100644 index 2f87ec9..0000000 --- a/styles/elements/hr.css +++ /dev/null @@ -1,7 +0,0 @@ -.taf > .window-content hr { - height: 1px; - background: rebeccapurple; - border-radius: 0; - margin: 0; - padding: 0; -} diff --git a/styles/elements/input.css b/styles/elements/input.css deleted file mode 100644 index 4c6c747..0000000 --- a/styles/elements/input.css +++ /dev/null @@ -1,56 +0,0 @@ -.taf > .window-content input { - &.large { - --input-height: 2.5rem; - font-size: 1.75rem; - } - - &[type="checkbox"] { - --checkbox-checked-color: var(--color-warm-1); - width: var(--checkbox-size); - height: var(--checkbox-size); - background: var(--input-background-color); - border: 2px solid var(--color-cool-3); - position: relative; - border-radius: 4px; - cursor: pointer; - - &::before, &::after { - display: none; - } - - &:focus-visible { - outline: 2px solid var(--checkbox-checked-color); - outline-offset: 3px; - } - - &:checked::after { - display: block; - position: absolute; - inset: 4px; - z-index: 1; - content: ""; - border-radius: 4px; - background: var(--checkbox-checked-color); - cursor: pointer; - } - - &:disabled { - opacity: 0.5; - cursor: not-allowed; - - &::before { - display: block; - position: absolute; - inset: 0; - content: ""; - background: var(--color-level-error-bg); - border-radius: 2px; - cursor: not-allowed; - } - - &::after { - cursor: not-allowed; - } - } - } -} diff --git a/styles/elements/p.css b/styles/elements/p.css deleted file mode 100644 index 160b0d0..0000000 --- a/styles/elements/p.css +++ /dev/null @@ -1,9 +0,0 @@ -.taf > .window-content p { - &:first-child { - margin-top: 0; - } - - &:last-child { - margin-bottom: 0; - } -} diff --git a/styles/elements/prose-mirror.css b/styles/elements/prose-mirror.css deleted file mode 100644 index 85420d7..0000000 --- a/styles/elements/prose-mirror.css +++ /dev/null @@ -1,13 +0,0 @@ -.taf > .window-content prose-mirror { - background: var(--prosemirror-background); - gap: 0; - - .editor-content { - padding: 8px; - } - - .tableWrapper th, - .tableWrapper td { - border-color: rebeccapurple; - } -} diff --git a/styles/elements/span.css b/styles/elements/span.css deleted file mode 100644 index fcbfef3..0000000 --- a/styles/elements/span.css +++ /dev/null @@ -1,45 +0,0 @@ -@keyframes rotate { - 0% { transform: rotate(0deg); } - 50% { transform: rotate(360deg); } - 100% { transform: rotate(720deg); } -} - -@keyframes prixClipFix { - 0%, 100% { - clip-path: polygon(50% 50%,0 0,0 0,0 0,0 0,0 0); - } - 25%, 63% { - clip-path: polygon(50% 50%,0 0,100% 0,100% 0,100% 0,100% 0); - } - 37%, 50% { - clip-path: polygon(50% 50%,0 0,100% 0,100% 100%,100% 100%,100% 100%); - } -} - -.taf > .window-content span { - &.loader { - --size: 35px; - width: var(--size); - height: var(--size); - border-radius: 50%; - position: relative; - animation: rotate 2s linear infinite; - display: block; - - &::before, &::after { - content: ""; - box-sizing: border-box; - position: absolute; - inset: 0px; - border-radius: 50%; - border: 5px solid var(--spinner-outer-colour, #fff); - animation: prixClipFix 4s linear infinite; - } - - &::after{ - inset: 8px; - transform: rotate3d(90, 90, 0, 180deg ); - border-color: var(--spinner-inner-colour, #ff3d00); - } - } -} diff --git a/styles/elements/table.css b/styles/elements/table.css deleted file mode 100644 index 5f9310c..0000000 --- a/styles/elements/table.css +++ /dev/null @@ -1,21 +0,0 @@ -/* -This styling is unscoped in order to make it so that it still applies -to the chat messages which are not within a scope I control. -*/ -table.taf-query-summary { - margin: 0px; - - tr:hover > td { - background-color: var(--table-header-border-highlight); - } - - td { - padding: 4px 8px; - border: 1px solid var(--table-header-border-color); - width: 40%; - - &:first-of-type { - width: 60%; - } - } -} diff --git a/styles/elements/utils.css b/styles/elements/utils.css deleted file mode 100644 index f99356f..0000000 --- a/styles/elements/utils.css +++ /dev/null @@ -1,3 +0,0 @@ -.taf > .window-content { - .grow { flex-grow: 1; } -} \ No newline at end of file diff --git a/styles/main.css b/styles/main.css deleted file mode 100644 index a4c4a2c..0000000 --- a/styles/main.css +++ /dev/null @@ -1,29 +0,0 @@ -@layer resets, themes, elements, components, partials, apps, exceptions; - -/* Resets */ -@import url("./resets/hr.css") layer(resets); -@import url("./resets/inputs.css") layer(resets); -@import url("./resets/button.css") layer(resets); - -/* Themes */ -@import url("./themes/dark.css") layer(themes); -@import url("./themes/light.css") layer(themes); - -/* Elements */ -@import url("./elements/utils.css") layer(elements); -@import url("./elements/div.css") layer(elements); -@import url("./elements/headers.css") layer(elements); -@import url("./elements/hr.css") layer(elements); -@import url("./elements/input.css") layer(elements); -@import url("./elements/p.css") layer(elements); -@import url("./elements/prose-mirror.css") layer(elements); -@import url("./elements/span.css") layer(elements); -@import url("./elements/table.css") layer(elements); - -/* Apps */ -@import url("./Apps/common.css") layer(apps); -@import url("./Apps/Ask.css") layer(apps); -@import url("./Apps/AttributeManager.css") layer(apps); -@import url("./Apps/PlayerSheet.css") layer(apps); -@import url("./Apps/QueryStatus.css") layer(apps); -@import url("./Apps/TAFDocumentSheetConfig.css") layer(apps); diff --git a/styles/resets/button.css b/styles/resets/button.css deleted file mode 100644 index d04ae6e..0000000 --- a/styles/resets/button.css +++ /dev/null @@ -1,3 +0,0 @@ -.taf > .window-content button { - height: initial; -} diff --git a/styles/resets/hr.css b/styles/resets/hr.css deleted file mode 100644 index 2ab3970..0000000 --- a/styles/resets/hr.css +++ /dev/null @@ -1,3 +0,0 @@ -.taf > .window-content hr { - all: initial; -} diff --git a/styles/resets/inputs.css b/styles/resets/inputs.css deleted file mode 100644 index 0a7928f..0000000 --- a/styles/resets/inputs.css +++ /dev/null @@ -1,8 +0,0 @@ -.taf > .window-content { - input[type="checkbox"] { - all: initial; - &::after, &::before { - all: initial; - } - } -} diff --git a/styles/root.scss b/styles/root.scss new file mode 100644 index 0000000..423849d --- /dev/null +++ b/styles/root.scss @@ -0,0 +1 @@ +@use "./v1/index.scss"; \ No newline at end of file diff --git a/styles/themes/dark.css b/styles/themes/dark.css deleted file mode 100644 index 53552e0..0000000 --- a/styles/themes/dark.css +++ /dev/null @@ -1,13 +0,0 @@ -.theme-dark { - --prosemirror-background: var(--color-cool-5); - - --spinner-outer-colour: white; - --spinner-inner-colour: #FF3D00; - - /* Chip Variables */ - --chip-color: #fff7ed; - --chip-background: #2b3642; - --chip-value-color: #fff7ed; - --chip-value-background: #10161d; - --chip-border-color: var(--chip-value-background); -} diff --git a/styles/themes/light.css b/styles/themes/light.css deleted file mode 100644 index 47cf1e9..0000000 --- a/styles/themes/light.css +++ /dev/null @@ -1,13 +0,0 @@ -.theme-light { - --prosemirror-background: white; - - --spinner-outer-colour: black; - --spinner-inner-colour: #FF3D00; - - /* Chip Variables */ - --chip-color: #18181b; - --chip-background: #fafafa; - --chip-value-color: #18181b; - --chip-value-background: #d4d4d8aa; - --chip-border-color: var(--chip-value-background); -} diff --git a/styles/v1/Dialog.scss b/styles/v1/Dialog.scss new file mode 100644 index 0000000..28f133f --- /dev/null +++ b/styles/v1/Dialog.scss @@ -0,0 +1,12 @@ +.dialog-content:not(:only-child) { + margin-bottom: 8px; +} + +.dialog-content { + p { + margin: 0; + } + .prompt { + margin-top: 8px; + } +} diff --git a/styles/v1/components/common.scss b/styles/v1/components/common.scss new file mode 100644 index 0000000..59f812d --- /dev/null +++ b/styles/v1/components/common.scss @@ -0,0 +1,7 @@ +// Disclaimer: This CSS is used by a custom web component and is scoped to JUST +// the corresponding web component. This should only be imported by web component +// style files. + +:host { + display: inline-block; +} diff --git a/styles/v1/components/icon.scss b/styles/v1/components/icon.scss new file mode 100644 index 0000000..59a68a9 --- /dev/null +++ b/styles/v1/components/icon.scss @@ -0,0 +1,23 @@ +/* +Disclaimer: This CSS is used by a custom web component and is scoped to JUST +the corresponding web component. Importing this into other files is forbidden +*/ + +$default-size: 1rem; + +@use "./common.scss"; + +div { + display: flex; + justify-content: center; + align-items: center; + width: 100%; + height: 100%; +} + +svg { + width: var(--size, $default-size); + height: var(--size, $default-size); + fill: var(--fill); + stroke: var(--stroke); +} \ No newline at end of file diff --git a/styles/v1/components/incrementer.scss b/styles/v1/components/incrementer.scss new file mode 100644 index 0000000..fee073a --- /dev/null +++ b/styles/v1/components/incrementer.scss @@ -0,0 +1,53 @@ +/* +Disclaimer: This CSS is used by a custom web component and is scoped to JUST +the corresponding web component. Importing this into other files is forbidden +*/ + +$default-border-radius: 4px; +$default-height: 1.5rem; + +@use "./common.scss"; + +div { + display: grid; + grid-template-columns: var(--height, $default-height) var(--width, 50px) var(--height, $default-height); + grid-template-rows: var(--height, 1fr); + border-radius: var(--border-radius, $default-border-radius); +} + +span, input { + border: none; + outline: none; + background: none; + color: inherit; +} + +input { + font-family: var(--font-family, inherit); + text-align: center; + font-size: var(--font-size, inherit); + padding: 2px 4px; + + &::-webkit-inner-spin-button, &::-webkit-outer-spin-button { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + margin: 0 + } +} + +.increment, .decrement { + aspect-ratio: 1 / 1; + padding: 0; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; +} + +.increment { + border-radius: 0 var(--border-radius, $default-border-radius) var(--border-radius, 4px) 0; +} +.decrement { + border-radius: var(--border-radius, $default-border-radius) 0 0 var(--border-radius, $default-border-radius); +} diff --git a/styles/v1/index.scss b/styles/v1/index.scss new file mode 100644 index 0000000..c4a7503 --- /dev/null +++ b/styles/v1/index.scss @@ -0,0 +1,5 @@ +// Styling version 1 + +@use "./Dialog.scss"; + +@use "./player/root.scss"; diff --git a/styles/v1/player/root.scss b/styles/v1/player/root.scss new file mode 100644 index 0000000..d2df5d9 --- /dev/null +++ b/styles/v1/player/root.scss @@ -0,0 +1,42 @@ +.actor--player.style-v1 { + --header-size: 75px; + + form { + display: flex; + flex-direction: column; + gap: 8px; + } + + .header-row { + display: flex; + flex-direction: row; + border-radius: 4px; + border: 1px solid var(--color-underline-header); + } + + .avatar { + --size: var(--header-size); + width: var(--size); + height: var(--size); + border: none; + border-right: 1px solid var(--color-underline-header); + } + + .actor-name { + height: var(--header-size); + padding: 8px 1rem; + font-size: clamp(1rem, 2rem, calc(var(--header-size) - 16px)); + border: none; + } + + prose-mirror { + --menu-background: rgba(0, 0, 0, 0.1); + flex-grow: 1; + border: 1px solid var(--color-underline-header); + border-radius: 4px; + + .editor-container { + height: auto; + } + } +} \ No newline at end of file diff --git a/system.json b/system.json index d5eee96..bf0ff7c 100644 --- a/system.json +++ b/system.json @@ -1,35 +1,29 @@ { "id": "taf", "title": "Text-Based Actors", - "description": "An intentionally minimalist system that enables you to play rules-light games without getting in your way!", - "version": "2.4.0", - "download": "", - "manifest": "", - "url": "https://git.varify.ca/Foundry/taf", + "description": "", + "version": "1.1.0", + "download": "https://github.com/Oliver-Akins/Text-Actors-Foundry/releases/latest/download/dotdungeon.zip", + "manifest": "https://github.com/Oliver-Akins/Text-Actors-Foundry/releases/latest/download/system.json", + "url": "https://github.com/Oliver-Akins/Text-Actors-Foundry", "compatibility": { - "minimum": 13, - "verified": 13, - "maximum": 13 + "minimum": 12, + "verified": 12, + "maximum": 12 }, "authors": [ - { "name": "Oliver" } + { + "name": "Oliver Akins", + "url": "https://oliver.akins.me" + } ], "esmodules": [ - "./module/main.mjs" + "src/main.mjs" ], "styles": [ - { - "src": "./styles/main.css", - "layer": "system" - } - ], - "languages": [ - { - "lang": "en", - "name": "English (Canadian)", - "path": "langs/en-ca.json" - } + ".styles/root.css" ], + "packs": [], "documentTypes": { "Actor": { "player": { @@ -41,11 +35,10 @@ }, "Item": {} }, - "socket": true, "flags": { "hotReload": { "extensions": ["css", "hbs", "json", "js", "mjs", "svg"], - "paths": ["templates", "langs", "styles", "module", "assets"] + "paths": ["templates", "langs", ".styles", "module", "assets"] } } } diff --git a/taf.lock b/taf.lock deleted file mode 100644 index 82ef623..0000000 --- a/taf.lock +++ /dev/null @@ -1 +0,0 @@ -🔒 \ No newline at end of file diff --git a/templates/Ask/controls.hbs b/templates/Ask/controls.hbs deleted file mode 100644 index a619549..0000000 --- a/templates/Ask/controls.hbs +++ /dev/null @@ -1,13 +0,0 @@ -
    - - -
    diff --git a/templates/Ask/inputs.hbs b/templates/Ask/inputs.hbs deleted file mode 100644 index 36c1ea9..0000000 --- a/templates/Ask/inputs.hbs +++ /dev/null @@ -1,10 +0,0 @@ -
    - {{#if description}} -

    - {{ description }} -

    - {{/if}} - {{#each inputs as | i |}} - {{> (concat (systemFilePath "templates/Ask/inputs/" ) i.type ".hbs") i}} - {{/each}} -
    diff --git a/templates/Ask/inputs/checkbox.hbs b/templates/Ask/inputs/checkbox.hbs deleted file mode 100644 index ce8fd88..0000000 --- a/templates/Ask/inputs/checkbox.hbs +++ /dev/null @@ -1,14 +0,0 @@ -
    - - -
    diff --git a/templates/Ask/inputs/details.hbs b/templates/Ask/inputs/details.hbs deleted file mode 100644 index f84af5d..0000000 --- a/templates/Ask/inputs/details.hbs +++ /dev/null @@ -1,3 +0,0 @@ -

    - {{{ details }}} -

    diff --git a/templates/Ask/inputs/divider.hbs b/templates/Ask/inputs/divider.hbs deleted file mode 100644 index e123ba7..0000000 --- a/templates/Ask/inputs/divider.hbs +++ /dev/null @@ -1 +0,0 @@ -
    diff --git a/templates/Ask/inputs/error.hbs b/templates/Ask/inputs/error.hbs deleted file mode 100644 index 6fb1086..0000000 --- a/templates/Ask/inputs/error.hbs +++ /dev/null @@ -1,3 +0,0 @@ -

    - {{ details }} -

    \ No newline at end of file diff --git a/templates/Ask/inputs/input.hbs b/templates/Ask/inputs/input.hbs deleted file mode 100644 index 98922df..0000000 --- a/templates/Ask/inputs/input.hbs +++ /dev/null @@ -1,14 +0,0 @@ -
    - - -
    diff --git a/templates/Ask/inputs/select.hbs b/templates/Ask/inputs/select.hbs deleted file mode 100644 index 9d64e34..0000000 --- a/templates/Ask/inputs/select.hbs +++ /dev/null @@ -1,13 +0,0 @@ -
    - - -
    diff --git a/templates/AttributeManager/attribute-list.hbs b/templates/AttributeManager/attribute-list.hbs deleted file mode 100644 index 5899acb..0000000 --- a/templates/AttributeManager/attribute-list.hbs +++ /dev/null @@ -1,41 +0,0 @@ -
    - {{#each attrs as |attr|}} -
    - - {{#if attr.isNew}} - - {{else}} - {{ attr.name }} - {{/if}} - - -
    - {{else}} -

    No attributes yet

    - {{/each}} -
    diff --git a/templates/AttributeManager/controls.hbs b/templates/AttributeManager/controls.hbs deleted file mode 100644 index 59dbb9b..0000000 --- a/templates/AttributeManager/controls.hbs +++ /dev/null @@ -1,13 +0,0 @@ -
    - - -
    diff --git a/templates/Dialogs/ask.hbs b/templates/Dialogs/ask.hbs new file mode 100644 index 0000000..a37f56e --- /dev/null +++ b/templates/Dialogs/ask.hbs @@ -0,0 +1,27 @@ +
    +

    + {{ question }} +

    + {{#each inputs as | i | }} +
    + + + {{#if i.details}} +

    + {{{ i.details }}} +

    + {{/if}} +
    + {{/each}} +
    diff --git a/templates/Player/v1/main.hbs b/templates/Player/v1/main.hbs new file mode 100644 index 0000000..64e24d8 --- /dev/null +++ b/templates/Player/v1/main.hbs @@ -0,0 +1,29 @@ +
    +
    + + +
    + {{#if editable}} + + {{{enriched.system.content}}} + + {{else}} + {{{enriched.system.content}}} + {{/if}} +
    diff --git a/templates/PlayerSheet/attributes.hbs b/templates/PlayerSheet/attributes.hbs deleted file mode 100644 index c52b575..0000000 --- a/templates/PlayerSheet/attributes.hbs +++ /dev/null @@ -1,34 +0,0 @@ -{{#if hasAttributes}} -
    - {{#each attrs as | attr |}} -
    - - {{ attr.name }} - -
    - - {{#if attr.isRange}} - - - {{/if}} -
    -
    - {{/each}} -
    -{{else}} -