It appears that the repository has undergone several changes and renamings:
This commit is contained in:
@ -1,11 +0,0 @@
|
||||
fund=false
|
||||
audit-level=moderate
|
||||
package-lock=true
|
||||
save-exact=true
|
||||
save-prefix=
|
||||
ca[]=
|
||||
cafile=/etc/ssl/certs/ca-certificates.crt
|
||||
strict-ssl=true
|
||||
registry=https://registry.npmjs.org/
|
||||
progress=false
|
||||
loglevel=warn
|
@ -1,652 +0,0 @@
|
||||
# MYP Platform - Häufige Fehler und Lösungen
|
||||
|
||||
Dieses Dokument sammelt häufige Installations- und Konfigurationsfehler mit ihren bewährten Lösungen.
|
||||
|
||||
## 📦 Python-Paket-Installationsfehler
|
||||
|
||||
### Send2Trash Installation schlägt fehl
|
||||
|
||||
**Problem:**
|
||||
```
|
||||
ERROR: Failed building wheel for Send2Trash
|
||||
error: Microsoft Visual C++ 14.0 is required
|
||||
```
|
||||
|
||||
**Lösung:**
|
||||
- Send2Trash wurde aus requirements.txt entfernt
|
||||
- Native Alternative in `backend/utils/file_utils.py` implementiert
|
||||
- Verwendet plattformspezifische Papierkorb-APIs:
|
||||
- Windows: PowerShell + Visual Basic FileSystem
|
||||
- Linux: gio/gvfs-trash/XDG-Standard
|
||||
- macOS: osascript + Finder
|
||||
|
||||
**Code-Ersatz:**
|
||||
```python
|
||||
# Alt:
|
||||
from send2trash import send2trash
|
||||
send2trash(file_path)
|
||||
|
||||
# Neu:
|
||||
from utils.file_utils import move_to_trash
|
||||
move_to_trash(file_path)
|
||||
```
|
||||
|
||||
### Python-magic-bin Windows-Fehler
|
||||
|
||||
**Problem:**
|
||||
```
|
||||
ERROR: Could not find a version that satisfies the requirement python-magic-bin
|
||||
```
|
||||
|
||||
**Lösung:**
|
||||
- Paket ist Windows-spezifisch und wird automatisch übersprungen auf Linux
|
||||
- Setup-Skript erstellt bereinigte requirements.txt ohne problematische Pakete
|
||||
- Plattformspezifische Conditional-Installation: `; sys_platform == "win32"`
|
||||
|
||||
### RPi.GPIO auf Non-Raspberry Pi
|
||||
|
||||
**Problem:**
|
||||
```
|
||||
RuntimeError: This module can only be run on a Raspberry Pi!
|
||||
```
|
||||
|
||||
**Lösung:**
|
||||
- Conditional-Installation: `RPi.GPIO; sys_platform == "linux"`
|
||||
- Wird automatisch übersprungen wenn nicht auf Raspberry Pi
|
||||
- Fallback-Hardware-Detection in Hardware-Modulen
|
||||
|
||||
## 🔧 Systemkonfigurationsfehler
|
||||
|
||||
### Hostname-Änderung schlägt fehl
|
||||
|
||||
**Problem:**
|
||||
```
|
||||
hostnamectl: command not found
|
||||
/etc/hostname: Permission denied
|
||||
```
|
||||
|
||||
**Lösung:**
|
||||
```bash
|
||||
# Prüfe systemd-Verfügbarkeit
|
||||
if command -v hostnamectl >/dev/null 2>&1; then
|
||||
sudo hostnamectl set-hostname m040tbaraspi001
|
||||
else
|
||||
# Fallback für ältere Systeme
|
||||
echo "m040tbaraspi001" | sudo tee /etc/hostname
|
||||
sudo hostname m040tbaraspi001
|
||||
fi
|
||||
|
||||
# Hosts-Datei aktualisieren
|
||||
sudo sed -i 's/127.0.1.1.*/127.0.1.1\tm040tbaraspi001/' /etc/hosts
|
||||
```
|
||||
|
||||
### SSL-Zertifikat-Generierung schlägt fehl
|
||||
|
||||
**Problem:**
|
||||
```
|
||||
openssl: command not found
|
||||
Permission denied: /opt/myp/ssl/
|
||||
```
|
||||
|
||||
**Lösung:**
|
||||
```bash
|
||||
# OpenSSL installieren
|
||||
sudo apt update && sudo apt install -y openssl
|
||||
|
||||
# Verzeichnis mit korrekten Berechtigungen erstellen
|
||||
sudo mkdir -p /opt/myp/ssl
|
||||
sudo chown -R $USER:$USER /opt/myp/ssl
|
||||
sudo chmod 755 /opt/myp/ssl
|
||||
|
||||
# Self-signed Zertifikat generieren
|
||||
openssl req -x509 -newkey rsa:4096 -keyout /opt/myp/ssl/key.pem \
|
||||
-out /opt/myp/ssl/cert.pem -days 365 -nodes \
|
||||
-subj "/C=DE/ST=NRW/L=Duesseldorf/O=Mercedes-Benz/CN=m040tbaraspi001"
|
||||
```
|
||||
|
||||
### Systemd-Service Installation schlägt fehl
|
||||
|
||||
**Problem:**
|
||||
```
|
||||
Failed to enable unit: Unit file does not exist
|
||||
systemctl: command not found
|
||||
```
|
||||
|
||||
**Lösung:**
|
||||
```bash
|
||||
# Prüfe systemd-Verfügbarkeit
|
||||
if ! command -v systemctl >/dev/null 2>&1; then
|
||||
echo "systemd nicht verfügbar - verwende alternatives Init-System"
|
||||
# Fallback auf SysV init oder manuelle Autostart-Einrichtung
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Service-Datei kopieren und aktivieren
|
||||
sudo cp myp-*.service /etc/systemd/system/
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable myp-app.service
|
||||
sudo systemctl enable myp-kiosk.service
|
||||
```
|
||||
|
||||
## 🌐 Netzwerkkonfigurationsfehler
|
||||
|
||||
### Firewall blockiert Zugriff
|
||||
|
||||
**Problem:**
|
||||
```
|
||||
Connection refused: https://m040tbaraspi001.de040.corpintra.net:443
|
||||
curl: (7) Failed to connect
|
||||
```
|
||||
|
||||
**Lösung:**
|
||||
```bash
|
||||
# UFW-Firewall konfigurieren
|
||||
sudo ufw allow 22/tcp # SSH
|
||||
sudo ufw allow 80/tcp # HTTP
|
||||
sudo ufw allow 443/tcp # HTTPS
|
||||
sudo ufw allow 5000/tcp # Flask Development
|
||||
sudo ufw --force enable
|
||||
|
||||
# iptables direkt (falls UFW nicht verfügbar)
|
||||
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
|
||||
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
|
||||
sudo iptables-save | sudo tee /etc/iptables/rules.v4
|
||||
```
|
||||
|
||||
### DNS-Auflösung schlägt fehl
|
||||
|
||||
**Problem:**
|
||||
```
|
||||
nslookup: can't resolve 'm040tbaraspi001.de040.corpintra.net'
|
||||
ping: unknown host
|
||||
```
|
||||
|
||||
**Lösung:**
|
||||
```bash
|
||||
# Lokale hosts-Datei erweitern
|
||||
echo "127.0.0.1 m040tbaraspi001.local" | sudo tee -a /etc/hosts
|
||||
echo "127.0.0.1 m040tbaraspi001.de040.corpintra.net" | sudo tee -a /etc/hosts
|
||||
|
||||
# DNS-Server prüfen und setzen
|
||||
echo "nameserver 8.8.8.8" | sudo tee -a /etc/resolv.conf
|
||||
echo "nameserver 8.8.4.4" | sudo tee -a /etc/resolv.conf
|
||||
|
||||
# NetworkManager DNS (Ubuntu/Debian)
|
||||
sudo systemctl restart NetworkManager
|
||||
```
|
||||
|
||||
## 🖥️ Desktop- und Kiosk-Fehler
|
||||
|
||||
### Graphical Session Target Not Found
|
||||
|
||||
**Problem:**
|
||||
```
|
||||
graphical session target not found
|
||||
Unit graphical-session.target could not be found
|
||||
Failed to start myp-kiosk.service
|
||||
```
|
||||
|
||||
**Ursache**: Das `graphical-session.target` existiert nicht auf allen Raspberry Pi-Konfigurationen
|
||||
|
||||
**🚀 SCHNELLE LÖSUNG:**
|
||||
```bash
|
||||
# Super-Skript ausführen (behebt ALLES automatisch):
|
||||
cd /opt/myp
|
||||
sudo ./setup_https_only.sh
|
||||
|
||||
# Das Super-Skript erkennt und behebt automatisch:
|
||||
# ✅ Graphical session target Problem
|
||||
# ✅ Service-Konfiguration reparieren
|
||||
# ✅ Korrekte Targets verwenden
|
||||
# ✅ Headless/Desktop-System automatisch erkennen
|
||||
```
|
||||
|
||||
**🔧 Manuelle Lösung:**
|
||||
```bash
|
||||
# 1. Service-Datei anpassen
|
||||
sudo systemctl edit myp-kiosk.service --full
|
||||
|
||||
# 2. Ersetze in der [Unit]-Sektion:
|
||||
# VON: After=graphical-session.target
|
||||
# ZU: After=graphical.target
|
||||
|
||||
# 3. SystemD neu laden
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl restart myp-kiosk
|
||||
```
|
||||
|
||||
**📋 Für verschiedene Szenarien:**
|
||||
```bash
|
||||
# Headless-System (ohne Display):
|
||||
sudo systemctl disable myp-kiosk
|
||||
|
||||
# Desktop-Environment installieren:
|
||||
sudo apt install --no-install-recommends xserver-xorg xinit
|
||||
|
||||
# Graphical Target als Standard setzen:
|
||||
sudo systemctl set-default graphical.target
|
||||
|
||||
# Verfügbare Targets prüfen:
|
||||
systemctl list-unit-files --type=target | grep graphical
|
||||
```
|
||||
|
||||
### Chromium startet nicht im Kiosk-Modus
|
||||
|
||||
**Problem:**
|
||||
```
|
||||
chromium-browser: command not found
|
||||
[ERROR:gpu_init.cc] GPU initialization failed
|
||||
```
|
||||
|
||||
**Lösung:**
|
||||
```bash
|
||||
# Chromium installieren
|
||||
sudo apt update && sudo apt install -y chromium-browser
|
||||
|
||||
# GPU-Acceleration deaktivieren für Headless-Systeme
|
||||
chromium-browser --no-sandbox --disable-gpu --disable-software-rasterizer \
|
||||
--disable-background-timer-throttling --disable-renderer-backgrounding \
|
||||
--disable-backgrounding-occluded-windows --kiosk "$URL"
|
||||
|
||||
# Fallback auf andere Browser
|
||||
if ! command -v chromium-browser >/dev/null 2>&1; then
|
||||
if command -v firefox >/dev/null 2>&1; then
|
||||
firefox --kiosk "$URL"
|
||||
elif command -v google-chrome >/dev/null 2>&1; then
|
||||
google-chrome --kiosk --no-sandbox "$URL"
|
||||
fi
|
||||
fi
|
||||
```
|
||||
|
||||
### Desktop-Verknüpfung wird nicht angezeigt
|
||||
|
||||
**Problem:**
|
||||
```
|
||||
.desktop file created but not visible
|
||||
Icon not displayed
|
||||
```
|
||||
|
||||
**Lösung:**
|
||||
```bash
|
||||
# Desktop-Datei ausführbar machen
|
||||
chmod +x ~/Desktop/myp-kiosk.desktop
|
||||
|
||||
# Icon kopieren
|
||||
sudo cp backend/static/mercedes.svg /usr/share/pixmaps/myp-mercedes.svg
|
||||
sudo chmod 644 /usr/share/pixmaps/myp-mercedes.svg
|
||||
|
||||
# Desktop-Datenbank aktualisieren
|
||||
update-desktop-database ~/.local/share/applications/
|
||||
xdg-desktop-menu forceupdate
|
||||
|
||||
# Gnome: Trusted Application markieren
|
||||
dconf write /org/gnome/desktop/interface/enable-animations false
|
||||
```
|
||||
|
||||
## 📊 Datenbank- und Persistenzfehler
|
||||
|
||||
### SQLite-Datenbank Berechtigungsfehler
|
||||
|
||||
**Problem:**
|
||||
```
|
||||
sqlite3.OperationalError: attempt to write a readonly database
|
||||
PermissionError: [Errno 13] Permission denied: 'instance/myp.db'
|
||||
```
|
||||
|
||||
**Lösung:**
|
||||
```bash
|
||||
# Verzeichnis und Datei-Berechtigungen korrigieren
|
||||
sudo chown -R $USER:$USER /opt/myp/instance/
|
||||
chmod 755 /opt/myp/instance/
|
||||
chmod 644 /opt/myp/instance/*.db
|
||||
|
||||
# Backup-Verzeichnis mit Schreibrechten
|
||||
mkdir -p /opt/myp/instance/backups
|
||||
chmod 755 /opt/myp/instance/backups
|
||||
```
|
||||
|
||||
### Backup-Prozess schlägt fehl
|
||||
|
||||
**Problem:**
|
||||
```
|
||||
rsync: command not found
|
||||
tar: cannot create backup
|
||||
disk full
|
||||
```
|
||||
|
||||
**Lösung:**
|
||||
```bash
|
||||
# Notwendige Tools installieren
|
||||
sudo apt install -y rsync tar gzip
|
||||
|
||||
# Speicherplatz prüfen
|
||||
df -h /opt/myp/
|
||||
|
||||
# Alte Backups aufräumen (älter als 30 Tage)
|
||||
find /opt/myp/instance/backups -name "*.tar.gz" -mtime +30 -delete
|
||||
|
||||
# Komprimierte Backups
|
||||
tar -czf backup_$(date +%Y%m%d_%H%M%S).tar.gz instance/
|
||||
```
|
||||
|
||||
## 🔐 Sicherheits- und Authentifizierungsfehler
|
||||
|
||||
### JWT-Token-Validierung schlägt fehl
|
||||
|
||||
**Problem:**
|
||||
```
|
||||
jwt.DecodeError: Invalid token
|
||||
SECRET_KEY not set
|
||||
```
|
||||
|
||||
**Lösung:**
|
||||
```python
|
||||
# In config.py sicherstellen:
|
||||
import secrets
|
||||
SECRET_KEY = secrets.token_urlsafe(32)
|
||||
|
||||
# Oder aus Umgebungsvariable:
|
||||
SECRET_KEY = os.environ.get('SECRET_KEY') or secrets.token_urlsafe(32)
|
||||
|
||||
# Token-Expiration prüfen:
|
||||
JWT_ACCESS_TOKEN_EXPIRES = timedelta(hours=24)
|
||||
```
|
||||
|
||||
### SSL Browser-Kompatibilitätsfehler (ERR_SSL_KEY_USAGE_INCOMPATIBLE)
|
||||
|
||||
**Problem:**
|
||||
```
|
||||
ERR_SSL_KEY_USAGE_INCOMPATIBLE
|
||||
This site can't provide a secure connection
|
||||
SSL certificate key usage incompatible
|
||||
```
|
||||
|
||||
**🚀 SUPER-SKRIPT LÖSUNG (Intelligente Komplettlösung):**
|
||||
```bash
|
||||
# Das EINZIGE Super-Skript für ALLE Probleme:
|
||||
cd /opt/myp
|
||||
sudo ./setup_https_only.sh
|
||||
|
||||
# Das intelligente Super-Skript macht automatisch:
|
||||
# ✅ ERR_SSL_KEY_USAGE_INCOMPATIBLE beheben
|
||||
# ✅ Browser-kompatible SSL-Zertifikate erstellen
|
||||
# ✅ Port 5000 blockieren, nur Port 443 öffnen
|
||||
# ✅ SSL-Zertifikat-Gesundheit prüfen und erneuern
|
||||
# ✅ Alle SSL-Probleme automatisch reparieren
|
||||
# ✅ Connection refused beheben
|
||||
# ✅ Graphical session target beheben
|
||||
# ✅ Service-Dependencies reparieren
|
||||
# ✅ Port-Konflikte lösen
|
||||
# ✅ Kiosk intelligent konfigurieren
|
||||
# ✅ Firewall für maximale Sicherheit
|
||||
```
|
||||
|
||||
**Lösung:**
|
||||
|
||||
**🍓 RASPBERRY PI (Zielsystem) - PRIMÄRE LÖSUNG:**
|
||||
```bash
|
||||
# SSL-Fix auf Raspberry Pi ausführen
|
||||
ssh pi@m040tbaraspi001
|
||||
sudo chmod +x /tmp/fix_ssl_raspberry.sh
|
||||
sudo /tmp/fix_ssl_raspberry.sh
|
||||
|
||||
# Oder via Setup-Skript
|
||||
cd /opt/myp
|
||||
sudo ./setup.sh # Option [1] wählen
|
||||
```
|
||||
|
||||
**🔧 Alternative Tools:**
|
||||
```bash
|
||||
# Cross-Platform Python Tool
|
||||
cd backend
|
||||
python3 ssl_fix.py
|
||||
|
||||
# Oder manuell neue browser-kompatible Zertifikate generieren:
|
||||
cd backend/ssl
|
||||
openssl genrsa -out key.pem 2048
|
||||
|
||||
# Erstelle OpenSSL-Konfiguration mit korrekten Extensions
|
||||
cat > ssl_fix.conf << 'EOF'
|
||||
[req]
|
||||
distinguished_name = req_distinguished_name
|
||||
req_extensions = v3_req
|
||||
prompt = no
|
||||
|
||||
[req_distinguished_name]
|
||||
C = DE
|
||||
ST = Baden-Wuerttemberg
|
||||
L = Stuttgart
|
||||
O = Mercedes-Benz AG
|
||||
OU = MYP Druckerverwaltung
|
||||
CN = m040tbaraspi001
|
||||
|
||||
[v3_req]
|
||||
basicConstraints = critical, CA:FALSE
|
||||
keyUsage = critical, digitalSignature, keyEncipherment, keyAgreement
|
||||
extendedKeyUsage = critical, serverAuth, clientAuth
|
||||
subjectAltName = critical, @alt_names
|
||||
nsCertType = server
|
||||
|
||||
[alt_names]
|
||||
DNS.1 = localhost
|
||||
DNS.2 = m040tbaraspi001
|
||||
DNS.3 = m040tbaraspi001.de040.corpintra.net
|
||||
IP.1 = 127.0.0.1
|
||||
EOF
|
||||
|
||||
# Generiere browser-kompatibles Zertifikat
|
||||
openssl req -new -x509 -key key.pem -out cert.pem -days 365 \
|
||||
-config ssl_fix.conf -extensions v3_req -sha256
|
||||
|
||||
# Validiere Extensions
|
||||
openssl x509 -in cert.pem -noout -text | grep -A5 "Key Usage"
|
||||
|
||||
# Danach: Browser-Cache leeren und MYP neu starten
|
||||
```
|
||||
|
||||
### HTTPS-Redirect-Loop
|
||||
|
||||
**Problem:**
|
||||
```
|
||||
ERR_TOO_MANY_REDIRECTS
|
||||
Infinite redirect between http and https
|
||||
```
|
||||
|
||||
**Lösung:**
|
||||
```python
|
||||
# In Flask-App prüfen:
|
||||
from flask_talisman import Talisman
|
||||
|
||||
# Nur HTTPS forcieren wenn Zertifikat verfügbar
|
||||
if os.path.exists('/opt/myp/ssl/cert.pem'):
|
||||
Talisman(app, force_https=True)
|
||||
else:
|
||||
# Development: HTTP erlauben
|
||||
Talisman(app, force_https=False)
|
||||
```
|
||||
|
||||
## 📝 Log-Dateien zur Fehlerdiagnose
|
||||
|
||||
### Wichtige Log-Standorte:
|
||||
```bash
|
||||
# MYP Application Logs
|
||||
/opt/myp/logs/app/app.log
|
||||
/opt/myp/logs/errors/error.log
|
||||
|
||||
# Systemd Service Logs
|
||||
journalctl -u myp-app.service -f
|
||||
journalctl -u myp-kiosk.service -f
|
||||
|
||||
# System-Logs
|
||||
/var/log/syslog
|
||||
/var/log/nginx/error.log # Falls Nginx verwendet wird
|
||||
```
|
||||
|
||||
### Log-Analyse-Befehle:
|
||||
```bash
|
||||
# Letzte 50 Fehler
|
||||
tail -50 /opt/myp/logs/errors/error.log | grep ERROR
|
||||
|
||||
# Live-Monitoring
|
||||
tail -f /opt/myp/logs/app/app.log
|
||||
|
||||
# Fehler der letzten Stunde
|
||||
journalctl -u myp-app.service --since "1 hour ago" | grep ERROR
|
||||
```
|
||||
|
||||
## 🛠️ Debugging-Tools
|
||||
|
||||
### System-Informationen sammeln:
|
||||
```bash
|
||||
# System-Overview
|
||||
uname -a
|
||||
lsb_release -a
|
||||
python3 --version
|
||||
pip3 list | grep -E "(Flask|requests)"
|
||||
|
||||
# Netzwerk-Status
|
||||
ip addr show
|
||||
ss -tulpn | grep :443
|
||||
curl -I http://localhost:5000/health
|
||||
|
||||
# Prozess-Status
|
||||
ps aux | grep -E "(python|myp)"
|
||||
systemctl status myp-*
|
||||
```
|
||||
|
||||
### Performance-Monitoring:
|
||||
```bash
|
||||
# CPU und Memory
|
||||
top -p $(pgrep -f "python.*myp")
|
||||
htop
|
||||
|
||||
# Disk I/O
|
||||
iotop
|
||||
df -h /opt/myp/
|
||||
|
||||
# Network
|
||||
iftop
|
||||
netstat -i
|
||||
```
|
||||
|
||||
## 📋 Vorbeugende Maßnahmen
|
||||
|
||||
### Regelmäßige Wartung:
|
||||
```bash
|
||||
# System-Updates
|
||||
sudo apt update && sudo apt upgrade -y
|
||||
|
||||
# Python-Pakete aktualisieren
|
||||
pip3 list --outdated
|
||||
python3 -m pip install --upgrade pip
|
||||
|
||||
# Log-Rotation einrichten
|
||||
sudo logrotate -f /etc/logrotate.conf
|
||||
|
||||
# Disk-Cleanup
|
||||
sudo apt autoremove -y
|
||||
sudo apt autoclean
|
||||
```
|
||||
|
||||
### Monitoring-Setup:
|
||||
```bash
|
||||
# Cron-Job für Health-Check (alle 5 Minuten)
|
||||
echo "*/5 * * * * curl -f http://localhost:5000/health || systemctl restart myp-app.service" | crontab -
|
||||
|
||||
# Log-Size monitoring
|
||||
echo "0 2 * * * find /opt/myp/logs -name '*.log' -size +100M -exec truncate -s 50M {} \;" | crontab -
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**💡 Tipp:** Vor jeder größeren Änderung ein vollständiges Backup erstellen:
|
||||
```bash
|
||||
sudo tar -czf /tmp/myp_backup_$(date +%Y%m%d_%H%M%S).tar.gz /opt/myp/
|
||||
```
|
||||
|
||||
### Connection Refused (Kiosk-Modus)
|
||||
|
||||
**Problem:**
|
||||
```
|
||||
Connection refused
|
||||
ERR_CONNECTION_REFUSED
|
||||
Kiosk startet aber kann sich nicht mit MYP-Server verbinden
|
||||
```
|
||||
|
||||
**Ursachen:**
|
||||
- MYP-Server läuft nicht (myp-https/myp-app Service)
|
||||
- Ports 443/5000 sind blockiert oder nicht belegt
|
||||
- SSL-Zertifikate fehlen oder sind ungültig
|
||||
- Python-Module fehlen oder sind defekt
|
||||
- Firewall blockiert Verbindungen
|
||||
|
||||
**🚀 Schnelle Lösung:**
|
||||
```bash
|
||||
# Super-Skript ausführen (INTELLIGENTE Komplettlösung):
|
||||
cd /opt/myp
|
||||
sudo ./setup_https_only.sh
|
||||
|
||||
# Das Super-Skript erkennt und repariert automatisch:
|
||||
# ✅ Connection refused Probleme
|
||||
# ✅ Service-Status prüfen und reparieren
|
||||
# ✅ Python-Module reparieren
|
||||
# ✅ Port-Konflikte lösen
|
||||
# ✅ SSL-Zertifikate validieren
|
||||
```
|
||||
|
||||
**🔍 Manuelle Diagnose (falls nötig):**
|
||||
```bash
|
||||
# Service-Logs prüfen
|
||||
journalctl -u myp-production -f
|
||||
journalctl -u myp-https -f
|
||||
journalctl -u myp-app -f
|
||||
|
||||
# Port-Status prüfen
|
||||
netstat -tulpn | grep -E ':(443|5000|80)'
|
||||
```
|
||||
|
||||
**🔧 Manuelle Reparatur:**
|
||||
```bash
|
||||
# 1. Services stoppen und neu starten
|
||||
sudo systemctl stop myp-kiosk myp-https myp-app
|
||||
sudo systemctl start myp-app myp-https myp-kiosk
|
||||
|
||||
# 2. Firewall-Ports öffnen
|
||||
sudo ufw allow 443
|
||||
sudo ufw allow 5000
|
||||
sudo ufw allow 80
|
||||
|
||||
# 3. SSL-Zertifikate regenerieren
|
||||
cd /opt/myp
|
||||
sudo ./fix_ssl_raspberry.sh
|
||||
|
||||
# 4. Python-Module neu installieren
|
||||
cd /opt/myp
|
||||
sudo python3 -m pip install -r requirements.txt --break-system-packages --force-reinstall
|
||||
|
||||
# 5. App manuell testen
|
||||
cd /opt/myp
|
||||
python3 app.py
|
||||
```
|
||||
|
||||
**🎯 Verbindungstest:**
|
||||
```bash
|
||||
# Teste lokale Verbindungen
|
||||
curl -k https://localhost:443
|
||||
curl http://localhost:5000
|
||||
curl -k https://m040tbaraspi001.de040.corpintra.net
|
||||
|
||||
# Teste von anderem System
|
||||
curl -k https://192.168.1.XXX:443
|
||||
```
|
||||
|
||||
**📋 Häufige Lösungen:**
|
||||
- **Service läuft nicht**: `sudo systemctl enable --now myp-https`
|
||||
- **Port blockiert**: `sudo ufw allow 443 && sudo ufw allow 5000`
|
||||
- **SSL-Fehler**: `sudo ./fix_ssl_raspberry.sh`
|
||||
- **Python-Fehler**: `sudo python3 -m pip install flask --break-system-packages`
|
||||
- **Kiosk-URL falsch**: Prüfe `/etc/systemd/system/myp-kiosk.service`
|
||||
|
||||
---
|
||||
|
||||
**📞 Support:** Bei ungelösten Problemen alle relevanten Logs und die Ausgabe der Debugging-Tools sammeln.
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -18,6 +18,7 @@ import os
|
||||
import sys
|
||||
import ssl
|
||||
import logging
|
||||
import platform
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
# Füge App-Verzeichnis zum Python-Pfad hinzu
|
||||
@ -73,7 +74,12 @@ app.config.from_object(ProductionConfig)
|
||||
def setup_production_ssl():
|
||||
"""Stelle sicher, dass browser-kompatible SSL-Zertifikate vorhanden sind"""
|
||||
|
||||
ssl_dir = '/opt/myp/ssl'
|
||||
# Plattform-spezifische SSL-Pfade
|
||||
if platform.system() == 'Windows':
|
||||
ssl_dir = os.path.join(os.path.dirname(__file__), 'ssl')
|
||||
else:
|
||||
ssl_dir = '/opt/myp/ssl'
|
||||
|
||||
cert_file = f'{ssl_dir}/cert.pem'
|
||||
key_file = f'{ssl_dir}/key.pem'
|
||||
|
||||
@ -330,17 +336,19 @@ def main():
|
||||
try:
|
||||
app_logger.info("🚀 MYP Produktions-Server startet...")
|
||||
app_logger.info(f"📅 Start-Zeit: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
|
||||
app_logger.info(f"🖥️ Hostname: {os.uname().nodename}")
|
||||
app_logger.info(f"🖥️ Hostname: {platform.node()}")
|
||||
app_logger.info(f"🐍 Python: {sys.version}")
|
||||
|
||||
# Produktions-Logging einrichten
|
||||
setup_production_logging()
|
||||
|
||||
# Prüfe Root-Berechtigung für Port 443
|
||||
if os.geteuid() != 0:
|
||||
# Prüfe Root-Berechtigung für Port 443 (nur Unix/Linux)
|
||||
if hasattr(os, 'geteuid') and os.geteuid() != 0:
|
||||
app_logger.error("❌ Root-Berechtigung erforderlich für Port 443")
|
||||
app_logger.error("💡 Führe aus mit: sudo python3 app_production.py")
|
||||
sys.exit(1)
|
||||
elif platform.system() == 'Windows':
|
||||
app_logger.info("🪟 Windows-Modus: Root-Check übersprungen")
|
||||
|
||||
# SSL-Kontext erstellen
|
||||
ssl_context = get_production_ssl_context()
|
||||
@ -382,7 +390,10 @@ def main():
|
||||
|
||||
except PermissionError:
|
||||
app_logger.error("❌ Berechtigung verweigert für Port 443")
|
||||
app_logger.error("💡 Führe aus mit: sudo python3 app_production.py")
|
||||
if platform.system() != 'Windows':
|
||||
app_logger.error("💡 Führe aus mit: sudo python3 app_production.py")
|
||||
else:
|
||||
app_logger.error("💡 Führe als Administrator aus")
|
||||
sys.exit(1)
|
||||
|
||||
except OSError as e:
|
||||
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
File diff suppressed because it is too large
Load Diff
@ -3802,3 +3802,30 @@ WHERE users.id = ?
|
||||
2025-06-10 10:02:40 - [app] app - [ERROR] ERROR - Fehler beim Laden des Benutzers 1: tuple index out of range
|
||||
2025-06-10 10:02:40 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/static/icons/icon-192.png
|
||||
2025-06-10 10:02:40 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 6, Status: disconnected, Quelle: system
|
||||
2025-06-10 13:10:47 - [app] app - [WARNING] WARNING - DatabaseCleanupManager nicht verfügbar - Fallback auf Legacy-Cleanup
|
||||
2025-06-10 13:10:47 - [app] app - [INFO] INFO - Optimierte SQLite-Engine erstellt: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\instance\printer_manager.db
|
||||
2025-06-10 13:10:47 - [app] app - [INFO] INFO - 🚀 MYP Produktions-Server startet...
|
||||
2025-06-10 13:10:47 - [app] app - [INFO] INFO - 📅 Start-Zeit: 2025-06-10 13:10:47
|
||||
2025-06-10 13:10:47 - [app] app - [ERROR] ERROR - ❌ Kritischer Fehler beim Server-Start: module 'os' has no attribute 'uname'
|
||||
2025-06-10 13:10:47 - [app] app - [ERROR] ERROR - Traceback: Traceback (most recent call last):
|
||||
File "C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\app_production.py", line 333, in main
|
||||
app_logger.info(f"🖥️ Hostname: {os.uname().nodename}")
|
||||
^^^^^^^^
|
||||
AttributeError: module 'os' has no attribute 'uname'. Did you mean: 'name'?
|
||||
|
||||
2025-06-10 13:10:47 - [app] app - [INFO] INFO - ✅ Cleanup abgeschlossen
|
||||
2025-06-10 13:11:47 - [app] app - [WARNING] WARNING - DatabaseCleanupManager nicht verfügbar - Fallback auf Legacy-Cleanup
|
||||
2025-06-10 13:11:47 - [app] app - [INFO] INFO - Optimierte SQLite-Engine erstellt: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\instance\printer_manager.db
|
||||
2025-06-10 13:11:47 - [app] app - [INFO] INFO - 🚀 MYP Produktions-Server startet...
|
||||
2025-06-10 13:11:47 - [app] app - [INFO] INFO - 📅 Start-Zeit: 2025-06-10 13:11:47
|
||||
2025-06-10 13:11:47 - [app] app - [INFO] INFO - 🖥️ Hostname: C040L0079726760
|
||||
2025-06-10 13:11:47 - [app] app - [INFO] INFO - 🐍 Python: 3.13.3 (tags/v3.13.3:6280bb5, Apr 8 2025, 14:47:33) [MSC v.1943 64 bit (AMD64)]
|
||||
2025-06-10 13:11:47 - [app] app - [INFO] INFO - ✅ Produktions-Logging konfiguriert
|
||||
2025-06-10 13:11:47 - [app] app - [ERROR] ERROR - ❌ Kritischer Fehler beim Server-Start: module 'os' has no attribute 'geteuid'
|
||||
2025-06-10 13:11:47 - [app] app - [ERROR] ERROR - Traceback: Traceback (most recent call last):
|
||||
File "C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\app_production.py", line 341, in main
|
||||
if os.geteuid() != 0:
|
||||
^^^^^^^^^^
|
||||
AttributeError: module 'os' has no attribute 'geteuid'. Did you mean: 'getpid'?
|
||||
|
||||
2025-06-10 13:11:47 - [app] app - [INFO] INFO - ✅ Cleanup abgeschlossen
|
||||
|
@ -52,3 +52,5 @@
|
||||
2025-06-09 19:26:04 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert
|
||||
2025-06-09 19:30:59 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert
|
||||
2025-06-10 10:01:58 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert
|
||||
2025-06-10 13:10:47 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert
|
||||
2025-06-10 13:11:47 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert
|
||||
|
@ -541,3 +541,7 @@
|
||||
2025-06-10 10:02:35 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.102): UNREACHABLE (Ping fehlgeschlagen)
|
||||
2025-06-10 10:02:35 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.103): UNREACHABLE (Ping fehlgeschlagen)
|
||||
2025-06-10 10:02:35 - [printer_monitor] printer_monitor - [INFO] INFO - ✅ Status-Update abgeschlossen für 6 Drucker
|
||||
2025-06-10 13:10:47 - [printer_monitor] printer_monitor - [INFO] INFO - 🖨️ Drucker-Monitor initialisiert
|
||||
2025-06-10 13:10:47 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Automatische Tapo-Erkennung in separatem Thread gestartet
|
||||
2025-06-10 13:11:47 - [printer_monitor] printer_monitor - [INFO] INFO - 🖨️ Drucker-Monitor initialisiert
|
||||
2025-06-10 13:11:47 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Automatische Tapo-Erkennung in separatem Thread gestartet
|
||||
|
@ -115,3 +115,5 @@
|
||||
2025-06-10 10:01:58 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True
|
||||
2025-06-10 10:01:58 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet
|
||||
2025-06-10 10:01:58 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet
|
||||
2025-06-10 13:10:47 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True
|
||||
2025-06-10 13:11:47 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True
|
||||
|
@ -52,3 +52,5 @@
|
||||
2025-06-09 19:26:04 - [security] security - [INFO] INFO - 🔒 Security System initialisiert
|
||||
2025-06-09 19:30:59 - [security] security - [INFO] INFO - 🔒 Security System initialisiert
|
||||
2025-06-10 10:01:58 - [security] security - [INFO] INFO - 🔒 Security System initialisiert
|
||||
2025-06-10 13:10:47 - [security] security - [INFO] INFO - 🔒 Security System initialisiert
|
||||
2025-06-10 13:11:47 - [security] security - [INFO] INFO - 🔒 Security System initialisiert
|
||||
|
@ -402,3 +402,21 @@
|
||||
2025-06-10 10:01:58 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert
|
||||
2025-06-10 10:01:58 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert
|
||||
2025-06-10 10:01:58 - [startup] startup - [INFO] INFO - ==================================================
|
||||
2025-06-10 13:10:47 - [startup] startup - [INFO] INFO - ==================================================
|
||||
2025-06-10 13:10:47 - [startup] startup - [INFO] INFO - [START] MYP Platform Backend wird gestartet...
|
||||
2025-06-10 13:10:47 - [startup] startup - [INFO] INFO - 🐍 Python Version: 3.13.3 (tags/v3.13.3:6280bb5, Apr 8 2025, 14:47:33) [MSC v.1943 64 bit (AMD64)]
|
||||
2025-06-10 13:10:47 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: nt (win32)
|
||||
2025-06-10 13:10:47 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP
|
||||
2025-06-10 13:10:47 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-10T13:10:47.700028
|
||||
2025-06-10 13:10:47 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert
|
||||
2025-06-10 13:10:47 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert
|
||||
2025-06-10 13:10:47 - [startup] startup - [INFO] INFO - ==================================================
|
||||
2025-06-10 13:11:47 - [startup] startup - [INFO] INFO - ==================================================
|
||||
2025-06-10 13:11:47 - [startup] startup - [INFO] INFO - [START] MYP Platform Backend wird gestartet...
|
||||
2025-06-10 13:11:47 - [startup] startup - [INFO] INFO - 🐍 Python Version: 3.13.3 (tags/v3.13.3:6280bb5, Apr 8 2025, 14:47:33) [MSC v.1943 64 bit (AMD64)]
|
||||
2025-06-10 13:11:47 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: nt (win32)
|
||||
2025-06-10 13:11:47 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP
|
||||
2025-06-10 13:11:47 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-10T13:11:47.805874
|
||||
2025-06-10 13:11:47 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert
|
||||
2025-06-10 13:11:47 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert
|
||||
2025-06-10 13:11:47 - [startup] startup - [INFO] INFO - ==================================================
|
||||
|
@ -283,3 +283,8 @@
|
||||
2025-06-10 10:02:24 - [tapo_controller] tapo_controller - [INFO] INFO - 🔍 teste ip 5/6: 192.168.0.102
|
||||
2025-06-10 10:02:30 - [tapo_controller] tapo_controller - [INFO] INFO - 🔍 teste ip 6/6: 192.168.0.105
|
||||
2025-06-10 10:02:36 - [tapo_controller] tapo_controller - [INFO] INFO - ✅ steckdosen-erkennung abgeschlossen: 0/6 steckdosen gefunden in 36.0s
|
||||
2025-06-10 13:10:47 - [tapo_controller] tapo_controller - [INFO] INFO - ✅ tapo controller initialisiert
|
||||
2025-06-10 13:11:33 - [tapo_controller] tapo_controller - [INFO] INFO - 🔍 starte automatische tapo-steckdosenerkennung...
|
||||
2025-06-10 13:11:33 - [tapo_controller] tapo_controller - [INFO] INFO - 🔄 teste 6 standard-ips aus der konfiguration
|
||||
2025-06-10 13:11:33 - [tapo_controller] tapo_controller - [INFO] INFO - 🔍 teste ip 1/6: 192.168.0.103
|
||||
2025-06-10 13:11:47 - [tapo_controller] tapo_controller - [INFO] INFO - ✅ tapo controller initialisiert
|
||||
|
@ -58,3 +58,11 @@
|
||||
2025-06-10 10:01:57 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen)
|
||||
2025-06-10 10:01:57 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet
|
||||
2025-06-10 10:01:57 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet
|
||||
2025-06-10 13:10:46 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an...
|
||||
2025-06-10 13:10:46 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen)
|
||||
2025-06-10 13:10:46 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet
|
||||
2025-06-10 13:10:46 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet
|
||||
2025-06-10 13:11:47 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an...
|
||||
2025-06-10 13:11:47 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen)
|
||||
2025-06-10 13:11:47 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet
|
||||
2025-06-10 13:11:47 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet
|
||||
|
16
backend/node_modules/.bin/autoprefixer
generated
vendored
16
backend/node_modules/.bin/autoprefixer
generated
vendored
@ -1,16 +0,0 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../autoprefixer/bin/autoprefixer" "$@"
|
||||
else
|
||||
exec node "$basedir/../autoprefixer/bin/autoprefixer" "$@"
|
||||
fi
|
17
backend/node_modules/.bin/autoprefixer.cmd
generated
vendored
17
backend/node_modules/.bin/autoprefixer.cmd
generated
vendored
@ -1,17 +0,0 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\autoprefixer\bin\autoprefixer" %*
|
28
backend/node_modules/.bin/autoprefixer.ps1
generated
vendored
28
backend/node_modules/.bin/autoprefixer.ps1
generated
vendored
@ -1,28 +0,0 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../autoprefixer/bin/autoprefixer" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../autoprefixer/bin/autoprefixer" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../autoprefixer/bin/autoprefixer" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../autoprefixer/bin/autoprefixer" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
16
backend/node_modules/.bin/browserslist
generated
vendored
16
backend/node_modules/.bin/browserslist
generated
vendored
@ -1,16 +0,0 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../browserslist/cli.js" "$@"
|
||||
else
|
||||
exec node "$basedir/../browserslist/cli.js" "$@"
|
||||
fi
|
17
backend/node_modules/.bin/browserslist.cmd
generated
vendored
17
backend/node_modules/.bin/browserslist.cmd
generated
vendored
@ -1,17 +0,0 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\browserslist\cli.js" %*
|
28
backend/node_modules/.bin/browserslist.ps1
generated
vendored
28
backend/node_modules/.bin/browserslist.ps1
generated
vendored
@ -1,28 +0,0 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../browserslist/cli.js" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../browserslist/cli.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../browserslist/cli.js" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../browserslist/cli.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
16
backend/node_modules/.bin/cssesc
generated
vendored
16
backend/node_modules/.bin/cssesc
generated
vendored
@ -1,16 +0,0 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../cssesc/bin/cssesc" "$@"
|
||||
else
|
||||
exec node "$basedir/../cssesc/bin/cssesc" "$@"
|
||||
fi
|
17
backend/node_modules/.bin/cssesc.cmd
generated
vendored
17
backend/node_modules/.bin/cssesc.cmd
generated
vendored
@ -1,17 +0,0 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\cssesc\bin\cssesc" %*
|
28
backend/node_modules/.bin/cssesc.ps1
generated
vendored
28
backend/node_modules/.bin/cssesc.ps1
generated
vendored
@ -1,28 +0,0 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../cssesc/bin/cssesc" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../cssesc/bin/cssesc" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../cssesc/bin/cssesc" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../cssesc/bin/cssesc" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
16
backend/node_modules/.bin/esbuild
generated
vendored
16
backend/node_modules/.bin/esbuild
generated
vendored
@ -1,16 +0,0 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../esbuild/bin/esbuild" "$@"
|
||||
else
|
||||
exec node "$basedir/../esbuild/bin/esbuild" "$@"
|
||||
fi
|
17
backend/node_modules/.bin/esbuild.cmd
generated
vendored
17
backend/node_modules/.bin/esbuild.cmd
generated
vendored
@ -1,17 +0,0 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\esbuild\bin\esbuild" %*
|
28
backend/node_modules/.bin/esbuild.ps1
generated
vendored
28
backend/node_modules/.bin/esbuild.ps1
generated
vendored
@ -1,28 +0,0 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../esbuild/bin/esbuild" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../esbuild/bin/esbuild" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../esbuild/bin/esbuild" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../esbuild/bin/esbuild" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
16
backend/node_modules/.bin/glob
generated
vendored
16
backend/node_modules/.bin/glob
generated
vendored
@ -1,16 +0,0 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../glob/dist/esm/bin.mjs" "$@"
|
||||
else
|
||||
exec node "$basedir/../glob/dist/esm/bin.mjs" "$@"
|
||||
fi
|
17
backend/node_modules/.bin/glob.cmd
generated
vendored
17
backend/node_modules/.bin/glob.cmd
generated
vendored
@ -1,17 +0,0 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\glob\dist\esm\bin.mjs" %*
|
28
backend/node_modules/.bin/glob.ps1
generated
vendored
28
backend/node_modules/.bin/glob.ps1
generated
vendored
@ -1,28 +0,0 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../glob/dist/esm/bin.mjs" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../glob/dist/esm/bin.mjs" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../glob/dist/esm/bin.mjs" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../glob/dist/esm/bin.mjs" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
16
backend/node_modules/.bin/jiti
generated
vendored
16
backend/node_modules/.bin/jiti
generated
vendored
@ -1,16 +0,0 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../jiti/bin/jiti.js" "$@"
|
||||
else
|
||||
exec node "$basedir/../jiti/bin/jiti.js" "$@"
|
||||
fi
|
17
backend/node_modules/.bin/jiti.cmd
generated
vendored
17
backend/node_modules/.bin/jiti.cmd
generated
vendored
@ -1,17 +0,0 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\jiti\bin\jiti.js" %*
|
28
backend/node_modules/.bin/jiti.ps1
generated
vendored
28
backend/node_modules/.bin/jiti.ps1
generated
vendored
@ -1,28 +0,0 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../jiti/bin/jiti.js" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../jiti/bin/jiti.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../jiti/bin/jiti.js" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../jiti/bin/jiti.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
16
backend/node_modules/.bin/mini-svg-data-uri
generated
vendored
16
backend/node_modules/.bin/mini-svg-data-uri
generated
vendored
@ -1,16 +0,0 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../mini-svg-data-uri/cli.js" "$@"
|
||||
else
|
||||
exec node "$basedir/../mini-svg-data-uri/cli.js" "$@"
|
||||
fi
|
17
backend/node_modules/.bin/mini-svg-data-uri.cmd
generated
vendored
17
backend/node_modules/.bin/mini-svg-data-uri.cmd
generated
vendored
@ -1,17 +0,0 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\mini-svg-data-uri\cli.js" %*
|
28
backend/node_modules/.bin/mini-svg-data-uri.ps1
generated
vendored
28
backend/node_modules/.bin/mini-svg-data-uri.ps1
generated
vendored
@ -1,28 +0,0 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../mini-svg-data-uri/cli.js" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../mini-svg-data-uri/cli.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../mini-svg-data-uri/cli.js" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../mini-svg-data-uri/cli.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
16
backend/node_modules/.bin/nanoid
generated
vendored
16
backend/node_modules/.bin/nanoid
generated
vendored
@ -1,16 +0,0 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../nanoid/bin/nanoid.cjs" "$@"
|
||||
else
|
||||
exec node "$basedir/../nanoid/bin/nanoid.cjs" "$@"
|
||||
fi
|
17
backend/node_modules/.bin/nanoid.cmd
generated
vendored
17
backend/node_modules/.bin/nanoid.cmd
generated
vendored
@ -1,17 +0,0 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\nanoid\bin\nanoid.cjs" %*
|
28
backend/node_modules/.bin/nanoid.ps1
generated
vendored
28
backend/node_modules/.bin/nanoid.ps1
generated
vendored
@ -1,28 +0,0 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
16
backend/node_modules/.bin/node-which
generated
vendored
16
backend/node_modules/.bin/node-which
generated
vendored
@ -1,16 +0,0 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../which/bin/node-which" "$@"
|
||||
else
|
||||
exec node "$basedir/../which/bin/node-which" "$@"
|
||||
fi
|
17
backend/node_modules/.bin/node-which.cmd
generated
vendored
17
backend/node_modules/.bin/node-which.cmd
generated
vendored
@ -1,17 +0,0 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\which\bin\node-which" %*
|
28
backend/node_modules/.bin/node-which.ps1
generated
vendored
28
backend/node_modules/.bin/node-which.ps1
generated
vendored
@ -1,28 +0,0 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../which/bin/node-which" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../which/bin/node-which" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../which/bin/node-which" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../which/bin/node-which" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
16
backend/node_modules/.bin/resolve
generated
vendored
16
backend/node_modules/.bin/resolve
generated
vendored
@ -1,16 +0,0 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../resolve/bin/resolve" "$@"
|
||||
else
|
||||
exec node "$basedir/../resolve/bin/resolve" "$@"
|
||||
fi
|
17
backend/node_modules/.bin/resolve.cmd
generated
vendored
17
backend/node_modules/.bin/resolve.cmd
generated
vendored
@ -1,17 +0,0 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\resolve\bin\resolve" %*
|
28
backend/node_modules/.bin/resolve.ps1
generated
vendored
28
backend/node_modules/.bin/resolve.ps1
generated
vendored
@ -1,28 +0,0 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../resolve/bin/resolve" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../resolve/bin/resolve" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../resolve/bin/resolve" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../resolve/bin/resolve" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
16
backend/node_modules/.bin/rollup
generated
vendored
16
backend/node_modules/.bin/rollup
generated
vendored
@ -1,16 +0,0 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../rollup/dist/bin/rollup" "$@"
|
||||
else
|
||||
exec node "$basedir/../rollup/dist/bin/rollup" "$@"
|
||||
fi
|
17
backend/node_modules/.bin/rollup.cmd
generated
vendored
17
backend/node_modules/.bin/rollup.cmd
generated
vendored
@ -1,17 +0,0 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\rollup\dist\bin\rollup" %*
|
28
backend/node_modules/.bin/rollup.ps1
generated
vendored
28
backend/node_modules/.bin/rollup.ps1
generated
vendored
@ -1,28 +0,0 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../rollup/dist/bin/rollup" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../rollup/dist/bin/rollup" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../rollup/dist/bin/rollup" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../rollup/dist/bin/rollup" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
16
backend/node_modules/.bin/sucrase
generated
vendored
16
backend/node_modules/.bin/sucrase
generated
vendored
@ -1,16 +0,0 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../sucrase/bin/sucrase" "$@"
|
||||
else
|
||||
exec node "$basedir/../sucrase/bin/sucrase" "$@"
|
||||
fi
|
16
backend/node_modules/.bin/sucrase-node
generated
vendored
16
backend/node_modules/.bin/sucrase-node
generated
vendored
@ -1,16 +0,0 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../sucrase/bin/sucrase-node" "$@"
|
||||
else
|
||||
exec node "$basedir/../sucrase/bin/sucrase-node" "$@"
|
||||
fi
|
17
backend/node_modules/.bin/sucrase-node.cmd
generated
vendored
17
backend/node_modules/.bin/sucrase-node.cmd
generated
vendored
@ -1,17 +0,0 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\sucrase\bin\sucrase-node" %*
|
28
backend/node_modules/.bin/sucrase-node.ps1
generated
vendored
28
backend/node_modules/.bin/sucrase-node.ps1
generated
vendored
@ -1,28 +0,0 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../sucrase/bin/sucrase-node" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../sucrase/bin/sucrase-node" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../sucrase/bin/sucrase-node" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../sucrase/bin/sucrase-node" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
17
backend/node_modules/.bin/sucrase.cmd
generated
vendored
17
backend/node_modules/.bin/sucrase.cmd
generated
vendored
@ -1,17 +0,0 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\sucrase\bin\sucrase" %*
|
28
backend/node_modules/.bin/sucrase.ps1
generated
vendored
28
backend/node_modules/.bin/sucrase.ps1
generated
vendored
@ -1,28 +0,0 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../sucrase/bin/sucrase" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../sucrase/bin/sucrase" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../sucrase/bin/sucrase" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../sucrase/bin/sucrase" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
16
backend/node_modules/.bin/tailwind
generated
vendored
16
backend/node_modules/.bin/tailwind
generated
vendored
@ -1,16 +0,0 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../tailwindcss/lib/cli.js" "$@"
|
||||
else
|
||||
exec node "$basedir/../tailwindcss/lib/cli.js" "$@"
|
||||
fi
|
17
backend/node_modules/.bin/tailwind.cmd
generated
vendored
17
backend/node_modules/.bin/tailwind.cmd
generated
vendored
@ -1,17 +0,0 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\tailwindcss\lib\cli.js" %*
|
28
backend/node_modules/.bin/tailwind.ps1
generated
vendored
28
backend/node_modules/.bin/tailwind.ps1
generated
vendored
@ -1,28 +0,0 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../tailwindcss/lib/cli.js" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../tailwindcss/lib/cli.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../tailwindcss/lib/cli.js" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../tailwindcss/lib/cli.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
16
backend/node_modules/.bin/tailwindcss
generated
vendored
16
backend/node_modules/.bin/tailwindcss
generated
vendored
@ -1,16 +0,0 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../tailwindcss/lib/cli.js" "$@"
|
||||
else
|
||||
exec node "$basedir/../tailwindcss/lib/cli.js" "$@"
|
||||
fi
|
17
backend/node_modules/.bin/tailwindcss.cmd
generated
vendored
17
backend/node_modules/.bin/tailwindcss.cmd
generated
vendored
@ -1,17 +0,0 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\tailwindcss\lib\cli.js" %*
|
28
backend/node_modules/.bin/tailwindcss.ps1
generated
vendored
28
backend/node_modules/.bin/tailwindcss.ps1
generated
vendored
@ -1,28 +0,0 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../tailwindcss/lib/cli.js" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../tailwindcss/lib/cli.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../tailwindcss/lib/cli.js" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../tailwindcss/lib/cli.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
16
backend/node_modules/.bin/update-browserslist-db
generated
vendored
16
backend/node_modules/.bin/update-browserslist-db
generated
vendored
@ -1,16 +0,0 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../update-browserslist-db/cli.js" "$@"
|
||||
else
|
||||
exec node "$basedir/../update-browserslist-db/cli.js" "$@"
|
||||
fi
|
17
backend/node_modules/.bin/update-browserslist-db.cmd
generated
vendored
17
backend/node_modules/.bin/update-browserslist-db.cmd
generated
vendored
@ -1,17 +0,0 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\update-browserslist-db\cli.js" %*
|
28
backend/node_modules/.bin/update-browserslist-db.ps1
generated
vendored
28
backend/node_modules/.bin/update-browserslist-db.ps1
generated
vendored
@ -1,28 +0,0 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../update-browserslist-db/cli.js" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../update-browserslist-db/cli.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../update-browserslist-db/cli.js" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../update-browserslist-db/cli.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
16
backend/node_modules/.bin/vite
generated
vendored
16
backend/node_modules/.bin/vite
generated
vendored
@ -1,16 +0,0 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../vite/bin/vite.js" "$@"
|
||||
else
|
||||
exec node "$basedir/../vite/bin/vite.js" "$@"
|
||||
fi
|
17
backend/node_modules/.bin/vite.cmd
generated
vendored
17
backend/node_modules/.bin/vite.cmd
generated
vendored
@ -1,17 +0,0 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\vite\bin\vite.js" %*
|
28
backend/node_modules/.bin/vite.ps1
generated
vendored
28
backend/node_modules/.bin/vite.ps1
generated
vendored
@ -1,28 +0,0 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../vite/bin/vite.js" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../vite/bin/vite.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../vite/bin/vite.js" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../vite/bin/vite.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
16
backend/node_modules/.bin/yaml
generated
vendored
16
backend/node_modules/.bin/yaml
generated
vendored
@ -1,16 +0,0 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../yaml/bin.mjs" "$@"
|
||||
else
|
||||
exec node "$basedir/../yaml/bin.mjs" "$@"
|
||||
fi
|
17
backend/node_modules/.bin/yaml.cmd
generated
vendored
17
backend/node_modules/.bin/yaml.cmd
generated
vendored
@ -1,17 +0,0 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\yaml\bin.mjs" %*
|
28
backend/node_modules/.bin/yaml.ps1
generated
vendored
28
backend/node_modules/.bin/yaml.ps1
generated
vendored
@ -1,28 +0,0 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../yaml/bin.mjs" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../yaml/bin.mjs" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../yaml/bin.mjs" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../yaml/bin.mjs" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
1961
backend/node_modules/.package-lock.json
generated
vendored
1961
backend/node_modules/.package-lock.json
generated
vendored
File diff suppressed because it is too large
Load Diff
128
backend/node_modules/@alloc/quick-lru/index.d.ts
generated
vendored
128
backend/node_modules/@alloc/quick-lru/index.d.ts
generated
vendored
@ -1,128 +0,0 @@
|
||||
declare namespace QuickLRU {
|
||||
interface Options<KeyType, ValueType> {
|
||||
/**
|
||||
The maximum number of milliseconds an item should remain in the cache.
|
||||
|
||||
@default Infinity
|
||||
|
||||
By default, `maxAge` will be `Infinity`, which means that items will never expire.
|
||||
Lazy expiration upon the next write or read call.
|
||||
|
||||
Individual expiration of an item can be specified by the `set(key, value, maxAge)` method.
|
||||
*/
|
||||
readonly maxAge?: number;
|
||||
|
||||
/**
|
||||
The maximum number of items before evicting the least recently used items.
|
||||
*/
|
||||
readonly maxSize: number;
|
||||
|
||||
/**
|
||||
Called right before an item is evicted from the cache.
|
||||
|
||||
Useful for side effects or for items like object URLs that need explicit cleanup (`revokeObjectURL`).
|
||||
*/
|
||||
onEviction?: (key: KeyType, value: ValueType) => void;
|
||||
}
|
||||
}
|
||||
|
||||
declare class QuickLRU<KeyType, ValueType>
|
||||
implements Iterable<[KeyType, ValueType]> {
|
||||
/**
|
||||
The stored item count.
|
||||
*/
|
||||
readonly size: number;
|
||||
|
||||
/**
|
||||
Simple ["Least Recently Used" (LRU) cache](https://en.m.wikipedia.org/wiki/Cache_replacement_policies#Least_Recently_Used_.28LRU.29).
|
||||
|
||||
The instance is [`iterable`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Iteration_protocols) so you can use it directly in a [`for…of`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/for...of) loop.
|
||||
|
||||
@example
|
||||
```
|
||||
import QuickLRU = require('quick-lru');
|
||||
|
||||
const lru = new QuickLRU({maxSize: 1000});
|
||||
|
||||
lru.set('🦄', '🌈');
|
||||
|
||||
lru.has('🦄');
|
||||
//=> true
|
||||
|
||||
lru.get('🦄');
|
||||
//=> '🌈'
|
||||
```
|
||||
*/
|
||||
constructor(options: QuickLRU.Options<KeyType, ValueType>);
|
||||
|
||||
[Symbol.iterator](): IterableIterator<[KeyType, ValueType]>;
|
||||
|
||||
/**
|
||||
Set an item. Returns the instance.
|
||||
|
||||
Individual expiration of an item can be specified with the `maxAge` option. If not specified, the global `maxAge` value will be used in case it is specified in the constructor, otherwise the item will never expire.
|
||||
|
||||
@returns The list instance.
|
||||
*/
|
||||
set(key: KeyType, value: ValueType, options?: {maxAge?: number}): this;
|
||||
|
||||
/**
|
||||
Get an item.
|
||||
|
||||
@returns The stored item or `undefined`.
|
||||
*/
|
||||
get(key: KeyType): ValueType | undefined;
|
||||
|
||||
/**
|
||||
Check if an item exists.
|
||||
*/
|
||||
has(key: KeyType): boolean;
|
||||
|
||||
/**
|
||||
Get an item without marking it as recently used.
|
||||
|
||||
@returns The stored item or `undefined`.
|
||||
*/
|
||||
peek(key: KeyType): ValueType | undefined;
|
||||
|
||||
/**
|
||||
Delete an item.
|
||||
|
||||
@returns `true` if the item is removed or `false` if the item doesn't exist.
|
||||
*/
|
||||
delete(key: KeyType): boolean;
|
||||
|
||||
/**
|
||||
Delete all items.
|
||||
*/
|
||||
clear(): void;
|
||||
|
||||
/**
|
||||
Update the `maxSize` in-place, discarding items as necessary. Insertion order is mostly preserved, though this is not a strong guarantee.
|
||||
|
||||
Useful for on-the-fly tuning of cache sizes in live systems.
|
||||
*/
|
||||
resize(maxSize: number): void;
|
||||
|
||||
/**
|
||||
Iterable for all the keys.
|
||||
*/
|
||||
keys(): IterableIterator<KeyType>;
|
||||
|
||||
/**
|
||||
Iterable for all the values.
|
||||
*/
|
||||
values(): IterableIterator<ValueType>;
|
||||
|
||||
/**
|
||||
Iterable for all entries, starting with the oldest (ascending in recency).
|
||||
*/
|
||||
entriesAscending(): IterableIterator<[KeyType, ValueType]>;
|
||||
|
||||
/**
|
||||
Iterable for all entries, starting with the newest (descending in recency).
|
||||
*/
|
||||
entriesDescending(): IterableIterator<[KeyType, ValueType]>;
|
||||
}
|
||||
|
||||
export = QuickLRU;
|
263
backend/node_modules/@alloc/quick-lru/index.js
generated
vendored
263
backend/node_modules/@alloc/quick-lru/index.js
generated
vendored
@ -1,263 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
class QuickLRU {
|
||||
constructor(options = {}) {
|
||||
if (!(options.maxSize && options.maxSize > 0)) {
|
||||
throw new TypeError('`maxSize` must be a number greater than 0');
|
||||
}
|
||||
|
||||
if (typeof options.maxAge === 'number' && options.maxAge === 0) {
|
||||
throw new TypeError('`maxAge` must be a number greater than 0');
|
||||
}
|
||||
|
||||
this.maxSize = options.maxSize;
|
||||
this.maxAge = options.maxAge || Infinity;
|
||||
this.onEviction = options.onEviction;
|
||||
this.cache = new Map();
|
||||
this.oldCache = new Map();
|
||||
this._size = 0;
|
||||
}
|
||||
|
||||
_emitEvictions(cache) {
|
||||
if (typeof this.onEviction !== 'function') {
|
||||
return;
|
||||
}
|
||||
|
||||
for (const [key, item] of cache) {
|
||||
this.onEviction(key, item.value);
|
||||
}
|
||||
}
|
||||
|
||||
_deleteIfExpired(key, item) {
|
||||
if (typeof item.expiry === 'number' && item.expiry <= Date.now()) {
|
||||
if (typeof this.onEviction === 'function') {
|
||||
this.onEviction(key, item.value);
|
||||
}
|
||||
|
||||
return this.delete(key);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
_getOrDeleteIfExpired(key, item) {
|
||||
const deleted = this._deleteIfExpired(key, item);
|
||||
if (deleted === false) {
|
||||
return item.value;
|
||||
}
|
||||
}
|
||||
|
||||
_getItemValue(key, item) {
|
||||
return item.expiry ? this._getOrDeleteIfExpired(key, item) : item.value;
|
||||
}
|
||||
|
||||
_peek(key, cache) {
|
||||
const item = cache.get(key);
|
||||
|
||||
return this._getItemValue(key, item);
|
||||
}
|
||||
|
||||
_set(key, value) {
|
||||
this.cache.set(key, value);
|
||||
this._size++;
|
||||
|
||||
if (this._size >= this.maxSize) {
|
||||
this._size = 0;
|
||||
this._emitEvictions(this.oldCache);
|
||||
this.oldCache = this.cache;
|
||||
this.cache = new Map();
|
||||
}
|
||||
}
|
||||
|
||||
_moveToRecent(key, item) {
|
||||
this.oldCache.delete(key);
|
||||
this._set(key, item);
|
||||
}
|
||||
|
||||
* _entriesAscending() {
|
||||
for (const item of this.oldCache) {
|
||||
const [key, value] = item;
|
||||
if (!this.cache.has(key)) {
|
||||
const deleted = this._deleteIfExpired(key, value);
|
||||
if (deleted === false) {
|
||||
yield item;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (const item of this.cache) {
|
||||
const [key, value] = item;
|
||||
const deleted = this._deleteIfExpired(key, value);
|
||||
if (deleted === false) {
|
||||
yield item;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
get(key) {
|
||||
if (this.cache.has(key)) {
|
||||
const item = this.cache.get(key);
|
||||
|
||||
return this._getItemValue(key, item);
|
||||
}
|
||||
|
||||
if (this.oldCache.has(key)) {
|
||||
const item = this.oldCache.get(key);
|
||||
if (this._deleteIfExpired(key, item) === false) {
|
||||
this._moveToRecent(key, item);
|
||||
return item.value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
set(key, value, {maxAge = this.maxAge === Infinity ? undefined : Date.now() + this.maxAge} = {}) {
|
||||
if (this.cache.has(key)) {
|
||||
this.cache.set(key, {
|
||||
value,
|
||||
maxAge
|
||||
});
|
||||
} else {
|
||||
this._set(key, {value, expiry: maxAge});
|
||||
}
|
||||
}
|
||||
|
||||
has(key) {
|
||||
if (this.cache.has(key)) {
|
||||
return !this._deleteIfExpired(key, this.cache.get(key));
|
||||
}
|
||||
|
||||
if (this.oldCache.has(key)) {
|
||||
return !this._deleteIfExpired(key, this.oldCache.get(key));
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
peek(key) {
|
||||
if (this.cache.has(key)) {
|
||||
return this._peek(key, this.cache);
|
||||
}
|
||||
|
||||
if (this.oldCache.has(key)) {
|
||||
return this._peek(key, this.oldCache);
|
||||
}
|
||||
}
|
||||
|
||||
delete(key) {
|
||||
const deleted = this.cache.delete(key);
|
||||
if (deleted) {
|
||||
this._size--;
|
||||
}
|
||||
|
||||
return this.oldCache.delete(key) || deleted;
|
||||
}
|
||||
|
||||
clear() {
|
||||
this.cache.clear();
|
||||
this.oldCache.clear();
|
||||
this._size = 0;
|
||||
}
|
||||
|
||||
resize(newSize) {
|
||||
if (!(newSize && newSize > 0)) {
|
||||
throw new TypeError('`maxSize` must be a number greater than 0');
|
||||
}
|
||||
|
||||
const items = [...this._entriesAscending()];
|
||||
const removeCount = items.length - newSize;
|
||||
if (removeCount < 0) {
|
||||
this.cache = new Map(items);
|
||||
this.oldCache = new Map();
|
||||
this._size = items.length;
|
||||
} else {
|
||||
if (removeCount > 0) {
|
||||
this._emitEvictions(items.slice(0, removeCount));
|
||||
}
|
||||
|
||||
this.oldCache = new Map(items.slice(removeCount));
|
||||
this.cache = new Map();
|
||||
this._size = 0;
|
||||
}
|
||||
|
||||
this.maxSize = newSize;
|
||||
}
|
||||
|
||||
* keys() {
|
||||
for (const [key] of this) {
|
||||
yield key;
|
||||
}
|
||||
}
|
||||
|
||||
* values() {
|
||||
for (const [, value] of this) {
|
||||
yield value;
|
||||
}
|
||||
}
|
||||
|
||||
* [Symbol.iterator]() {
|
||||
for (const item of this.cache) {
|
||||
const [key, value] = item;
|
||||
const deleted = this._deleteIfExpired(key, value);
|
||||
if (deleted === false) {
|
||||
yield [key, value.value];
|
||||
}
|
||||
}
|
||||
|
||||
for (const item of this.oldCache) {
|
||||
const [key, value] = item;
|
||||
if (!this.cache.has(key)) {
|
||||
const deleted = this._deleteIfExpired(key, value);
|
||||
if (deleted === false) {
|
||||
yield [key, value.value];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
* entriesDescending() {
|
||||
let items = [...this.cache];
|
||||
for (let i = items.length - 1; i >= 0; --i) {
|
||||
const item = items[i];
|
||||
const [key, value] = item;
|
||||
const deleted = this._deleteIfExpired(key, value);
|
||||
if (deleted === false) {
|
||||
yield [key, value.value];
|
||||
}
|
||||
}
|
||||
|
||||
items = [...this.oldCache];
|
||||
for (let i = items.length - 1; i >= 0; --i) {
|
||||
const item = items[i];
|
||||
const [key, value] = item;
|
||||
if (!this.cache.has(key)) {
|
||||
const deleted = this._deleteIfExpired(key, value);
|
||||
if (deleted === false) {
|
||||
yield [key, value.value];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
* entriesAscending() {
|
||||
for (const [key, value] of this._entriesAscending()) {
|
||||
yield [key, value.value];
|
||||
}
|
||||
}
|
||||
|
||||
get size() {
|
||||
if (!this._size) {
|
||||
return this.oldCache.size;
|
||||
}
|
||||
|
||||
let oldCacheSize = 0;
|
||||
for (const key of this.oldCache.keys()) {
|
||||
if (!this.cache.has(key)) {
|
||||
oldCacheSize++;
|
||||
}
|
||||
}
|
||||
|
||||
return Math.min(this._size + oldCacheSize, this.maxSize);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = QuickLRU;
|
9
backend/node_modules/@alloc/quick-lru/license
generated
vendored
9
backend/node_modules/@alloc/quick-lru/license
generated
vendored
@ -1,9 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
43
backend/node_modules/@alloc/quick-lru/package.json
generated
vendored
43
backend/node_modules/@alloc/quick-lru/package.json
generated
vendored
@ -1,43 +0,0 @@
|
||||
{
|
||||
"name": "@alloc/quick-lru",
|
||||
"version": "5.2.0",
|
||||
"description": "Simple “Least Recently Used” (LRU) cache",
|
||||
"license": "MIT",
|
||||
"repository": "sindresorhus/quick-lru",
|
||||
"funding": "https://github.com/sponsors/sindresorhus",
|
||||
"author": {
|
||||
"name": "Sindre Sorhus",
|
||||
"email": "sindresorhus@gmail.com",
|
||||
"url": "https://sindresorhus.com"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "xo && nyc ava && tsd"
|
||||
},
|
||||
"files": [
|
||||
"index.js",
|
||||
"index.d.ts"
|
||||
],
|
||||
"keywords": [
|
||||
"lru",
|
||||
"quick",
|
||||
"cache",
|
||||
"caching",
|
||||
"least",
|
||||
"recently",
|
||||
"used",
|
||||
"fast",
|
||||
"map",
|
||||
"hash",
|
||||
"buffer"
|
||||
],
|
||||
"devDependencies": {
|
||||
"ava": "^2.0.0",
|
||||
"coveralls": "^3.0.3",
|
||||
"nyc": "^15.0.0",
|
||||
"tsd": "^0.11.0",
|
||||
"xo": "^0.26.0"
|
||||
}
|
||||
}
|
139
backend/node_modules/@alloc/quick-lru/readme.md
generated
vendored
139
backend/node_modules/@alloc/quick-lru/readme.md
generated
vendored
@ -1,139 +0,0 @@
|
||||
# quick-lru [](https://travis-ci.org/sindresorhus/quick-lru) [](https://coveralls.io/github/sindresorhus/quick-lru?branch=master)
|
||||
|
||||
> Simple [“Least Recently Used” (LRU) cache](https://en.m.wikipedia.org/wiki/Cache_replacement_policies#Least_Recently_Used_.28LRU.29)
|
||||
|
||||
Useful when you need to cache something and limit memory usage.
|
||||
|
||||
Inspired by the [`hashlru` algorithm](https://github.com/dominictarr/hashlru#algorithm), but instead uses [`Map`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Map) to support keys of any type, not just strings, and values can be `undefined`.
|
||||
|
||||
## Install
|
||||
|
||||
```
|
||||
$ npm install quick-lru
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```js
|
||||
const QuickLRU = require('quick-lru');
|
||||
|
||||
const lru = new QuickLRU({maxSize: 1000});
|
||||
|
||||
lru.set('🦄', '🌈');
|
||||
|
||||
lru.has('🦄');
|
||||
//=> true
|
||||
|
||||
lru.get('🦄');
|
||||
//=> '🌈'
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
### new QuickLRU(options?)
|
||||
|
||||
Returns a new instance.
|
||||
|
||||
### options
|
||||
|
||||
Type: `object`
|
||||
|
||||
#### maxSize
|
||||
|
||||
*Required*\
|
||||
Type: `number`
|
||||
|
||||
The maximum number of items before evicting the least recently used items.
|
||||
|
||||
#### maxAge
|
||||
|
||||
Type: `number`\
|
||||
Default: `Infinity`
|
||||
|
||||
The maximum number of milliseconds an item should remain in cache.
|
||||
By default maxAge will be Infinity, which means that items will never expire.
|
||||
|
||||
Lazy expiration happens upon the next `write` or `read` call.
|
||||
|
||||
Individual expiration of an item can be specified by the `set(key, value, options)` method.
|
||||
|
||||
#### onEviction
|
||||
|
||||
*Optional*\
|
||||
Type: `(key, value) => void`
|
||||
|
||||
Called right before an item is evicted from the cache.
|
||||
|
||||
Useful for side effects or for items like object URLs that need explicit cleanup (`revokeObjectURL`).
|
||||
|
||||
### Instance
|
||||
|
||||
The instance is [`iterable`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Iteration_protocols) so you can use it directly in a [`for…of`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/for...of) loop.
|
||||
|
||||
Both `key` and `value` can be of any type.
|
||||
|
||||
#### .set(key, value, options?)
|
||||
|
||||
Set an item. Returns the instance.
|
||||
|
||||
Individual expiration of an item can be specified with the `maxAge` option. If not specified, the global `maxAge` value will be used in case it is specified on the constructor, otherwise the item will never expire.
|
||||
|
||||
#### .get(key)
|
||||
|
||||
Get an item.
|
||||
|
||||
#### .has(key)
|
||||
|
||||
Check if an item exists.
|
||||
|
||||
#### .peek(key)
|
||||
|
||||
Get an item without marking it as recently used.
|
||||
|
||||
#### .delete(key)
|
||||
|
||||
Delete an item.
|
||||
|
||||
Returns `true` if the item is removed or `false` if the item doesn't exist.
|
||||
|
||||
#### .clear()
|
||||
|
||||
Delete all items.
|
||||
|
||||
#### .resize(maxSize)
|
||||
|
||||
Update the `maxSize`, discarding items as necessary. Insertion order is mostly preserved, though this is not a strong guarantee.
|
||||
|
||||
Useful for on-the-fly tuning of cache sizes in live systems.
|
||||
|
||||
#### .keys()
|
||||
|
||||
Iterable for all the keys.
|
||||
|
||||
#### .values()
|
||||
|
||||
Iterable for all the values.
|
||||
|
||||
#### .entriesAscending()
|
||||
|
||||
Iterable for all entries, starting with the oldest (ascending in recency).
|
||||
|
||||
#### .entriesDescending()
|
||||
|
||||
Iterable for all entries, starting with the newest (descending in recency).
|
||||
|
||||
#### .size
|
||||
|
||||
The stored item count.
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
<b>
|
||||
<a href="https://tidelift.com/subscription/pkg/npm-quick-lru?utm_source=npm-quick-lru&utm_medium=referral&utm_campaign=readme">Get professional support for this package with a Tidelift subscription</a>
|
||||
</b>
|
||||
<br>
|
||||
<sub>
|
||||
Tidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.
|
||||
</sub>
|
||||
</div>
|
3
backend/node_modules/@esbuild/win32-x64/README.md
generated
vendored
3
backend/node_modules/@esbuild/win32-x64/README.md
generated
vendored
@ -1,3 +0,0 @@
|
||||
# esbuild
|
||||
|
||||
This is the Windows 64-bit binary for esbuild, a JavaScript bundler and minifier. See https://github.com/evanw/esbuild for details.
|
BIN
backend/node_modules/@esbuild/win32-x64/esbuild.exe
generated
vendored
BIN
backend/node_modules/@esbuild/win32-x64/esbuild.exe
generated
vendored
Binary file not shown.
20
backend/node_modules/@esbuild/win32-x64/package.json
generated
vendored
20
backend/node_modules/@esbuild/win32-x64/package.json
generated
vendored
@ -1,20 +0,0 @@
|
||||
{
|
||||
"name": "@esbuild/win32-x64",
|
||||
"version": "0.25.4",
|
||||
"description": "The Windows 64-bit binary for esbuild, a JavaScript bundler.",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/evanw/esbuild.git"
|
||||
},
|
||||
"license": "MIT",
|
||||
"preferUnplugged": true,
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"os": [
|
||||
"win32"
|
||||
],
|
||||
"cpu": [
|
||||
"x64"
|
||||
]
|
||||
}
|
165
backend/node_modules/@fortawesome/fontawesome-free/LICENSE.txt
generated
vendored
165
backend/node_modules/@fortawesome/fontawesome-free/LICENSE.txt
generated
vendored
@ -1,165 +0,0 @@
|
||||
Fonticons, Inc. (https://fontawesome.com)
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Font Awesome Free License
|
||||
|
||||
Font Awesome Free is free, open source, and GPL friendly. You can use it for
|
||||
commercial projects, open source projects, or really almost whatever you want.
|
||||
Full Font Awesome Free license: https://fontawesome.com/license/free.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/)
|
||||
|
||||
The Font Awesome Free download is licensed under a Creative Commons
|
||||
Attribution 4.0 International License and applies to all icons packaged
|
||||
as SVG and JS file types.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
# Fonts: SIL OFL 1.1 License
|
||||
|
||||
In the Font Awesome Free download, the SIL OFL license applies to all icons
|
||||
packaged as web and desktop font files.
|
||||
|
||||
Copyright (c) 2024 Fonticons, Inc. (https://fontawesome.com)
|
||||
with Reserved Font Name: "Font Awesome".
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
SIL OPEN FONT LICENSE
|
||||
Version 1.1 - 26 February 2007
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting — in part or in whole — any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
# Code: MIT License (https://opensource.org/licenses/MIT)
|
||||
|
||||
In the Font Awesome Free download, the MIT license applies to all non-font and
|
||||
non-icon files.
|
||||
|
||||
Copyright 2024 Fonticons, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in the
|
||||
Software without restriction, including without limitation the rights to use, copy,
|
||||
modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
||||
and to permit persons to whom the Software is furnished to do so, subject to the
|
||||
following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
# Attribution
|
||||
|
||||
Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font
|
||||
Awesome Free files already contain embedded comments with sufficient
|
||||
attribution, so you shouldn't need to do anything additional when using these
|
||||
files normally.
|
||||
|
||||
We've kept attribution comments terse, so we ask that you do not actively work
|
||||
to remove them from files, especially code. They're a great way for folks to
|
||||
learn about Font Awesome.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
# Brand Icons
|
||||
|
||||
All brand icons are trademarks of their respective owners. The use of these
|
||||
trademarks does not indicate endorsement of the trademark holder by Font
|
||||
Awesome, nor vice versa. **Please do not use brand logos for any purpose except
|
||||
to represent the company, product, or service to which they refer.**
|
38
backend/node_modules/@fortawesome/fontawesome-free/README.md
generated
vendored
38
backend/node_modules/@fortawesome/fontawesome-free/README.md
generated
vendored
@ -1,38 +0,0 @@
|
||||
# @fortawesome/fontawesome-free - The Official Font Awesome 6 NPM package
|
||||
|
||||
> "I came here to chew bubblegum and install Font Awesome 6 - and I'm all out of bubblegum"
|
||||
|
||||
[](https://www.npmjs.com/package/@fortawesome/fontawesome-free)
|
||||
|
||||
## Installation
|
||||
|
||||
```
|
||||
$ npm i --save @fortawesome/fontawesome-free
|
||||
```
|
||||
|
||||
Or
|
||||
|
||||
```
|
||||
$ yarn add @fortawesome/fontawesome-free
|
||||
```
|
||||
|
||||
## What's included?
|
||||
|
||||
**This package includes all the same files available through our Free and Pro CDN.**
|
||||
|
||||
* /js - All JavaScript files associated with Font Awesome 6 SVG with JS
|
||||
* /css - All CSS using the classic Web Fonts with CSS implementation
|
||||
* /sprites - SVG icons packaged in a convenient sprite
|
||||
* /scss, /less - CSS Pre-processor files for Web Fonts with CSS
|
||||
* /webfonts - Accompanying files for Web Fonts with CSS
|
||||
* /svg - Individual icon files in SVG format
|
||||
|
||||
## Documentation
|
||||
|
||||
Get started [here](https://docs.fontawesome.com/web/setup/get-started). Continue your journey [here](https://docs.fontawesome.com/web/setup/packages).
|
||||
|
||||
Or go straight to the [API documentation](https://docs.fontawesome.com/apis/javascript/get-started).
|
||||
|
||||
## Issues and support
|
||||
|
||||
Start with [GitHub issues](https://github.com/FortAwesome/Font-Awesome/issues) and ping us on [Twitter](https://twitter.com/fontawesome) if you need to.
|
7913
backend/node_modules/@fortawesome/fontawesome-free/css/all.css
generated
vendored
7913
backend/node_modules/@fortawesome/fontawesome-free/css/all.css
generated
vendored
File diff suppressed because it is too large
Load Diff
9
backend/node_modules/@fortawesome/fontawesome-free/css/all.min.css
generated
vendored
9
backend/node_modules/@fortawesome/fontawesome-free/css/all.min.css
generated
vendored
File diff suppressed because one or more lines are too long
1609
backend/node_modules/@fortawesome/fontawesome-free/css/brands.css
generated
vendored
1609
backend/node_modules/@fortawesome/fontawesome-free/css/brands.css
generated
vendored
File diff suppressed because it is too large
Load Diff
6
backend/node_modules/@fortawesome/fontawesome-free/css/brands.min.css
generated
vendored
6
backend/node_modules/@fortawesome/fontawesome-free/css/brands.min.css
generated
vendored
File diff suppressed because one or more lines are too long
6243
backend/node_modules/@fortawesome/fontawesome-free/css/fontawesome.css
generated
vendored
6243
backend/node_modules/@fortawesome/fontawesome-free/css/fontawesome.css
generated
vendored
File diff suppressed because it is too large
Load Diff
9
backend/node_modules/@fortawesome/fontawesome-free/css/fontawesome.min.css
generated
vendored
9
backend/node_modules/@fortawesome/fontawesome-free/css/fontawesome.min.css
generated
vendored
File diff suppressed because one or more lines are too long
19
backend/node_modules/@fortawesome/fontawesome-free/css/regular.css
generated
vendored
19
backend/node_modules/@fortawesome/fontawesome-free/css/regular.css
generated
vendored
@ -1,19 +0,0 @@
|
||||
/*!
|
||||
* Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com
|
||||
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||
* Copyright 2024 Fonticons, Inc.
|
||||
*/
|
||||
:root, :host {
|
||||
--fa-style-family-classic: 'Font Awesome 6 Free';
|
||||
--fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free'; }
|
||||
|
||||
@font-face {
|
||||
font-family: 'Font Awesome 6 Free';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: block;
|
||||
src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }
|
||||
|
||||
.far,
|
||||
.fa-regular {
|
||||
font-weight: 400; }
|
6
backend/node_modules/@fortawesome/fontawesome-free/css/regular.min.css
generated
vendored
6
backend/node_modules/@fortawesome/fontawesome-free/css/regular.min.css
generated
vendored
@ -1,6 +0,0 @@
|
||||
/*!
|
||||
* Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com
|
||||
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||
* Copyright 2024 Fonticons, Inc.
|
||||
*/
|
||||
:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400}
|
19
backend/node_modules/@fortawesome/fontawesome-free/css/solid.css
generated
vendored
19
backend/node_modules/@fortawesome/fontawesome-free/css/solid.css
generated
vendored
@ -1,19 +0,0 @@
|
||||
/*!
|
||||
* Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com
|
||||
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||
* Copyright 2024 Fonticons, Inc.
|
||||
*/
|
||||
:root, :host {
|
||||
--fa-style-family-classic: 'Font Awesome 6 Free';
|
||||
--fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; }
|
||||
|
||||
@font-face {
|
||||
font-family: 'Font Awesome 6 Free';
|
||||
font-style: normal;
|
||||
font-weight: 900;
|
||||
font-display: block;
|
||||
src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
|
||||
|
||||
.fas,
|
||||
.fa-solid {
|
||||
font-weight: 900; }
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user