Compare commits

...

2 Commits

Author SHA1 Message Date
Robin Windey afd6b9fa3f tmp 2026-01-28 19:27:38 +00:00
Robin Windey 742e08fc80 tmp 2025-12-25 20:19:52 +00:00
10 changed files with 376 additions and 111 deletions
+7 -2
View File
@@ -77,11 +77,16 @@ RUN (getent passwd 1000 && userdel -r $(getent passwd 1000 | cut -d: -f1)) || tr
(getent group 1000 && groupdel $(getent group 1000 | cut -d: -f1)) || true && \
groupadd -g 1000 ${APACHE_RUN_GROUP} && \
useradd -u 1000 -g 1000 -ms /bin/bash ${APACHE_RUN_USER} && \
adduser ${APACHE_RUN_USER} sudo && \
echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers && \
adduser ${APACHE_RUN_USER} sudo && \
echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers && \
sed -ri "s/^export APACHE_RUN_USER=.*$/export APACHE_RUN_USER=${APACHE_RUN_USER}/" "/etc/apache2/envvars" && \
sed -ri "s/^export APACHE_RUN_GROUP=.*$/export APACHE_RUN_GROUP=${APACHE_RUN_GROUP}/" "/etc/apache2/envvars"
# Setup HaRP proxy in Apache
COPY apache.conf /etc/apache2/sites-enabled/000-default.conf
RUN a2enmod proxy proxy_http headers && \
service apache2 restart
USER devcontainer
# NVM
+11
View File
@@ -74,3 +74,14 @@ The Apache webserver is already configured to automatically try to connect to a
listening on port `9003`. To start the VSCode debugger process, use the delivered debug profile `Listen for XDebug`.
After you started the VSCode debugger, just navigate to the appropriate Nextcloud URL to get your
debug hits.
## Developing with `app_api` and HaRP
The Devcontainer already comes with [HaRP](https://github.com/nextcloud/HaRP) preconfigured so that you can directly
start developing the [`app_api`](https://github.com/nextcloud/app_api) app. The only thing you need to do is execute `./.devcontainer/scripts/setup-app-api-dev.sh` once after the Devcontainer started.
This script will:
1. Clone the `app_api` repository into the `/var/www/html/apps` folder of the Devcontainer instance.
2. Enable the app via CLI (`php occ app:enable app_api`).
3. Register the HaRP daemon which fits to the Devcontainer configuration.
+39
View File
@@ -0,0 +1,39 @@
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
# Proxy HaRP
<Location /exapps/>
ProxyPreserveHost On
ProxyPass http://appapi-harp:8780/exapps/ nocanon
ProxyPassReverse http://appapi-harp:8780/exapps/
RequestHeader set X-Real-IP expr=%{REMOTE_ADDR}
RequestHeader set X-Forwarded-For expr=%{REMOTE_ADDR}
RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
</Location>
</VirtualHost>
+4 -2
View File
@@ -12,9 +12,11 @@ $CONFIG = [
'mail_smtpmode' => 'smtp',
'mail_sendmailmode' => 'smtp',
'mail_domain' => 'example.com',
'mail_smtphost' => 'localhost',
'mail_smtphost' => 'mailhog',
'mail_smtpport' => '1025',
'memcache.local' => '\OC\Memcache\APCu',
'trusted_domains' => ['nextclouddev'],
'loglevel' => 1,
];
if(is_string($codespaceName) && !empty($codespaceName) && is_string($codespaceDomain) && !empty($codespaceDomain)) {
@@ -22,5 +24,5 @@ if(is_string($codespaceName) && !empty($codespaceName) && is_string($codespaceDo
$CONFIG['overwritehost'] = $host;
$CONFIG['overwrite.cli.url'] = 'https://' . $host;
$CONFIG['overwriteprotocol'] = 'https';
$CONFIG['trusted_domains'] = [ $host ];
$CONFIG['trusted_domains'][] = $host;
}
+2 -3
View File
@@ -12,11 +12,10 @@
"customizations": {
"vscode": {
"extensions": [
"felixfbecker.php-debug",
"felixfbecker.php-intellisense",
"ms-azuretools.vscode-docker",
"xdebug.php-debug",
"donjayamanne.githistory"
"donjayamanne.githistory",
"bmewburn.vscode-intelephense-client"
],
"settings": {
"php.suggest.basic": false
+39 -5
View File
@@ -3,6 +3,7 @@
services:
nextclouddev:
build: .
container_name: nextclouddev
volumes:
- .:/workspace:cached
- /var/run/docker.sock:/var/run/docker-host.sock
@@ -10,8 +11,8 @@ services:
command: /var/www/html/.devcontainer/entrypoint.sh
ports:
- 80:80
- 8080:8080
- 8025:8025
networks:
- nextclouddev-network
db:
image: postgres
@@ -21,17 +22,50 @@ services:
PGDATA: /data/postgres
volumes:
- db:/data/postgres
network_mode: service:nextclouddev
ports:
- 5432:5432
networks:
- nextclouddev-network
adminer:
image: adminer
restart: always
network_mode: service:nextclouddev
ports:
- 8080:8080
networks:
- nextclouddev-network
mailhog:
image: mailhog/mailhog
restart: always
network_mode: service:nextclouddev
ports:
- 8025:8025
networks:
- nextclouddev-network
appapi-harp:
image: ghcr.io/nextcloud/nextcloud-appapi-harp:release
container_name: appapi-harp
restart: always
environment:
- HP_SHARED_KEY=some_very_secure_password
- NC_INSTANCE_URL=http://nextclouddev
- HP_BLACKLIST_COUNT=10000
- HP_BLACKLIST_WINDOW=1
- HP_LOG_LEVEL=DEBUG
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- certs:/certs
ports:
- 8780:8780
- 8782:8782
networks:
- nextclouddev-network
volumes:
db:
certs:
networks:
nextclouddev-network:
name: nextclouddev-network
+23
View File
@@ -0,0 +1,23 @@
#!/bin/bash
# Clone sources
git clone https://github.com/nextcloud/app_api.git /var/www/html/apps/app_api
# Enable the app
php /var/www/html/occ app:enable app_api
# Register a default HaRP daemon
echo "Registering default HaRP daemon"
php occ app_api:daemon:register \
--set-default \
--net nextclouddev-network \
--harp \
--harp_frp_address "appapi-harp:8782" \
--harp_shared_key "some_very_secure_password" \
--harp_docker_socket_port 24000 \
"harp_proxy_docker" \
"HaRP Proxy (Docker)" \
"docker-install" \
"http" \
"appapi-harp:8780" \
"http://nextclouddev"
+14 -1
View File
@@ -22,7 +22,7 @@ if [[ ! $(sudo -u ${APACHE_RUN_USER} php occ status) =~ installed:[[:space:]]*tr
--verbose \
--database=pgsql \
--database-name=postgres \
--database-host=127.0.0.1 \
--database-host=db \
--database-port=5432 \
--database-user=postgres \
--database-pass=postgres \
@@ -30,4 +30,17 @@ if [[ ! $(sudo -u ${APACHE_RUN_USER} php occ status) =~ installed:[[:space:]]*tr
--admin-pass admin
fi
# Query Docker daemon API via unix socket and write DOCKER_API_VERSION to .bashrc for CLI use
if [ -S /var/run/docker.sock ]; then
sudo chmod 666 /var/run/docker.sock
json="$(curl --silent --unix-socket /var/run/docker.sock http://localhost/version || true)"
api="$(printf '%s' "$json" | php -r '$d=json_decode(stream_get_contents(STDIN), true); echo isset($d["ApiVersion"])?$d["ApiVersion"]:"";')"
if [ -n "$api" ]; then
echo "export DOCKER_API_VERSION=$api" >> ~/.bashrc
echo "Wrote DOCKER_API_VERSION=$api to ~/.bashrc"
else
echo "Warning: could not determine Docker API version after ${max_retries} attempts"
fi
fi
sudo service apache2 restart
+213 -67
View File
File diff suppressed because it is too large Load Diff
+24 -31
View File
@@ -228,7 +228,6 @@
"integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@babel/code-frame": "^7.27.1",
"@babel/generator": "^7.28.3",
@@ -538,7 +537,6 @@
"integrity": "sha512-eohl3hKTiVyD1ilYdw9T0OiB4hnjef89e3dMYKz+mVKDzj+5IteTseASUsOB+EU9Tf6VNTCjDePcP6wkDGmLKQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@keyv/serialize": "^1.1.1"
}
@@ -668,7 +666,6 @@
}
],
"license": "MIT",
"peer": true,
"engines": {
"node": ">=18"
},
@@ -712,7 +709,6 @@
}
],
"license": "MIT",
"peer": true,
"engines": {
"node": ">=18"
}
@@ -2325,7 +2321,6 @@
"resolved": "https://registry.npmjs.org/@nextcloud/l10n/-/l10n-3.4.1.tgz",
"integrity": "sha512-aTFinTcKiK2gEXwLgutXekpZZ8/v/4QiC8C3QCLH5m0o+WtxsBC+fqV142ebC/rfDnzCLhY4ZtswSu8bFbZocg==",
"license": "GPL-3.0-or-later",
"peer": true,
"dependencies": {
"@nextcloud/router": "^3.0.1",
"@nextcloud/typings": "^1.9.1",
@@ -2514,7 +2509,6 @@
"resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-9.3.1.tgz",
"integrity": "sha512-zNit83SI7IPT5iT9QsYPCYNwBYvKEqzLvWKTeJemqg9MZ8JGIC3/jjENeXzDolrTN/PixHns5lOYVCejATE1ag==",
"license": "AGPL-3.0-or-later",
"peer": true,
"dependencies": {
"@ckpack/vue-color": "^1.6.0",
"@floating-ui/dom": "^1.7.4",
@@ -3418,7 +3412,6 @@
"integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"json-schema-traverse": "^1.0.0",
@@ -3598,7 +3591,6 @@
"integrity": "sha512-IeZF+8H0ns6prg4VrkhgL+yrvDXWDH2cKchrbh80ejG9dQgZWp10epHMbgRuQvgchLII/lfh6Xn3lu6+6L86Hw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.9.0",
"@typescript-eslint/types": "^8.46.1",
@@ -4009,7 +4001,6 @@
"integrity": "sha512-jCzKdm/QK0Kg4V4IK/oMlRZlY+QOcdjv89U2NgKHZk1CYTj82/RVSx1mV/0gqCVMJ/DA+Zf/S4NBWNF8GQ+eqQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@typescript-eslint/scope-manager": "8.48.0",
"@typescript-eslint/types": "8.48.0",
@@ -4460,7 +4451,6 @@
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.26.tgz",
"integrity": "sha512-egp69qDTSEZcf4bGOSsprUr4xI73wfrY5oRs6GSgXFTiHrWj4Y3X5Ydtip9QMqiCMCPVwLglB9GBxXtTadJ3mA==",
"license": "MIT",
"peer": true,
"dependencies": {
"@babel/parser": "^7.28.5",
"@vue/compiler-core": "3.5.26",
@@ -4815,7 +4805,6 @@
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"dev": true,
"license": "MIT",
"peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -5591,7 +5580,6 @@
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"baseline-browser-mapping": "^2.8.9",
"caniuse-lite": "^1.0.30001746",
@@ -6556,7 +6544,6 @@
"dev": true,
"hasInstallScript": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@cypress/request": "^3.0.9",
"@cypress/xvfb": "^1.2.4",
@@ -7259,6 +7246,7 @@
"integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"domelementtype": "^2.3.0",
"domhandler": "^5.0.2",
@@ -7274,6 +7262,7 @@
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"dev": true,
"license": "BSD-2-Clause",
"peer": true,
"engines": {
"node": ">=0.12"
},
@@ -7305,7 +7294,8 @@
"url": "https://github.com/sponsors/fb55"
}
],
"license": "BSD-2-Clause"
"license": "BSD-2-Clause",
"peer": true
},
"node_modules/domhandler": {
"version": "5.0.3",
@@ -7313,6 +7303,7 @@
"integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
"dev": true,
"license": "BSD-2-Clause",
"peer": true,
"dependencies": {
"domelementtype": "^2.3.0"
},
@@ -7338,6 +7329,7 @@
"integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
"dev": true,
"license": "BSD-2-Clause",
"peer": true,
"dependencies": {
"dom-serializer": "^2.0.0",
"domelementtype": "^2.3.0",
@@ -7524,7 +7516,6 @@
"integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"ansi-colors": "^4.1.1",
"strip-ansi": "^6.0.1"
@@ -7744,7 +7735,6 @@
"integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.8.0",
"@eslint-community/regexpp": "^4.12.1",
@@ -9389,6 +9379,7 @@
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"domelementtype": "^2.3.0",
"domhandler": "^5.0.3",
@@ -9402,6 +9393,7 @@
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"dev": true,
"license": "BSD-2-Clause",
"peer": true,
"engines": {
"node": ">=0.12"
},
@@ -12856,7 +12848,6 @@
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"nanoid": "^3.3.11",
"picocolors": "^1.1.1",
@@ -12872,6 +12863,7 @@
"integrity": "sha512-5mMeb1TgLWoRKxZ0Xh9RZDfwUUIqRrcxO2uXO+Ezl1N5lqpCiSU5Gk6+1kZediBfBHFtPCdopr2UZ2SgUsKcgQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"htmlparser2": "^8.0.0",
"js-tokens": "^9.0.0",
@@ -12887,14 +12879,16 @@
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz",
"integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==",
"dev": true,
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/postcss-media-query-parser": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz",
"integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==",
"dev": true,
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/postcss-resolve-nested-selector": {
"version": "0.1.6",
@@ -12909,6 +12903,7 @@
"integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=12.0"
},
@@ -12940,6 +12935,7 @@
}
],
"license": "MIT",
"peer": true,
"engines": {
"node": ">=12.0"
},
@@ -13739,7 +13735,6 @@
"integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@types/estree": "1.0.8"
},
@@ -13944,7 +13939,6 @@
"integrity": "sha512-uf6HoO8fy6ClsrShvMgaKUn14f2EHQLQRtpsZZLeU/Mv0Q1K5P0+x2uvH6Cub39TVVbWNSrraUhDAoFph6vh0A==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"chokidar": "^4.0.0",
"immutable": "^5.0.2",
@@ -14365,8 +14359,7 @@
"version": "1.15.6",
"resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.6.tgz",
"integrity": "sha512-aNfiuwMEpfBM/CN6LY0ibyhxPfPbyFeBTYJKCvzkJ2GkUpazIt3H+QIPAMHwqQ7tMKaHz1Qj+rJJCqljnf4p3A==",
"license": "MIT",
"peer": true
"license": "MIT"
},
"node_modules/source-map": {
"version": "0.6.1",
@@ -14904,7 +14897,6 @@
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"@csstools/css-parser-algorithms": "^3.0.5",
"@csstools/css-syntax-patches-for-csstree": "^1.0.19",
@@ -14959,6 +14951,7 @@
"integrity": "sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": "^12 || >=14"
},
@@ -14986,6 +14979,7 @@
}
],
"license": "MIT",
"peer": true,
"engines": {
"node": ">=18.12.0"
},
@@ -15047,6 +15041,7 @@
"integrity": "sha512-UJUfBFIvXfly8WKIgmqfmkGKPilKB4L5j38JfsDd+OCg2GBdU0vGUV08Uw82tsRZzd4TbsUURVVNGeOhJVF7pA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"css-tree": "^3.0.1",
"is-plain-object": "^5.0.0",
@@ -15069,14 +15064,16 @@
"resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.36.0.tgz",
"integrity": "sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==",
"dev": true,
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/stylelint-scss/node_modules/mdn-data": {
"version": "2.24.0",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.24.0.tgz",
"integrity": "sha512-i97fklrJl03tL1tdRVw0ZfLLvuDsdb6wxL+TrJ+PKkCbLrp2PCu2+OYdCKychIUm19nSM/35S6qz7pJpnXttoA==",
"dev": true,
"license": "CC0-1.0"
"license": "CC0-1.0",
"peer": true
},
"node_modules/stylelint-scss/node_modules/postcss-selector-parser": {
"version": "7.1.0",
@@ -15084,6 +15081,7 @@
"integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -15200,7 +15198,6 @@
"integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -15848,7 +15845,6 @@
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"devOptional": true,
"license": "Apache-2.0",
"peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -16216,7 +16212,6 @@
"integrity": "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"esbuild": "^0.27.0",
"fdir": "^6.5.0",
@@ -16830,7 +16825,6 @@
"integrity": "sha512-E4t7DJ9pESL6E3I8nFjPa4xGUd3PmiWDLsDztS2qXSJWfHtbQnwAWylaBvSNY48I3vr8PTqIZlyK8TE3V3CA4Q==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@vitest/expect": "4.0.16",
"@vitest/mocker": "4.0.16",
@@ -16922,7 +16916,6 @@
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.26.tgz",
"integrity": "sha512-SJ/NTccVyAoNUJmkM9KUqPcYlY+u8OVL1X5EW9RIs3ch5H2uERxyyIUI4MRxVCSOiEcupX9xNGde1tL9ZKpimA==",
"license": "MIT",
"peer": true,
"dependencies": {
"@vue/compiler-dom": "3.5.26",
"@vue/compiler-sfc": "3.5.26",