From 9ca1d192ff7ff1593f629f52e96d66304c6c611b Mon Sep 17 00:00:00 2001 From: Caleb Brose <5447118+cmbrose@users.noreply.github.com> Date: Fri, 2 May 2025 20:53:55 +0000 Subject: [PATCH 01/10] Handle resuming and pulling new tools --- .devcontainer/devcontainer.json | 67 ++++++++++++++-------------- .devcontainer/onCreate.sh | 40 +---------------- .devcontainer/postStartCommand.sh | 17 +++++++ .devcontainer/refreshTools.sh | 74 +++++++++++++++++++++++++++++++ 4 files changed, 126 insertions(+), 72 deletions(-) create mode 100755 .devcontainer/postStartCommand.sh create mode 100755 .devcontainer/refreshTools.sh diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 5c25d67..351a71a 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,40 +1,39 @@ { - "name": "Workbench template", - "image": "mcr.microsoft.com/devcontainers/typescript-node:1-22-bookworm", - "hostRequirements": { - "storage": "32gb", - "memory": "8gb", - "cpus": 4 - }, - // Runs automatically after Prebuild Template environment is created. - "onCreateCommand": ".devcontainer/onCreate.sh", - // Runs automatically every time the dev container has been (re-)started - "postStartCommand": { - "app": "USE_DESIGNER=true USE_SPARK_AGENT=true npm run dev", - "ports": "gh cs ports visibility 5000:public -c $CODESPACE_NAME", - "spark-proxy": "proxy.js", - "server": "spark-server", - "spark-agent": "spark-agent", - "spark-designer": "spark-designer", - "spark-file-syncer": "spark-file-syncer 13000 >> /tmp/.spark-file-syncer.log 2>&1" - }, - "forwardPorts": [4000, 5000, 9000, 13000], - "features": { - "ghcr.io/devcontainers/features/sshd:1": { - "version": "latest" - } - }, - "customizations": { - "codespaces": { - "repositories": { - "github/gh-runtime-cli": { - "permissions": { - "contents": "read", - "packages": "read" - } + "name": "Workbench template", + "image": "mcr.microsoft.com/devcontainers/typescript-node:1-22-bookworm", + "hostRequirements": { + "storage": "32gb", + "memory": "8gb", + "cpus": 4 + }, + // Runs automatically after Prebuild Template environment is created. + "onCreateCommand": ".devcontainer/onCreate.sh", + // Runs automatically every time the dev container has been (re-)started + "postStartCommand": { + "ports": "gh cs ports visibility 5000:public -c $CODESPACE_NAME", + "tools": ".devcontainer/postStartCommand.sh" + }, + "forwardPorts": [ + 4000, + 5000, + 9000, + 13000 + ], + "features": { + "ghcr.io/devcontainers/features/sshd:1": { + "version": "latest" + } + }, + "customizations": { + "codespaces": { + "repositories": { + "github/gh-runtime-cli": { + "permissions": { + "contents": "read", + "packages": "read" } } } } } - \ No newline at end of file +} \ No newline at end of file diff --git a/.devcontainer/onCreate.sh b/.devcontainer/onCreate.sh index ac0f8eb..20de9da 100755 --- a/.devcontainer/onCreate.sh +++ b/.devcontainer/onCreate.sh @@ -24,41 +24,5 @@ fi echo "Adding an alias for the GitHub CLI Runtime extension" gh alias set runtime runtime-cli -echo "Downloading the latest release of workbench-template from GitHub" - -GITHUB_PAT="$RELEASE_PAT" -REPO="github/workbench-template" - -# Fetch the latest release information -LATEST_RELEASE=$(curl -s -H "Authorization: token $GITHUB_PAT" https://api.github.com/repos/$REPO/releases/latest) - -# Extract the first browser_download_url from the assets -DOWNLOAD_URL=$(echo "$LATEST_RELEASE" | jq -r '.assets[0].url') -echo "Download URL: $DOWNLOAD_URL" - - -# Fetch the latest release information -curl -L -o dist.zip -H "Authorization: token $GITHUB_PAT" -H "Accept: application/octet-stream" "$DOWNLOAD_URL" - -unzip -o dist.zip -rm dist.zip - -sudo mv ./spark-sdk-dist/server.js /usr/local/bin/spark-server -sudo mv ./spark-sdk-dist/designer.js /usr/local/bin/spark-designer -sudo mv ./spark-sdk-dist/upload-to-remote.sh /usr/local/bin/upload-to-remote.sh -sudo mv ./spark-sdk-dist/file-syncer.js /usr/local/bin/spark-file-syncer -sudo mv ./spark-sdk-dist/spark-agent.js /usr/local/bin/spark-agent -sudo cp ./spark-sdk-dist/proxy.js /workspaces/proxy.js -sudo mv ./spark-sdk-dist/proxy.js /usr/local/bin/proxy.js - -tar -xzf ./spark-sdk-dist/spark-tools.tgz - -mkdir -p /workspaces/spark-tools -sudo mv ./package/* /workspaces/spark-tools -sudo rmdir ./package -rm -rf ./spark-sdk-dist - -cd /workspaces/spark-tools -npm i -cd /workspaces/spark-template -npm i -f /workspaces/spark-tools \ No newline at end of file +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +"$SCRIPT_DIR/refreshTools.sh" \ No newline at end of file diff --git a/.devcontainer/postStartCommand.sh b/.devcontainer/postStartCommand.sh new file mode 100755 index 0000000..e064563 --- /dev/null +++ b/.devcontainer/postStartCommand.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +"$SCRIPT_DIR/refreshTools.sh" + +USE_DESIGNER=true USE_SPARK_AGENT=true npm run dev & +proxy.js & +spark-server & +spark-agent & +spark-designer & +spark-file-syncer 13000 >> /tmp/.spark-file-syncer.log 2>&1 & + +echo "Spark tools started successfully" + +wait diff --git a/.devcontainer/refreshTools.sh b/.devcontainer/refreshTools.sh new file mode 100755 index 0000000..8f978fa --- /dev/null +++ b/.devcontainer/refreshTools.sh @@ -0,0 +1,74 @@ +#!/bin/bash + +set -e + +echo "Upgrading the Runtime CLI extension" +gh extension upgrade runtime-cli + +echo "Checking for updates to workbench-template from GitHub" + +GITHUB_PAT="$RELEASE_PAT" +REPO="github/workbench-template" + +MARKER_DIR="/var/lib/spark/.versions" +RELEASE_MARKER_FILE="$MARKER_DIR/release" +TOOLS_MARKER_FILE="$MARKER_DIR/tools" + +sudo mkdir -p "$MARKER_DIR" + +# Fetch the latest release information +LATEST_RELEASE=$(curl -s -H "Authorization: token $GITHUB_PAT" https://api.github.com/repos/$REPO/releases/latest) + +# Extract the release ID to use as marker +RELEASE_ID=$(echo "$LATEST_RELEASE" | jq -r '.id') + +# Check if marker file exists and has the same release ID +if [ -f "$RELEASE_MARKER_FILE" ] && [ "$(cat "$RELEASE_MARKER_FILE")" == "$RELEASE_ID" ]; then + echo "Already at the latest release. Skipping download." + exit 0 +fi + +echo "New version found. Downloading latest release." + +# Extract the first browser_download_url from the assets +DOWNLOAD_URL=$(echo "$LATEST_RELEASE" | jq -r '.assets[0].url') +echo "Download URL: $DOWNLOAD_URL" + +# Fetch the latest release information +curl -L -o dist.zip -H "Authorization: token $GITHUB_PAT" -H "Accept: application/octet-stream" "$DOWNLOAD_URL" + +unzip -o dist.zip +rm dist.zip + +sudo mv ./spark-sdk-dist/server.js /usr/local/bin/spark-server +sudo mv ./spark-sdk-dist/designer.js /usr/local/bin/spark-designer +sudo mv ./spark-sdk-dist/upload-to-remote.sh /usr/local/bin/upload-to-remote.sh +sudo mv ./spark-sdk-dist/file-syncer.js /usr/local/bin/spark-file-syncer +sudo mv ./spark-sdk-dist/spark-agent.js /usr/local/bin/spark-agent +sudo cp ./spark-sdk-dist/proxy.js /workspaces/proxy.js +sudo mv ./spark-sdk-dist/proxy.js /usr/local/bin/proxy.js + +if [ -f "$TOOLS_MARKER_FILE" ] && [ "$(cat "$TOOLS_MARKER_FILE")" == "$(cat ./spark-sdk-dist/spark-tools-version)" ]; then + echo "Already at the latest tools version. Skipping extraction." +else + tar -xzf ./spark-sdk-dist/spark-tools.tgz + + rm -rf /workspaces/spark-tools + mkdir -p /workspaces/spark-tools + sudo mv ./package/* /workspaces/spark-tools + sudo rmdir ./package + + cd /workspaces/spark-tools + npm i + cd /workspaces/spark-template + npm i -f /workspaces/spark-tools + + sudo cp ./spark-sdk-dist/spark-tools-version "$TOOLS_MARKER_FILE" +fi + +rm -rf ./spark-sdk-dist + +# Update marker file with latest release ID +echo "$RELEASE_ID" | sudo tee "$RELEASE_MARKER_FILE" > /dev/null + +echo "Tools installed successfully." \ No newline at end of file From 9391e6f9c2453539771cc6f379e19602e48a57b3 Mon Sep 17 00:00:00 2001 From: Caleb Brose <5447118+cmbrose@users.noreply.github.com> Date: Wed, 7 May 2025 22:03:00 +0000 Subject: [PATCH 02/10] Fixes --- .devcontainer/devcontainer.json | 4 ++-- .devcontainer/refreshTools.sh | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 351a71a..95397c4 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -10,8 +10,8 @@ "onCreateCommand": ".devcontainer/onCreate.sh", // Runs automatically every time the dev container has been (re-)started "postStartCommand": { - "ports": "gh cs ports visibility 5000:public -c $CODESPACE_NAME", - "tools": ".devcontainer/postStartCommand.sh" + "tools": ".devcontainer/postStartCommand.sh", + "noop": ":" }, "forwardPorts": [ 4000, diff --git a/.devcontainer/refreshTools.sh b/.devcontainer/refreshTools.sh index 3509ab9..80b10be 100755 --- a/.devcontainer/refreshTools.sh +++ b/.devcontainer/refreshTools.sh @@ -25,7 +25,7 @@ fi echo "New version found. Downloading latest release." DOWNLOAD_URL=$(echo "$LATEST_RELEASE" | jq -r '.assets[0].url') -curl -L -o dist.zip -H "Authorization: token $GITHUB_PAT" -H "Accept: application/octet-stream" "$DOWNLOAD_URL" +curl -L -o dist.zip -H "Authorization: token $TEMPLATE_PAT" -H "Accept: application/octet-stream" "$DOWNLOAD_URL" unzip -o dist.zip rm dist.zip @@ -56,6 +56,7 @@ else sudo cp ./spark-sdk-dist/spark-tools-version "$TOOLS_MARKER_FILE" fi +sudo rm -rf /usr/local/bin/gh-spark-cli sudo mv spark-sdk-dist/gh-spark-cli /usr/local/bin/ cd /usr/local/bin/gh-spark-cli gh extension install . From 346ac0a07458c99a9a93d9225512e86e2f52351c Mon Sep 17 00:00:00 2001 From: Caleb Brose <5447118+cmbrose@users.noreply.github.com> Date: Thu, 8 May 2025 09:25:04 -0500 Subject: [PATCH 03/10] Update devcontainer.json --- .devcontainer/devcontainer.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 95397c4..01f54cd 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -11,7 +11,7 @@ // Runs automatically every time the dev container has been (re-)started "postStartCommand": { "tools": ".devcontainer/postStartCommand.sh", - "noop": ":" + "welcome-mat": "echo Welcome to Spark!" }, "forwardPorts": [ 4000, @@ -36,4 +36,4 @@ } } } -} \ No newline at end of file +} From b16f47449a94089b69bf4930fbaab143199c01e5 Mon Sep 17 00:00:00 2001 From: Caleb Brose <5447118+cmbrose@users.noreply.github.com> Date: Thu, 8 May 2025 09:25:26 -0500 Subject: [PATCH 04/10] Update devcontainer.json --- .devcontainer/devcontainer.json | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 01f54cd..67ad8be 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -23,17 +23,5 @@ "ghcr.io/devcontainers/features/sshd:1": { "version": "latest" } - }, - "customizations": { - "codespaces": { - "repositories": { - "github/gh-runtime-cli": { - "permissions": { - "contents": "read", - "packages": "read" - } - } - } - } } } From 2d3fd0615bc5487baeba88434e20927f47a8672f Mon Sep 17 00:00:00 2001 From: Caleb Brose <5447118+cmbrose@users.noreply.github.com> Date: Thu, 8 May 2025 09:39:22 -0500 Subject: [PATCH 05/10] Update onCreate.sh --- .devcontainer/onCreate.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.devcontainer/onCreate.sh b/.devcontainer/onCreate.sh index aea1fd9..9457e45 100755 --- a/.devcontainer/onCreate.sh +++ b/.devcontainer/onCreate.sh @@ -20,3 +20,6 @@ sudo rm /usr/local/bin/azcopytar azcopy_dir=$(find /usr/local/bin/ -type d -name "azcopy*" | head -n 1) sudo mv "$azcopy_dir/azcopy" /usr/local/bin/azcopy sudo rm -rf "$azcopy_dir" + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +"$SCRIPT_DIR/refreshTools.sh" From 48782809c4bc519fd6f23e9e409583d99d4a4cd1 Mon Sep 17 00:00:00 2001 From: Caleb Brose <5447118+cmbrose@users.noreply.github.com> Date: Thu, 8 May 2025 09:39:50 -0500 Subject: [PATCH 06/10] Update postStartCommand.sh --- .devcontainer/postStartCommand.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/.devcontainer/postStartCommand.sh b/.devcontainer/postStartCommand.sh index e064563..ad0facf 100755 --- a/.devcontainer/postStartCommand.sh +++ b/.devcontainer/postStartCommand.sh @@ -1,7 +1,5 @@ #!/bin/bash -set -e - SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" "$SCRIPT_DIR/refreshTools.sh" From d6a42c5f8e29922a778fa2b1f586a74f40c41e82 Mon Sep 17 00:00:00 2001 From: Caleb Brose <5447118+cmbrose@users.noreply.github.com> Date: Thu, 8 May 2025 15:09:01 +0000 Subject: [PATCH 07/10] Merge fixes --- .devcontainer/refreshTools.sh | 24 +- package-lock.json | 612 +++++++++++++++++++++++++++++++++- package.json | 2 +- 3 files changed, 611 insertions(+), 27 deletions(-) diff --git a/.devcontainer/refreshTools.sh b/.devcontainer/refreshTools.sh index 80b10be..9aae3d2 100755 --- a/.devcontainer/refreshTools.sh +++ b/.devcontainer/refreshTools.sh @@ -13,10 +13,8 @@ sudo mkdir -p "$MARKER_DIR" # Fetch the latest release information LATEST_RELEASE=$(curl -s -H "Authorization: token $TEMPLATE_PAT" https://api.github.com/repos/github/spark-template/releases/latest) -# Extract the release ID to use as marker -RELEASE_ID=$(echo "$LATEST_RELEASE" | jq -r '.id') - # Check if marker file exists and has the same release ID +RELEASE_ID=$(echo "$LATEST_RELEASE" | jq -r '.id') if [ -f "$RELEASE_MARKER_FILE" ] && [ "$(cat "$RELEASE_MARKER_FILE")" == "$RELEASE_ID" ]; then echo "Already at the latest release. Skipping download." exit 0 @@ -24,41 +22,47 @@ fi echo "New version found. Downloading latest release." +cd /workspaces/spark-template + DOWNLOAD_URL=$(echo "$LATEST_RELEASE" | jq -r '.assets[0].url') curl -L -o dist.zip -H "Authorization: token $TEMPLATE_PAT" -H "Accept: application/octet-stream" "$DOWNLOAD_URL" unzip -o dist.zip rm dist.zip +# Upgrade the Spark Runtime tools sudo mv ./spark-sdk-dist/server.js /usr/local/bin/spark-server sudo mv ./spark-sdk-dist/designer.js /usr/local/bin/spark-designer sudo mv ./spark-sdk-dist/upload-to-remote.sh /usr/local/bin/upload-to-remote.sh +sudo mv ./spark-sdk-dist/deploy.sh /usr/local/bin/deploy.sh sudo mv ./spark-sdk-dist/file-syncer.js /usr/local/bin/spark-file-syncer sudo mv ./spark-sdk-dist/spark-agent.js /usr/local/bin/spark-agent sudo cp ./spark-sdk-dist/proxy.js /workspaces/proxy.js sudo mv ./spark-sdk-dist/proxy.js /usr/local/bin/proxy.js +# Upgrade the Spark Tools package if [ -f "$TOOLS_MARKER_FILE" ] && [ "$(cat "$TOOLS_MARKER_FILE")" == "$(cat ./spark-sdk-dist/spark-tools-version)" ]; then echo "Already at the latest tools version. Skipping extraction." else tar -xzf ./spark-sdk-dist/spark-tools.tgz - rm -rf /workspaces/spark-tools - mkdir -p /workspaces/spark-tools - sudo mv ./package/* /workspaces/spark-tools + sudo rm -rf ./packages/spark-tools + mkdir -p ./packages/spark-tools + sudo mv ./package/* ./packages/spark-tools sudo rmdir ./package - cd /workspaces/spark-tools - npm i - cd /workspaces/spark-template - npm i -f /workspaces/spark-tools + npm i -f sudo cp ./spark-sdk-dist/spark-tools-version "$TOOLS_MARKER_FILE" fi +# Upgrade the GH CLI extension sudo rm -rf /usr/local/bin/gh-spark-cli sudo mv spark-sdk-dist/gh-spark-cli /usr/local/bin/ cd /usr/local/bin/gh-spark-cli +# The --force option on gh extension install isn't honored for local, so manually remove it first. +# It's not an issue if that fails though as that probably just means it was the first time running this. +gh extension remove spark-cli >/dev/null || true gh extension install . gh alias set spark spark-cli --clobber diff --git a/package-lock.json b/package-lock.json index e5b117e..e24bd99 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "name": "spark-template", "version": "0.0.0", "dependencies": { - "@github/spark": "file:../spark-tools", + "@github/spark": "^0.0.1", "@heroicons/react": "^2.2.0", "@hookform/resolvers": "^4.1.3", "@octokit/core": "^6.1.4", @@ -83,11 +83,17 @@ "typescript": "~5.7.2", "typescript-eslint": "^8.25.0", "vite": "^6.2.0" + }, + "workspaces": { + "packages": [ + "packages/*" + ] } }, "../spark-tools": { "name": "@github/spark", "version": "0.0.1", + "extraneous": true, "license": "ISC", "devDependencies": { "@rollup/plugin-commonjs": "^28.0.3", @@ -104,6 +110,7 @@ "zod": "^3.24.2" }, "peerDependencies": { + "react": "^19.0.0", "vite": "^6.2.0" } }, @@ -634,7 +641,7 @@ "license": "MIT" }, "node_modules/@github/spark": { - "resolved": "../spark-tools", + "resolved": "packages/spark-tools", "link": true }, "node_modules/@heroicons/react": { @@ -763,9 +770,8 @@ "version": "0.3.6", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "devOptional": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" @@ -2469,6 +2475,193 @@ "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==", "license": "MIT" }, + "node_modules/@rollup/plugin-commonjs": { + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.3.tgz", + "integrity": "sha512-pyltgilam1QPdn+Zd9gaCfOLcnjMEJ9gV+bTw6/r73INdvzf1ah9zLIJBm+kW7R6IUFIQ1YO+VqZtYxZNWFPEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "fdir": "^6.2.0", + "is-reference": "1.2.1", + "magic-string": "^0.30.3", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=16.0.0 || 14 >= 14.17" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/fdir": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@rollup/plugin-json": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", + "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.1.tgz", + "integrity": "sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-terser": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", + "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "serialize-javascript": "^6.0.1", + "smob": "^1.0.0", + "terser": "^5.17.4" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-typescript": { + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-12.1.2.tgz", + "integrity": "sha512-cdtSp154H5sv637uMr1a8OTWB0L1SWDSm1rDGiyfcGcvQ6cuTs4MDk2BVEBGysUWago4OJN4EQZqOTl/QY3Jgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.14.0||^3.0.0||^4.0.0", + "tslib": "*", + "typescript": ">=3.7.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + }, + "tslib": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@rollup/rollup-linux-x64-gnu": { "version": "4.35.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.35.0.tgz", @@ -2495,6 +2688,19 @@ "linux" ] }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@standard-schema/utils": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz", @@ -2853,6 +3059,13 @@ "@types/react": "^19.0.0" } }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true, + "license": "MIT" + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.26.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.26.1.tgz", @@ -3260,9 +3473,8 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "license": "MIT", - "optional": true, - "peer": true + "devOptional": true, + "license": "MIT" }, "node_modules/callsites": { "version": "3.1.0", @@ -3378,6 +3590,13 @@ "node": ">= 10" } }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, + "license": "MIT" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -3855,6 +4074,37 @@ "dev": true, "license": "MIT" }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-8.0.0.tgz", + "integrity": "sha512-R6ep6JJ+eOBZsBr9esiNN1gxFbZE4Q2cULkUSFumGYecAiS6qodDvcPx/sFuWHMNul7DWmrtoEOpYSm7o6tbSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "globby": "^14.0.2", + "is-glob": "^4.0.3", + "is-path-cwd": "^3.0.0", + "is-path-inside": "^4.0.0", + "p-map": "^7.0.2", + "slash": "^5.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/delaunator": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", @@ -4168,6 +4418,13 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -4361,6 +4618,16 @@ } } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -4406,6 +4673,37 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globby": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", + "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.3", + "path-type": "^6.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/ignore": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz", + "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -4429,6 +4727,19 @@ "node": ">=8" } }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -4497,6 +4808,22 @@ "node": ">=12" } }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -4520,6 +4847,13 @@ "node": ">=0.10.0" } }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true, + "license": "MIT" + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -4530,6 +4864,42 @@ "node": ">=0.12.0" } }, + "node_modules/is-path-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-3.0.0.tgz", + "integrity": "sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-path-inside": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", + "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -4764,6 +5134,16 @@ "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, "node_modules/marked": { "version": "15.0.7", "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.7.tgz", @@ -4957,6 +5337,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-map": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", + "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -4990,6 +5383,26 @@ "node": ">=8" } }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", + "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -5095,6 +5508,16 @@ ], "license": "MIT" }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, "node_modules/react": { "version": "19.0.0", "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", @@ -5310,6 +5733,27 @@ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", "license": "MIT" }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -5375,6 +5819,22 @@ "fsevents": "~2.3.2" } }, + "node_modules/rollup-plugin-delete": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-delete/-/rollup-plugin-delete-3.0.1.tgz", + "integrity": "sha512-4tyijMQFwSDLA04DAHwbI2TrRwPiRwAqBQ17dxyr9CgHeHXLdgk8IDVWHFWPrL3UZJWrAmHohQ2MgmVghQDrlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "del": "^8.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "rollup": "*" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -5405,6 +5865,27 @@ "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", "license": "BSD-3-Clause" }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -5427,6 +5908,16 @@ "semver": "bin/semver.js" } }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -5450,6 +5941,26 @@ "node": ">=8" } }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/smob": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.5.0.tgz", + "integrity": "sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==", + "dev": true, + "license": "MIT" + }, "node_modules/sonner": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/sonner/-/sonner-2.0.1.tgz", @@ -5464,9 +5975,8 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "devOptional": true, "license": "BSD-3-Clause", - "optional": true, - "peer": true, "engines": { "node": ">=0.10.0" } @@ -5484,14 +5994,21 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "devOptional": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, + "node_modules/spark-agent": { + "resolved": "packages/spark-agent", + "link": true + }, + "node_modules/spark-designer": { + "resolved": "packages/spark-designer", + "link": true + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -5518,6 +6035,19 @@ "node": ">=8" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/tailwind-merge": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.0.2.tgz", @@ -5547,9 +6077,8 @@ "version": "5.39.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", + "devOptional": true, "license": "BSD-2-Clause", - "optional": true, - "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -5567,9 +6096,8 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT", - "optional": true, - "peer": true + "devOptional": true, + "license": "MIT" }, "node_modules/three": { "version": "0.175.0", @@ -5683,6 +6211,16 @@ "typescript": ">=4.8.4 <5.9.0" } }, + "node_modules/ulid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ulid/-/ulid-3.0.0.tgz", + "integrity": "sha512-yvZYdXInnJve6LdlPIuYmURdS2NP41ZoF4QW7SXwbUKYt53+0eDAySO+rGSvM2O/ciuB/G+8N7GQrZ1mCJpuqw==", + "dev": true, + "license": "MIT", + "bin": { + "ulid": "dist/cli.js" + } + }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", @@ -5691,6 +6229,19 @@ "optional": true, "peer": true }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/universal-github-app-jwt": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-2.2.0.tgz", @@ -5975,6 +6526,35 @@ "url": "https://github.com/sponsors/colinhacks" } }, + "packages/spark-agent": { + "dev": true + }, + "packages/spark-designer": { + "dev": true + }, + "packages/spark-tools": { + "name": "@github/spark", + "version": "0.0.1", + "license": "ISC", + "devDependencies": { + "@rollup/plugin-commonjs": "^28.0.3", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^16.0.1", + "@rollup/plugin-terser": "^0.4.4", + "@rollup/plugin-typescript": "^12.1.2", + "rollup-plugin-delete": "^3.0.1", + "spark-agent": "file:../spark-agent", + "spark-designer": "file:../spark-designer", + "tslib": "^2.8.1", + "ulid": "^3.0.0", + "vite": "^6.2.0", + "zod": "^3.24.2" + }, + "peerDependencies": { + "react": "^19.0.0", + "vite": "^6.2.0" + } + }, "spark-tools": { "name": "@github/spark", "version": "0.0.1", diff --git a/package.json b/package.json index 666ac7c..eb049d8 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "preview": "vite preview" }, "dependencies": { - "@github/spark": "0.0.1", + "@github/spark": "^0.0.1", "@heroicons/react": "^2.2.0", "@hookform/resolvers": "^4.1.3", "@octokit/core": "^6.1.4", From 77fbf65d7b01495f81d230a0eb1cae252f67dbcb Mon Sep 17 00:00:00 2001 From: Caleb Brose <5447118+cmbrose@users.noreply.github.com> Date: Thu, 8 May 2025 15:19:37 +0000 Subject: [PATCH 08/10] Fix cleaning the download dir --- .devcontainer/refreshTools.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/.devcontainer/refreshTools.sh b/.devcontainer/refreshTools.sh index 9aae3d2..3f4fc3d 100755 --- a/.devcontainer/refreshTools.sh +++ b/.devcontainer/refreshTools.sh @@ -65,6 +65,7 @@ cd /usr/local/bin/gh-spark-cli gh extension remove spark-cli >/dev/null || true gh extension install . gh alias set spark spark-cli --clobber +cd - rm -rf ./spark-sdk-dist From c486edd944cf75ff33edc54d27dce5d966ecec13 Mon Sep 17 00:00:00 2001 From: Caleb Brose <5447118+cmbrose@users.noreply.github.com> Date: Thu, 8 May 2025 15:24:51 +0000 Subject: [PATCH 09/10] Use a temp dir --- .devcontainer/refreshTools.sh | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/.devcontainer/refreshTools.sh b/.devcontainer/refreshTools.sh index 3f4fc3d..1479a6e 100755 --- a/.devcontainer/refreshTools.sh +++ b/.devcontainer/refreshTools.sh @@ -4,6 +4,8 @@ set -e echo "Checking for updates to workbench-template from GitHub" +WORKSPACE_DIR="/workspaces/spark-template" + MARKER_DIR="/var/lib/spark/.versions" RELEASE_MARKER_FILE="$MARKER_DIR/release" TOOLS_MARKER_FILE="$MARKER_DIR/tools" @@ -22,7 +24,8 @@ fi echo "New version found. Downloading latest release." -cd /workspaces/spark-template +TEMP_DIR=$(mktemp -d) +cd $TEMP_DIR DOWNLOAD_URL=$(echo "$LATEST_RELEASE" | jq -r '.assets[0].url') curl -L -o dist.zip -H "Authorization: token $TEMPLATE_PAT" -H "Accept: application/octet-stream" "$DOWNLOAD_URL" @@ -46,12 +49,14 @@ if [ -f "$TOOLS_MARKER_FILE" ] && [ "$(cat "$TOOLS_MARKER_FILE")" == "$(cat ./sp else tar -xzf ./spark-sdk-dist/spark-tools.tgz - sudo rm -rf ./packages/spark-tools - mkdir -p ./packages/spark-tools - sudo mv ./package/* ./packages/spark-tools + sudo rm -rf $WORKSPACE_DIR/packages/spark-tools + mkdir -p $WORKSPACE_DIR/packages/spark-tools + sudo mv ./package/* $WORKSPACE_DIR/packages/spark-tools sudo rmdir ./package + cd $WORKSPACE_DIR npm i -f + cd - >/dev/null sudo cp ./spark-sdk-dist/spark-tools-version "$TOOLS_MARKER_FILE" fi @@ -65,9 +70,9 @@ cd /usr/local/bin/gh-spark-cli gh extension remove spark-cli >/dev/null || true gh extension install . gh alias set spark spark-cli --clobber -cd - +cd - >/dev/null -rm -rf ./spark-sdk-dist +rm -rf $TEMP_DIR # Update marker file with latest release ID echo "$RELEASE_ID" | sudo tee "$RELEASE_MARKER_FILE" > /dev/null From 49362525c46e85409ec9e3f6d9b07996c4bc79b2 Mon Sep 17 00:00:00 2001 From: Caleb Brose <5447118+cmbrose@users.noreply.github.com> Date: Thu, 8 May 2025 16:28:47 +0000 Subject: [PATCH 10/10] Optimize vite on create --- .devcontainer/onCreate.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.devcontainer/onCreate.sh b/.devcontainer/onCreate.sh index 9457e45..c76d125 100755 --- a/.devcontainer/onCreate.sh +++ b/.devcontainer/onCreate.sh @@ -23,3 +23,6 @@ sudo rm -rf "$azcopy_dir" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" "$SCRIPT_DIR/refreshTools.sh" + +echo "Pre-starting the server and generating the optimized assets" +npm run optimize --override