From 428b3f09cd607432a39abe1966fe9b8bbccf5f2a Mon Sep 17 00:00:00 2001 From: Nathan Sweet Date: Fri, 9 May 2025 17:09:24 -0400 Subject: [PATCH 01/42] [ts] Use double quotes in dev* for Windows. --- spine-ts/package.json | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/spine-ts/package.json b/spine-ts/package.json index f4f92e6dc..611efc88d 100644 --- a/spine-ts/package.json +++ b/spine-ts/package.json @@ -36,18 +36,18 @@ "build:webcomponents:iife": "npx esbuild --bundle spine-webcomponents/src/index.ts --tsconfig=spine-webcomponents/tsconfig.json --sourcemap --outfile=spine-webcomponents/dist/iife/spine-webcomponents.js --format=iife --global-name=spine", "build:webcomponents:esm": "npx esbuild --bundle spine-webcomponents/src/index.ts --tsconfig=spine-webcomponents/tsconfig.json --sourcemap --outfile=spine-webcomponents/dist/esm/spine-webcomponents.mjs --format=esm --global-name=spine", "minify": "npx esbuild --minify spine-core/dist/iife/spine-core.js --outfile=spine-core/dist/iife/spine-core.min.js && npx esbuild --minify spine-core/dist/esm/spine-core.mjs --outfile=spine-core/dist/esm/spine-core.min.mjs && npx esbuild --minify spine-canvas/dist/iife/spine-canvas.js --outfile=spine-canvas/dist/iife/spine-canvas.min.js && npx esbuild --minify spine-canvas/dist/esm/spine-canvas.mjs --outfile=spine-canvas/dist/esm/spine-canvas.min.mjs && npx esbuild --minify spine-canvaskit/dist/iife/spine-canvaskit.js --outfile=spine-canvaskit/dist/iife/spine-canvaskit.min.js && npx esbuild --minify spine-canvaskit/dist/esm/spine-canvaskit.mjs --outfile=spine-canvaskit/dist/esm/spine-canvaskit.min.mjs && npx esbuild --minify spine-player/dist/iife/spine-player.js --outfile=spine-player/dist/iife/spine-player.min.js && npx esbuild --minify spine-player/dist/esm/spine-player.mjs --outfile=spine-player/dist/esm/spine-player.min.mjs && npx esbuild --minify spine-phaser-v3/dist/iife/spine-phaser-v3.js --outfile=spine-phaser-v3/dist/iife/spine-phaser-v3.min.js && npx esbuild --minify spine-phaser-v3/dist/esm/spine-phaser-v3.mjs --outfile=spine-phaser-v3/dist/esm/spine-phaser-v3.min.mjs && npx esbuild --minify spine-phaser-v4/dist/iife/spine-phaser-v4.js --outfile=spine-phaser-v4/dist/iife/spine-phaser-v4.min.js && npx esbuild --minify spine-phaser-v4/dist/esm/spine-phaser-v4.mjs --outfile=spine-phaser-v4/dist/esm/spine-phaser-v4.min.mjs && npx esbuild --minify spine-webgl/dist/iife/spine-webgl.js --outfile=spine-webgl/dist/iife/spine-webgl.min.js && npx esbuild --minify spine-webgl/dist/esm/spine-webgl.mjs --outfile=spine-webgl/dist/esm/spine-webgl.min.mjs && npx esbuild --minify spine-threejs/dist/iife/spine-threejs.js --outfile=spine-threejs/dist/iife/spine-threejs.min.js && npx esbuild --minify spine-threejs/dist/esm/spine-threejs.mjs --outfile=spine-threejs/dist/esm/spine-threejs.min.mjs && npx esbuild --minify spine-pixi-v7/dist/iife/spine-pixi-v7.js --outfile=spine-pixi-v7/dist/iife/spine-pixi-v7.min.js && npx esbuild --minify spine-pixi-v7/dist/esm/spine-pixi-v7.mjs --outfile=spine-pixi-v7/dist/esm/spine-pixi-v7.min.mjs && npx esbuild --minify spine-pixi-v8/dist/iife/spine-pixi-v8.js --outfile=spine-pixi-v8/dist/iife/spine-pixi-v8.min.js && npx esbuild --minify spine-pixi-v8/dist/esm/spine-pixi-v8.mjs --outfile=spine-pixi-v8/dist/esm/spine-pixi-v8.min.mjs && npx esbuild --minify spine-webcomponents/dist/iife/spine-webcomponents.js --outfile=spine-webcomponents/dist/iife/spine-webcomponents.min.js && npx esbuild --minify spine-webcomponents/dist/esm/spine-webcomponents.mjs --outfile=spine-webcomponents/dist/esm/spine-webcomponents.min.mjs", - "dev": "concurrently 'npx live-server' 'npm run dev:canvas' 'npm run dev:canvaskit' 'npm run dev:webgl' 'npm run dev:phaser-v3' 'npm run dev:phaser-v4' 'npm run dev:player' 'npm run dev:threejs' 'npm run dev:pixi-v7' 'npm run dev:pixi-v8' 'npm run dev:webcomponents' 'npm run dev:modules'", + "dev": "concurrently \"npx live-server\" \"npm run dev:canvas\" \"npm run dev:canvaskit\" \"npm run dev:webgl\" \"npm run dev:phaser-v3\" \"npm run dev:phaser-v4\" \"npm run dev:player\" \"npm run dev:threejs\" \"npm run dev:pixi-v7\" \"npm run dev:pixi-v8\" \"npm run dev:webcomponents\" \"npm run dev:modules\"", "dev:modules": "npm run build:modules -- --watch", - "dev:canvas": "concurrently 'npm run build:canvas:iife -- --watch' 'npm run build:canvas:esm -- --watch'", - "dev:canvaskit": "concurrently 'npm run build:canvaskit:iife -- --watch' 'npm run build:canvaskit:esm -- --watch'", - "dev:webgl": "concurrently 'npm run build:webgl:iife -- --watch' 'npm run build:webgl:esm -- --watch'", - "dev:phaser-v3": "concurrently 'npm run build:phaser-v3:iife -- --watch' 'npm run build:phaser-v3:esm -- --watch'", - "dev:phaser-v4": "concurrently 'npm run build:phaser-v4:iife -- --watch' 'npm run build:phaser-v4:esm -- --watch'", - "dev:player": "concurrently 'npm run build:player:iife -- --watch' 'npm run build:player:esm -- --watch' 'npm run build:player:css -- --watch'", - "dev:threejs": "concurrently 'npm run build:threejs:iife -- --watch' 'npm run build:threejs:esm -- --watch'", - "dev:pixi-v7": "concurrently 'npm run build:pixi-v7:iife -- --watch' 'npm run build:pixi-v7:esm -- --watch'", - "dev:pixi-v8": "concurrently 'npm run build:pixi-v8:iife -- --watch' 'npm run build:pixi-v8:esm -- --watch'", - "dev:webcomponents": "concurrently 'npm run build:webcomponents:iife -- --watch' 'npm run build:webcomponents:esm -- --watch'" + "dev:canvas": "concurrently \"npm run build:canvas:iife -- --watch\" \"npm run build:canvas:esm -- --watch\"", + "dev:canvaskit": "concurrently \"npm run build:canvaskit:iife -- --watch\" \"npm run build:canvaskit:esm -- --watch\"", + "dev:webgl": "concurrently \"npm run build:webgl:iife -- --watch\" \"npm run build:webgl:esm -- --watch\"", + "dev:phaser-v3": "concurrently \"npm run build:phaser-v3:iife -- --watch\" \"npm run build:phaser-v3:esm -- --watch\"", + "dev:phaser-v4": "concurrently \"npm run build:phaser-v4:iife -- --watch\" \"npm run build:phaser-v4:esm -- --watch\"", + "dev:player": "concurrently \"npm run build:player:iife -- --watch\" \"npm run build:player:esm -- --watch\" \"npm run build:player:css -- --watch\"", + "dev:threejs": "concurrently \"npm run build:threejs:iife -- --watch\" \"npm run build:threejs:esm -- --watch\"", + "dev:pixi-v7": "concurrently \"npm run build:pixi-v7:iife -- --watch\" \"npm run build:pixi-v7:esm -- --watch\"", + "dev:pixi-v8": "concurrently \"npm run build:pixi-v8:iife -- --watch\" \"npm run build:pixi-v8:esm -- --watch\"", + "dev:webcomponents": "concurrently \"npm run build:webcomponents:iife -- --watch\" \"npm run build:webcomponents:esm -- --watch\"" }, "repository": { "type": "git", From 4acd202f411ce6c1ae5c30934a61d62505d4fd75 Mon Sep 17 00:00:00 2001 From: Davide Tantillo Date: Mon, 12 May 2025 11:43:11 +0200 Subject: [PATCH 02/42] [ts][wecomponents] Determine overlay z-index when widget is added. --- .../src/SpineWebComponentOverlay.ts | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/spine-ts/spine-webcomponents/src/SpineWebComponentOverlay.ts b/spine-ts/spine-webcomponents/src/SpineWebComponentOverlay.ts index fc6a6c0c1..58c2e10da 100644 --- a/spine-ts/spine-webcomponents/src/SpineWebComponentOverlay.ts +++ b/spine-ts/spine-webcomponents/src/SpineWebComponentOverlay.ts @@ -149,6 +149,8 @@ export class SpineWebComponentOverlay extends HTMLElement implements OverlayAttr private lastCanvasBaseWidth = 0; private lastCanvasBaseHeight = 0; + private zIndex?: number; + private disposed = false; private loaded = false; @@ -376,6 +378,8 @@ export class SpineWebComponentOverlay extends HTMLElement implements OverlayAttr this.parentElement!.appendChild(this); } } + + this.updateZIndexIfNecessary(widget); } /** @@ -1000,6 +1004,23 @@ export class SpineWebComponentOverlay extends HTMLElement implements OverlayAttr this.canvas.style.transform = `translate(${scrollPositionX}px,${scrollPositionY}px)`; } + private updateZIndexIfNecessary (element: HTMLElement) { + let parent: HTMLElement | null = element; + let zIndex: undefined | number; + do { + let currentZIndex = parseInt(parent!.style.zIndex); + + // searching the shallowest z-index + if (!isNaN(currentZIndex)) zIndex = currentZIndex; + parent = parent.parentElement; + } while (parent && parent !== document.body) + + if (zIndex && (!this.zIndex || this.zIndex < zIndex)) { + this.zIndex = zIndex; + this.div.style.zIndex = `${this.zIndex}`; + } + } + /* * Other utilities */ From 158a4922cd180c1537c719022336024b7cfde08e Mon Sep 17 00:00:00 2001 From: Davide Tantillo Date: Mon, 12 May 2025 11:52:12 +0200 Subject: [PATCH 03/42] [ts][wecomponents] Use computed style to determine overlay z-index. --- spine-ts/spine-webcomponents/src/SpineWebComponentOverlay.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spine-ts/spine-webcomponents/src/SpineWebComponentOverlay.ts b/spine-ts/spine-webcomponents/src/SpineWebComponentOverlay.ts index 58c2e10da..98dc23a6d 100644 --- a/spine-ts/spine-webcomponents/src/SpineWebComponentOverlay.ts +++ b/spine-ts/spine-webcomponents/src/SpineWebComponentOverlay.ts @@ -1008,7 +1008,7 @@ export class SpineWebComponentOverlay extends HTMLElement implements OverlayAttr let parent: HTMLElement | null = element; let zIndex: undefined | number; do { - let currentZIndex = parseInt(parent!.style.zIndex); + let currentZIndex = parseInt(getComputedStyle(parent).zIndex); // searching the shallowest z-index if (!isNaN(currentZIndex)) zIndex = currentZIndex; From f2565102488e889ca824b73d9450f93d79f31e54 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Mon, 12 May 2025 12:01:59 +0200 Subject: [PATCH 04/42] [godot] Build on Ubuntu 22 runners, closes #2844 --- .github/workflows/spine-godot-extension-v4.yml | 2 +- .github/workflows/spine-godot-v4.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/spine-godot-extension-v4.yml b/.github/workflows/spine-godot-extension-v4.yml index 8f3f781b2..9ca8f4421 100644 --- a/.github/workflows/spine-godot-extension-v4.yml +++ b/.github/workflows/spine-godot-extension-v4.yml @@ -49,7 +49,7 @@ jobs: path: spine-godot/example-v4-extension/bin/windows/*.dll build-linux-x86_64: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 with: diff --git a/.github/workflows/spine-godot-v4.yml b/.github/workflows/spine-godot-v4.yml index 2f0fe69bf..31a50b493 100644 --- a/.github/workflows/spine-godot-v4.yml +++ b/.github/workflows/spine-godot-v4.yml @@ -65,7 +65,7 @@ jobs: path: spine-godot/godot/bin/**/* godot-editor-linux: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 with: @@ -161,7 +161,7 @@ jobs: path: spine-godot/godot/bin/macos.zip godot-template-linux: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 with: From 6e4162d093985716a46241d058f48f58cef690e1 Mon Sep 17 00:00:00 2001 From: Davide Tantillo Date: Tue, 13 May 2025 12:14:20 +0200 Subject: [PATCH 05/42] [ts][phaser] Fix texture fetching with loader path set. Closes #2845. --- spine-ts/spine-phaser-v3/src/SpinePlugin.ts | 5 ++++- spine-ts/spine-phaser-v4/src/SpinePlugin.ts | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/spine-ts/spine-phaser-v3/src/SpinePlugin.ts b/spine-ts/spine-phaser-v3/src/SpinePlugin.ts index 8c3b4fe4b..57ecae94e 100644 --- a/spine-ts/spine-phaser-v3/src/SpinePlugin.ts +++ b/spine-ts/spine-phaser-v3/src/SpinePlugin.ts @@ -370,7 +370,10 @@ class SpineAtlasFile extends Phaser.Loader.MultiFile { } } - let basePath = file.src.match(/^.*\//) ?? ""; + let basePath = (file.src.match(/^.*\//) ?? "").toString(); + if(this.loader.path && this.loader.path.length > 0 && basePath.startsWith(this.loader.path)) + basePath = basePath.slice(this.loader.path.length); + for (var i = 0; i < textures.length; i++) { var url = basePath + textures[i]; var key = file.key + "!" + textures[i]; diff --git a/spine-ts/spine-phaser-v4/src/SpinePlugin.ts b/spine-ts/spine-phaser-v4/src/SpinePlugin.ts index d41784805..c1a2b7346 100644 --- a/spine-ts/spine-phaser-v4/src/SpinePlugin.ts +++ b/spine-ts/spine-phaser-v4/src/SpinePlugin.ts @@ -362,7 +362,10 @@ class SpineAtlasFile extends Phaser.Loader.MultiFile { } } - let basePath = file.src.match(/^.*\//) ?? ""; + let basePath = (file.src.match(/^.*\//) ?? "").toString(); + if(this.loader.path && this.loader.path.length > 0 && basePath.startsWith(this.loader.path)) + basePath = basePath.slice(this.loader.path.length); + for (var i = 0; i < textures.length; i++) { var url = basePath + textures[i]; var key = file.key + "!" + textures[i]; From e9883a86b9fa95bc0a68c2ab6822126acbd381e8 Mon Sep 17 00:00:00 2001 From: Davide Tantillo Date: Tue, 13 May 2025 12:23:41 +0200 Subject: [PATCH 06/42] [ts] Formatting. --- spine-ts/spine-phaser-v3/src/SpinePlugin.ts | 2 +- spine-ts/spine-phaser-v4/src/SpinePlugin.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spine-ts/spine-phaser-v3/src/SpinePlugin.ts b/spine-ts/spine-phaser-v3/src/SpinePlugin.ts index 57ecae94e..a0265e7c0 100644 --- a/spine-ts/spine-phaser-v3/src/SpinePlugin.ts +++ b/spine-ts/spine-phaser-v3/src/SpinePlugin.ts @@ -371,7 +371,7 @@ class SpineAtlasFile extends Phaser.Loader.MultiFile { } let basePath = (file.src.match(/^.*\//) ?? "").toString(); - if(this.loader.path && this.loader.path.length > 0 && basePath.startsWith(this.loader.path)) + if (this.loader.path && this.loader.path.length > 0 && basePath.startsWith(this.loader.path)) basePath = basePath.slice(this.loader.path.length); for (var i = 0; i < textures.length; i++) { diff --git a/spine-ts/spine-phaser-v4/src/SpinePlugin.ts b/spine-ts/spine-phaser-v4/src/SpinePlugin.ts index c1a2b7346..39dc6b514 100644 --- a/spine-ts/spine-phaser-v4/src/SpinePlugin.ts +++ b/spine-ts/spine-phaser-v4/src/SpinePlugin.ts @@ -363,7 +363,7 @@ class SpineAtlasFile extends Phaser.Loader.MultiFile { } let basePath = (file.src.match(/^.*\//) ?? "").toString(); - if(this.loader.path && this.loader.path.length > 0 && basePath.startsWith(this.loader.path)) + if (this.loader.path && this.loader.path.length > 0 && basePath.startsWith(this.loader.path)) basePath = basePath.slice(this.loader.path.length); for (var i = 0; i < textures.length; i++) { From 66699719ef1c347db5e54626cc40bd14cc3d865e Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Tue, 13 May 2025 16:36:26 +0200 Subject: [PATCH 07/42] Pull request template --- .github/pull_request_template.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/pull_request_template.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 000000000..2668efc1b --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1 @@ +- [ ] I hereby grant Esoteric Software LLC the non-exclusive, irrevocable right to publish my contribution under the terms of the [Spine Runtimes License Agreement](https://en.esotericsoftware.com/spine-runtimes-license). From 7df38b33908cc50acb90a6d4723fb5544fab1e65 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Tue, 13 May 2025 16:37:47 +0200 Subject: [PATCH 08/42] Update pull_request_template.md --- .github/pull_request_template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 2668efc1b..1af8b159b 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1 +1 @@ -- [ ] I hereby grant Esoteric Software LLC the non-exclusive, irrevocable right to publish my contribution under the terms of the [Spine Runtimes License Agreement](https://en.esotericsoftware.com/spine-runtimes-license). +- [ ] I hereby grant Esoteric Software LLC the non-exclusive, irrevocable right to publish my contribution under the terms of the [Spine Runtimes License Agreement](https://esotericsoftware.com/spine-runtimes-license). From ebaf15d9dea486e6efc8aea10ec2dfb8bf8390d9 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Tue, 13 May 2025 16:44:19 +0200 Subject: [PATCH 09/42] Update pull_request_template.md --- .github/pull_request_template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 1af8b159b..8f14beb75 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1 +1 @@ -- [ ] I hereby grant Esoteric Software LLC the non-exclusive, irrevocable right to publish my contribution under the terms of the [Spine Runtimes License Agreement](https://esotericsoftware.com/spine-runtimes-license). +* [ ] I confirm this contribution is made under the Esoteric Software LLC [CLA](http://esotericsoftware.com/licenses/cla.txt). From 680fa631d66f138589648a6d8f05a171384ed818 Mon Sep 17 00:00:00 2001 From: Davide Tantillo Date: Wed, 14 May 2025 11:18:04 +0200 Subject: [PATCH 10/42] [ts][webcomponents] Add holdDurationLastAnimation to animations attribute. --- .../spine-webcomponents/example/tutorial.html | 3 ++- .../src/SpineWebComponentSkeleton.ts | 18 +++++++++++++++--- spine-ts/spine-webcomponents/src/wcUtils.ts | 13 +++++++++++-- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/spine-ts/spine-webcomponents/example/tutorial.html b/spine-ts/spine-webcomponents/example/tutorial.html index 0bdd5fa23..899524222 100644 --- a/spine-ts/spine-webcomponents/example/tutorial.html +++ b/spine-ts/spine-webcomponents/example/tutorial.html @@ -765,10 +765,11 @@
  • mixDuration: the mix duration between this animation and the previous one (not used for the first animation on a track)
  • -

    To loop a track once it reaches the end, add the special group [loop, trackNumber], where:

    +

    To loop a track once it reaches the end, add the special group [loop, trackNumber, holdDurationLastAnimation], where:

    • loop: identifies this as a loop instruction
    • trackNumber: the number of the track to loop
    • +
    • holdDurationLastAnimation: the number of seconds to wait after the last animation is completed before repeating the loop

    The parameters of the first group on each track are passed to the setAnimation method, while the remaining groups use addAnimation.

    diff --git a/spine-ts/spine-webcomponents/src/SpineWebComponentSkeleton.ts b/spine-ts/spine-webcomponents/src/SpineWebComponentSkeleton.ts index 6d71da23a..45febf120 100644 --- a/spine-ts/spine-webcomponents/src/SpineWebComponentSkeleton.ts +++ b/spine-ts/spine-webcomponents/src/SpineWebComponentSkeleton.ts @@ -58,7 +58,11 @@ type UpdateSpineWidgetFunction = (delta: number, skeleton: Skeleton, state: Anim export type OffScreenUpdateBehaviourType = "pause" | "update" | "pose"; export type ModeType = "inside" | "origin"; export type FitType = "fill" | "width" | "height" | "contain" | "cover" | "none" | "scaleDown"; -export type AnimationsInfo = Record }>; +export type AnimationsInfo = Record +}>; export type AnimationsType = { animationName: string | "#EMPTY#", loop?: boolean, delay?: number, mixDuration?: number }; export type CursorEventType = "down" | "up" | "enter" | "leave" | "move" | "drag"; export type CursorEventTypesInput = Exclude; @@ -1028,7 +1032,7 @@ export class SpineWebComponentSkeleton extends HTMLElement implements Disposable state.data.defaultMix = defaultMix; if (animationsInfo) { - for (const [trackIndexString, { cycle, animations }] of Object.entries(animationsInfo)) { + for (const [trackIndexString, { cycle, animations, holdDurationLastAnimation }] of Object.entries(animationsInfo)) { const cycleFn = () => { const trackIndex = Number(trackIndexString); for (const [index, { animationName, delay, loop, mixDuration }] of animations.entries()) { @@ -1050,7 +1054,15 @@ export class SpineWebComponentSkeleton extends HTMLElement implements Disposable if (mixDuration) track.mixDuration = mixDuration; if (cycle && index === animations.length - 1) { - track.listener = { complete: () => cycleFn() }; + track.listener = { + complete: () => { + if (holdDurationLastAnimation) + setTimeout(() => cycleFn(), 1000 * holdDurationLastAnimation); + else + cycleFn(); + delete track.listener?.complete; + } + }; }; } } diff --git a/spine-ts/spine-webcomponents/src/wcUtils.ts b/spine-ts/spine-webcomponents/src/wcUtils.ts index b566168a0..fbf7bbd2d 100644 --- a/spine-ts/spine-webcomponents/src/wcUtils.ts +++ b/spine-ts/spine-webcomponents/src/wcUtils.ts @@ -104,7 +104,7 @@ function castToAnimationsInfo (value: string | null): AnimationsInfo | undefined if (!matches) return undefined; return matches.reduce((obj, group) => { - const [trackIndexStringOrLoopDefinition, animationNameOrTrackIndexStringCycle, loop, delayString, mixDurationString] = group.slice(1, -1).split(',').map(v => v.trim()); + const [trackIndexStringOrLoopDefinition, animationNameOrTrackIndexStringCycle, loopOrHoldDurationLastAnimation, delayString, mixDurationString] = group.slice(1, -1).split(',').map(v => v.trim()); if (trackIndexStringOrLoopDefinition === "loop") { if (!Number.isInteger(Number(animationNameOrTrackIndexStringCycle))) { @@ -112,6 +112,15 @@ function castToAnimationsInfo (value: string | null): AnimationsInfo | undefined } const animationInfoObject = obj[animationNameOrTrackIndexStringCycle] ||= { animations: [] }; animationInfoObject.cycle = true; + + if (loopOrHoldDurationLastAnimation !== undefined) { + const holdDurationLastAnimation = Number(loopOrHoldDurationLastAnimation); + if (Number.isNaN(holdDurationLastAnimation)) { + throw new Error(`If present, duration of last animation of cycle in ${group} must be a positive integer number, instead it is ${loopOrHoldDurationLastAnimation}. Original value: ${value}`); + } + animationInfoObject.holdDurationLastAnimation = holdDurationLastAnimation; + } + return obj; } @@ -139,7 +148,7 @@ function castToAnimationsInfo (value: string | null): AnimationsInfo | undefined const animationInfoObject = obj[trackIndexStringOrLoopDefinition] ||= { animations: [] }; animationInfoObject.animations.push({ animationName: animationNameOrTrackIndexStringCycle, - loop: loop.trim().toLowerCase() === "true", + loop: loopOrHoldDurationLastAnimation.trim().toLowerCase() === "true", delay, mixDuration, }); From a799d02ecea0526cac1a1073a756eb2b09a4c6a0 Mon Sep 17 00:00:00 2001 From: Davide Tantillo Date: Wed, 14 May 2025 12:41:52 +0200 Subject: [PATCH 11/42] [ts][webcomponents] Fix onScreenAtLeastOnce not set if widget laods off screen. --- .../spine-webcomponents/example/tutorial.html | 33 ++++++++++--------- .../src/SpineWebComponentOverlay.ts | 1 + .../src/SpineWebComponentSkeleton.ts | 11 ++----- 3 files changed, 22 insertions(+), 23 deletions(-) diff --git a/spine-ts/spine-webcomponents/example/tutorial.html b/spine-ts/spine-webcomponents/example/tutorial.html index 899524222..a4bc43e0e 100644 --- a/spine-ts/spine-webcomponents/example/tutorial.html +++ b/spine-ts/spine-webcomponents/example/tutorial.html @@ -2043,19 +2043,16 @@ skins.forEach((skin, i) => {
    - When the widget (or the parent element) enters the viewport, the callback onScreenFunction is invoked. -
    -
    - By default, the callback does two things: -
      -
    • sets onScreenAtLeastOnce to true when the widget enters the viewport for the first time
    • -
    • if start-when-visible is set, the widget's start method is invoked the first time the widget enters the viewport, and the assets are loaded at that moment.
    • -
    -
    - The assets of the coin below are loaded only when the widget enters the viewport. -
    -
    - You can overwrite the onScreenFunction behavior. For example, the raptor below changes its animation every time the widget enters the viewport. + When the widget (or its parent element) enters the viewport, two things happen:
    +
      +
    • the widget's onScreenAtLeastOnce property is set to true
    • +
    • the widget's onScreenFunction callback is invoked
    • +
    + By default, onScreenFunction invokes the widget's start method if the widget has the start-when-visible attribute set, and this occurs only the first time it enters the viewport.
    +
    + The assets of the coin below are loaded only when the widget enters the viewport.
    +
    + You can override the onScreenFunction behavior. For example, the raptor below changes its animation every time the widget enters the viewport.
    @@ -2078,7 +2075,6 @@ skins.forEach((skin, i) => { diff --git a/spine-ts/spine-webcomponents/src/SpineWebComponentOverlay.ts b/spine-ts/spine-webcomponents/src/SpineWebComponentOverlay.ts index 91f8469b1..ea762b619 100644 --- a/spine-ts/spine-webcomponents/src/SpineWebComponentOverlay.ts +++ b/spine-ts/spine-webcomponents/src/SpineWebComponentOverlay.ts @@ -480,7 +480,7 @@ export class SpineWebComponentOverlay extends HTMLElement implements OverlayAttr const tempVector = new Vector3(); for (const widget of this.widgets) { - const { skeleton, pma, bounds, mode, debug, offsetX, offsetY, xAxis, yAxis, dragX, dragY, fit, noSpinner, onScreen, loading, clip, isDraggable } = widget; + const { skeleton, pma, bounds, mode, debug, offsetX, offsetY, xAxis, yAxis, dragX, dragY, fit, noSpinner, loading, clip, isDraggable } = widget; if (widget.isOffScreenAndWasMoved()) continue; const elementRef = widget.getHostElement(); @@ -513,7 +513,7 @@ export class SpineWebComponentOverlay extends HTMLElement implements OverlayAttr if (clip) startScissor(divBounds); if (loading) { - if (noSpinner) { + if (!noSpinner) { if (!widget.loadingScreen) widget.loadingScreen = new LoadingScreen(renderer); widget.loadingScreen!.drawInCoordinates(divOriginX, divOriginY); } From c7b850f9725f653948735486f3307c2a72c9c2f4 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Wed, 14 May 2025 15:49:27 +0200 Subject: [PATCH 13/42] [ts] Update esbuild and (a)live-server --- spine-ts/package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spine-ts/package.json b/spine-ts/package.json index 611efc88d..770d6569e 100644 --- a/spine-ts/package.json +++ b/spine-ts/package.json @@ -85,9 +85,9 @@ "@types/offscreencanvas": "^2019.6.4", "concurrently": "^7.6.0", "copyfiles": "^2.4.1", - "esbuild": "^0.16.4", - "live-server": "^1.2.2", + "esbuild": "^0.25.4", + "alive-server": "^1.3.0", "rimraf": "^3.0.2", "typescript": "5.6.2" } -} \ No newline at end of file +} From 4246da1afa723b4fdd836eca1a976859021b0d29 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Wed, 14 May 2025 15:49:47 +0200 Subject: [PATCH 14/42] [ts] Update package-lock.json --- spine-ts/package-lock.json | 2342 ++++++++++++++---------------------- 1 file changed, 899 insertions(+), 1443 deletions(-) diff --git a/spine-ts/package-lock.json b/spine-ts/package-lock.json index c94904f04..f57609b6a 100644 --- a/spine-ts/package-lock.json +++ b/spine-ts/package-lock.json @@ -18,14 +18,15 @@ "spine-pixi-v7", "spine-pixi-v8", "spine-canvaskit", - "spine-webgl" + "spine-webgl", + "spine-webcomponents" ], "devDependencies": { "@types/offscreencanvas": "^2019.6.4", + "alive-server": "^1.3.0", "concurrently": "^7.6.0", "copyfiles": "^2.4.1", - "esbuild": "^0.16.4", - "live-server": "^1.2.2", + "esbuild": "^0.25.4", "rimraf": "^3.0.2", "typescript": "5.6.2" } @@ -41,8 +42,78 @@ "node": ">=6.9.0" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", + "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", + "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", + "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", + "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.16.17", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", + "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", "cpu": [ "arm64" ], @@ -53,7 +124,347 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", + "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", + "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", + "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", + "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", + "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", + "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", + "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", + "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", + "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", + "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", + "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", + "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", + "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", + "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", + "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", + "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", + "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", + "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", + "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", + "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esotericsoftware/spine-canvas": { @@ -92,6 +503,10 @@ "resolved": "spine-threejs", "link": true }, + "node_modules/@esotericsoftware/spine-webcomponents": { + "resolved": "spine-webcomponents", + "link": true + }, "node_modules/@esotericsoftware/spine-webgl": { "resolved": "spine-webgl", "link": true @@ -329,23 +744,261 @@ "node": ">= 0.6" } }, - "node_modules/accepts/node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-types": { - "version": "2.1.35", + "node_modules/alive-server": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/alive-server/-/alive-server-1.3.0.tgz", + "integrity": "sha512-zvE9vFYA6wfDTQpLw7W90s3Mj0a7+HxY7VkTAiOWvYgZZbL9qsSWgBmdL8ndWUnSYdNqaicyPj62HRsGNrC5RQ==", "dev": true, "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "chokidar": "^3.5.3", + "colors": "1.4.0", + "connect": "^3.7.0", + "cors": "^2.8.5", + "event-stream": "4.0.1", + "faye-websocket": "0.11.4", + "http-auth": "4.2.0", + "http-auth-connect": "^1.0.6", + "morgan": "^1.10.0", + "object-assign": "^4.1.1", + "open": "^8.4.2", + "proxy-middleware": "^0.15.0", + "send": "^0.18.0", + "serve-index": "^1.9.1" + }, + "bin": { + "alive-server": "live-server.js" }, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" + } + }, + "node_modules/alive-server/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, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/alive-server/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/alive-server/node_modules/braces": { + "version": "3.0.3", + "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" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/alive-server/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, + "license": "MIT", + "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/alive-server/node_modules/event-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz", + "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.1", + "from": "^0.1.7", + "map-stream": "0.0.7", + "pause-stream": "^0.0.11", + "split": "^1.0.1", + "stream-combiner": "^0.2.2", + "through": "^2.3.8" + } + }, + "node_modules/alive-server/node_modules/fill-range": { + "version": "7.1.1", + "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" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/alive-server/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/alive-server/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, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/alive-server/node_modules/http-auth": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-4.2.0.tgz", + "integrity": "sha512-trIkGI7dgnFJ5k8YaQFSr1Q5uq9c19vK6Y9ZCjlY0zBEQgdJpXZU3Cyrmk4nwrAGy4pKJhs599o7q6eicbVnhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "apache-crypt": "^1.1.2", + "apache-md5": "^1.0.6", + "bcryptjs": "^2.4.3", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/alive-server/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, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/alive-server/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/alive-server/node_modules/map-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", + "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/alive-server/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/alive-server/node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/alive-server/node_modules/stream-combiner": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", + "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer": "~0.1.1", + "through": "~2.3.4" + } + }, + "node_modules/alive-server/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" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/alive-server/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" } }, "node_modules/ansi-regex": { @@ -370,28 +1023,10 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/anymatch": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/apache-crypt": { "version": "1.2.6", + "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.6.tgz", + "integrity": "sha512-072WetlM4blL8PREJVeY+WHiUh1R5VNt2HfceGS8aKqttPHcmqE5pkKuXPz/ULmJOFkc8Hw3kfKl6vy7Qka6DA==", "dev": true, "license": "MIT", "dependencies": { @@ -403,109 +1038,23 @@ }, "node_modules/apache-md5": { "version": "1.1.8", + "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.8.tgz", + "integrity": "sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/arr-diff": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/async-each": { - "version": "1.0.6", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT" - }, - "node_modules/atob": { - "version": "2.1.2", - "dev": true, - "license": "(MIT OR Apache-2.0)", - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, "node_modules/balanced-match": { "version": "1.0.2", "dev": true, "license": "MIT" }, - "node_modules/base": { - "version": "0.11.2", - "dev": true, - "license": "MIT", - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/basic-auth": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", "dev": true, "license": "MIT", "dependencies": { @@ -517,31 +1066,18 @@ }, "node_modules/batch": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", "dev": true, "license": "MIT" }, "node_modules/bcryptjs": { "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", "dev": true, "license": "MIT" }, - "node_modules/binary-extensions": { - "version": "1.13.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, "node_modules/brace-expansion": { "version": "1.1.11", "dev": true, @@ -551,45 +1087,6 @@ "concat-map": "0.0.1" } }, - "node_modules/braces": { - "version": "2.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cache-base": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", "license": "MIT", @@ -650,64 +1147,6 @@ "node": ">=8" } }, - "node_modules/chokidar": { - "version": "2.1.8", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/class-utils": { - "version": "0.3.6", - "dev": true, - "license": "MIT", - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.7", - "dev": true, - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/cliui": { "version": "8.0.1", "dev": true, @@ -721,18 +1160,6 @@ "node": ">=12" } }, - "node_modules/collection-visit": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/color-convert": { "version": "2.0.1", "dev": true, @@ -751,20 +1178,14 @@ }, "node_modules/colors": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true, "license": "MIT", "engines": { "node": ">=0.1.90" } }, - "node_modules/component-emitter": { - "version": "1.3.1", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/concat-map": { "version": "0.0.1", "dev": true, @@ -798,6 +1219,8 @@ }, "node_modules/connect": { "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, "license": "MIT", "dependencies": { @@ -810,14 +1233,6 @@ "node": ">= 0.10.0" } }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/copyfiles": { "version": "2.4.1", "dev": true, @@ -913,24 +1328,14 @@ "ms": "2.0.0" } }, - "node_modules/decode-uri-component": { - "version": "0.2.2", + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/depd": { @@ -941,6 +1346,17 @@ "node": ">= 0.8" } }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "license": "MIT", @@ -956,6 +1372,8 @@ }, "node_modules/duplexer": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true, "license": "MIT" }, @@ -976,6 +1394,8 @@ }, "node_modules/encodeurl": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, "license": "MIT", "engines": { @@ -1010,7 +1430,9 @@ } }, "node_modules/esbuild": { - "version": "0.16.17", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", + "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -1018,31 +1440,34 @@ "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/android-arm": "0.16.17", - "@esbuild/android-arm64": "0.16.17", - "@esbuild/android-x64": "0.16.17", - "@esbuild/darwin-arm64": "0.16.17", - "@esbuild/darwin-x64": "0.16.17", - "@esbuild/freebsd-arm64": "0.16.17", - "@esbuild/freebsd-x64": "0.16.17", - "@esbuild/linux-arm": "0.16.17", - "@esbuild/linux-arm64": "0.16.17", - "@esbuild/linux-ia32": "0.16.17", - "@esbuild/linux-loong64": "0.16.17", - "@esbuild/linux-mips64el": "0.16.17", - "@esbuild/linux-ppc64": "0.16.17", - "@esbuild/linux-riscv64": "0.16.17", - "@esbuild/linux-s390x": "0.16.17", - "@esbuild/linux-x64": "0.16.17", - "@esbuild/netbsd-x64": "0.16.17", - "@esbuild/openbsd-x64": "0.16.17", - "@esbuild/sunos-x64": "0.16.17", - "@esbuild/win32-arm64": "0.16.17", - "@esbuild/win32-ia32": "0.16.17", - "@esbuild/win32-x64": "0.16.17" + "@esbuild/aix-ppc64": "0.25.4", + "@esbuild/android-arm": "0.25.4", + "@esbuild/android-arm64": "0.25.4", + "@esbuild/android-x64": "0.25.4", + "@esbuild/darwin-arm64": "0.25.4", + "@esbuild/darwin-x64": "0.25.4", + "@esbuild/freebsd-arm64": "0.25.4", + "@esbuild/freebsd-x64": "0.25.4", + "@esbuild/linux-arm": "0.25.4", + "@esbuild/linux-arm64": "0.25.4", + "@esbuild/linux-ia32": "0.25.4", + "@esbuild/linux-loong64": "0.25.4", + "@esbuild/linux-mips64el": "0.25.4", + "@esbuild/linux-ppc64": "0.25.4", + "@esbuild/linux-riscv64": "0.25.4", + "@esbuild/linux-s390x": "0.25.4", + "@esbuild/linux-x64": "0.25.4", + "@esbuild/netbsd-arm64": "0.25.4", + "@esbuild/netbsd-x64": "0.25.4", + "@esbuild/openbsd-arm64": "0.25.4", + "@esbuild/openbsd-x64": "0.25.4", + "@esbuild/sunos-x64": "0.25.4", + "@esbuild/win32-arm64": "0.25.4", + "@esbuild/win32-ia32": "0.25.4", + "@esbuild/win32-x64": "0.25.4" } }, "node_modules/escalade": { @@ -1066,107 +1491,15 @@ "node": ">= 0.6" } }, - "node_modules/event-stream": { - "version": "3.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" - } - }, "node_modules/eventemitter3": { "version": "4.0.7", "license": "MIT", "peer": true }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.7", - "dev": true, - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/faye-websocket": { "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1181,28 +1514,10 @@ "dev": true, "license": "MIT" }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/fill-range": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/finalhandler": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, "license": "MIT", "dependencies": { @@ -1218,35 +1533,20 @@ "node": ">= 0.8" } }, - "node_modules/for-in": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/fresh": { - "version": "2.0.0", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">= 0.6" } }, "node_modules/from": { "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", "dev": true, "license": "MIT" }, @@ -1255,26 +1555,10 @@ "dev": true, "license": "ISC" }, - "node_modules/fsevents": { - "version": "1.2.13", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, "node_modules/function-bind": { "version": "1.1.2", "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -1322,14 +1606,6 @@ "node": ">= 0.4" } }, - "node_modules/get-value": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/gifuct-js": { "version": "2.1.2", "license": "MIT", @@ -1357,26 +1633,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/glob-parent": { - "version": "3.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/gopd": { "version": "1.2.0", "license": "MIT", @@ -1388,11 +1644,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "dev": true, - "license": "ISC" - }, "node_modules/has-flag": { "version": "4.0.0", "dev": true, @@ -1412,45 +1663,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-value": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/hasown": { "version": "2.0.2", "license": "MIT", + "peer": true, "dependencies": { "function-bind": "^1.1.2" }, @@ -1458,22 +1674,20 @@ "node": ">= 0.4" } }, - "node_modules/http-auth": { - "version": "3.1.3", + "node_modules/http-auth-connect": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/http-auth-connect/-/http-auth-connect-1.0.6.tgz", + "integrity": "sha512-yaO0QSCPqGCjPrl3qEEHjJP+lwZ6gMpXLuCBE06eWwcXomkI5TARtu0kxf9teFuBj6iaV3Ybr15jaWUvbzNzHw==", "dev": true, "license": "MIT", - "dependencies": { - "apache-crypt": "^1.1.2", - "apache-md5": "^1.0.6", - "bcryptjs": "^2.3.0", - "uuid": "^3.0.0" - }, "engines": { - "node": ">=4.6.1" + "node": ">=8" } }, "node_modules/http-errors": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1489,6 +1703,8 @@ }, "node_modules/http-errors/node_modules/statuses": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, "license": "MIT", "engines": { @@ -1497,6 +1713,8 @@ }, "node_modules/http-parser-js": { "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", "dev": true, "license": "MIT" }, @@ -1514,66 +1732,26 @@ "dev": true, "license": "ISC" }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.1", + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, "license": "MIT", - "dependencies": { - "hasown": "^2.0.0" + "bin": { + "is-docker": "cli.js" }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-binary-path": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^1.0.0" + "node": ">=8" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT" - }, - "node_modules/is-data-descriptor": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-descriptor": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-extglob": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "license": "MIT", "engines": { @@ -1590,6 +1768,8 @@ }, "node_modules/is-glob": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "license": "MIT", "dependencies": { @@ -1599,44 +1779,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-number": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/isarray": { "version": "0.0.1", "dev": true, @@ -1647,84 +1789,16 @@ "license": "MIT", "peer": true }, - "node_modules/isobject": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/js-binary-schema-parser": { "version": "2.0.3", "license": "MIT", "peer": true }, - "node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/live-server": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "chokidar": "^2.0.4", - "colors": "1.4.0", - "connect": "^3.6.6", - "cors": "latest", - "event-stream": "3.3.4", - "faye-websocket": "0.11.x", - "http-auth": "3.1.x", - "morgan": "^1.9.1", - "object-assign": "latest", - "opn": "latest", - "proxy-middleware": "latest", - "send": "latest", - "serve-index": "^1.9.1" - }, - "bin": { - "live-server": "live-server.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/lodash": { "version": "4.17.21", "dev": true, "license": "MIT" }, - "node_modules/map-cache": { - "version": "0.2.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-stream": { - "version": "0.1.0", - "dev": true - }, - "node_modules/map-visit": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/math-intrinsics": { "version": "1.1.0", "license": "MIT", @@ -1738,62 +1812,23 @@ "dev": true, "license": "MIT" }, - "node_modules/micromatch": { - "version": "3.1.10", + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, "license": "MIT", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "bin": { + "mime": "cli.js" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/extend-shallow": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/is-extendable": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/kind-of": { - "version": "6.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, "node_modules/mime-db": { - "version": "1.54.0", + "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": { @@ -1801,11 +1836,13 @@ } }, "node_modules/mime-types": { - "version": "3.0.1", + "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.54.0" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" @@ -1822,29 +1859,6 @@ "node": "*" } }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/mkdirp": { "version": "1.0.4", "dev": true, @@ -1858,6 +1872,8 @@ }, "node_modules/morgan": { "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1876,64 +1892,6 @@ "dev": true, "license": "MIT" }, - "node_modules/nan": { - "version": "2.22.2", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "dev": true, - "license": "MIT", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/extend-shallow": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/is-extendable": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/kind-of": { - "version": "6.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/negotiator": { "version": "0.6.3", "dev": true, @@ -1953,6 +1911,8 @@ }, "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, "license": "MIT", "engines": { @@ -1969,42 +1929,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-copy": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.7", - "dev": true, - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/object-inspect": { "version": "1.13.4", "license": "MIT", @@ -2016,28 +1940,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-visit": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/on-finished": { "version": "2.3.0", "dev": true, @@ -2051,6 +1953,8 @@ }, "node_modules/on-headers": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true, "license": "MIT", "engines": { @@ -2065,15 +1969,32 @@ "wrappy": "1" } }, - "node_modules/opn": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-6.0.0.tgz", - "integrity": "sha512-I9PKfIZC+e4RXZ/qr1RhgyCnGgYX0UEIlXgWnCOVACIvFgaC9rz6Won7xbdhoHrd8IIhV7YEpHjreNUNkqCGkQ==", - "deprecated": "The package has been renamed to `open`", + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, "license": "MIT", "dependencies": { - "is-wsl": "^1.1.0" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" }, "engines": { "node": ">=8" @@ -2097,19 +2018,6 @@ "node": ">= 0.8" } }, - "node_modules/pascalcase": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, "node_modules/path-is-absolute": { "version": "1.0.1", "dev": true, @@ -2120,6 +2028,8 @@ }, "node_modules/pause-stream": { "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", "dev": true, "license": [ "MIT", @@ -2142,6 +2052,19 @@ "dev": true, "license": "MIT" }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/pixi.js": { "version": "8.9.1", "license": "MIT", @@ -2169,14 +2092,6 @@ "license": "MIT", "peer": true }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/process-nextick-args": { "version": "2.0.1", "dev": true, @@ -2230,107 +2145,11 @@ "string_decoder": "~0.10.x" } }, - "node_modules/readdirp": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/readdirp/node_modules/isarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/readdirp/node_modules/readable-stream": { - "version": "2.3.8", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readdirp/node_modules/string_decoder": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/regenerator-runtime": { "version": "0.14.1", "dev": true, "license": "MIT" }, - "node_modules/regex-not": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/extend-shallow": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/is-extendable": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "dev": true, - "license": "ISC" - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, "node_modules/require-directory": { "version": "2.1.1", "dev": true, @@ -2339,19 +2158,6 @@ "node": ">=0.10.0" } }, - "node_modules/resolve-url": { - "version": "0.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/ret": { - "version": "0.1.15", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12" - } - }, "node_modules/rimraf": { "version": "3.0.2", "dev": true, @@ -2379,68 +2185,42 @@ "dev": true, "license": "MIT" }, - "node_modules/safe-regex": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ret": "~0.1.10" - } - }, "node_modules/send": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", - "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, "license": "MIT", "dependencies": { - "debug": "^4.3.5", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "mime-types": "^3.0.1", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.1" + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" }, "engines": { - "node": ">= 18" - } - }, - "node_modules/send/node_modules/debug": { - "version": "4.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/send/node_modules/encodeurl": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" + "node": ">= 0.8.0" } }, "node_modules/send/node_modules/ms": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, "license": "MIT" }, "node_modules/send/node_modules/on-finished": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "license": "MIT", "dependencies": { @@ -2452,6 +2232,8 @@ }, "node_modules/send/node_modules/statuses": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, "license": "MIT", "engines": { @@ -2460,6 +2242,8 @@ }, "node_modules/serve-index": { "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "dev": true, "license": "MIT", "dependencies": { @@ -2477,6 +2261,8 @@ }, "node_modules/serve-index/node_modules/depd": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, "license": "MIT", "engines": { @@ -2485,6 +2271,8 @@ }, "node_modules/serve-index/node_modules/http-errors": { "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dev": true, "license": "MIT", "dependencies": { @@ -2499,49 +2287,22 @@ }, "node_modules/serve-index/node_modules/inherits": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", "dev": true, "license": "ISC" }, - "node_modules/serve-index/node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/mime-types": { - "version": "2.1.35", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/serve-index/node_modules/setprototypeof": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", "dev": true, "license": "ISC" }, - "node_modules/set-value": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/setprototypeof": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true, "license": "ISC" }, @@ -2624,191 +2385,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/snapdragon": { - "version": "0.8.2", - "dev": true, - "license": "MIT", - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.7", - "dev": true, - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/source-map": { - "version": "0.5.7", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "dev": true, - "license": "MIT", - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, "node_modules/spawn-command": { "version": "0.0.2", "dev": true }, - "node_modules/split": { - "version": "0.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/split-string": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/extend-shallow": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/is-extendable": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.7", - "dev": true, - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/statuses": { "version": "1.5.0", "dev": true, @@ -2817,14 +2397,6 @@ "node": ">= 0.6" } }, - "node_modules/stream-combiner": { - "version": "0.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "duplexer": "~0.1.1" - } - }, "node_modules/string_decoder": { "version": "0.10.31", "dev": true, @@ -2875,6 +2447,8 @@ }, "node_modules/through": { "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true, "license": "MIT" }, @@ -2914,68 +2488,10 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/to-object-path": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/extend-shallow": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/is-extendable": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/toidentifier": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, "license": "MIT", "engines": { @@ -3012,82 +2528,23 @@ "dev": true, "license": "MIT" }, - "node_modules/union-value": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/unix-crypt-td-js": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz", + "integrity": "sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/unpipe": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/unset-value": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/isarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, "node_modules/untildify": { "version": "4.0.0", "dev": true, @@ -3096,20 +2553,6 @@ "node": ">=8" } }, - "node_modules/upath": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "dev": true, - "license": "MIT" - }, "node_modules/url": { "version": "0.11.4", "license": "MIT", @@ -3122,14 +2565,6 @@ "node": ">= 0.4" } }, - "node_modules/use": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "dev": true, @@ -3137,20 +2572,14 @@ }, "node_modules/utils-merge": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.4.0" } }, - "node_modules/uuid": { - "version": "3.4.0", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "bin/uuid" - } - }, "node_modules/vary": { "version": "1.1.2", "dev": true, @@ -3161,6 +2590,8 @@ }, "node_modules/websocket-driver": { "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3174,6 +2605,8 @@ }, "node_modules/websocket-extensions": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3363,6 +2796,29 @@ "three": "0.162.0" } }, + "spine-webcomponents": { + "name": "@esotericsoftware/spine-webcomponents", + "version": "4.2.80", + "license": "LicenseRef-LICENSE", + "dependencies": { + "@esotericsoftware/spine-webgl": "4.2.80" + } + }, + "spine-webcomponents/node_modules/@esotericsoftware/spine-core": { + "version": "4.2.80", + "resolved": "https://registry.npmjs.org/@esotericsoftware/spine-core/-/spine-core-4.2.80.tgz", + "integrity": "sha512-1SsMY5GTjb5iKzxs+yu09MQQ76+MKwpfuzNJYTg1rTwNCJE2Fuekd1mOXXmAxnU9mUdBxchwhRlT93YZbYwuaQ==", + "license": "LicenseRef-LICENSE" + }, + "spine-webcomponents/node_modules/@esotericsoftware/spine-webgl": { + "version": "4.2.80", + "resolved": "https://registry.npmjs.org/@esotericsoftware/spine-webgl/-/spine-webgl-4.2.80.tgz", + "integrity": "sha512-6AbaqsJ9nQzVcM3eFE8gleqQKCrEFhn82ucUNt6NaUoJLIQCBzORiQdO8MwSyUbxFkIv7q0/EJI7m/ZHRotWZQ==", + "license": "LicenseRef-LICENSE", + "dependencies": { + "@esotericsoftware/spine-core": "4.2.80" + } + }, "spine-webgl": { "name": "@esotericsoftware/spine-webgl", "version": "4.2.81", From 67a965b633b9ac7c9db4d2045cd69bce89c0a619 Mon Sep 17 00:00:00 2001 From: Davide Tantillo Date: Wed, 14 May 2025 17:30:45 +0200 Subject: [PATCH 15/42] [ts] Removed global declarations from require-shim files. Closes #2847. --- spine-ts/spine-phaser-v3/src/require-shim.ts | 5 +---- spine-ts/spine-phaser-v4/src/require-shim.ts | 5 +---- spine-ts/spine-pixi-v7/src/require-shim.ts | 11 +++-------- spine-ts/spine-pixi-v8/src/require-shim.ts | 9 ++------- spine-ts/spine-threejs/src/require-shim.ts | 11 +++-------- 5 files changed, 10 insertions(+), 31 deletions(-) diff --git a/spine-ts/spine-phaser-v3/src/require-shim.ts b/spine-ts/spine-phaser-v3/src/require-shim.ts index 6281cfd84..74db2197f 100644 --- a/spine-ts/spine-phaser-v3/src/require-shim.ts +++ b/spine-ts/spine-phaser-v3/src/require-shim.ts @@ -27,12 +27,9 @@ * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ -declare global { - var require: any; -} if (typeof window !== 'undefined' && window.Phaser) { let prevRequire = window.require; - window.require = (x: string) => { + (window as any).require = (x: string) => { if (prevRequire) return prevRequire(x); else if (x === "Phaser") return window.Phaser; } diff --git a/spine-ts/spine-phaser-v4/src/require-shim.ts b/spine-ts/spine-phaser-v4/src/require-shim.ts index 6281cfd84..74db2197f 100644 --- a/spine-ts/spine-phaser-v4/src/require-shim.ts +++ b/spine-ts/spine-phaser-v4/src/require-shim.ts @@ -27,12 +27,9 @@ * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ -declare global { - var require: any; -} if (typeof window !== 'undefined' && window.Phaser) { let prevRequire = window.require; - window.require = (x: string) => { + (window as any).require = (x: string) => { if (prevRequire) return prevRequire(x); else if (x === "Phaser") return window.Phaser; } diff --git a/spine-ts/spine-pixi-v7/src/require-shim.ts b/spine-ts/spine-pixi-v7/src/require-shim.ts index 498ea8bd3..ac51b90c0 100644 --- a/spine-ts/spine-pixi-v7/src/require-shim.ts +++ b/spine-ts/spine-pixi-v7/src/require-shim.ts @@ -27,16 +27,11 @@ * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ -declare global { - var require: any; - var PIXI: any; -} - -if (typeof window !== 'undefined' && window.PIXI) { +if (typeof window !== 'undefined' && (window as any).PIXI) { let prevRequire = window.require; - window.require = (x: string) => { + (window as any).require = (x: string) => { if (prevRequire) return prevRequire(x); - else if (x.startsWith("@pixi/")) return window.PIXI; + else if (x.startsWith("@pixi/")) return (window as any).PIXI; } } diff --git a/spine-ts/spine-pixi-v8/src/require-shim.ts b/spine-ts/spine-pixi-v8/src/require-shim.ts index cd0d2b312..e616e3974 100644 --- a/spine-ts/spine-pixi-v8/src/require-shim.ts +++ b/spine-ts/spine-pixi-v8/src/require-shim.ts @@ -27,16 +27,11 @@ * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ -declare global { - var require: any; - var PIXI: any; -} - -if (typeof window !== 'undefined' && window.PIXI) { +if (typeof window !== 'undefined' && (window as any).PIXI) { const prevRequire = window.require; (window as any).require = (x: string) => { if (prevRequire) return prevRequire(x); - else if (x.startsWith("@pixi/") || x.startsWith("pixi.js")) return window.PIXI; + else if (x.startsWith("@pixi/") || x.startsWith("pixi.js")) return (window as any).PIXI; }; } diff --git a/spine-ts/spine-threejs/src/require-shim.ts b/spine-ts/spine-threejs/src/require-shim.ts index 4ce6e0b57..39857bfe4 100644 --- a/spine-ts/spine-threejs/src/require-shim.ts +++ b/spine-ts/spine-threejs/src/require-shim.ts @@ -27,16 +27,11 @@ * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ -declare global { - var require: any; - var THREE: any; -} - -if (typeof window !== 'undefined' && window.THREE) { +if (typeof window !== 'undefined' && (window as any).THREE) { let prevRequire = window.require; - window.require = (x: string) => { + (window as any).require = (x: string) => { if (prevRequire) return prevRequire(x); - else if (x === "three") return window.THREE; + else if (x === "three") return (window as any).THREE; } } From 23adb6b9b8d2574568c447229e20b5f7d4d23d30 Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Wed, 14 May 2025 21:43:56 +0200 Subject: [PATCH 16/42] [unity] Inside/Outside Mask Materials recreated unnecessarily upon material changes. Closes #2848. --- .../Components/SkeletonRenderer.cs | 46 +++++++++++++++++-- spine-unity/Assets/Spine/package.json | 2 +- 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs index 8f9ade241..b8ba86791 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs @@ -680,10 +680,12 @@ namespace Spine.Unity { } else if (materialsChanged) { meshRenderer.sharedMaterials = rendererBuffers.GetUpdatedSharedMaterialsArray(); } - if (materialsChanged && (this.maskMaterials.AnyMaterialCreated)) { - this.maskMaterials = new SpriteMaskInteractionMaterials(); - } +#if BUILT_IN_SPRITE_MASK_COMPONENT + if (materialsChanged && this.maskMaterials.AnyMaterialCreated && meshRenderer != null) { + UpdateSpriteMaskMaterials(); + } +#endif meshGenerator.FillLateVertexData(currentMesh); // STEP 4. The UnityEngine.Mesh is ready. Set it as the MeshFilter's mesh. Store the instructions used for that mesh. =========== @@ -784,13 +786,49 @@ namespace Spine.Unity { } #if BUILT_IN_SPRITE_MASK_COMPONENT + private void UpdateSpriteMaskMaterials () { + if (maskInteraction == SpriteMaskInteraction.None) return; + if (maskMaterials.materialsMaskDisabled == null || maskMaterials.materialsMaskDisabled.Length == 0) { + maskMaterials = new SpriteMaskInteractionMaterials(); + return; + } + + Material[] maskedMaterials; + int maskFunction; + if (maskInteraction == SpriteMaskInteraction.VisibleInsideMask) { + if (maskMaterials.materialsInsideMask == null || maskMaterials.materialsInsideMask.Length == 0) + maskMaterials.materialsInsideMask = new Material[maskMaterials.materialsMaskDisabled.Length]; + maskedMaterials = maskMaterials.materialsInsideMask; + + maskFunction = (int)STENCIL_COMP_MASKINTERACTION_VISIBLE_INSIDE; + } else { + if (maskMaterials.materialsOutsideMask == null || maskMaterials.materialsOutsideMask.Length == 0) + maskMaterials.materialsOutsideMask = new Material[maskMaterials.materialsMaskDisabled.Length]; + maskedMaterials = maskMaterials.materialsOutsideMask; + + maskFunction = (int)STENCIL_COMP_MASKINTERACTION_VISIBLE_OUTSIDE; + } + + Material[] currentMaterials = meshRenderer.sharedMaterials; + for (int c = 0; c < currentMaterials.Length; ++c) { + Material currentMaterial = currentMaterials[c]; + int disabledIndex = System.Array.IndexOf(maskMaterials.materialsMaskDisabled, currentMaterial); + if (disabledIndex != -1) { + meshRenderer.sharedMaterials[c] = maskedMaterials[disabledIndex]; + } else { + Material newMaterial = new Material(currentMaterial); + newMaterial.SetFloat(STENCIL_COMP_PARAM_ID, maskFunction); + meshRenderer.sharedMaterials[c] = newMaterial; + } + } + } + private void AssignSpriteMaskMaterials () { #if UNITY_EDITOR if (!Application.isPlaying && !UnityEditor.EditorApplication.isUpdating) { EditorFixStencilCompParameters(); } #endif - if (Application.isPlaying) { if (maskInteraction != SpriteMaskInteraction.None && maskMaterials.materialsMaskDisabled.Length == 0) maskMaterials.materialsMaskDisabled = meshRenderer.sharedMaterials; diff --git a/spine-unity/Assets/Spine/package.json b/spine-unity/Assets/Spine/package.json index cc1ebb380..5831705fd 100644 --- a/spine-unity/Assets/Spine/package.json +++ b/spine-unity/Assets/Spine/package.json @@ -2,7 +2,7 @@ "name": "com.esotericsoftware.spine.spine-unity", "displayName": "spine-unity Runtime", "description": "This plugin provides the spine-unity runtime core.", - "version": "4.2.103", + "version": "4.2.104", "unity": "2018.3", "author": { "name": "Esoteric Software", From e1e88fce60844ae70742b08c03816b68f2a57a3e Mon Sep 17 00:00:00 2001 From: Davide Tantillo Date: Thu, 15 May 2025 18:26:33 +0200 Subject: [PATCH 17/42] [ts] Fixed and improved appendedToBody overlays without transform. --- .../spine-webcomponents/example/tutorial.html | 1 - .../src/SpineWebComponentOverlay.ts | 17 +++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/spine-ts/spine-webcomponents/example/tutorial.html b/spine-ts/spine-webcomponents/example/tutorial.html index 708b6cf16..56d69bd2e 100644 --- a/spine-ts/spine-webcomponents/example/tutorial.html +++ b/spine-ts/spine-webcomponents/example/tutorial.html @@ -1356,7 +1356,6 @@ function removeDiv() { async function reloadWidget(element) { element.disabled = true; await widget.whenReady; - const skeleton = widget.skeleton; widget.loading = true; setTimeout(() => { element.disabled = false; diff --git a/spine-ts/spine-webcomponents/src/SpineWebComponentOverlay.ts b/spine-ts/spine-webcomponents/src/SpineWebComponentOverlay.ts index ea762b619..ca89ba90f 100644 --- a/spine-ts/spine-webcomponents/src/SpineWebComponentOverlay.ts +++ b/spine-ts/spine-webcomponents/src/SpineWebComponentOverlay.ts @@ -166,11 +166,11 @@ export class SpineWebComponentOverlay extends HTMLElement implements OverlayAttr * * In order to fix this behaviour, it is necessary to insert a dedicated `spine-overlay` webcomponent as a direct child of the container. * Moreover, it is necessary to perform the following actions: - * 1) The scrollable container must have a `transform` css attribute. If it hasn't this attribute the `spine-overlay` will add it for you. - * If your scrollable container has already this css attribute, or if you prefer to add it by yourself (example: `transform: translateZ(0);`), set the `no-auto-parent-transform` to the `spine-overlay`. + * 1) The appendedToBody container must have a `transform` css attribute. If it hasn't this attribute the `spine-overlay` will add it for you. + * If your appendedToBody container has already this css attribute, or if you prefer to add it by yourself (example: `transform: translateZ(0);`), set the `no-auto-parent-transform` to the `spine-overlay`. * 2) The `spine-overlay` must have an `overlay-id` attribute. Choose the value you prefer. * 3) Each `spine-skeleton` must have an `overlay-id` attribute. The same as the hosting `spine-overlay`. - * Connected to `scrollable` attribute. + * Connected to `appendedToBody` attribute. */ private appendedToBody = true; @@ -270,7 +270,7 @@ export class SpineWebComponentOverlay extends HTMLElement implements OverlayAttr // Alternatively, we can store the body size, check the current body size in the loop (like the translateCanvas), and // if they differs call the resizeCallback. I already tested it, and it works. ResizeObserver should be more efficient. if (this.appendedToBody) { - // if the element is scrollable, the user does not disable translate tweak, and the parent did not have already a transform, add the tweak + // if the element is appendedToBody, the user does not disable translate tweak, and the parent did not have already a transform, add the tweak if (this.appendedToBody && !this.noAutoParentTransform && getComputedStyle(this.parentElement!).transform === "none") { this.parentElement!.style.transform = `translateZ(0)`; } @@ -963,6 +963,7 @@ export class SpineWebComponentOverlay extends HTMLElement implements OverlayAttr } } + // this function is invoked each frame - pay attention to what you add here private translateCanvas () { let scrollPositionX = -this.overflowLeftSize; let scrollPositionY = -this.overflowTopSize; @@ -972,9 +973,9 @@ export class SpineWebComponentOverlay extends HTMLElement implements OverlayAttr scrollPositionY += window.scrollY; } else { - // Ideally this should be the only scrollable case (no-auto-parent-transform not enabled or at least an ancestor has transform) - // I'd like to get rid of the code below - if (!this.hasCssTweakOff()) { + // Ideally this should be the only appendedToBody case (no-auto-parent-transform not enabled or at least an ancestor has transform) + // I'd like to get rid of the else case + if (!this.noAutoParentTransform) { scrollPositionX += this.parentElement!.scrollLeft; scrollPositionY += this.parentElement!.scrollTop; } else { @@ -984,7 +985,7 @@ export class SpineWebComponentOverlay extends HTMLElement implements OverlayAttr let offsetParent = this.offsetParent; do { - if (offsetParent === document.body) break; + if (offsetParent === null || offsetParent === document.body) break; const htmlOffsetParentElement = offsetParent as HTMLElement; if (htmlOffsetParentElement.style.position === "fixed" || htmlOffsetParentElement.style.position === "sticky" || htmlOffsetParentElement.style.position === "absolute") { From 0865206b15e108b3e0635dbcc371344105462669 Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Thu, 15 May 2025 20:55:57 +0200 Subject: [PATCH 18/42] [unity] Reverts 23adb6b: Inside/Outside Mask Materials recreated unnecessarily upon material changes. See #2848. --- .../Components/SkeletonRenderer.cs | 46 ++----------------- spine-unity/Assets/Spine/package.json | 2 +- 2 files changed, 5 insertions(+), 43 deletions(-) diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs index b8ba86791..8f9ade241 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs @@ -680,12 +680,10 @@ namespace Spine.Unity { } else if (materialsChanged) { meshRenderer.sharedMaterials = rendererBuffers.GetUpdatedSharedMaterialsArray(); } - -#if BUILT_IN_SPRITE_MASK_COMPONENT - if (materialsChanged && this.maskMaterials.AnyMaterialCreated && meshRenderer != null) { - UpdateSpriteMaskMaterials(); + if (materialsChanged && (this.maskMaterials.AnyMaterialCreated)) { + this.maskMaterials = new SpriteMaskInteractionMaterials(); } -#endif + meshGenerator.FillLateVertexData(currentMesh); // STEP 4. The UnityEngine.Mesh is ready. Set it as the MeshFilter's mesh. Store the instructions used for that mesh. =========== @@ -786,49 +784,13 @@ namespace Spine.Unity { } #if BUILT_IN_SPRITE_MASK_COMPONENT - private void UpdateSpriteMaskMaterials () { - if (maskInteraction == SpriteMaskInteraction.None) return; - if (maskMaterials.materialsMaskDisabled == null || maskMaterials.materialsMaskDisabled.Length == 0) { - maskMaterials = new SpriteMaskInteractionMaterials(); - return; - } - - Material[] maskedMaterials; - int maskFunction; - if (maskInteraction == SpriteMaskInteraction.VisibleInsideMask) { - if (maskMaterials.materialsInsideMask == null || maskMaterials.materialsInsideMask.Length == 0) - maskMaterials.materialsInsideMask = new Material[maskMaterials.materialsMaskDisabled.Length]; - maskedMaterials = maskMaterials.materialsInsideMask; - - maskFunction = (int)STENCIL_COMP_MASKINTERACTION_VISIBLE_INSIDE; - } else { - if (maskMaterials.materialsOutsideMask == null || maskMaterials.materialsOutsideMask.Length == 0) - maskMaterials.materialsOutsideMask = new Material[maskMaterials.materialsMaskDisabled.Length]; - maskedMaterials = maskMaterials.materialsOutsideMask; - - maskFunction = (int)STENCIL_COMP_MASKINTERACTION_VISIBLE_OUTSIDE; - } - - Material[] currentMaterials = meshRenderer.sharedMaterials; - for (int c = 0; c < currentMaterials.Length; ++c) { - Material currentMaterial = currentMaterials[c]; - int disabledIndex = System.Array.IndexOf(maskMaterials.materialsMaskDisabled, currentMaterial); - if (disabledIndex != -1) { - meshRenderer.sharedMaterials[c] = maskedMaterials[disabledIndex]; - } else { - Material newMaterial = new Material(currentMaterial); - newMaterial.SetFloat(STENCIL_COMP_PARAM_ID, maskFunction); - meshRenderer.sharedMaterials[c] = newMaterial; - } - } - } - private void AssignSpriteMaskMaterials () { #if UNITY_EDITOR if (!Application.isPlaying && !UnityEditor.EditorApplication.isUpdating) { EditorFixStencilCompParameters(); } #endif + if (Application.isPlaying) { if (maskInteraction != SpriteMaskInteraction.None && maskMaterials.materialsMaskDisabled.Length == 0) maskMaterials.materialsMaskDisabled = meshRenderer.sharedMaterials; diff --git a/spine-unity/Assets/Spine/package.json b/spine-unity/Assets/Spine/package.json index 5831705fd..cc1ebb380 100644 --- a/spine-unity/Assets/Spine/package.json +++ b/spine-unity/Assets/Spine/package.json @@ -2,7 +2,7 @@ "name": "com.esotericsoftware.spine.spine-unity", "displayName": "spine-unity Runtime", "description": "This plugin provides the spine-unity runtime core.", - "version": "4.2.104", + "version": "4.2.103", "unity": "2018.3", "author": { "name": "Esoteric Software", From 393ef29cb3d01fc10ed73050d2beba6532559bb4 Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Thu, 15 May 2025 20:58:41 +0200 Subject: [PATCH 19/42] [unity] Increased package version after previous revert-commit to avoid decreasing version number issues. --- spine-unity/Assets/Spine/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spine-unity/Assets/Spine/package.json b/spine-unity/Assets/Spine/package.json index cc1ebb380..5831705fd 100644 --- a/spine-unity/Assets/Spine/package.json +++ b/spine-unity/Assets/Spine/package.json @@ -2,7 +2,7 @@ "name": "com.esotericsoftware.spine.spine-unity", "displayName": "spine-unity Runtime", "description": "This plugin provides the spine-unity runtime core.", - "version": "4.2.103", + "version": "4.2.104", "unity": "2018.3", "author": { "name": "Esoteric Software", From 13095faa8cf6ff77e94e947d989c6394409127fe Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Fri, 16 May 2025 11:02:41 +0200 Subject: [PATCH 20/42] [flutter] Upgrade to AGP 8.5.1, NDK 28.1.13356709, minSDK 21, Closes #2849 --- .gitignore | 1 + spine-flutter/android/build.gradle | 6 ++-- spine-flutter/example/.gitignore | 2 ++ .../example/android/app/build.gradle | 25 ++++++--------- .../android/app/src/debug/AndroidManifest.xml | 3 +- .../android/app/src/main/AndroidManifest.xml | 3 +- .../spine/android}/MainActivity.kt | 2 +- .../spine_flutter_example/MainActivity.kt | 6 ---- .../app/src/profile/AndroidManifest.xml | 3 +- spine-flutter/example/android/build.gradle | 13 -------- .../gradle/wrapper/gradle-wrapper.properties | 2 +- spine-flutter/example/android/settings.gradle | 30 ++++++++++++----- spine-flutter/example/pubspec.lock | 32 +++++++++---------- spine-flutter/example/pubspec.yaml | 2 +- 14 files changed, 60 insertions(+), 70 deletions(-) rename spine-flutter/example/android/app/src/main/kotlin/com/{example/example => esotericsoftware/spine/android}/MainActivity.kt (69%) delete mode 100644 spine-flutter/example/android/app/src/main/kotlin/com/example/spine_flutter_example/MainActivity.kt diff --git a/.gitignore b/.gitignore index cc177705e..1140eb43a 100644 --- a/.gitignore +++ b/.gitignore @@ -221,3 +221,4 @@ spine-godot/build/version.txt spine-godot/vc140.pdb spine-godot/example-v4-extension/bin spine-godot/example-v4-extension/MoltenVK.xcframework +spine-flutter/example/android/app/.cxx diff --git a/spine-flutter/android/build.gradle b/spine-flutter/android/build.gradle index 5e618a3be..6aac6715a 100644 --- a/spine-flutter/android/build.gradle +++ b/spine-flutter/android/build.gradle @@ -11,7 +11,7 @@ buildscript { dependencies { // The Android Gradle Plugin knows how to build native code with the NDK. - classpath 'com.android.tools.build:gradle:7.1.2' + classpath 'com.android.tools.build:gradle:8.5.1' } } @@ -33,7 +33,7 @@ android { // Bumping the plugin ndkVersion requires all clients of this plugin to bump // the version in their app and to download a newer version of the NDK. - ndkVersion "21.1.6352462" + ndkVersion "28.1.13356709" // Invoke the shared CMake build with the Android Gradle Plugin. externalNativeBuild { @@ -56,6 +56,6 @@ android { } defaultConfig { - minSdkVersion 16 + minSdkVersion 21 } } diff --git a/spine-flutter/example/.gitignore b/spine-flutter/example/.gitignore index 1eab1a228..13f41015a 100644 --- a/spine-flutter/example/.gitignore +++ b/spine-flutter/example/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/spine-flutter/example/android/app/build.gradle b/spine-flutter/example/android/app/build.gradle index 672a97c81..5da267aea 100644 --- a/spine-flutter/example/android/app/build.gradle +++ b/spine-flutter/example/android/app/build.gradle @@ -1,3 +1,9 @@ +plugins { + id "com.android.application" + id "kotlin-android" + id "dev.flutter.flutter-gradle-plugin" +} + def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { @@ -6,11 +12,6 @@ if (localPropertiesFile.exists()) { } } -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { flutterVersionCode = '1' @@ -21,13 +22,11 @@ if (flutterVersionName == null) { flutterVersionName = '1.0' } -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - android { compileSdkVersion flutter.compileSdkVersion - ndkVersion flutter.ndkVersion + // ndkVersion flutter.ndkVersion + ndkVersion "28.1.13356709" + namespace "com.esotericsoftware.spine.android" compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 @@ -44,7 +43,7 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.spine_flutter_example" + applicationId "com.esotericsoftware.spine.android" // You can update the following values to match your application needs. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. minSdkVersion flutter.minSdkVersion @@ -65,7 +64,3 @@ android { flutter { source '../..' } - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" -} diff --git a/spine-flutter/example/android/app/src/debug/AndroidManifest.xml b/spine-flutter/example/android/app/src/debug/AndroidManifest.xml index cf5d5093b..399f6981d 100644 --- a/spine-flutter/example/android/app/src/debug/AndroidManifest.xml +++ b/spine-flutter/example/android/app/src/debug/AndroidManifest.xml @@ -1,5 +1,4 @@ - +