diff --git a/.github/workflows/docker-image-Frontend.yml b/.github/workflows/docker-image-Frontend.yml new file mode 100644 index 0000000..8a5faa0 --- /dev/null +++ b/.github/workflows/docker-image-Frontend.yml @@ -0,0 +1,67 @@ +name: Create and publish Frontend Docker image + +# Configures this workflow to run every time a change is pushed to the branch called `release`. +on: + push: + branches: [ "master", "develop"] + pull_request: + branches: [ "master", "develop", "feature/**"] + types: ["opened", "synchronize"] + +# Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds. +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }}-Frontend + TAG_NAME: ${{ github.repository }} + +# There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu. +jobs: + build-and-push-frontend-image: + runs-on: ubuntu-latest + # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job. + permissions: + contents: read + packages: write + attestations: write + id-token: write + # + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: 8.2 + # Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here. + - name: Log in to the Container registry + uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + # This step uses [docker/metadata-action](https://github.com/docker/metadata-action#about) to extract tags and labels that will be applied to the specified image. The `id` "meta" allows the output of this step to be referenced in a subsequent step. The `images` value provides the base name for the tags and labels. + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + # This step uses the `docker/build-push-action` action to build the image, based on your repository's `Dockerfile`. If the build succeeds, it pushes the image to GitHub Packages. + # It uses the `context` parameter to define the build's context as the set of files located in the specified path. For more information, see "[Usage](https://github.com/docker/build-push-action#usage)" in the README of the `docker/build-push-action` repository. + # It uses the `tags` and `labels` parameters to tag and label the image with the output from the "meta" step. + - name: Build and push Docker image + id: push + uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 + with: + file: ./openshift/frontend.dockerfile + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} +# # This step generates an artifact attestation for the image, which is an unforgeable statement about where and how it was built. It increases supply chain security for people who consume the image. For more information, see "[AUTOTITLE](/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds)." +# * name: Generate artifact attestation +# uses: actions/attest-build-provenance@v1 +# with: +# subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME}} +# subject-digest: ${{ steps.push.outputs.digest }} +# push-to-registry: true +# diff --git a/.github/workflows/docker-image-Laravel.yml b/.github/workflows/docker-image-Laravel.yml index 23a9a91..4496a10 100644 --- a/.github/workflows/docker-image-Laravel.yml +++ b/.github/workflows/docker-image-Laravel.yml @@ -1,37 +1,71 @@ -name: Docker Image Laravel -env: - # 🖊️ EDIT to change the image registry settings. - # Registries such as GHCR, Quay.io, and Docker Hub are supported. - IMAGE_REGISTRY: ghcr.io/utrechtuniversity - IMAGE_REGISTRY_USER: ${{ github.actor }} - IMAGE_REGISTRY_PASSWORD: ${{ github.token }} - COMPOSER_TOKEN: ${{ secrets.ACCESS_TOKEN_GITHUB }} - COMPOSER_AUTH: '{"github-oauth": {"github.com": "${{secrets.ACCESS_TOKEN_GITHUB}}"} }' # [tl! **] - GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN_GITHUB }} +name: Create and publish Backend Docker image + +# Configures this workflow to run every time a change is pushed to the branch called `release`. on: push: - branches: [ "master", "develop", "feature/da_add_la_basepackage"] + branches: [ "master", "develop"] pull_request: - branches: [ "master" ] + branches: [ "master", "develop", "feature/**"] + types: ["opened", "synchronize"] + +# Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds. +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }}-backend + TAG_NAME: ${{ github.repository }} + +# There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu. jobs: - build: + build-and-push-backend-image: runs-on: ubuntu-latest + # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job. + permissions: + contents: read + packages: write + attestations: write + id-token: write + # steps: - - uses: actions/checkout@v4 - - name: Build from Dockerfile - id: build-image - uses: redhat-actions/buildah-build@v2 - with: - image: fsw-openshift - tags: latest develop - dockerfiles: | - ./openshift/openshift.dockerfile - - name: Push to registry - id: push-image - uses: redhat-actions/push-to-registry@v2 - with: - image: ${{ steps.build-image.outputs.image }} - tags: ${{ steps.build-image.outputs.tags }} - registry: ${{ env.IMAGE_REGISTRY }} - username: ${{ env.IMAGE_REGISTRY_USER }} - password: ${{ env.IMAGE_REGISTRY_PASSWORD }} \ No newline at end of file + - name: Checkout repository + uses: actions/checkout@v4 + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: 8.2 + # Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here. + - name: Log in to the Container registry + uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + # This step uses [docker/metadata-action](https://github.com/docker/metadata-action#about) to extract tags and labels that will be applied to the specified image. The `id` "meta" allows the output of this step to be referenced in a subsequent step. The `images` value provides the base name for the tags and labels. + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + # This step uses the `docker/build-push-action` action to build the image, based on your repository's `Dockerfile`. If the build succeeds, it pushes the image to GitHub Packages. + # It uses the `context` parameter to define the build's context as the set of files located in the specified path. For more information, see "[Usage](https://github.com/docker/build-push-action#usage)" in the README of the `docker/build-push-action` repository. + # It uses the `tags` and `labels` parameters to tag and label the image with the output from the "meta" step. + - name: Install dependencies + env: + COMPOSER_AUTH: '{"github-oauth": {"github.com": "${{secrets.COMPOSER_AUTH}}"} }' # [tl! **] + run: composer update && composer install --prefer-dist --no-suggest --no-progress + - name: Build and push Docker image + id: push + uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 + with: + file: ./openshift/openshift.dockerfile + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} +# # This step generates an artifact attestation for the image, which is an unforgeable statement about where and how it was built. It increases supply chain security for people who consume the image. For more information, see "[AUTOTITLE](/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds)." +# * name: Generate artifact attestation +# uses: actions/attest-build-provenance@v1 +# with: +# subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME}} +# subject-digest: ${{ steps.push.outputs.digest }} +# push-to-registry: true +# diff --git a/.github/workflows/docker-image-Nginx.yml b/.github/workflows/docker-image-Nginx.yml index f6cfed7..ebc4694 100644 --- a/.github/workflows/docker-image-Nginx.yml +++ b/.github/workflows/docker-image-Nginx.yml @@ -5,9 +5,10 @@ env: IMAGE_REGISTRY: ghcr.io/utrechtuniversity IMAGE_REGISTRY_USER: ${{ github.actor }} IMAGE_REGISTRY_PASSWORD: ${{ github.token }} + TAG_NAME: ${{ github.repository }} on: push: - branches: [ "master", "develop", "feature/da_opschonen" ] + branches: [ "master", "develop"] pull_request: branches: [ "master" ] jobs: diff --git a/README.md b/README.md index d442926..d5ddf6e 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,9 @@ https://www.redhat.com/sysadmin/codeready-containers Soms wil hij niet starten, dan moet je de vm verwijderen en opnieuw starten: `crc cleanup` +https://console-openshift-console.apps-crc.testing/ +oc login -u developer -p developer https://api.crc.testing:6443 ### Local development: Add the following to your /etc/hosts file: diff --git a/docker-compose.yml b/docker-compose.yml index aefee1e..c038480 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,8 +17,8 @@ services: build: dockerfile: docker/frontend.dockerfile volumes: - - ./:/var/www/public - working_dir: /var/www/public + - ./:/var/www + working_dir: /var/www ports: - "7050:7050" networks: diff --git a/docker/backend.dockerfile b/docker/backend.dockerfile index 3ed4ffc..d21408f 100644 --- a/docker/backend.dockerfile +++ b/docker/backend.dockerfile @@ -5,7 +5,7 @@ COPY composer.lock composer.json /var/www/ WORKDIR /var/www # upgrades! -RUN apt-get update -y +RUN apt-get update RUN apt-get -y dist-upgrade RUN apt-get -qq install -y zip @@ -13,7 +13,7 @@ RUN apt-get -qq install -y sudo nano RUN apt-get -qq install -y mariadb-client RUN apt-get -qq install -y libonig-dev -RUN apt-get -qq install -y ca-certificates curl gnupg +RUN apt-get -qq install -y ca-certificates curl gnupg git # required for sending mail. RUN apt-get -qq install -y sendmail @@ -45,18 +45,10 @@ RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone COPY .. /var/www # install & run composer - #COPY ./docker/auth.json /root/.composer/auth.json -RUN echo "COMPOSER_TOKEN" -RUN echo "COMPOSER_TOKEN" -RUN echo $(COMPOSER_TOKEN) -RUN echo "GITHUB_TOKEN" -RUN echo $(GITHUB_TOKEN) -RUN echo "COMPOSER_AUTH" -RUN echo $(COMPOSER_AUTH) > /root/.composer/auth.json - +COPY ./docker/auth.json /root/.composer/auth.json RUN curl -sS https://getcomposer.org/installer | php && mv composer.phar /usr/local/bin/composer -# run composer +# run composer RUN composer install # install self signed certifcates to thrust other local dev environments diff --git a/docker/frontend-entrypoint.sh b/docker/frontend-entrypoint.sh deleted file mode 100644 index a1231a5..0000000 --- a/docker/frontend-entrypoint.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env sh - -echo "⭐️ Start dev server" -npm run dev diff --git a/docker/frontend.dockerfile b/docker/frontend.dockerfile index 308201d..dd3ea6a 100644 --- a/docker/frontend.dockerfile +++ b/docker/frontend.dockerfile @@ -1,16 +1,17 @@ FROM node:20-alpine # set workdir -RUN mkdir -p /var/www/ +RUN mkdir /var/www && chown node:node /var/www WORKDIR /var/www -# copy webapp files -COPY .. /var/www -RUN npm install -RUN npm run build +RUN apk add --no-cache git + +COPY --chown=node:node package.json package-lock.json* vite.config.js ./ -# entrypoint -COPY ./docker/frontend-entrypoint.sh /entrypoint.sh -RUN chmod ugo+x /entrypoint.sh -RUN dos2unix /entrypoint.sh +#Naar het voorbeeld van: +#https://github.com/UtrechtUniversity/containerplatform-docs Apache rootless openshift +RUN chgrp -R 0 /var/www && \ + chmod -R g=u /var/www -ENTRYPOINT /entrypoint.sh +RUN npm install +EXPOSE 7050 +CMD "npm" "run" "dev" \ No newline at end of file diff --git a/openshift/config/05_sample-app-secret.yaml b/openshift/config/05_sample-app-secret.yaml new file mode 100644 index 0000000..4428e4e --- /dev/null +++ b/openshift/config/05_sample-app-secret.yaml @@ -0,0 +1,11 @@ +--- +apiVersion: v1 +kind: Secret +metadata: + name: sample-app-secret +type: Opaque +data: + # Use the following command to generate a random password: + # echo -n 'ChangeThisSuperSecretPassword' | base64 + oidc-client-id: + oidc-client-secret: \ No newline at end of file diff --git a/openshift/config/05_sample-app-cm.yaml b/openshift/config/06_sample-app-cm.yaml similarity index 51% rename from openshift/config/05_sample-app-cm.yaml rename to openshift/config/06_sample-app-cm.yaml index 7356fb7..0c6b9e5 100644 --- a/openshift/config/05_sample-app-cm.yaml +++ b/openshift/config/06_sample-app-cm.yaml @@ -7,4 +7,6 @@ data: database-type: mysql database-host: mariadb-sample database-port-number: '3306' - database-name: sample-database \ No newline at end of file + database-name: sample-database + oidc-provider-url: https://login.acc.uu.nl/nidp/oauth/nam + oidc-slo-link: https://login.acc.uu.nl/nidp/app/logout \ No newline at end of file diff --git a/openshift/config/06_sample-app.yaml b/openshift/config/07_sample-app.yaml similarity index 66% rename from openshift/config/06_sample-app.yaml rename to openshift/config/07_sample-app.yaml index 752ede0..316aa0a 100644 --- a/openshift/config/06_sample-app.yaml +++ b/openshift/config/07_sample-app.yaml @@ -17,7 +17,7 @@ spec: spec: containers: - name: sample-app - image: ghcr.io/utrechtuniversity/fsw-openshift:latest + image: ghcr.io/utrechtuniversity/fsw-openshift:develop ports: - containerPort: 9000 env: @@ -41,11 +41,31 @@ spec: configMapKeyRef: name: sample-config key: database-name + - name: OIDC_PROVIDER_URL + valueFrom: + configMapKeyRef: + name: sample-config + key: oidc-provider-url + - name: OIDC_SLO_LINK + valueFrom: + configMapKeyRef: + name: sample-config + key: oidc-slo-link - name: LARAVEL_DATABASE_USER valueFrom: configMapKeyRef: name: mariadb-config key: mariadb-user + - name: OIDC_CLIENT_ID + valueFrom: + secretKeyRef: + name: sample-app-secret + key: oidc-client-id + - name: OIDC_CLIENT_SECRET + valueFrom: + secretKeyRef: + name: sample-app-secret + key: oidc-client-secret - name: LARAVEL_DATABASE_PASSWORD valueFrom: secretKeyRef: diff --git a/openshift/config/07_sample-svc.yaml b/openshift/config/08_sample-svc.yaml similarity index 100% rename from openshift/config/07_sample-svc.yaml rename to openshift/config/08_sample-svc.yaml diff --git a/openshift/config/09_sample-front-cm.yaml b/openshift/config/09_sample-front-cm.yaml new file mode 100644 index 0000000..6d0efdb --- /dev/null +++ b/openshift/config/09_sample-front-cm.yaml @@ -0,0 +1,8 @@ +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: sample-frontend-config +data: + vite-api-url: app.openshift.fss.uu.nl + vite-port: '7050' \ No newline at end of file diff --git a/openshift/config/10_sample-front.yaml b/openshift/config/10_sample-front.yaml new file mode 100644 index 0000000..1608e29 --- /dev/null +++ b/openshift/config/10_sample-front.yaml @@ -0,0 +1,33 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: fsw-sample-front + labels: + app: fsw-sample-app + app.kubernetes.io/part-of: fsw-sample-app +spec: + replicas: 1 + selector: + matchLabels: + app: sample-front + template: + metadata: + labels: + app: sample-front + spec: + containers: + - name: sample-front + image: ghcr.io/utrechtuniversity/fsw-openshift-frontend:develop + ports: + - containerPort: 7050 + env: + - name: VITE_API_URL + valueFrom: + configMapKeyRef: + name: sample-frontend-config + key: vite-api-url + - name: VITE_PORT + valueFrom: + configMapKeyRef: + name: sample-frontend-config + key: vite-port diff --git a/openshift/config/11_sample-front-svc.yaml b/openshift/config/11_sample-front-svc.yaml new file mode 100644 index 0000000..e9e14ae --- /dev/null +++ b/openshift/config/11_sample-front-svc.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + name: sample-front + labels: + app: fsw-sample-app + app.kubernetes.io/part-of: fsw-sample-app +spec: + ports: + - port: 7050 + targetPort: 7050 + selector: + app: sample-front diff --git a/openshift/config/08_nginx.yaml b/openshift/config/12_nginx.yaml similarity index 100% rename from openshift/config/08_nginx.yaml rename to openshift/config/12_nginx.yaml diff --git a/openshift/config/09_nginx-svc.yaml b/openshift/config/13_nginx-svc.yaml similarity index 100% rename from openshift/config/09_nginx-svc.yaml rename to openshift/config/13_nginx-svc.yaml diff --git a/openshift/config/10_sample-ingress.yaml b/openshift/config/14_sample-ingress.yaml similarity index 100% rename from openshift/config/10_sample-ingress.yaml rename to openshift/config/14_sample-ingress.yaml diff --git a/openshift/frontend.dockerfile b/openshift/frontend.dockerfile new file mode 100644 index 0000000..dd3ea6a --- /dev/null +++ b/openshift/frontend.dockerfile @@ -0,0 +1,17 @@ +FROM node:20-alpine +# set workdir +RUN mkdir /var/www && chown node:node /var/www +WORKDIR /var/www + +RUN apk add --no-cache git + +COPY --chown=node:node package.json package-lock.json* vite.config.js ./ + +#Naar het voorbeeld van: +#https://github.com/UtrechtUniversity/containerplatform-docs Apache rootless openshift +RUN chgrp -R 0 /var/www && \ + chmod -R g=u /var/www + +RUN npm install +EXPOSE 7050 +CMD "npm" "run" "dev" \ No newline at end of file diff --git a/openshift/openshift.dockerfile b/openshift/openshift.dockerfile index 191d655..f75c6ab 100644 --- a/openshift/openshift.dockerfile +++ b/openshift/openshift.dockerfile @@ -7,23 +7,24 @@ WORKDIR /var/www # upgrades! RUN apt-get update RUN apt-get -y dist-upgrade -RUN apt-get install -y zip +RUN apt-get -qq install -y zip -RUN apt-get install -y sudo nano -RUN apt-get install -y mariadb-client +RUN apt-get -qq install -y sudo nano +RUN apt-get -qq install -y mariadb-client + +RUN apt-get -qq install -y libonig-dev +RUN apt-get -qq install -y curl gnupg git # install mysql RUN docker-php-ext-install pdo_mysql mysqli # install additional PHP extensions -RUN apt-get install -y libmcrypt-dev \ +RUN apt-get -qq install -y libmcrypt-dev \ libmagickwand-dev --no-install-recommends \ && pecl install mcrypt-1.0.7 \ && docker-php-ext-install pdo_mysql \ && docker-php-ext-enable mcrypt -RUN apt-get install -y git - RUN apt-get clean -y # set corrent TimeZone @@ -33,12 +34,6 @@ RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # copy webapp files COPY .. /var/www -# install composer -RUN curl -sS https://getcomposer.org/installer | php && mv composer.phar /usr/local/bin/composer -# run composer - -RUN composer install - COPY ./openshift/openshift.env /var/www/.env RUN chmod -R a+rw /var/www/storage @@ -51,9 +46,6 @@ RUN chmod ugo+x /entrypoint.sh RUN php artisan optimize -# Expose port 8443 and start php-fpm server -EXPOSE 8080 - ENTRYPOINT /entrypoint.sh CMD ["php-fpm"] diff --git a/package-lock.json b/package-lock.json index 92ce127..b5b51e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,9 +4,16 @@ "requires": true, "packages": { "": { + "dependencies": { + "circle-flags": "git+https://github.com/HatScripts/circle-flags.git", + "dotenv": "^16.4.5", + "vite-plugin-static-copy": "^0.17.0" + }, "devDependencies": { "axios": "^1.6.4", + "bootstrap": "^5.3.2", "laravel-vite-plugin": "^1.0.0", + "sass": "^1.77.5", "vite": "^5.0.0" } }, @@ -17,7 +24,6 @@ "cpu": [ "ppc64" ], - "dev": true, "optional": true, "os": [ "aix" @@ -33,7 +39,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "android" @@ -49,7 +54,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "android" @@ -65,7 +69,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "android" @@ -81,7 +84,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -97,7 +99,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -113,7 +114,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "freebsd" @@ -129,7 +129,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "freebsd" @@ -145,7 +144,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "linux" @@ -161,7 +159,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -177,7 +174,6 @@ "cpu": [ "ia32" ], - "dev": true, "optional": true, "os": [ "linux" @@ -193,7 +189,6 @@ "cpu": [ "loong64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -209,7 +204,6 @@ "cpu": [ "mips64el" ], - "dev": true, "optional": true, "os": [ "linux" @@ -225,7 +219,6 @@ "cpu": [ "ppc64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -241,7 +234,6 @@ "cpu": [ "riscv64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -257,7 +249,6 @@ "cpu": [ "s390x" ], - "dev": true, "optional": true, "os": [ "linux" @@ -273,7 +264,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -289,7 +279,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "netbsd" @@ -305,7 +294,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "openbsd" @@ -321,7 +309,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "sunos" @@ -337,7 +324,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -353,7 +339,6 @@ "cpu": [ "ia32" ], - "dev": true, "optional": true, "os": [ "win32" @@ -369,7 +354,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -378,6 +362,49 @@ "node": ">=12" } }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "dev": true, + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.17.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.2.tgz", @@ -385,7 +412,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "android" @@ -398,7 +424,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "android" @@ -411,7 +436,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -424,7 +448,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -437,7 +460,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "linux" @@ -450,7 +472,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "linux" @@ -463,7 +484,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -476,7 +496,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -489,7 +508,6 @@ "cpu": [ "ppc64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -502,7 +520,6 @@ "cpu": [ "riscv64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -515,7 +532,6 @@ "cpu": [ "s390x" ], - "dev": true, "optional": true, "os": [ "linux" @@ -528,7 +544,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -541,7 +556,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -554,7 +568,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -567,7 +580,6 @@ "cpu": [ "ia32" ], - "dev": true, "optional": true, "os": [ "win32" @@ -580,7 +592,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -589,8 +600,19 @@ "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } }, "node_modules/asynckit": { "version": "0.4.0", @@ -609,6 +631,74 @@ "proxy-from-env": "^1.1.0" } }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bootstrap": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz", + "integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/circle-flags": { + "version": "1.0.0", + "resolved": "git+ssh://git@github.com/HatScripts/circle-flags.git#6452fa836a38e8e46b0d1833d3e83dbcef194d6b" + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -630,11 +720,21 @@ "node": ">=0.4.0" } }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/esbuild": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", - "dev": true, "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -668,6 +768,40 @@ "@esbuild/win32-x64": "0.20.2" } }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/follow-redirects": { "version": "1.15.6", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", @@ -702,11 +836,23 @@ "node": ">= 6" } }, + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -716,6 +862,77 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/immutable": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz", + "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==", + "devOptional": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/laravel-vite-plugin": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-1.0.2.tgz", @@ -735,6 +952,26 @@ "vite": "^5.0.0" } }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -760,7 +997,6 @@ "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true, "funding": [ { "type": "github", @@ -774,17 +1010,23 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "engines": { "node": ">=8.6" }, @@ -796,7 +1038,6 @@ "version": "8.4.38", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", - "dev": true, "funding": [ { "type": "opencollective", @@ -826,11 +1067,49 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rollup": { "version": "4.17.2", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.17.2.tgz", "integrity": "sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==", - "dev": true, "dependencies": { "@types/estree": "1.0.5" }, @@ -861,20 +1140,76 @@ "fsevents": "~2.3.2" } }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/sass": { + "version": "1.77.6", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", + "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", + "devOptional": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/source-map-js": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "dev": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/vite": { "version": "5.2.11", "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz", "integrity": "sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==", - "dev": true, "dependencies": { "esbuild": "^0.20.1", "postcss": "^8.4.38", @@ -934,6 +1269,23 @@ "picocolors": "^1.0.0", "picomatch": "^2.3.1" } + }, + "node_modules/vite-plugin-static-copy": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/vite-plugin-static-copy/-/vite-plugin-static-copy-0.17.1.tgz", + "integrity": "sha512-9h3iaVs0bqnqZOM5YHJXGHqdC5VAVlTZ2ARYsuNpzhEJUHmFqXY7dAK4ZFpjEQ4WLFKcaN8yWbczr81n01U4sQ==", + "dependencies": { + "chokidar": "^3.5.3", + "fast-glob": "^3.2.11", + "fs-extra": "^11.1.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + } } } } diff --git a/package.json b/package.json index 56f5ddc..cbd6923 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,13 @@ "devDependencies": { "axios": "^1.6.4", "laravel-vite-plugin": "^1.0.0", + "bootstrap": "^5.3.2", + "sass": "^1.77.5", "vite": "^5.0.0" + }, + "dependencies": { + "dotenv": "^16.4.5", + "circle-flags": "git+https://github.com/HatScripts/circle-flags.git", + "vite-plugin-static-copy": "^0.17.0" } } diff --git a/resources/css/app.css b/resources/css/app.css deleted file mode 100644 index e69de29..0000000 diff --git a/resources/sass/app.scss b/resources/sass/app.scss new file mode 100644 index 0000000..93c4b1c --- /dev/null +++ b/resources/sass/app.scss @@ -0,0 +1 @@ +@import "~bootstrap/scss/bootstrap"; \ No newline at end of file diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 08e3138..fa835f1 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -28,7 +28,8 @@ - @vite(['resources/sass/app.scss', 'resources/js/app.js', 'resources/js/hts-appteam-livewire/appteam-livewire.js']) + @vite(['resources/sass/app.scss', 'resources/js/app.js']) + diff --git a/storage/logs/laravel.log b/storage/logs/laravel.log deleted file mode 100644 index e69de29..0000000 diff --git a/vite.config.js b/vite.config.js index 35aa8b1..b384791 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,23 +1,48 @@ import { defineConfig } from 'vite'; import fs from 'fs'; import laravel from 'laravel-vite-plugin'; +import dotenv from 'dotenv'; +import path from 'path'; +import {viteStaticCopy} from "vite-plugin-static-copy"; + +dotenv.config() // load env vars from .env + +const host = `${process.env.VITE_API_URL ?? 'http://localhost:3000'}`; +const port = `${process.env.VITE_PORT ?? '3000'}`; +console.log(`Vite server running on ${host}:${port}`); export default defineConfig({ plugins: [ laravel({ - input: ['resources/css/app.css', 'resources/js/app.js'], + input: [ + 'resources/sass/app.scss', + 'resources/js/app.js' + ], refresh: true, }), + viteStaticCopy({ + targets: [ + { + src: 'node_modules/circle-flags/flags/', + dest: 'images' + } + ] + }) ], + resolve: { + alias: { + '~bootstrap': path.resolve(__dirname, 'node_modules/bootstrap'), + } + }, server: { https: { key: fs.readFileSync('docker/certificates/docker.dev.key'), cert: fs.readFileSync('docker/certificates/docker.dev.crt'), }, host: true, - port: 7050, + port: `${port}`, hmr: { - host: 'openshift.docker.dev', + host: `${host}`, protocol: 'wss' }, },