git: be1ff7c68956 - main - misc/llama-cpp: Fix WebUI fetch
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 08 Jun 2026 06:28:38 UTC
The branch main has been updated by yuri:
URL: https://cgit.FreeBSD.org/ports/commit/?id=be1ff7c68956b1f5fa9c208e45e00bccc0aad797
commit be1ff7c68956b1f5fa9c208e45e00bccc0aad797
Author: Yuri Victorovich <yuri@FreeBSD.org>
AuthorDate: 2026-06-08 06:09:34 +0000
Commit: Yuri Victorovich <yuri@FreeBSD.org>
CommitDate: 2026-06-08 06:28:13 +0000
misc/llama-cpp: Fix WebUI fetch
PR: 295906
Reported by: Eric Camachat <eric@camachat.org>
---
misc/llama-cpp/Makefile | 48 +-
misc/llama-cpp/distinfo | 16 +-
misc/llama-cpp/files/fetch-ui.sh | 91 +
misc/llama-cpp/files/package-lock.json | 10704 +++++++++++++++++++++++++++++++
4 files changed, 10834 insertions(+), 25 deletions(-)
diff --git a/misc/llama-cpp/Makefile b/misc/llama-cpp/Makefile
index 097812ae97ae..13a6e14455fd 100644
--- a/misc/llama-cpp/Makefile
+++ b/misc/llama-cpp/Makefile
@@ -1,13 +1,9 @@
PORTNAME= llama-cpp
DISTVERSIONPREFIX= b
DISTVERSION= 9426
+PORTREVISION= 1
CATEGORIES= misc # machine-learning
-MASTER_SITES= https://huggingface.co/buckets/ggml-org/llama-ui/resolve/${DISTVERSIONPREFIX}${DISTVERSION}/:webui
-DISTFILES= index.html:webui \
- bundle.js:webui \
- bundle.css:webui \
- loading.html:webui
-DIST_SUBDIR= ${PORTNAME}
+DIST_SUBDIR= ${PORTNAME}-${DISTVERSION}
EXTRACT_ONLY= ${DISTNAME}${EXTRACT_SUFX}
MAINTAINER= yuri@FreeBSD.org
@@ -17,12 +13,16 @@ WWW= https://github.com/ggerganov/llama.cpp
LICENSE= MIT
LICENSE_FILE= ${WRKSRC}/LICENSE
-BROKEN_armv7= clang crashes, see https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=278810
-BROKEN_i386= compilation fails, see https://github.com/ggerganov/llama.cpp/issues/9545
+USES= cmake:testing compiler:c++11-lang python:run shebangfix ssl
LIB_DEPENDS= libggml-base.so:misc/ggml
-USES= cmake:testing compiler:c++11-lang python:run shebangfix ssl
+BUILD_DEPENDS= npm:www/npm
+FETCH_DEPENDS= npm:www/npm \
+ ${LOCALBASE}/share/certs/ca-root-nss.crt:security/ca_root_nss
+
+BROKEN_armv7= clang crashes, see https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=278810
+BROKEN_i386= compilation fails, see https://github.com/ggerganov/llama.cpp/issues/9545
USE_LDCONFIG= yes
@@ -30,6 +30,8 @@ USE_GITHUB= yes
GH_ACCOUNT= ggerganov
GH_PROJECT= llama.cpp
+DISTFILES+= llama-ui-npm-${DISTVERSION}${EXTRACT_SUFX}
+
SHEBANG_GLOB= *.py
CMAKE_ON= BUILD_SHARED_LIBS \
@@ -54,12 +56,30 @@ EXAMPLES_CMAKE_BOOL= LLAMA_BUILD_EXAMPLES
BINARY_ALIAS= git=false \
python=${PYTHON_CMD} # for tests
+do-fetch:
+ # Fetch the main GH source tarball
+ @if ! [ -f ${DISTDIR}/${DIST_SUBDIR}/${DISTNAME}${EXTRACT_SUFX} ]; then \
+ ${MKDIR} ${DISTDIR}/${DIST_SUBDIR}; \
+ cd ${DISTDIR}/${DIST_SUBDIR} && \
+ ${SETENV} ${FETCH_ENV} ${FETCH_CMD} ${FETCH_BEFORE_ARGS} \
+ https://codeload.github.com/${GH_ACCOUNT}/${GH_PROJECT}/tar.gz/${DISTVERSIONPREFIX}${DISTVERSION}?dummy=/${DISTNAME}${EXTRACT_SUFX} \
+ ${FETCH_AFTER_ARGS}; \
+ fi
+ # Download npm dependencies for the WebUI
+ @if ! [ -f ${DISTDIR}/${DIST_SUBDIR}/llama-ui-npm-${DISTVERSION}${EXTRACT_SUFX} ]; then \
+ ${SETENV} TMPDIR=${WRKDIR} LOCALBASE=${LOCALBASE} \
+ ${SH} ${FILESDIR}/fetch-ui.sh \
+ ${DISTVERSION} \
+ ${DISTDIR}/${DIST_SUBDIR} \
+ ${DISTNAME}${EXTRACT_SUFX} \
+ ${FILESDIR}; \
+ fi
+
post-extract:
- @${MKDIR} ${WRKSRC}/build/tools/ui/dist
- ${CP} ${DISTDIR}/${DIST_SUBDIR}/index.html ${WRKSRC}/build/tools/ui/dist/index.html
- ${CP} ${DISTDIR}/${DIST_SUBDIR}/bundle.js ${WRKSRC}/build/tools/ui/dist/bundle.js
- ${CP} ${DISTDIR}/${DIST_SUBDIR}/bundle.css ${WRKSRC}/build/tools/ui/dist/bundle.css
- ${CP} ${DISTDIR}/${DIST_SUBDIR}/loading.html ${WRKSRC}/build/tools/ui/dist/loading.html
+ @${MKDIR} ${WRKSRC}/tools/ui/node_modules
+ @${TAR} -xzf ${DISTDIR}/${DIST_SUBDIR}/llama-ui-npm-${DISTVERSION}${EXTRACT_SUFX} -C ${WRKSRC}/tools/ui/node_modules --strip-components 1
+ @cd ${WRKSRC}/tools/ui && \
+ ${SETENV} HOME=${WRKSRC} npm run build
post-patch: # set version in the code
@${REINPLACE_CMD} \
diff --git a/misc/llama-cpp/distinfo b/misc/llama-cpp/distinfo
index 72528e81c496..358c8a9445a8 100644
--- a/misc/llama-cpp/distinfo
+++ b/misc/llama-cpp/distinfo
@@ -1,11 +1,5 @@
-TIMESTAMP = 1780119718
-SHA256 (llama-cpp/index.html) = 3ea56dac69456ecc2f31ad84d9e912155ae37f247a248d7f28107a22d6bc4af3
-SIZE (llama-cpp/index.html) = 6917
-SHA256 (llama-cpp/bundle.js) = 77f305c6b5ed882dcc49eb100b3037f1041791f72184a68e24e8f730d29c4c3a
-SIZE (llama-cpp/bundle.js) = 5274578
-SHA256 (llama-cpp/bundle.css) = 4eb1d456ea3265351c01b5aa3d7706d215d1e4cefc2fb70de58f7d703d36c17b
-SIZE (llama-cpp/bundle.css) = 505476
-SHA256 (llama-cpp/loading.html) = 2500057e39ab81518d16b28f5d019f6107b58abb47b2a30d33862d9e7b703cdc
-SIZE (llama-cpp/loading.html) = 268
-SHA256 (llama-cpp/ggerganov-llama.cpp-b9426_GH0.tar.gz) = a96658491547aa923980dbffc25179b0f1164ad3dab40126673414ebf947238c
-SIZE (llama-cpp/ggerganov-llama.cpp-b9426_GH0.tar.gz) = 33982934
+TIMESTAMP = 1780888522
+SHA256 (llama-cpp-9426/llama-ui-npm-9426.tar.gz) = d472fb606a4c2cfd365ffacba2e3ae49316a512199d09c41c9970aa395ea87f7
+SIZE (llama-cpp-9426/llama-ui-npm-9426.tar.gz) = 68283814
+SHA256 (llama-cpp-9426/ggerganov-llama.cpp-b9426_GH0.tar.gz) = a96658491547aa923980dbffc25179b0f1164ad3dab40126673414ebf947238c
+SIZE (llama-cpp-9426/ggerganov-llama.cpp-b9426_GH0.tar.gz) = 33982934
diff --git a/misc/llama-cpp/files/fetch-ui.sh b/misc/llama-cpp/files/fetch-ui.sh
new file mode 100644
index 000000000000..8fd9cfe4e76a
--- /dev/null
+++ b/misc/llama-cpp/files/fetch-ui.sh
@@ -0,0 +1,91 @@
+#!/bin/sh
+#
+# MAINTAINER: yuri@FreeBSD.org
+#
+# This script is used during the fetch phase of the llama-cpp port.
+# It downloads npm dependencies for the embedded WebUI using the port's
+# committed package-lock.json and packages node_modules into a tarball.
+# The actual build (npm run build) happens during the build phase.
+#
+# Args:
+# $1 - DISTVERSION (e.g., 9426)
+# $2 - DISTDIR/DIST_SUBDIR path where distfiles are stored
+# $3 - GH tarball filename (e.g., ggerganov-llama.cpp-b9426_GH0.tar.gz)
+# $4 - FILESDIR path (e.g., /usr/ports/misc/llama-cpp/files)
+
+set -eu -o pipefail
+
+DISTVERSION="$1"
+DIST_SUBDIR_PATH="$2"
+GH_TARBALL_NAME="$3"
+FILESDIR="$4"
+
+LOCALBASE="${LOCALBASE:-/usr/local}"
+
+if [ -z "${TMPDIR:-}" ]; then
+ TMPDIR="/tmp"
+fi
+
+BUILD_DIR="${TMPDIR}/llama-ui-npm-$$"
+GH_TARBALL="${DIST_SUBDIR_PATH}/${GH_TARBALL_NAME}"
+OUTPUT="${DIST_SUBDIR_PATH}/llama-ui-npm-${DISTVERSION}.tar.gz"
+PORT_PACKAGE_LOCK="${FILESDIR}/package-lock.json"
+
+if [ -f "${OUTPUT}" ]; then
+ echo "INFO: ${OUTPUT} already exists, skipping"
+ exit 0
+fi
+
+if [ ! -f "${GH_TARBALL}" ]; then
+ echo "ERROR: GH tarball ${GH_TARBALL} not found"
+ exit 1
+fi
+
+if [ ! -f "${PORT_PACKAGE_LOCK}" ]; then
+ echo "ERROR: package-lock.json not found at ${PORT_PACKAGE_LOCK}"
+ echo " please ensure the file exists in the port's files/ directory"
+ exit 1
+fi
+
+if [ ! -f "${LOCALBASE}/share/certs/ca-root-nss.crt" ]; then
+ echo "ERROR: CA certificate file ${LOCALBASE}/share/certs/ca-root-nss.crt is missing"
+ echo " please install the 'ca_root_nss' package"
+ exit 1
+fi
+
+echo "INFO: Downloading npm dependencies for llama-ui"
+
+rm -rf "${BUILD_DIR}"
+mkdir -p "${BUILD_DIR}"
+
+# Extract the main source tarball
+tar xzf "${GH_TARBALL}" -C "${BUILD_DIR}"
+SRC_DIR="${BUILD_DIR}/llama.cpp-b${DISTVERSION}"
+
+if [ ! -d "${SRC_DIR}/tools/ui" ]; then
+ echo "ERROR: tools/ui directory not found in extracted source"
+ exit 1
+fi
+
+# Install npm dependencies using the port's committed package-lock.json
+cd "${SRC_DIR}/tools/ui"
+
+echo "INFO: using package-lock.json from ${PORT_PACKAGE_LOCK}"
+cp "${PORT_PACKAGE_LOCK}" package-lock.json
+
+HOME="${TMPDIR}" \
+NODE_EXTRA_CA_CERTS="${LOCALBASE}/share/certs/ca-root-nss.crt" \
+npm ci --ignore-scripts
+
+echo "INFO: npm ci succeeded"
+
+# Package node_modules into a reproducible tarball
+cd "${SRC_DIR}/tools/ui"
+find node_modules -exec touch -h -d 1970-01-01T00:00:00Z {} +
+find node_modules -print0 | LC_ALL=C sort -z | \
+ tar czf "${OUTPUT}" --format=bsdtar --gid 0 --uid 0 --options gzip:!timestamp --no-recursion --null -T -
+
+# Cleanup
+rm -rf "${BUILD_DIR}"
+
+echo "INFO: created ${OUTPUT}"
diff --git a/misc/llama-cpp/files/package-lock.json b/misc/llama-cpp/files/package-lock.json
new file mode 100644
index 000000000000..4d012c819900
--- /dev/null
+++ b/misc/llama-cpp/files/package-lock.json
@@ -0,0 +1,10704 @@
+{
+ "name": "llama-ui",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "llama-ui",
+ "version": "1.0.0",
+ "dependencies": {
+ "@modelcontextprotocol/sdk": "^1.25.1",
+ "highlight.js": "^11.11.1",
+ "mode-watcher": "^1.1.0",
+ "pdfjs-dist": "^5.4.54",
+ "rehype-highlight": "^7.0.2",
+ "rehype-stringify": "^10.0.1",
+ "remark": "^15.0.1",
+ "remark-breaks": "^4.0.0",
+ "remark-gfm": "^4.0.1",
+ "remark-html": "^16.0.1",
+ "remark-rehype": "^11.1.2",
+ "svelte-sonner": "^1.0.5",
+ "unist-util-visit": "^5.0.0",
+ "zod": "^4.2.1"
+ },
+ "devDependencies": {
+ "@chromatic-com/storybook": "^5.0.0",
+ "@eslint/compat": "^1.2.5",
+ "@eslint/js": "^9.18.0",
+ "@internationalized/date": "^3.10.1",
+ "@lucide/svelte": "^0.515.0",
+ "@playwright/test": "^1.49.1",
+ "@storybook/addon-a11y": "^10.2.4",
+ "@storybook/addon-docs": "^10.2.4",
+ "@storybook/addon-svelte-csf": "^5.0.10",
+ "@storybook/addon-vitest": "^10.2.4",
+ "@storybook/sveltekit": "^10.2.4",
+ "@sveltejs/adapter-static": "^3.0.10",
+ "@sveltejs/kit": "^2.48.4",
+ "@sveltejs/vite-plugin-svelte": "^6.2.1",
+ "@tailwindcss/forms": "^0.5.9",
+ "@tailwindcss/typography": "^0.5.15",
+ "@tailwindcss/vite": "^4.0.0",
+ "@types/node": "^24",
+ "@vitest/browser": "^3.2.3",
+ "@vitest/coverage-v8": "^3.2.3",
+ "bits-ui": "^2.14.4",
+ "clsx": "^2.1.1",
+ "dexie": "^4.0.11",
+ "eslint": "^9.18.0",
+ "eslint-config-prettier": "^10.0.1",
+ "eslint-plugin-storybook": "^10.2.4",
+ "eslint-plugin-svelte": "^3.0.0",
+ "globals": "^16.0.0",
+ "http-server": "^14.1.1",
+ "mdast": "^3.0.0",
+ "mdsvex": "^0.12.3",
+ "playwright": "^1.56.1",
+ "prettier": "^3.4.2",
+ "prettier-plugin-svelte": "^3.3.3",
+ "prettier-plugin-tailwindcss": "^0.6.11",
+ "rehype-katex": "^7.0.1",
+ "remark-math": "^6.0.0",
+ "sass": "^1.93.3",
+ "storybook": "^10.2.4",
+ "svelte": "^5.38.2",
+ "svelte-check": "^4.0.0",
+ "tailwind-merge": "^3.3.1",
+ "tailwind-variants": "^3.2.2",
+ "tailwindcss": "^4.0.0",
+ "tw-animate-css": "^1.3.5",
+ "typescript": "^5.0.0",
+ "typescript-eslint": "^8.20.0",
+ "unified": "^11.0.5",
+ "uuid": "^13.0.0",
+ "vite": "^7.2.2",
+ "vite-plugin-devtools-json": "^0.2.0",
+ "vitest": "^3.2.3",
+ "vitest-browser-svelte": "^0.1.0"
+ }
+ },
+ "node_modules/@adobe/css-tools": {
+ "version": "4.4.4",
+ "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz",
+ "integrity": "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@ampproject/remapping": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
+ "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
+ "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.27.1",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+ "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz",
+ "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.29.0"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.27.6",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz",
+ "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
+ "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.28.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@bcoe/v8-coverage": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz",
+ "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@chromatic-com/storybook": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@chromatic-com/storybook/-/storybook-5.0.0.tgz",
+ "integrity": "sha512-8wUsqL8kg6R5ue8XNE7Jv/iD1SuE4+6EXMIGIuE+T2loBITEACLfC3V8W44NJviCLusZRMWbzICddz0nU0bFaw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@neoconfetti/react": "^1.0.0",
+ "chromatic": "^13.3.4",
+ "filesize": "^10.0.12",
+ "jsonfile": "^6.1.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=20.0.0",
+ "yarn": ">=1.22.18"
+ },
+ "peerDependencies": {
+ "storybook": "^0.0.0-0 || ^10.1.0 || ^10.1.0-0 || ^10.2.0-0 || ^10.3.0-0"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz",
+ "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz",
+ "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz",
+ "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz",
+ "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz",
+ "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz",
+ "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz",
+ "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz",
+ "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz",
+ "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz",
+ "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz",
+ "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz",
+ "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz",
+ "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz",
+ "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz",
+ "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz",
+ "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz",
+ "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz",
+ "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz",
+ "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz",
+ "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz",
+ "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz",
+ "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz",
+ "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz",
+ "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz",
+ "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz",
+ "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz",
+ "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eslint-visitor-keys": "^3.4.3"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.12.2",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
+ "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/compat": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.4.1.tgz",
+ "integrity": "sha512-cfO82V9zxxGBxcQDr1lfaYB7wykTa0b00mGa36FrJl7iTFd0Z2cHfEYuxcBRP/iNijCsWsEkA+jzT8hGYmv33w==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/core": "^0.17.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "peerDependencies": {
+ "eslint": "^8.40 || 9"
+ },
+ "peerDependenciesMeta": {
+ "eslint": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@eslint/config-array": {
+ "version": "0.21.1",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz",
+ "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/object-schema": "^2.1.7",
+ "debug": "^4.3.1",
+ "minimatch": "^3.1.2"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/config-helpers": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz",
+ "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/core": "^0.17.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/core": {
+ "version": "0.17.0",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz",
+ "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@types/json-schema": "^7.0.15"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz",
*** 9947 LINES SKIPPED ***