From 96c7ba3ec1dae8c74cc00f08db4be181a07b571f Mon Sep 17 00:00:00 2001 From: Bleese Date: Fri, 22 May 2026 15:50:35 +0000 Subject: [PATCH] CORS error cleaned --- 001.BACKEND/.dockerignore | 10 ++ 001.BACKEND/Dockerfile | 50 ++++++ 001.BACKEND/core/settings.py | 102 +++-------- 001.FRONTEND/.dockerignore | 2 + 001.FRONTEND/Dockerfile | 30 ++++ 001.FRONTEND/astro.config.mjs | 27 ++- 001.FRONTEND/package-lock.json | 164 +++++++++--------- 001.FRONTEND/src/layouts/Layout.astro | 25 +-- 001.FRONTEND/src/lib/api.js | 50 +++--- .../src/pages/fleet/vozila/[id].astro | 144 +++++++++++---- 001.FRONTEND/src/styles/global.css | 9 +- 11 files changed, 372 insertions(+), 241 deletions(-) create mode 100644 001.BACKEND/.dockerignore create mode 100644 001.BACKEND/Dockerfile create mode 100644 001.FRONTEND/.dockerignore create mode 100644 001.FRONTEND/Dockerfile diff --git a/001.BACKEND/.dockerignore b/001.BACKEND/.dockerignore new file mode 100644 index 0000000..0fe958f --- /dev/null +++ b/001.BACKEND/.dockerignore @@ -0,0 +1,10 @@ +venv/ +.venv/ +__pycache__/ +*.pyc +.git/ +.gitignore +db.sqlite3 +.env +staticfiles/ +media/ diff --git a/001.BACKEND/Dockerfile b/001.BACKEND/Dockerfile new file mode 100644 index 0000000..0fa0492 --- /dev/null +++ b/001.BACKEND/Dockerfile @@ -0,0 +1,50 @@ +M python:3.12-slim AS builder + +# Sprječava Python da zapisuje .pyc datoteke na disk +ENV PYTHONDONTWRITEBYTECODE=1 +# Sprječava Python da sprema ispis u međumemoriju (odmah vidiš logove) +ENV PYTHONUNBUFFERED=1 + +WORKDIR /app + +# Instalacija sistemskih ovisnosti potrebnih za kompajliranje pojedinih Python paketa +# (npr. gcc i libpq-dev ako koristiš PostgreSQL) +RUN apt-get update && apt-get install --no-install-recommends -y \ + build-essential \ + libpq-dev \ + && rm -rf /var/lib/apt/lists/* + +# Nadogradnja pip-a i kopiranje requirements datoteke +RUN pip install --no-cache-dir --upgrade pip +COPY requirements.txt . + +# Instalacija paketa u lokalni direktorij unutar builder faze +RUN pip install --no-cache-dir --user -r requirements.txt + + +# --- 2. FAZA: Pokretanje (Prodajni Runtime) --- +FROM python:3.12-slim AS runner + +ENV PYTHONDONTWRITEBYTECODE=1 +ENV PYTHONUNBUFFERED=1 +ENV PATH=/root/.local/bin:$PATH + +WORKDIR /app + +# Ako koristiš PostgreSQL na produkciji, ovdje ti treba samo lagana runtime knjižnica +RUN apt-get update && apt-get install --no-install-recommends -y \ + libpq5 \ + && rm -rf /var/lib/apt/lists/* + +# Kopiramo instalirane Python pakete iz prve faze +COPY --from=builder /root/.local /root/.local +# Kopiramo ostatak izvornog koda Django aplikacije +COPY . . + +# Otvaramo port 8000 na kojem će slušati Gunicorn +EXPOSE 8000 + +# Pokretanje aplikacije produkcijskim Gunicorn serverom +# Zamijeni "core" s točnim nazivom mape u kojoj ti se nalazi wsgi.py datoteka! +CMD ["gunicorn", "--bind", "0.0.0.0:8000", "--workers", "3", "core.wsgi:application"] + diff --git a/001.BACKEND/core/settings.py b/001.BACKEND/core/settings.py index 6759239..5556fe7 100644 --- a/001.BACKEND/core/settings.py +++ b/001.BACKEND/core/settings.py @@ -1,13 +1,5 @@ """ Django settings for core project. - -Generated by 'django-admin startproject' using Django 6.0.5. - -For more information on this file, see -https://docs.djangoproject.com/en/6.0/topics/settings/ - -For the full list of settings and their values, see -https://docs.djangoproject.com/en/6.0/ref/settings/ """ import os @@ -20,16 +12,11 @@ BASE_DIR = Path(__file__).resolve().parent.parent load_dotenv(BASE_DIR / '.env') -# Quick-start development settings - unsuitable for production -# See https://docs.djangoproject.com/en/6.0/howto/deployment/checklist/ - -# SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = os.getenv( 'DJANGO_SECRET_KEY', 'django-insecure-!228(8gy#3a7l-@_^g1s4bipj&@*+_415+ulx0^-9jw(%ksdvy', ) -# SECURITY WARNING: don't run with debug turned on in production! DEBUG = os.getenv('DJANGO_DEBUG', 'True').lower() in ('1', 'true', 'yes', 'on') # Custom user model @@ -42,7 +29,6 @@ ALLOWED_HOSTS = [ ] # Application definition - INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', @@ -93,10 +79,6 @@ TEMPLATES = [ WSGI_APPLICATION = 'core.wsgi.application' - -# Database -# https://docs.djangoproject.com/en/6.0/ref/settings/#databases - DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', @@ -104,93 +86,56 @@ DATABASES = { } } - -# Password validation -# https://docs.djangoproject.com/en/6.0/ref/settings/#auth-password-validators - AUTH_PASSWORD_VALIDATORS = [ - { - 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', - }, + { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator' }, + { 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator' }, + { 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator' }, + { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator' }, ] - -# Internationalization -# https://docs.djangoproject.com/en/6.0/topics/i18n/ - LANGUAGE_CODE = 'en-us' - TIME_ZONE = 'Europe/Zagreb' - USE_I18N = True - USE_TZ = True - -# Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/6.0/howto/static-files/ - STATIC_URL = 'static/' STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') - -# Automatski koristi filtriranje na svim API endpointima koji podržavaju filtriranje - if DEBUG: - # Razvojni način: Svatko može čitati i pisati bez tokena - DEFAULT_PERMISSION_CLASSES = [ - 'rest_framework.permissions.AllowAny', - ] + DEFAULT_PERMISSION_CLASSES = [ 'rest_framework.permissions.AllowAny' ] else: - # Produkcijski način: Pristup samo uz ispravan JWT token - DEFAULT_PERMISSION_CLASSES = [ - 'rest_framework.permissions.IsAuthenticated', - ] + DEFAULT_PERMISSION_CLASSES = [ 'rest_framework.permissions.IsAuthenticated' ] REST_FRAMEWORK = { 'DEFAULT_FILTER_BACKENDS': [ 'django_filters.rest_framework.DjangoFilterBackend' ], - # JWT Autentikacija 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_simplejwt.authentication.JWTAuthentication', ), - # Postavi da su po defaultu svi API-ji zaključani (samo za prijavljene) 'DEFAULT_PERMISSION_CLASSES': DEFAULT_PERMISSION_CLASSES } - -# Podesiti koliko dugo vrijede JWT tokeni (npr. 1 sat za pristup, 30 dana za refresh) SIMPLE_JWT = { 'ACCESS_TOKEN_LIFETIME': timedelta(minutes=60), 'REFRESH_TOKEN_LIFETIME': timedelta(days=30), 'AUTH_HEADER_TYPES': ('Bearer',), } -# Media files (npr. slike vozila) - MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') - -# CORS postavke - dozvoli frontend aplikaciji da komunicira s backendom - +# CORS POSTAVKE - POPRAVLJENI ZAREZI I FORMALNI ORIGINI if DEBUG: CORS_ALLOW_ALL_ORIGINS = True else: + CORS_ALLOW_ALL_ORIGINS = False CORS_ALLOWED_ORIGINS = [ - "http://localhost:4321", # Ovo je adresa na kojoj će Astro frontend biti dostupan - "http://127.0.0.1:4321", + host.strip() + for host in os.getenv('DJANGO_CORS_ALLOWED_ORIGINS', '').split(',') + if host.strip() ] + CORS_ALLOW_METHODS = [ "DELETE", "GET", @@ -201,10 +146,19 @@ CORS_ALLOW_METHODS = [ ] CORS_ALLOW_HEADERS = [ - "accept", - "authorization", - "content-type", - "user-agent", - "x-csrftoken", - "x-requested-with", -] \ No newline at end of file + 'accept', + 'accept-encoding', + 'authorization', + 'content-type', + 'dnt', + 'origin', + 'user-agent', + 'x-csrftoken', + 'x-requested-with', + 'access-control-request-private-network', +] + +# Ako preglednik pošalje PNA preflight zahtjev sa lokalne mreže, +# corsheaders će ga s ovim u potpunosti odobriti bez redirecta +CORS_ALLOW_PRIVATE_NETWORK = True +CORS_PREFLIGHT_MAX_AGE = 86400 diff --git a/001.FRONTEND/.dockerignore b/001.FRONTEND/.dockerignore new file mode 100644 index 0000000..6a1c4c1 --- /dev/null +++ b/001.FRONTEND/.dockerignore @@ -0,0 +1,2 @@ +node_modules +.astro diff --git a/001.FRONTEND/Dockerfile b/001.FRONTEND/Dockerfile new file mode 100644 index 0000000..c1c3302 --- /dev/null +++ b/001.FRONTEND/Dockerfile @@ -0,0 +1,30 @@ +# --- 1. FAZA: Izgradnja (Build) --- +FROM node:22-alpine AS builder +WORKDIR /app + +# Kopiramo samo datoteke ovisnosti kako bismo iskoristili Docker cache +COPY package*.json ./ +RUN npm install + +# Kopiramo ostatak izvornog koda i pokrećemo build +COPY . . +RUN npm run build + +# --- 2. FAZA: Pokretanje (Run) --- +FROM node:22-alpine AS runner +WORKDIR /app + +# Definiramo produkcijsko okruženje +ENV NODE_ENV=production +ENV HOST=0.0.0.0 +ENV PORT=4321 + +# Kopiramo samo izgrađene datoteke iz prve faze (dist) i potrebne module +COPY --from=builder /app/dist ./dist +COPY --from=builder /app/node_modules ./node_modules +COPY --from=builder /app/package*.json ./ + +EXPOSE 4321 + +# Pokretanje aplikacije izravno preko Node-a +CMD ["node", "./dist/server/entry.mjs"] diff --git a/001.FRONTEND/astro.config.mjs b/001.FRONTEND/astro.config.mjs index 657c7cc..f8c7b39 100644 --- a/001.FRONTEND/astro.config.mjs +++ b/001.FRONTEND/astro.config.mjs @@ -1,25 +1,34 @@ // @ts-check import { defineConfig } from 'astro/config'; - import node from '@astrojs/node'; - import tailwindcss from '@tailwindcss/vite'; -// https://astro.build/config export default defineConfig({ - // Ovo omogućuje dinamičke rute bez getStaticPaths output: 'server', - adapter: node({ - mode: 'standalone' + mode: 'standalone', }), + server: { + host: true, + port: 4321, + }, + image: { // Dodaj domene s kojih Astro smije povlačiti i optimizirati slike - domains: ['localhost', '127.0.0.1'], + domains: ['localhost', '127.0.0.1','v003-backend.captain.mitteworkspace.cloud'], + }, + + build: { + inlineStylesheets: 'always' }, vite: { - plugins: [tailwindcss()] + plugins: [tailwindcss()], + // KLJUČNO ZA TAILWIND v4 + NODE standalone SSR: + ssr: { + // Prisiljava Vite da uključi Tailwind v4 stilove u serverski bundle + noExternal: ['tailwindcss', '@tailwindcss/vite'] + }, } -}); \ No newline at end of file +}); diff --git a/001.FRONTEND/package-lock.json b/001.FRONTEND/package-lock.json index 1dcc8dc..53e7c88 100644 --- a/001.FRONTEND/package-lock.json +++ b/001.FRONTEND/package-lock.json @@ -8,7 +8,7 @@ "name": "poslovanje", "version": "0.0.1", "dependencies": { - "@astrojs/node": "^10.1.1", + "@astrojs/node": "^10.0.6", "@tailwindcss/vite": "^4.2.4", "astro": "^6.1.9", "flowbite": "^4.0.1", @@ -1186,9 +1186,9 @@ "license": "MIT" }, "node_modules/@oxc-project/types": { - "version": "0.130.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.130.0.tgz", - "integrity": "sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q==", + "version": "0.132.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.132.0.tgz", + "integrity": "sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==", "license": "MIT", "peer": true, "funding": { @@ -1206,9 +1206,9 @@ } }, "node_modules/@rolldown/binding-android-arm64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.1.tgz", - "integrity": "sha512-fJI3I0r3C3Oj/zdBCpaCmBRZYf07xpaq4yCfDDoSFm+beWNzbIl26puW8RraUdugoJw/95zerNOn6jasAhzSmg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.2.tgz", + "integrity": "sha512-ZS4D1JPGn/MYQN/SYDWftIE/nVsM8j/AFOYEzAoOE2O3NktQOZru+/vYXGbR/qtdLdIfGCP0lcoJiYVzsEz+iQ==", "cpu": [ "arm64" ], @@ -1223,9 +1223,9 @@ } }, "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.1.tgz", - "integrity": "sha512-cKnAhWEsV7TPcA/5EAteDp6KcJZBQ2G+BqE7zayMMi7kMvwRsbv7WT9aOnn0WNl4SKEIf43vjS31iUPu80nzXg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.2.tgz", + "integrity": "sha512-vdFA9+C/rekyGce7WqHs/xoT0ioZEWaOFyZLIV1mEeNFaFDUQrPIo8Vs2GvJ6eetb3rzDUtUBgzto3ExpXJB3w==", "cpu": [ "arm64" ], @@ -1240,9 +1240,9 @@ } }, "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.1.tgz", - "integrity": "sha512-YKrVwQjIRBPo+5G/u03wGjbdy4q7pyzCe93DK9VJ7zkVmeg8LJ7GbgsiHWdR4xSoe4CAXRD7Bcjgbtr64bkXNg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.2.tgz", + "integrity": "sha512-BewSOwTHazv77DTYiAZXSqqKZ4KP/KonFisDMVU7PImxoWfB2aepnPhd2E4SWz3zDzYgDNbs6jBmTdgNnF02GA==", "cpu": [ "x64" ], @@ -1257,9 +1257,9 @@ } }, "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.1.tgz", - "integrity": "sha512-z/oBsREo46SsFqBwYtFe0kpJeBijAT48O/WXLI4suiCLBkr03RTtTJMCzSdDd2znlh8VJizL09XVkQgk8IZonw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.2.tgz", + "integrity": "sha512-m41o7M0YWtUdqk61Tb+jnKb2rN++iRdIASlExkUoKfIAH30DOHCB8fVLzSUpbWHHU8esmEioY62PxzexE8MBuA==", "cpu": [ "x64" ], @@ -1274,9 +1274,9 @@ } }, "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.1.tgz", - "integrity": "sha512-ik8q7GM11zxvYxFc2PeDcT6TBvhCQMaUxfph/M5l9sKuTs/Sjg3L+Byw0F7w0ZVLBZmx30P+gG0ECzzN+MFcmQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.2.tgz", + "integrity": "sha512-jcojB9H7W/jS29pMKWAK1N+fU99vXodHDTatS3b3y/XSOCiHo0kkA74pL3jJmkoQtYpOCxDvaKs1fo2Ij/1X5w==", "cpu": [ "arm" ], @@ -1291,9 +1291,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.1.tgz", - "integrity": "sha512-QoSx2EkyrrdZ6kcyE8stqZ62t0Yra8Fs5ia9lOxJrh6TMQJK7gQKmscdTHf7pOXKREKrVwOtJcQG3qVSfc866A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.2.tgz", + "integrity": "sha512-1jn6qDU5iiOgFgygDzKUuKP0maTi0/f1+sBLgvij/76C77Nm3ts6ufz9Bjg5q5dduxiUIxtq86JIoBvo1xQ4Ig==", "cpu": [ "arm64" ], @@ -1308,9 +1308,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.1.tgz", - "integrity": "sha512-uwNwFpwKeNiZawfAWBgg0VIztPTV3ihhh1vV334h9ivnNLorxnQMU6Fz8wG1Zb4Qh9LC1/MkcyT3YlDXG3Rsgg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.2.tgz", + "integrity": "sha512-QVLO/czFMdoMFSqlX3bcswcJNm/23r+qoa/jgtmFc/qEp6/jXmIkDjF/XIo8dPfGaiwy1xfQn8o77L79GeXFgw==", "cpu": [ "arm64" ], @@ -1325,9 +1325,9 @@ } }, "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.1.tgz", - "integrity": "sha512-zY1bul7OWr7DFBiJ++wofXvnr8B45ce3QsQUhKrIhXsygAh7bTkwyeM1bi1a2g5C/yC/N8TZyGDEoMfm/l9mpg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.2.tgz", + "integrity": "sha512-hgO5Abm0w5UL6FEa2iFnZqo2KlK7TQ5QhV5x09hujBf7t5KzHQ1VmfPuTpqRy/rNlSxua3eWH374xxiVrP+lcA==", "cpu": [ "ppc64" ], @@ -1342,9 +1342,9 @@ } }, "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.1.tgz", - "integrity": "sha512-0frlsT/f4Ft6I7SMESTKnF3cZsdicQn1dCMkF/jT9wDLE+gGoiQfv1nmT9e+s7s/fekvvy6tZM2jHvI2tkbJDQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.2.tgz", + "integrity": "sha512-fy8rXxuYEu602abC8MUNaPjYLIFzReOaEIEMKMUa0rFEUxNpVXhs15KSSQ4qlqSaM7B6rcj9rDZgADh/IGDzLQ==", "cpu": [ "s390x" ], @@ -1359,9 +1359,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.1.tgz", - "integrity": "sha512-XABVmGp9Tg0WspTVvwduTc4fpqy6JnAUrSQe6OuyqD/03nI7r0O9OWUkMIwFrjKAIqolvqoA4ZrJppgwE0Gxmw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.2.tgz", + "integrity": "sha512-0+bOkiQ779+r1WpoHOWHqncvyySci0vKph+myNDYb+im6meJAzHQXay6oEgnkHuUGouM1LKTZwqKpBow6Kj7CQ==", "cpu": [ "x64" ], @@ -1376,9 +1376,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.1.tgz", - "integrity": "sha512-bV4fzswuzVcKD90o/VM6QqKxnxlDq0g2BISDLNVmxrnhpv1DDbyPhCIjYfvzYLV+MvkKKnQt2Q6AO86SEBULUQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.2.tgz", + "integrity": "sha512-mjSkrzZK5Qsl0a9d1JgILOiuZOSDTVdKENcSXBoqbzSrspLR/4/IRVDo5wd2GgZjNss/viBFJdeq+j7qH2nypw==", "cpu": [ "x64" ], @@ -1393,9 +1393,9 @@ } }, "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.1.tgz", - "integrity": "sha512-/Mh0Zhq3OP7fVs0kcQHZP6lZEthMGTaSf8UBQYSFEZDWGXXlEC+nJ6EqenaK2t4LBXMe3A+K/G2BVXXdtOr4PQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.2.tgz", + "integrity": "sha512-1v5vHasdfQAZoEHakBV72LIFAC9JjnymsiKxp+GEr/ma3+NJCPSaYK+qavInOovJkgwFrs7GccX2d6IgDA3Z5w==", "cpu": [ "arm64" ], @@ -1410,9 +1410,9 @@ } }, "node_modules/@rolldown/binding-wasm32-wasi": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.1.tgz", - "integrity": "sha512-+1xc9X45l8ufsBAm6Gjvx2qDRIY9lTVt0cgWNcJ+1gdhXvkbxePA60yRTwSTuXL09CMhyJmjpV7E3NoyxbqFQQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.2.tgz", + "integrity": "sha512-mb1VobWn6NheziTk5/WEaR6AKVbrwT5sOi6C7zk3gy/pD1qtJfU1j4PgTo2NJnOtbL9Dl3Aeei8w9jJ7qC2jZQ==", "cpu": [ "wasm32" ], @@ -1429,9 +1429,9 @@ } }, "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.1.tgz", - "integrity": "sha512-1D+UqZdfnuR+Jy1GgMJwi85bD40H21uNmOPRWQhw4oRSuolZ/B5rixZ45DK2KXOTCvmVCecauWgEhbw8bI7tOw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.2.tgz", + "integrity": "sha512-SqKonF56vA/L2yHwHYcEp2P34URpOZ7d1fS635cTkpDnUtEGdUbhI6NzsPdqeSWvAAeGDrxjWjNmibDIdFf9/A==", "cpu": [ "arm64" ], @@ -1446,9 +1446,9 @@ } }, "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.1.tgz", - "integrity": "sha512-INAycaWuhlOK3wk4mRHGsdgwYWmd9cChdPdE9bwWmy6rn9VqVNYNFGhOdXrofXUxwHIncSiPNb8tNm8knDVIeQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.2.tgz", + "integrity": "sha512-v7qRI7gXLRINcOGXt+7YmAZ6iFuyZVMIoXAxhd8oP+DR9dLfL9GfNIx7PLMxmhZdvq8waUJBQiWN9EKNy+TRBQ==", "cpu": [ "x64" ], @@ -2337,9 +2337,9 @@ } }, "node_modules/astro": { - "version": "6.3.6", - "resolved": "https://registry.npmjs.org/astro/-/astro-6.3.6.tgz", - "integrity": "sha512-lM30gGI/iASK9Z1WQVnBBYzxVwDv8slkXbJOF7FNJdZQeBrFETpsQvYoLRupM/adt2ObP5hkYAWEeCjofoqlRw==", + "version": "6.3.7", + "resolved": "https://registry.npmjs.org/astro/-/astro-6.3.7.tgz", + "integrity": "sha512-zIeDRrI0qNgN1lcCjNqt6/IVCVej7VwSa326cO8uP9BOk1cg4QuffhLnOn2gCgWQr32/wxpSRFfXiLKHglu1Tw==", "license": "MIT", "dependencies": { "@astrojs/compiler": "^4.0.0", @@ -2920,9 +2920,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.21.6", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.6.tgz", - "integrity": "sha512-aNnGCvbJ/RIyWo1IuhNdVjnNF+EjH9wpzpNHt+ci/m9He9LJvUN8wrCcXjp9cWsGNAuvSpVFTx/vraAFQ8qGjQ==", + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.22.0.tgz", + "integrity": "sha512-xYcDWrpELkFzz9SpZ3PlI6Eu6eD93Yf0WLDRxikGhWJ3MAir2SNZTIVCVZqZ/NUyx8AdMc2gT9C0gPiw18kG+A==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", @@ -5305,13 +5305,13 @@ } }, "node_modules/rolldown": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.1.tgz", - "integrity": "sha512-X0KQHljNnEkWNqqiz9zJrGunh1B0HgOxLXvnFpCOcadzcy5qohZ3tqMEUg00vncoRovXuK3ZqCT9KnnKzoInFQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.2.tgz", + "integrity": "sha512-oZx5zVDtVB44AW3eaifgDml1gWRDZGvjcfdxonE4swNPG98PrrXjaO/KrnUjzlMnztCCRVlUueA1kCXhARGk6g==", "license": "MIT", "peer": true, "dependencies": { - "@oxc-project/types": "=0.130.0", + "@oxc-project/types": "=0.132.0", "@rolldown/pluginutils": "^1.0.0" }, "bin": { @@ -5321,21 +5321,21 @@ "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.0.1", - "@rolldown/binding-darwin-arm64": "1.0.1", - "@rolldown/binding-darwin-x64": "1.0.1", - "@rolldown/binding-freebsd-x64": "1.0.1", - "@rolldown/binding-linux-arm-gnueabihf": "1.0.1", - "@rolldown/binding-linux-arm64-gnu": "1.0.1", - "@rolldown/binding-linux-arm64-musl": "1.0.1", - "@rolldown/binding-linux-ppc64-gnu": "1.0.1", - "@rolldown/binding-linux-s390x-gnu": "1.0.1", - "@rolldown/binding-linux-x64-gnu": "1.0.1", - "@rolldown/binding-linux-x64-musl": "1.0.1", - "@rolldown/binding-openharmony-arm64": "1.0.1", - "@rolldown/binding-wasm32-wasi": "1.0.1", - "@rolldown/binding-win32-arm64-msvc": "1.0.1", - "@rolldown/binding-win32-x64-msvc": "1.0.1" + "@rolldown/binding-android-arm64": "1.0.2", + "@rolldown/binding-darwin-arm64": "1.0.2", + "@rolldown/binding-darwin-x64": "1.0.2", + "@rolldown/binding-freebsd-x64": "1.0.2", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.2", + "@rolldown/binding-linux-arm64-gnu": "1.0.2", + "@rolldown/binding-linux-arm64-musl": "1.0.2", + "@rolldown/binding-linux-ppc64-gnu": "1.0.2", + "@rolldown/binding-linux-s390x-gnu": "1.0.2", + "@rolldown/binding-linux-x64-gnu": "1.0.2", + "@rolldown/binding-linux-x64-musl": "1.0.2", + "@rolldown/binding-openharmony-arm64": "1.0.2", + "@rolldown/binding-wasm32-wasi": "1.0.2", + "@rolldown/binding-win32-arm64-msvc": "1.0.2", + "@rolldown/binding-win32-x64-msvc": "1.0.2" } }, "node_modules/rollup": { @@ -5398,9 +5398,9 @@ } }, "node_modules/semver": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", - "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", + "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -6013,16 +6013,16 @@ } }, "node_modules/vite": { - "version": "8.0.13", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.13.tgz", - "integrity": "sha512-MFtjBYgzmSxmgA4RAfjIyXWpGe1oALnjgUTzzV7QLx/TKxCzjtMH6Fd9/eVK+5Fg1qNoz5VAwsmMs/NofrmJvw==", + "version": "8.0.14", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.14.tgz", + "integrity": "sha512-s4BJJ+5y1pYL6Otw51FHhVJQhPnuRinKig64g/1+EUNaJsd3gCKdD31IPFvswUgW9/60QT9oFHbZHbQK5imcxw==", "license": "MIT", "peer": true, "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", - "postcss": "^8.5.14", - "rolldown": "1.0.1", + "postcss": "^8.5.15", + "rolldown": "1.0.2", "tinyglobby": "^0.2.16" }, "bin": { diff --git a/001.FRONTEND/src/layouts/Layout.astro b/001.FRONTEND/src/layouts/Layout.astro index c795762..ef44e8a 100644 --- a/001.FRONTEND/src/layouts/Layout.astro +++ b/001.FRONTEND/src/layouts/Layout.astro @@ -10,9 +10,9 @@ interface Props { description?: string; } -const { - title = site.title, - description = site.description +const { + title = site.title, + description = site.description } = Astro.props; --- @@ -24,16 +24,16 @@ const { - + {title} | {site.title} - + - + - +