From 2eb3b34c1d9923d68486d032a9f00c3a12fc0dbd Mon Sep 17 00:00:00 2001 From: Cyrus Hiatt Date: Tue, 16 Jul 2024 04:35:45 -0700 Subject: [PATCH 01/18] Updates for app config changes --- .gitattributes | 11 + .../actions/build-and-test-branch/action.yml | 120 ++++++++ .../install-arches-applications/action.yml | 29 ++ .github/workflows/main.yml | 258 ++++++++++++++++++ .prettierrc | 3 +- disco/apps.py | 7 + disco/settings.py | 21 +- disco/urls.py | 2 +- vitest.config.mts | 1 - vitest.setup.mts | 1 + webpack/webpack.common.js | 34 ++- 11 files changed, 449 insertions(+), 38 deletions(-) create mode 100644 .gitattributes create mode 100644 .github/actions/build-and-test-branch/action.yml create mode 100644 .github/actions/install-arches-applications/action.yml create mode 100644 .github/workflows/main.yml create mode 100644 disco/apps.py diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..924ef88 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,11 @@ +# Set the default behavior, in case people don't have core.autocrlf set. +* text=auto + +# Known binary formats +*.png binary +*.jpg binary +*.ico binary +*.gif binary +*.ttf binary +*.woff binary +*.woff2 binary diff --git a/.github/actions/build-and-test-branch/action.yml b/.github/actions/build-and-test-branch/action.yml new file mode 100644 index 0000000..db4b898 --- /dev/null +++ b/.github/actions/build-and-test-branch/action.yml @@ -0,0 +1,120 @@ +name: 'Build and test branch' +description: 'Builds and tests a branch' +inputs: + branch-type: + description: 'String denoting either `target` or `feature` branch' + required: true + project-name: + description: 'String denoting the name of the project' + required: true + secrets: + description: 'Secrets from main.yml as JSON' +runs: + using: 'composite' + steps: + - name: Install Java, GDAL, and other system dependencies + run: | + sudo apt update + sudo apt-get install libxml2-dev libpq-dev openjdk-8-jdk libgdal-dev libxslt-dev + echo Postgres and ES dependencies installed + shell: bash + + - name: Set up Elasticsearch + uses: ankane/setup-elasticsearch@v1 + with: + elasticsearch-version: 8 + + - name: Install Python packages + run: | + python -m pip install --upgrade pip + pip install '.[dev]' + echo Python packages installed + shell: bash + + - name: Install Arches applications + uses: ./.github/actions/install-arches-applications + with: + secrets: ${{ inputs.secrets }} + + - name: Checkout into feature branch + if: inputs.branch-type == 'feature' + uses: actions/checkout@v4 + with: + repository: ${{ github.repository }} + ref: ${{ github.ref }} + path: . + + - name: Checkout into target branch + if: inputs.branch-type == 'target' + uses: actions/checkout@v4 + with: + repository: ${{ github.repository }} + ref: ${{ github.event.pull_request.base.ref }} + path: . + + - name: Install frontend dependencies + run: | + npm install + shell: bash + + - name: Webpack frontend files + run: | + npm run build_test + shell: bash + + - name: Check frontend formatting with prettier + run: | + npm run prettier:check + shell: bash + + - name: Check backend formatting with black + run: | + black . --check --exclude=node_modules + shell: bash + + - name: Check line endings + run: | + ! git ls-files --eol | grep 'w/crlf\|w/mixed' + shell: bash + + - name: Run frontend tests + run: | + npm run vitest + mv coverage/frontend/coverage.xml ${{ inputs.branch-type }}_branch_frontend_coverage.xml + shell: bash + + - name: Check for missing migrations + run: | + python manage.py makemigrations --check + shell: bash + + - name: Ensure previous Python coverage data is erased + run: | + coverage erase + shell: bash + + - name: Run Python unit tests + run: | + python -W default::DeprecationWarning -m coverage run manage.py test tests --settings="tests.test_settings" + shell: bash + + - name: Generate Python report coverage + run: | + coverage report + coverage json + mv coverage/python/coverage.json ${{ inputs.branch-type }}_branch_python_coverage.json + shell: bash + + - name: Upload frontend coverage report as artifact + uses: actions/upload-artifact@v4 + with: + name: ${{ inputs.branch-type }}-branch-frontend-coverage-report + path: ${{ inputs.branch-type }}_branch_frontend_coverage.xml + overwrite: true + + - name: Upload Python coverage report as artifact + uses: actions/upload-artifact@v4 + with: + name: ${{ inputs.branch-type }}-branch-python-coverage-report + path: ${{ inputs.branch-type }}_branch_python_coverage.json + overwrite: true diff --git a/.github/actions/install-arches-applications/action.yml b/.github/actions/install-arches-applications/action.yml new file mode 100644 index 0000000..703e33a --- /dev/null +++ b/.github/actions/install-arches-applications/action.yml @@ -0,0 +1,29 @@ +name: 'Install Arches Applications' +description: 'Manually edit this file to install all Arches Applications declared in settings.py, but not declared in `pyproject.toml`' +inputs: + secrets: + description: 'Secrets from main.yml as JSON' +runs: + using: 'composite' + steps: + + # Manually add any ARCHES_APPLICATIONS to this file if not already declared in `pyproject.toml`. + # Below is a template for adding an application in a private repository. + # Be sure to delete the `no-op step` if adding when updating this file. + + - name: No-op step to maintain workflow structure + run: echo "No-op step" + shell: bash + + # - name: Checkout ${my_arches_application_name} + # uses: actions/checkout@v4 + # with: + # repository: ${my_arches_application_repository}/${my_arches_application_name} + # token: ${{ fromJSON(inputs.secrets).${my_github_personal_access_token} }} + # path: ${my_arches_application_name} + + # - name: Install ${my_arches_application_name} + # run: | + # pip install ./${my_arches_application_name} + # echo ${my_arches_application_name} installed + # shell: bash diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..c12aac4 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,258 @@ +name: CI + +on: + # push: -- just run on PRs for now + pull_request: + workflow_dispatch: + +jobs: + build_feature_branch: + runs-on: ubuntu-latest + + services: + postgres: + image: postgis/postgis:13-3.0 + env: + POSTGRES_PASSWORD: postgis + POSTGRES_DB: disco + ports: + - 5432:5432 + options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 + + strategy: + fail-fast: false + matrix: + python-version: ["3.10", "3.11", "3.12"] + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + check-latest: true + + - name: Build and test branch + uses: ./.github/actions/build-and-test-branch + with: + secrets: ${{ toJSON(secrets) }} + project-name: 'disco' + branch-type: 'feature' + + build_target_branch: + runs-on: ubuntu-latest + + services: + postgres: + image: postgis/postgis:13-3.0 + env: + POSTGRES_PASSWORD: postgis + POSTGRES_DB: disco + ports: + - 5432:5432 + options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 + + strategy: + fail-fast: false + matrix: + python-version: ["3.12"] + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + check-latest: true + + - name: Build and test branch + uses: ./.github/actions/build-and-test-branch + with: + secrets: ${{ toJSON(secrets) }} + project-name: 'disco' + branch-type: 'target' + + check_frontend_coverage: + runs-on: ubuntu-latest + needs: [build_feature_branch, build_target_branch] + steps: + - uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.x' # Use the latest available version + check-latest: true + + - name: Download feature branch frontend coverage report artifact + uses: actions/download-artifact@v4 + with: + name: feature-branch-frontend-coverage-report + path: . + + - name: Extract feature branch frontend coverage data + shell: pwsh + run: | + [xml]$xml = Get-Content feature_branch_frontend_coverage.xml + $metrics = $xml.coverage.project.metrics + + $statements = [double]$metrics.statements + $coveredstatements = [double]$metrics.coveredstatements + $conditionals = [double]$metrics.conditionals + $coveredconditionals = [double]$metrics.coveredconditionals + $methods = [double]$metrics.methods + $coveredmethods = [double]$metrics.coveredmethods + $elements = [double]$metrics.elements + $coveredelements = [double]$metrics.coveredelements + + $statement_coverage = 0.0 + $conditional_coverage = 0.0 + $method_coverage = 0.0 + $element_coverage = 0.0 + + if ($statements -gt 0) { + $statement_coverage = ($coveredstatements / $statements) * 100 + } + if ($conditionals -gt 0) { + $conditional_coverage = ($coveredconditionals / $conditionals) * 100 + } + if ($methods -gt 0) { + $method_coverage = ($coveredmethods / $methods) * 100 + } + if ($elements -gt 0) { + $element_coverage = ($coveredelements / $elements) * 100 + } + + $nonZeroCount = 0 + $totalCoverage = 0.0 + + if ($statements -gt 0) { $nonZeroCount++; $totalCoverage += $statement_coverage } + if ($conditionals -gt 0) { $nonZeroCount++; $totalCoverage += $conditional_coverage } + if ($methods -gt 0) { $nonZeroCount++; $totalCoverage += $method_coverage } + if ($elements -gt 0) { $nonZeroCount++; $totalCoverage += $element_coverage } + + $feature_branch_frontend_coverage = 0.0 + if ($nonZeroCount -gt 0) { + $feature_branch_frontend_coverage = $totalCoverage / $nonZeroCount + } + + Write-Output "feature_branch_frontend_coverage=$feature_branch_frontend_coverage" | Out-File -Append $env:GITHUB_ENV + + - name: Download target branch frontend coverage report artifact + continue-on-error: true + uses: actions/download-artifact@v4 + with: + name: target-branch-frontend-coverage-report + path: . + + - name: Check if target branch frontend coverage report artifact exists + run: | + if [ -f target_branch_frontend_coverage.xml ]; then + echo "target_branch_frontend_coverage_artifact_exists=true" >> $GITHUB_ENV + else + echo "Target branch coverage not found. Defaulting to 0% coverage." + echo "target_branch_frontend_coverage_artifact_exists=false" >> $GITHUB_ENV + fi + + - name: Extract target branch frontend coverage data + if: ${{ env.target_branch_frontend_coverage_artifact_exists == 'true' }} + shell: pwsh + run: | + [xml]$xml = Get-Content target_branch_frontend_coverage.xml + $metrics = $xml.coverage.project.metrics + + $statements = [double]$metrics.statements + $coveredstatements = [double]$metrics.coveredstatements + $conditionals = [double]$metrics.conditionals + $coveredconditionals = [double]$metrics.coveredconditionals + $methods = [double]$metrics.methods + $coveredmethods = [double]$metrics.coveredmethods + $elements = [double]$metrics.elements + $coveredelements = [double]$metrics.coveredelements + + $statement_coverage = 0.0 + $conditional_coverage = 0.0 + $method_coverage = 0.0 + $element_coverage = 0.0 + + if ($statements -gt 0) { + $statement_coverage = ($coveredstatements / $statements) * 100 + } + if ($conditionals -gt 0) { + $conditional_coverage = ($coveredconditionals / $conditionals) * 100 + } + if ($methods -gt 0) { + $method_coverage = ($coveredmethods / $methods) * 100 + } + if ($elements -gt 0) { + $element_coverage = ($coveredelements / $elements) * 100 + } + + $nonZeroCount = 0 + $totalCoverage = 0.0 + + if ($statements -gt 0) { $nonZeroCount++; $totalCoverage += $statement_coverage } + if ($conditionals -gt 0) { $nonZeroCount++; $totalCoverage += $conditional_coverage } + if ($methods -gt 0) { $nonZeroCount++; $totalCoverage += $method_coverage } + if ($elements -gt 0) { $nonZeroCount++; $totalCoverage += $element_coverage } + + $target_branch_frontend_coverage = 0.0 + if ($nonZeroCount -gt 0) { + $target_branch_frontend_coverage = $totalCoverage / $nonZeroCount + } + + Write-Output "target_branch_frontend_coverage=$target_branch_frontend_coverage" | Out-File -Append $env:GITHUB_ENV + + - name: Compare frontend feature coverage with target coverage + if: github.event_name == 'pull_request' + run: | + feature_branch_frontend_coverage=${feature_branch_frontend_coverage} + target_branch_frontend_coverage=${target_branch_frontend_coverage:-0.0} + + # Compare feature coverage with target coverage using floating-point comparison + if awk -v feature="$feature_branch_frontend_coverage" -v target="$target_branch_frontend_coverage" 'BEGIN { exit (feature < target) ? 0 : 1 }'; then + echo "Coverage decreased from $target_branch_frontend_coverage% to $feature_branch_frontend_coverage%. Please add or update tests to increase coverage." + exit 1 + else + echo "Feature branch coverage ($feature_branch_frontend_coverage%) >= Target branch coverage ($target_branch_frontend_coverage%)." + fi + + check_python_coverage: + runs-on: ubuntu-latest + needs: [build_feature_branch, build_target_branch] + steps: + - uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.x' # Use the latest available version + check-latest: true + + - name: Download feature branch Python coverage report artifact + uses: actions/download-artifact@v4 + with: + name: feature-branch-python-coverage-report + path: . + + - name: Download target branch Python coverage report artifact + uses: actions/download-artifact@v4 + with: + name: target-branch-python-coverage-report + path: . + + - name: Compare Python feature coverage with target coverage + if: github.event_name == 'pull_request' + run: | + feature_branch_python_coverage=$(cat feature_branch_python_coverage.json | grep -o '"totals": {[^}]*' | grep -o '"percent_covered": [0-9.]*' | awk -F ': ' '{print $2}') + target_branch_python_coverage=$(cat target_branch_python_coverage.json | grep -o '"totals": {[^}]*' | grep -o '"percent_covered": [0-9.]*' | awk -F ': ' '{print $2}') + + # Compare feature coverage with target coverage using floating-point comparison + if awk -v feature="$feature_branch_python_coverage" -v target="$target_branch_python_coverage" 'BEGIN { exit (feature < target) ? 0 : 1 }'; then + echo "Coverage decreased from $target_branch_python_coverage% to $feature_branch_python_coverage%. Please add or update tests to increase coverage." + exit 1 + else + echo "Feature branch coverage ($feature_branch_python_coverage%) >= Target branch coverage ($target_branch_python_coverage%)." + fi diff --git a/.prettierrc b/.prettierrc index c4d8ac5..3baef1c 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,3 +1,4 @@ { - "singleAttributePerLine": true + "singleAttributePerLine": true, + "tabWidth": 4 } diff --git a/disco/apps.py b/disco/apps.py new file mode 100644 index 0000000..0b8fc94 --- /dev/null +++ b/disco/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +class DiscoConfig(AppConfig): + name = "disco" + verbose_name = "Disco" + is_arches_application = True diff --git a/disco/settings.py b/disco/settings.py index de55019..1728023 100644 --- a/disco/settings.py +++ b/disco/settings.py @@ -130,7 +130,7 @@ "disco", ) -ARCHES_APPLICATIONS = ('arches_for_science',) +INSTALLED_APPS += ("arches.app",) MIDDLEWARE = [ "corsheaders.middleware.CorsMiddleware", @@ -149,17 +149,11 @@ # "silk.middleware.SilkyMiddleware", ] -STATICFILES_DIRS = build_staticfiles_dirs( - root_dir=ROOT_DIR, - app_root=APP_ROOT, - arches_applications=ARCHES_APPLICATIONS, -) +STATICFILES_DIRS = build_staticfiles_dirs(app_root=APP_ROOT) TEMPLATES = build_templates_config( - root_dir=ROOT_DIR, debug=DEBUG, app_root=APP_ROOT, - arches_applications=ARCHES_APPLICATIONS, context_processors=[ "django.contrib.auth.context_processors.auth", "django.template.context_processors.debug", @@ -488,13 +482,6 @@ pass # returns an output that can be read by NODEJS -if __name__ == "__main__": - transmit_webpack_django_config( - root_dir=ROOT_DIR, - app_root=APP_ROOT, - arches_applications=ARCHES_APPLICATIONS, - public_server_address=PUBLIC_SERVER_ADDRESS, - static_url=STATIC_URL, - webpack_development_server_port=WEBPACK_DEVELOPMENT_SERVER_PORT, - ) +if __name__ == "__main__": + transmit_webpack_django_config(**locals()) \ No newline at end of file diff --git a/disco/urls.py b/disco/urls.py index dc9a26b..bba30fc 100644 --- a/disco/urls.py +++ b/disco/urls.py @@ -12,7 +12,7 @@ # Only handle i18n routing in active project. This will still handle the routes provided by Arches core and Arches applications, # but handling i18n routes in multiple places causes application errors. -if settings.APP_NAME != "Arches" and settings.APP_NAME not in settings.ARCHES_APPLICATIONS: +if settings.ROOT_URLCONF == __name__: if settings.SHOW_LANGUAGE_SWITCH is True: urlpatterns = i18n_patterns(*urlpatterns) diff --git a/vitest.config.mts b/vitest.config.mts index 63a041c..34c23f9 100644 --- a/vitest.config.mts +++ b/vitest.config.mts @@ -9,7 +9,6 @@ const exclude = [ '**/cypress/**', '**/.{idea,git,cache,output,temp}/**', '**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*', - '**/src/declarations.d.ts', path.join(path.basename(__dirname), 'install', '**') ]; diff --git a/vitest.setup.mts b/vitest.setup.mts index 8a2d5cf..ca314b2 100644 --- a/vitest.setup.mts +++ b/vitest.setup.mts @@ -1,4 +1,5 @@ import { beforeAll, vi } from 'vitest'; +import '@/declarations.d.ts'; beforeAll(() => { diff --git a/webpack/webpack.common.js b/webpack/webpack.common.js index 5d58af0..e4104ee 100644 --- a/webpack/webpack.common.js +++ b/webpack/webpack.common.js @@ -316,15 +316,12 @@ module.exports = () => { loader: Path.join(PROJECT_RELATIVE_NODE_MODULES_PATH, 'vue-loader'), }, { - test: /\.m?js$/, + test: /\.mjs$/, include: /node_modules/, type: 'javascript/auto', - resolve: { - fullySpecified: false, - } }, { - test: /\.(js)$/, + test: /\.js$/, exclude: [/node_modules/, /load-component-dependencies/], loader: Path.join(PROJECT_RELATIVE_NODE_MODULES_PATH, 'babel-loader'), options: { @@ -453,26 +450,27 @@ module.exports = () => { } else { if (!isTestEnvironment) { - loaderContext.emitError(`Unable to fetch ${templatePath} from the Django server.`) + loaderContext.emitError(Error(`Unable to fetch ${templatePath} from the Django server.`)) } else { console.warn( '\x1b[31m%s\x1b[0m', // red `"${templatePath}" has failed to load! Test environment detected, falling back to un-rendered file.` ); - resp = { - text: () => ( - new Promise((resolve, _reject) => { - /* - if run in a test environment, failures will return a empty string which will - still allow the bundle to build. - */ - - resolve(isTestEnvironment ? '' : content); - }) - ) - }; } + + resp = { + text: () => ( + new Promise((resolve, _reject) => { + /* + if run in a test environment, failures will return a empty string which will + still allow the bundle to build. + */ + + resolve(isTestEnvironment ? '' : content); + }) + ) + }; } }; From 5e5ca1edce981a41018609a376f1aa87041111e2 Mon Sep 17 00:00:00 2001 From: Aaron Gundel Date: Tue, 16 Jul 2024 14:52:45 -0600 Subject: [PATCH 02/18] arches should be greater than 7.6.0a0 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 6ae4604..adc6f96 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,7 +24,7 @@ classifiers = [ ] requires-python = ">=3.10" dependencies = [ - "arches>=7.6.0,<7.7.0", + "arches>=7.6.0a0,<7.7.0", ] version = "0.0.1" From 37f0fe07ec21a4ef43a896221591c35f6cf46e3c Mon Sep 17 00:00:00 2001 From: Cyrus Hiatt Date: Wed, 31 Jul 2024 15:28:28 -0700 Subject: [PATCH 03/18] Update to support latest changes for 7.6 projects --- .coveragerc | 1 + .pre-commit-config.yaml | 4 ++-- disco/hosts.py | 7 +++++++ disco/settings.py | 1 + webpack/webpack-utils/build-filepath-lookup.js | 4 ++++ webpack/webpack.common.js | 6 +++++- 6 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 disco/hosts.py diff --git a/.coveragerc b/.coveragerc index 59cd06b..cbe11e6 100644 --- a/.coveragerc +++ b/.coveragerc @@ -8,6 +8,7 @@ omit = */settings*.py */urls.py */wsgi.py + */hosts.py */celery.py */__init__.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b74e696..e74a5a4 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -14,12 +14,12 @@ repos: name: prettier entry: npm run prettier:fix language: system - files: disco/src + files: {{ project_name }}/src - id: eslint name: eslint entry: npm run eslint:fix language: system - files: disco/src + files: {{ project_name }}/src - id: typescript name: typescript entry: npm run ts:check diff --git a/disco/hosts.py b/disco/hosts.py new file mode 100644 index 0000000..59e3274 --- /dev/null +++ b/disco/hosts.py @@ -0,0 +1,7 @@ +import re +from django_hosts import patterns, host + +host_patterns = patterns( + "", + host(re.sub(r"_", r"-", r"disco"), "disco.urls", name="disco"), +) diff --git a/disco/settings.py b/disco/settings.py index 1728023..333cfab 100644 --- a/disco/settings.py +++ b/disco/settings.py @@ -106,6 +106,7 @@ } INSTALLED_APPS = ( + "disco", "webpack_loader", "django.contrib.admin", "django.contrib.auth", diff --git a/webpack/webpack-utils/build-filepath-lookup.js b/webpack/webpack-utils/build-filepath-lookup.js index 9f157c8..7987117 100644 --- a/webpack/webpack-utils/build-filepath-lookup.js +++ b/webpack/webpack-utils/build-filepath-lookup.js @@ -26,6 +26,10 @@ function buildFilepathLookup(path, staticUrlPrefix) { }; return getFileList(path).reduce((lookup, file) => { + // Ignore dotfiles + if (file.match(new RegExp(Path.sep + '\\.')) || file.match(/^\./)) { + return lookup; + } const extension = file.match(/[^.]+$/).toString(); const extensionReplacementRegex = new RegExp(`\\.${extension}$`); diff --git a/webpack/webpack.common.js b/webpack/webpack.common.js index e4104ee..6dcf5ee 100644 --- a/webpack/webpack.common.js +++ b/webpack/webpack.common.js @@ -296,7 +296,11 @@ module.exports = () => { ...nodeModulesAliases, ...parsedPackageJSONFilepaths, '@': [Path.resolve(__dirname, APP_ROOT, 'src'), ...archesApplicationsVuePaths, Path.resolve(__dirname, ROOT_DIR, 'app', 'src')], - 'node_modules': Path.resolve(__dirname, PROJECT_RELATIVE_NODE_MODULES_PATH) + 'node_modules': Path.resolve(__dirname, PROJECT_RELATIVE_NODE_MODULES_PATH), + 'arches/arches/app': Path.resolve(__dirname, ROOT_DIR, 'app'), // ensure project-level imports of arches components point to local file + ...Object.fromEntries(ARCHES_APPLICATIONS.map(app => [ // ensure project-level imports of arches application components point to local file + Path.join(app, app), Path.resolve(__dirname, ARCHES_APPLICATIONS_PATHS[app]) + ])), }, }, module: { From 2e3f2c1d26f22603a8fcf6dbe0aa21daf2ee6934 Mon Sep 17 00:00:00 2001 From: Cyrus Hiatt Date: Wed, 31 Jul 2024 16:27:49 -0700 Subject: [PATCH 04/18] Update to latest project configs --- .gitignore | 2 +- .pre-commit-config.yaml | 4 ++-- disco/settings.py | 1 - 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 2cdb788..752f41f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ *.pyc *.log node_modules -*.coverage +coverage/ disco/logs disco/export_deliverables disco/cantaloupe/* diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e74a5a4..b74e696 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -14,12 +14,12 @@ repos: name: prettier entry: npm run prettier:fix language: system - files: {{ project_name }}/src + files: disco/src - id: eslint name: eslint entry: npm run eslint:fix language: system - files: {{ project_name }}/src + files: disco/src - id: typescript name: typescript entry: npm run ts:check diff --git a/disco/settings.py b/disco/settings.py index 333cfab..ebbcfa4 100644 --- a/disco/settings.py +++ b/disco/settings.py @@ -128,7 +128,6 @@ # "silk", "arches_templating", "arches_for_science", - "disco", ) INSTALLED_APPS += ("arches.app",) From 32b6412e3d2d979eb639bbbcdddbb2bd49b29404 Mon Sep 17 00:00:00 2001 From: Cyrus Hiatt Date: Fri, 2 Aug 2024 03:36:15 -0700 Subject: [PATCH 05/18] Update for latest webpack changes --- .coveragerc | 2 +- .gitignore | 4 +- disco/settings.py | 7 +- pyproject.toml | 1 + tsconfig.json | 23 +- vitest.config.mts | 96 ++-- webpack/webpack.common.js | 904 ++++++++++++++++++-------------------- 7 files changed, 507 insertions(+), 530 deletions(-) diff --git a/.coveragerc b/.coveragerc index cbe11e6..0e1f0cd 100644 --- a/.coveragerc +++ b/.coveragerc @@ -4,7 +4,7 @@ source = omit = */python?.?/* - */models/migrations/* + */migrations/* */settings*.py */urls.py */wsgi.py diff --git a/.gitignore b/.gitignore index 752f41f..c6e00c0 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,6 @@ webpack-stats.json .vscode/ *.egg-info .DS_STORE -CACHE \ No newline at end of file +CACHE +.tsconfig-paths.json +.frontend-configuration-settings.json diff --git a/disco/settings.py b/disco/settings.py index ebbcfa4..b222b88 100644 --- a/disco/settings.py +++ b/disco/settings.py @@ -23,7 +23,7 @@ } DATATYPE_LOCATIONS.append('disco.datatypes') -FUNCTION_LOCATIONS.append('arches_for_science.pkg.extensions.functions') +FUNCTION_LOCATIONS.append('arches_for_science.functions') FUNCTION_LOCATIONS.append('disco.functions') ETL_MODULE_LOCATIONS.append('disco.etl_modules') SEARCH_COMPONENT_LOCATIONS.append('disco.search_components') @@ -481,7 +481,4 @@ except ImportError as e: pass -# returns an output that can be read by NODEJS - -if __name__ == "__main__": - transmit_webpack_django_config(**locals()) \ No newline at end of file +# returns an output that can be read by NODEJS \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index adc6f96..34b4744 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,6 +25,7 @@ classifiers = [ requires-python = ">=3.10" dependencies = [ "arches>=7.6.0a0,<7.7.0", + "arches_for_science>=1.1.0a4", ] version = "0.0.1" diff --git a/tsconfig.json b/tsconfig.json index b5ec43d..34902ec 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,29 +1,20 @@ { + "extends": "./.tsconfig-paths.json", "compilerOptions": { - "noEmit": true, + "target": "ESNext", "module": "ESNext", "moduleResolution": "bundler", - "resolveJsonModule": true, "jsx": "preserve", "jsxImportSource": "vue", - "noImplicitThis": false, "strict": true, + "noEmit": true, + "noImplicitThis": false, "verbatimModuleSyntax": true, - "target": "ESNext", "useDefineForClassFields": true, "esModuleInterop": true, "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, "skipLibCheck": true, - "baseUrl": "disco/src/", - "paths": { - "@/*": [ - "*.ts", - "*.vue" - ] - } - }, - "include": [ - "**/*.ts", - "**/*.vue" - ] + "allowImportingTsExtensions": true + } } diff --git a/vitest.config.mts b/vitest.config.mts index 34c23f9..6308789 100644 --- a/vitest.config.mts +++ b/vitest.config.mts @@ -1,36 +1,64 @@ +import fs from 'fs'; import path from 'path'; import vue from "@vitejs/plugin-vue"; -import { defineConfig } from "vitest/config"; - - -const exclude = [ - '**/node_modules/**', - '**/dist/**', - '**/cypress/**', - '**/.{idea,git,cache,output,temp}/**', - '**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*', - path.join(path.basename(__dirname), 'install', '**') -]; - -export default defineConfig({ - plugins: [vue()], - test: { - alias: { - '@/': new URL(path.join(path.basename(__dirname), 'src', '/'), import.meta.url).pathname, - }, - coverage: { - include: [path.join(path.basename(__dirname), 'src', '/')], - exclude: exclude, - reporter: [ - ['clover', { 'file': 'coverage.xml' }], - 'text', - ], - reportsDirectory: path.join(__dirname, 'coverage', 'frontend'), - }, - environment: "jsdom", - globals: true, - exclude: exclude, - passWithNoTests: true, - setupFiles: ['vitest.setup.mts'], - }, -}); + +import { defineConfig } from 'vite'; + +import type { UserConfigExport } from 'vite'; + + +function generateConfig(): Promise { + return new Promise((resolve, reject) => { + const exclude = [ + '**/node_modules/**', + '**/dist/**', + '**/install/**', + '**/cypress/**', + '**/.{idea,git,cache,output,temp}/**', + '**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*', + ]; + + const rawData = fs.readFileSync(path.join(__dirname, '.frontend-configuration-settings.json'), 'utf-8'); + const parsedData = JSON.parse(rawData); + + const alias: { [key: string]: string } = { + '@/arches': path.join(parsedData['ROOT_DIR'], 'app', 'src', 'arches'), + }; + + for ( + const [archesApplicationName, archesApplicationPath] + of Object.entries( + parsedData['ARCHES_APPLICATIONS_PATHS'] as { [key: string]: string } + ) + ) { + alias[`@/${archesApplicationName}`] = path.join(archesApplicationPath, 'src', archesApplicationName); + } + + resolve({ + plugins: [vue()], + test: { + alias: alias, + coverage: { + include: [path.join(path.basename(__dirname), 'app', 'src', path.sep)], + exclude: exclude, + reporter: [ + ['clover', { 'file': 'coverage.xml' }], + 'text', + ], + reportsDirectory: path.join(__dirname, 'coverage', 'frontend'), + }, + environment: "jsdom", + globals: true, + exclude: exclude, + passWithNoTests: true, + setupFiles: ['vitest.setup.mts'], + }, + }); + + }); +}; + +export default (async () => { + const config = await generateConfig(); + return defineConfig(config); +})(); diff --git a/webpack/webpack.common.js b/webpack/webpack.common.js index 6dcf5ee..5e6c05e 100644 --- a/webpack/webpack.common.js +++ b/webpack/webpack.common.js @@ -8,551 +8,509 @@ const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const BundleTracker = require('webpack-bundle-tracker'); const { CleanWebpackPlugin } = require('clean-webpack-plugin'); -const { spawn } = require("child_process"); const { VueLoaderPlugin } = require("vue-loader"); -const { findFile } = require('./webpack-utils/find-file'); const { buildFilepathLookup } = require('./webpack-utils/build-filepath-lookup'); module.exports = () => { return new Promise((resolve, _reject) => { - const createWebpackConfig = function () { - // BEGIN workaround for handling node_modules paths in arches-core vs projects + // BEGIN get data from `.frontend-configuration-settings.json` - let PROJECT_RELATIVE_NODE_MODULES_PATH; - if (APP_ROOT.includes(ROOT_DIR)) { // should only return truthy for running Arches-core without a project - PROJECT_RELATIVE_NODE_MODULES_PATH = Path.resolve(APP_ROOT, '..', '..', 'node_modules'); - } - else { - PROJECT_RELATIVE_NODE_MODULES_PATH = Path.resolve(APP_ROOT, '..', 'node_modules'); - } - - // END workaround for handling node_modules paths in arches-core vs projects - // BEGIN create entry point configurations - - const archesCoreEntryPointConfiguration = buildFilepathLookup(Path.resolve(__dirname, ROOT_DIR, 'app', 'media', 'js')); - const projectEntryPointConfiguration = buildFilepathLookup(Path.resolve(__dirname, APP_ROOT, 'media', 'js')); - - const archesApplicationsEntrypointConfiguration = ARCHES_APPLICATIONS.reduce((acc, archesApplication) => { - return { - ...acc, - ...buildFilepathLookup(Path.resolve(__dirname, ARCHES_APPLICATIONS_PATHS[archesApplication], 'media', 'js')) - }; - }, {}); - - // END create entry point configurations - // BEGIN create JavaScript filepath lookups - - const archesCoreJavascriptRelativeFilepathToAbsoluteFilepathLookup = Object.entries(archesCoreEntryPointConfiguration).reduce((acc, [path, config]) => { - acc[path + '$'] = Path.resolve(__dirname, path, config['import']); - return acc; - }, {}); - const projectJavascriptRelativeFilepathToAbsoluteFilepathLookup = Object.entries(projectEntryPointConfiguration).reduce((acc, [path, config]) => { - acc[path + '$'] = Path.resolve(__dirname, path, config['import']); - return acc; - }, {}); - const archesApplicationsJavascriptRelativeFilepathToAbsoluteFilepathLookup = Object.entries(archesApplicationsEntrypointConfiguration).reduce((acc, [path, config]) => { - acc[path + '$'] = Path.resolve(__dirname, path, config['import']); - return acc; - }, {}); + const rawData = fs.readFileSync(Path.join(__dirname, "..", '.frontend-configuration-settings.json'), 'utf-8'); + const parsedData = JSON.parse(rawData); - // order is important! Arches core files are overwritten by arches-application files, arches-application files are overwritten by project files - const javascriptRelativeFilepathToAbsoluteFilepathLookup = { - ...archesCoreJavascriptRelativeFilepathToAbsoluteFilepathLookup, - ...archesApplicationsJavascriptRelativeFilepathToAbsoluteFilepathLookup, - ...projectJavascriptRelativeFilepathToAbsoluteFilepathLookup, + console.log('Data imported from .frontend-configuration-settings.json:', parsedData); + + global.APP_ROOT = parsedData['APP_ROOT']; + global.ARCHES_APPLICATIONS = parsedData['ARCHES_APPLICATIONS']; + global.ARCHES_APPLICATIONS_PATHS = parsedData['ARCHES_APPLICATIONS_PATHS']; + global.SITE_PACKAGES_DIRECTORY = parsedData['SITE_PACKAGES_DIRECTORY']; + global.ROOT_DIR = parsedData['ROOT_DIR']; + global.STATIC_URL = parsedData['STATIC_URL']; + global.PUBLIC_SERVER_ADDRESS = parsedData['PUBLIC_SERVER_ADDRESS']; + global.WEBPACK_DEVELOPMENT_SERVER_PORT = parsedData['WEBPACK_DEVELOPMENT_SERVER_PORT']; + + // END get data from `.frontend-configuration-settings.json` + // BEGIN workaround for handling node_modules paths in arches-core vs projects + + let PROJECT_RELATIVE_NODE_MODULES_PATH; + if (APP_ROOT.includes(ROOT_DIR)) { // should only return truthy for running Arches-core without a project + PROJECT_RELATIVE_NODE_MODULES_PATH = Path.resolve(APP_ROOT, '..', '..', 'node_modules'); + } + else { + PROJECT_RELATIVE_NODE_MODULES_PATH = Path.resolve(APP_ROOT, '..', 'node_modules'); + } + + // END workaround for handling node_modules paths in arches-core vs projects + // BEGIN create entry point configurations + + const archesCoreEntryPointConfiguration = buildFilepathLookup(Path.resolve(__dirname, ROOT_DIR, 'app', 'media', 'js')); + const projectEntryPointConfiguration = buildFilepathLookup(Path.resolve(__dirname, APP_ROOT, 'media', 'js')); + + const archesApplicationsEntrypointConfiguration = ARCHES_APPLICATIONS.reduce((acc, archesApplication) => { + return { + ...acc, + ...buildFilepathLookup(Path.resolve(__dirname, ARCHES_APPLICATIONS_PATHS[archesApplication], 'media', 'js')) }; + }, {}); + + // END create entry point configurations + // BEGIN create JavaScript filepath lookups + + const archesCoreJavascriptRelativeFilepathToAbsoluteFilepathLookup = Object.entries(archesCoreEntryPointConfiguration).reduce((acc, [path, config]) => { + acc[path + '$'] = Path.resolve(__dirname, path, config['import']); + return acc; + }, {}); + const projectJavascriptRelativeFilepathToAbsoluteFilepathLookup = Object.entries(projectEntryPointConfiguration).reduce((acc, [path, config]) => { + acc[path + '$'] = Path.resolve(__dirname, path, config['import']); + return acc; + }, {}); + const archesApplicationsJavascriptRelativeFilepathToAbsoluteFilepathLookup = Object.entries(archesApplicationsEntrypointConfiguration).reduce((acc, [path, config]) => { + acc[path + '$'] = Path.resolve(__dirname, path, config['import']); + return acc; + }, {}); + + // order is important! Arches core files are overwritten by arches-application files, arches-application files are overwritten by project files + const javascriptRelativeFilepathToAbsoluteFilepathLookup = { + ...archesCoreJavascriptRelativeFilepathToAbsoluteFilepathLookup, + ...archesApplicationsJavascriptRelativeFilepathToAbsoluteFilepathLookup, + ...projectJavascriptRelativeFilepathToAbsoluteFilepathLookup, + }; - // END create JavaScript filepath lookups - // BEGIN create node modules aliases - const parsedPackageJSONFilepaths = {}; + // END create JavaScript filepath lookups + // BEGIN create node modules aliases + const parsedPackageJSONFilepaths = {}; - let archesCorePackageJSONFilepath = Path.resolve(__dirname, ROOT_DIR, '..', 'package.json'); - if (!fs.existsSync(archesCorePackageJSONFilepath)) { - archesCorePackageJSONFilepath = Path.resolve(__dirname, PROJECT_RELATIVE_NODE_MODULES_PATH, 'arches', 'package.json'); - } + let archesCorePackageJSONFilepath = Path.resolve(__dirname, ROOT_DIR, '..', 'package.json'); + if (!fs.existsSync(archesCorePackageJSONFilepath)) { + archesCorePackageJSONFilepath = Path.resolve(__dirname, PROJECT_RELATIVE_NODE_MODULES_PATH, 'arches', 'package.json'); + } - const archesCorePackageJSON = require(archesCorePackageJSONFilepath); - parsedPackageJSONFilepaths[Path.join(archesCorePackageJSON.name, 'package.json').replace(/\\/g, '/')] = archesCorePackageJSONFilepath; + const archesCorePackageJSON = require(archesCorePackageJSONFilepath); + parsedPackageJSONFilepaths[Path.join(archesCorePackageJSON.name, 'package.json').replace(/\\/g, '/')] = archesCorePackageJSONFilepath; - const parsedArchesCoreNodeModulesAliases = Object.entries(archesCorePackageJSON['nodeModulesPaths']).reduce((acc, [alias, subPath]) => { - if (subPath.slice(0, 7) === 'plugins') { // handles for node_modules -esque plugins in arches core - acc[alias] = Path.resolve(__dirname, ROOT_DIR, 'app', 'media', subPath); + const parsedArchesCoreNodeModulesAliases = Object.entries(archesCorePackageJSON['nodeModulesPaths']).reduce((acc, [alias, subPath]) => { + if (subPath.slice(0, 7) === 'plugins') { // handles for node_modules -esque plugins in arches core + acc[alias] = Path.resolve(__dirname, ROOT_DIR, 'app', 'media', subPath); + } + else { + acc[alias] = Path.resolve(__dirname, PROJECT_RELATIVE_NODE_MODULES_PATH, '..', subPath); + } + return acc; + }, {}); + + let parsedProjectNodeModulesAliases = {}; + let projectPackageJSON; + + const projectJSONFilepath = Path.resolve(__dirname, PROJECT_RELATIVE_NODE_MODULES_PATH, 'package.json'); + if (fs.existsSync(projectJSONFilepath)) { // handles running Arches without a project + projectPackageJSON = require(projectJSONFilepath); + parsedPackageJSONFilepaths[Path.join(projectPackageJSON.name, 'package.json').replace(/\\/g, '/')] = projectJSONFilepath; + + parsedProjectNodeModulesAliases = Object.entries(projectPackageJSON['nodeModulesPaths']).reduce((acc, [alias, subPath]) => { + if (parsedArchesCoreNodeModulesAliases[alias]) { + console.warn( + '\x1b[33m%s\x1b[0m', // yellow + `"${alias}" has failed to load, it has already been defined in the Arches application.` + ) } else { acc[alias] = Path.resolve(__dirname, PROJECT_RELATIVE_NODE_MODULES_PATH, '..', subPath); } return acc; }, {}); + } - let parsedProjectNodeModulesAliases = {}; - let projectPackageJSON; + let parsedArchesApplicationsNodeModulesAliases = {}; + for (const archesApplication of ARCHES_APPLICATIONS) { + try { + let archesApplicationJSONFilepath; - const projectJSONFilepath = Path.resolve(__dirname, PROJECT_RELATIVE_NODE_MODULES_PATH, 'package.json'); - if (fs.existsSync(projectJSONFilepath)) { // handles running Arches without a project - projectPackageJSON = require(projectJSONFilepath); - parsedPackageJSONFilepaths[Path.join(projectPackageJSON.name, 'package.json').replace(/\\/g, '/')] = projectJSONFilepath; + if (!ARCHES_APPLICATIONS_PATHS[archesApplication].includes('site-packages')) { + // if the path doesn't include site-packages then we can assume it's linked via egg/wheel + archesApplicationJSONFilepath = Path.resolve(__dirname, ARCHES_APPLICATIONS_PATHS[archesApplication], '..', 'package.json'); + } + else { + archesApplicationJSONFilepath = Path.resolve(__dirname, PROJECT_RELATIVE_NODE_MODULES_PATH, archesApplication, 'package.json'); + } - parsedProjectNodeModulesAliases = Object.entries(projectPackageJSON['nodeModulesPaths']).reduce((acc, [alias, subPath]) => { - if (parsedArchesCoreNodeModulesAliases[alias]) { + const archesApplicationPackageJSON = require(archesApplicationJSONFilepath); + parsedPackageJSONFilepaths[Path.join(archesApplicationPackageJSON.name, 'package.json').replace(/\\/g, '/')] = archesApplicationJSONFilepath; + + for (const [alias, subPath] of Object.entries(archesApplicationPackageJSON['nodeModulesPaths'])) { + if ( + parsedArchesApplicationsNodeModulesAliases[alias] + || parsedProjectNodeModulesAliases[alias] + || parsedArchesCoreNodeModulesAliases[alias] + ) { console.warn( '\x1b[33m%s\x1b[0m', // yellow - `"${alias}" has failed to load, it has already been defined in the Arches application.` + `"${alias}" is already loaded! It has might have been defined in the project, another arches application, or the Arches software.` ) } else { - acc[alias] = Path.resolve(__dirname, PROJECT_RELATIVE_NODE_MODULES_PATH, '..', subPath); - } - return acc; - }, {}); - } - - let parsedArchesApplicationsNodeModulesAliases = {}; - for (const archesApplication of ARCHES_APPLICATIONS) { - try { - let archesApplicationJSONFilepath; - - if (!ARCHES_APPLICATIONS_PATHS[archesApplication].includes('site-packages')) { - // if the path doesn't include site-packages then we can assume it's linked via egg/wheel - archesApplicationJSONFilepath = Path.resolve(__dirname, ARCHES_APPLICATIONS_PATHS[archesApplication], '..', 'package.json'); - } - else { - archesApplicationJSONFilepath = Path.resolve(__dirname, PROJECT_RELATIVE_NODE_MODULES_PATH, archesApplication, 'package.json'); - } - - const archesApplicationPackageJSON = require(archesApplicationJSONFilepath); - parsedPackageJSONFilepaths[Path.join(archesApplicationPackageJSON.name, 'package.json').replace(/\\/g, '/')] = archesApplicationJSONFilepath; - - for (const [alias, subPath] of Object.entries(archesApplicationPackageJSON['nodeModulesPaths'])) { - if ( - parsedArchesApplicationsNodeModulesAliases[alias] - || parsedProjectNodeModulesAliases[alias] - || parsedArchesCoreNodeModulesAliases[alias] - ) { - console.warn( - '\x1b[33m%s\x1b[0m', // yellow - `"${alias}" is already loaded! It has might have been defined in the project, another arches application, or the Arches software.` - ) - } - else { - parsedArchesApplicationsNodeModulesAliases[alias] = Path.resolve(__dirname, PROJECT_RELATIVE_NODE_MODULES_PATH, '..', subPath); - } + parsedArchesApplicationsNodeModulesAliases[alias] = Path.resolve(__dirname, PROJECT_RELATIVE_NODE_MODULES_PATH, '..', subPath); } - } catch (error) { - continue; } + } catch (error) { + continue; } + } - // order is important! Arches core files are overwritten by arches-application files, arches-application files are overwritten by project files - const nodeModulesAliases = { - ...parsedArchesCoreNodeModulesAliases, - ...parsedArchesApplicationsNodeModulesAliases, - ...parsedProjectNodeModulesAliases, - }; + // order is important! Arches core files are overwritten by arches-application files, arches-application files are overwritten by project files + const nodeModulesAliases = { + ...parsedArchesCoreNodeModulesAliases, + ...parsedArchesApplicationsNodeModulesAliases, + ...parsedProjectNodeModulesAliases, + }; - // END create node modules aliases - // BEGIN create template filepath lookup + // END create node modules aliases + // BEGIN create template filepath lookup - const coreArchesTemplatePathConfiguration = buildFilepathLookup(Path.resolve(__dirname, ROOT_DIR, 'app', 'templates')); - const projectTemplatePathConfiguration = buildFilepathLookup(Path.resolve(__dirname, APP_ROOT, 'templates')); + const coreArchesTemplatePathConfiguration = buildFilepathLookup(Path.resolve(__dirname, ROOT_DIR, 'app', 'templates')); + const projectTemplatePathConfiguration = buildFilepathLookup(Path.resolve(__dirname, APP_ROOT, 'templates')); - const archesApplicationsTemplatePathConfiguration = ARCHES_APPLICATIONS.reduce((acc, archesApplication) => { - return { - ...acc, - ...buildFilepathLookup(Path.resolve(__dirname, ARCHES_APPLICATIONS_PATHS[archesApplication], 'templates')) - }; - }, {}); - - // order is important! Arches core files are overwritten by arches-application files, arches-application files are overwritten by project files - const templateFilepathLookup = { - ...coreArchesTemplatePathConfiguration, - ...archesApplicationsTemplatePathConfiguration, - ...projectTemplatePathConfiguration, + const archesApplicationsTemplatePathConfiguration = ARCHES_APPLICATIONS.reduce((acc, archesApplication) => { + return { + ...acc, + ...buildFilepathLookup(Path.resolve(__dirname, ARCHES_APPLICATIONS_PATHS[archesApplication], 'templates')) }; + }, {}); - // END create template filepath lookup - // BEGIN create image filepath lookup + // order is important! Arches core files are overwritten by arches-application files, arches-application files are overwritten by project files + const templateFilepathLookup = { + ...coreArchesTemplatePathConfiguration, + ...archesApplicationsTemplatePathConfiguration, + ...projectTemplatePathConfiguration, + }; - const coreArchesImagePathConfiguration = buildFilepathLookup(Path.resolve(__dirname, ROOT_DIR, 'app', 'media', 'img'), STATIC_URL); - const projectImagePathConfiguration = buildFilepathLookup(Path.resolve(__dirname, APP_ROOT, 'media', 'img'), STATIC_URL); + // END create template filepath lookup + // BEGIN create image filepath lookup - const archesApplicationsImagePathConfiguration = ARCHES_APPLICATIONS.reduce((acc, archesApplication) => { - return { - ...acc, - ...buildFilepathLookup(Path.resolve(__dirname, ARCHES_APPLICATIONS_PATHS[archesApplication], 'media', 'img'), STATIC_URL) - }; - }, {}); + const coreArchesImagePathConfiguration = buildFilepathLookup(Path.resolve(__dirname, ROOT_DIR, 'app', 'media', 'img'), STATIC_URL); + const projectImagePathConfiguration = buildFilepathLookup(Path.resolve(__dirname, APP_ROOT, 'media', 'img'), STATIC_URL); - // order is important! Arches core files are overwritten by arches-application files, arches-application files are overwritten by project files - const imageFilepathLookup = { - ...coreArchesImagePathConfiguration, - ...archesApplicationsImagePathConfiguration, - ...projectImagePathConfiguration, + const archesApplicationsImagePathConfiguration = ARCHES_APPLICATIONS.reduce((acc, archesApplication) => { + return { + ...acc, + ...buildFilepathLookup(Path.resolve(__dirname, ARCHES_APPLICATIONS_PATHS[archesApplication], 'media', 'img'), STATIC_URL) }; + }, {}); - // END create image filepath lookup - // BEGIN create CSS filepath lookup + // order is important! Arches core files are overwritten by arches-application files, arches-application files are overwritten by project files + const imageFilepathLookup = { + ...coreArchesImagePathConfiguration, + ...archesApplicationsImagePathConfiguration, + ...projectImagePathConfiguration, + }; - const coreArchesCSSFilepathConfiguration = buildFilepathLookup(Path.resolve(__dirname, ROOT_DIR, 'app', 'media', 'css')); - const projectCSSFilepathConfiguration = buildFilepathLookup(Path.resolve(__dirname, APP_ROOT, 'media', 'css')); + // END create image filepath lookup + // BEGIN create CSS filepath lookup - const archesApplicationsCSSFilepaths = []; - const archesApplicationsCSSFilepathConfiguration = ARCHES_APPLICATIONS.reduce((acc, archesApplication) => { - const path = Path.resolve(__dirname, ARCHES_APPLICATIONS_PATHS[archesApplication], 'media', 'css'); - archesApplicationsCSSFilepaths.push(path); + const coreArchesCSSFilepathConfiguration = buildFilepathLookup(Path.resolve(__dirname, ROOT_DIR, 'app', 'media', 'css')); + const projectCSSFilepathConfiguration = buildFilepathLookup(Path.resolve(__dirname, APP_ROOT, 'media', 'css')); - return { - ...acc, - ...buildFilepathLookup(path) - }; - }, {}); + const archesApplicationsCSSFilepaths = []; + const archesApplicationsCSSFilepathConfiguration = ARCHES_APPLICATIONS.reduce((acc, archesApplication) => { + const path = Path.resolve(__dirname, ARCHES_APPLICATIONS_PATHS[archesApplication], 'media', 'css'); + archesApplicationsCSSFilepaths.push(path); - const CSSFilepathLookup = { - ...coreArchesCSSFilepathConfiguration, - ...archesApplicationsCSSFilepathConfiguration, - ...projectCSSFilepathConfiguration, + return { + ...acc, + ...buildFilepathLookup(path) }; + }, {}); - // END create CSS filepath lookup - // BEGIN create vue filepath lookup + const CSSFilepathLookup = { + ...coreArchesCSSFilepathConfiguration, + ...archesApplicationsCSSFilepathConfiguration, + ...projectCSSFilepathConfiguration, + }; - const archesApplicationsVuePaths = ARCHES_APPLICATIONS.reduce((acc, archesApplication) => { - const path = Path.resolve(__dirname, ARCHES_APPLICATIONS_PATHS[archesApplication], 'src'); - acc.push(path); + // END create CSS filepath lookup + // BEGIN create vue filepath lookup - return acc; - }, []); + const archesApplicationsVuePaths = ARCHES_APPLICATIONS.reduce((acc, archesApplication) => { + const path = Path.resolve(__dirname, ARCHES_APPLICATIONS_PATHS[archesApplication], 'src'); + acc.push(path); - // END create vue filepath lookup - // BEGIN create universal constants + return acc; + }, []); - const universalConstants = { - APP_ROOT_DIRECTORY: JSON.stringify(APP_ROOT).replace(/\\/g, '/'), - ARCHES_CORE_DIRECTORY: JSON.stringify(ROOT_DIR).replace(/\\/g, '/'), - ARCHES_APPLICATIONS: JSON.stringify(ARCHES_APPLICATIONS), - SITE_PACKAGES_DIRECTORY: JSON.stringify(SITE_PACKAGES_DIRECTORY).replace(/\\/g, '/'), - }; - - let linkedApplicationPathCount = 0; - for (const archesApplication of ARCHES_APPLICATIONS) { - if (!ARCHES_APPLICATIONS_PATHS[archesApplication].includes('site-packages')) { - universalConstants[`LINKED_APPLICATION_PATH_${linkedApplicationPathCount}`] = JSON.stringify( - ARCHES_APPLICATIONS_PATHS[archesApplication] - ).replace(/\\/g, '/'); - linkedApplicationPathCount += 1; - } - } + // END create vue filepath lookup + // BEGIN create universal constants - // END create universal constants + const universalConstants = { + APP_ROOT_DIRECTORY: JSON.stringify(APP_ROOT).replace(/\\/g, '/'), + ARCHES_CORE_DIRECTORY: JSON.stringify(ROOT_DIR).replace(/\\/g, '/'), + ARCHES_APPLICATIONS: JSON.stringify(ARCHES_APPLICATIONS), + SITE_PACKAGES_DIRECTORY: JSON.stringify(SITE_PACKAGES_DIRECTORY).replace(/\\/g, '/'), + }; - resolve({ - entry: { - ...archesCoreEntryPointConfiguration, - ...archesApplicationsEntrypointConfiguration, - ...projectEntryPointConfiguration, - ...CSSFilepathLookup, - }, - devServer: { - port: WEBPACK_DEVELOPMENT_SERVER_PORT, - }, - output: { - path: Path.resolve(__dirname, APP_ROOT, 'media', 'build'), - publicPath: STATIC_URL, - libraryTarget: 'amd-require', - clean: true, - assetModuleFilename: 'img/[hash][ext][query]', - }, - plugins: [ - new CleanWebpackPlugin(), - new webpack.DefinePlugin(universalConstants), - new webpack.DefinePlugin({ - __VUE_OPTIONS_API__: 'true', - __VUE_PROD_DEVTOOLS__: 'false', - __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'false' - }), - new webpack.ProvidePlugin({ - $: Path.resolve(__dirname, PROJECT_RELATIVE_NODE_MODULES_PATH, 'jquery', 'dist', 'jquery.min'), - jQuery: Path.resolve(__dirname, PROJECT_RELATIVE_NODE_MODULES_PATH, 'jquery', 'dist', 'jquery.min'), - jquery: Path.resolve(__dirname, PROJECT_RELATIVE_NODE_MODULES_PATH, 'jquery', 'dist', 'jquery.min') - }), - new MiniCssExtractPlugin(), - new BundleTracker({ - path: Path.resolve(__dirname), - filename: 'webpack-stats.json' - }), - new VueLoaderPlugin(), - ], - resolveLoader: { - alias: { - text: 'raw-loader' - } + let linkedApplicationPathCount = 0; + for (const archesApplication of ARCHES_APPLICATIONS) { + if (!ARCHES_APPLICATIONS_PATHS[archesApplication].includes('site-packages')) { + universalConstants[`LINKED_APPLICATION_PATH_${linkedApplicationPathCount}`] = JSON.stringify( + ARCHES_APPLICATIONS_PATHS[archesApplication] + ).replace(/\\/g, '/'); + linkedApplicationPathCount += 1; + } + } + + // END create universal constants + + resolve({ + entry: { + ...archesCoreEntryPointConfiguration, + ...archesApplicationsEntrypointConfiguration, + ...projectEntryPointConfiguration, + ...CSSFilepathLookup, + }, + devServer: { + port: WEBPACK_DEVELOPMENT_SERVER_PORT, + }, + output: { + path: Path.resolve(__dirname, APP_ROOT, 'media', 'build'), + publicPath: STATIC_URL, + libraryTarget: 'amd-require', + clean: true, + assetModuleFilename: 'img/[hash][ext][query]', + }, + plugins: [ + new CleanWebpackPlugin(), + new webpack.DefinePlugin(universalConstants), + new webpack.DefinePlugin({ + __VUE_OPTIONS_API__: 'true', + __VUE_PROD_DEVTOOLS__: 'false', + __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'false' + }), + new webpack.ProvidePlugin({ + $: Path.resolve(__dirname, PROJECT_RELATIVE_NODE_MODULES_PATH, 'jquery', 'dist', 'jquery.min'), + jQuery: Path.resolve(__dirname, PROJECT_RELATIVE_NODE_MODULES_PATH, 'jquery', 'dist', 'jquery.min'), + jquery: Path.resolve(__dirname, PROJECT_RELATIVE_NODE_MODULES_PATH, 'jquery', 'dist', 'jquery.min') + }), + new MiniCssExtractPlugin(), + new BundleTracker({ + path: Path.resolve(__dirname), + filename: 'webpack-stats.json' + }), + new VueLoaderPlugin(), + ], + resolveLoader: { + alias: { + text: 'raw-loader' + } + }, + resolve: { + modules: [Path.resolve(__dirname, PROJECT_RELATIVE_NODE_MODULES_PATH)], + alias: { + ...javascriptRelativeFilepathToAbsoluteFilepathLookup, + ...templateFilepathLookup, + ...imageFilepathLookup, + ...nodeModulesAliases, + ...parsedPackageJSONFilepaths, + '@': [Path.resolve(__dirname, APP_ROOT, 'src'), ...archesApplicationsVuePaths, Path.resolve(__dirname, ROOT_DIR, 'app', 'src')], + 'node_modules': Path.resolve(__dirname, PROJECT_RELATIVE_NODE_MODULES_PATH), + 'arches/arches/app': Path.resolve(__dirname, ROOT_DIR, 'app'), // ensure project-level imports of arches components point to local file + ...Object.fromEntries(ARCHES_APPLICATIONS.map(app => [ // ensure project-level imports of arches application components point to local file + Path.join(app, app), Path.resolve(__dirname, ARCHES_APPLICATIONS_PATHS[app]) + ])), }, - resolve: { - modules: [Path.resolve(__dirname, PROJECT_RELATIVE_NODE_MODULES_PATH)], - alias: { - ...javascriptRelativeFilepathToAbsoluteFilepathLookup, - ...templateFilepathLookup, - ...imageFilepathLookup, - ...nodeModulesAliases, - ...parsedPackageJSONFilepaths, - '@': [Path.resolve(__dirname, APP_ROOT, 'src'), ...archesApplicationsVuePaths, Path.resolve(__dirname, ROOT_DIR, 'app', 'src')], - 'node_modules': Path.resolve(__dirname, PROJECT_RELATIVE_NODE_MODULES_PATH), - 'arches/arches/app': Path.resolve(__dirname, ROOT_DIR, 'app'), // ensure project-level imports of arches components point to local file - ...Object.fromEntries(ARCHES_APPLICATIONS.map(app => [ // ensure project-level imports of arches application components point to local file - Path.join(app, app), Path.resolve(__dirname, ARCHES_APPLICATIONS_PATHS[app]) - ])), + }, + module: { + rules: [ + { + test: /\.tsx?$/, + exclude: /node_modules/, + loader: Path.join(PROJECT_RELATIVE_NODE_MODULES_PATH, 'ts-loader'), + options: { + appendTsSuffixTo: [/\.vue$/], + transpileOnly: true + } }, - }, - module: { - rules: [ - { - test: /\.tsx?$/, - exclude: /node_modules/, - loader: Path.join(PROJECT_RELATIVE_NODE_MODULES_PATH, 'ts-loader'), - options: { - appendTsSuffixTo: [/\.vue$/], - transpileOnly: true - } - }, - { - test: /\.vue$/, - exclude: /node_modules/, - loader: Path.join(PROJECT_RELATIVE_NODE_MODULES_PATH, 'vue-loader'), - }, - { - test: /\.mjs$/, - include: /node_modules/, - type: 'javascript/auto', - }, - { - test: /\.js$/, - exclude: [/node_modules/, /load-component-dependencies/], - loader: Path.join(PROJECT_RELATIVE_NODE_MODULES_PATH, 'babel-loader'), - options: { - presets: ['@babel/preset-env'], - cacheDirectory: Path.join(PROJECT_RELATIVE_NODE_MODULES_PATH, '.cache', 'babel-loader'), - } - }, - { - test: /\.css$/, - exclude: [ - /node_modules/, - Path.resolve(__dirname, APP_ROOT, 'media', 'css'), - Path.resolve(__dirname, ROOT_DIR, 'app', 'media', 'css'), - ...archesApplicationsCSSFilepaths - ], - use: [ - { - 'loader': Path.join(PROJECT_RELATIVE_NODE_MODULES_PATH, 'style-loader'), - }, - { - 'loader': Path.join(PROJECT_RELATIVE_NODE_MODULES_PATH, 'css-loader'), - }, - ], - }, - { - test: /\.s?css$/i, - exclude: [ - /node_modules/, - Path.resolve(__dirname, APP_ROOT, 'src'), - Path.resolve(__dirname, ROOT_DIR, 'app', 'src'), - ...archesApplicationsVuePaths, - ], - use: [ - { - 'loader': MiniCssExtractPlugin.loader, - }, - { - 'loader': Path.join(PROJECT_RELATIVE_NODE_MODULES_PATH, 'css-loader'), - }, - { - 'loader': Path.join(PROJECT_RELATIVE_NODE_MODULES_PATH, 'postcss-loader'), - }, - { - 'loader': Path.join(PROJECT_RELATIVE_NODE_MODULES_PATH, 'sass-loader'), - options: { - sassOptions: { - indentWidth: 4, - includePaths: [ - Path.resolve(__dirname, APP_ROOT, 'media', 'css'), - ...archesApplicationsCSSFilepaths, - Path.resolve(__dirname, ROOT_DIR, 'app', 'media', 'css'), - ], - }, + { + test: /\.vue$/, + exclude: /node_modules/, + loader: Path.join(PROJECT_RELATIVE_NODE_MODULES_PATH, 'vue-loader'), + }, + { + test: /\.mjs$/, + include: /node_modules/, + type: 'javascript/auto', + }, + { + test: /\.js$/, + exclude: [/node_modules/, /load-component-dependencies/], + loader: Path.join(PROJECT_RELATIVE_NODE_MODULES_PATH, 'babel-loader'), + options: { + presets: ['@babel/preset-env'], + cacheDirectory: Path.join(PROJECT_RELATIVE_NODE_MODULES_PATH, '.cache', 'babel-loader'), + } + }, + { + test: /\.css$/, + exclude: [ + /node_modules/, + Path.resolve(__dirname, APP_ROOT, 'media', 'css'), + Path.resolve(__dirname, ROOT_DIR, 'app', 'media', 'css'), + ...archesApplicationsCSSFilepaths + ], + use: [ + { + 'loader': Path.join(PROJECT_RELATIVE_NODE_MODULES_PATH, 'style-loader'), + }, + { + 'loader': Path.join(PROJECT_RELATIVE_NODE_MODULES_PATH, 'css-loader'), + }, + ], + }, + { + test: /\.s?css$/i, + exclude: [ + /node_modules/, + Path.resolve(__dirname, APP_ROOT, 'src'), + Path.resolve(__dirname, ROOT_DIR, 'app', 'src'), + ...archesApplicationsVuePaths, + ], + use: [ + { + 'loader': MiniCssExtractPlugin.loader, + }, + { + 'loader': Path.join(PROJECT_RELATIVE_NODE_MODULES_PATH, 'css-loader'), + }, + { + 'loader': Path.join(PROJECT_RELATIVE_NODE_MODULES_PATH, 'postcss-loader'), + }, + { + 'loader': Path.join(PROJECT_RELATIVE_NODE_MODULES_PATH, 'sass-loader'), + options: { + sassOptions: { + indentWidth: 4, + includePaths: [ + Path.resolve(__dirname, APP_ROOT, 'media', 'css'), + ...archesApplicationsCSSFilepaths, + Path.resolve(__dirname, ROOT_DIR, 'app', 'media', 'css'), + ], }, - } - ], - }, - { - test: /\.html?$/i, - exclude: /node_modules/, - loader: Path.join(PROJECT_RELATIVE_NODE_MODULES_PATH, 'html-loader'), - options: { - esModule: false, - minimize: { - removeComments: false, }, - preprocessor: async (content, loaderContext) => { - const resourcePath = loaderContext['resourcePath']; - - let templatePath; + } + ], + }, + { + test: /\.html?$/i, + exclude: /node_modules/, + loader: Path.join(PROJECT_RELATIVE_NODE_MODULES_PATH, 'html-loader'), + options: { + esModule: false, + minimize: { + removeComments: false, + }, + preprocessor: async (content, loaderContext) => { + const resourcePath = loaderContext['resourcePath']; + + let templatePath; + + if (resourcePath.includes(APP_ROOT)) { // project-level component + templatePath = resourcePath.split(APP_ROOT)[1]; + } - if (resourcePath.includes(APP_ROOT)) { // project-level component - templatePath = resourcePath.split(APP_ROOT)[1]; + for (const archesApplicationPath of Object.values(ARCHES_APPLICATIONS_PATHS)) { // arches application component + if (!templatePath && resourcePath.includes(archesApplicationPath)) { + templatePath = resourcePath.split(archesApplicationPath)[1]; } + } - for (const archesApplicationPath of Object.values(ARCHES_APPLICATIONS_PATHS)) { // arches application component - if (!templatePath && resourcePath.includes(archesApplicationPath)) { - templatePath = resourcePath.split(archesApplicationPath)[1]; - } - } + if (!templatePath) { // arches core component + templatePath = resourcePath.split(Path.join(ROOT_DIR, 'app'))[1]; + } + + let isTestEnvironment = false; + for (let arg of process.argv) { + const keyValuePair = arg.split('='); + const key = keyValuePair[0].toLowerCase(); - if (!templatePath) { // arches core component - templatePath = resourcePath.split(Path.join(ROOT_DIR, 'app'))[1]; + if (key === 'test') { + isTestEnvironment = true; } + } - let isTestEnvironment = false; - for (let arg of process.argv) { - const keyValuePair = arg.split('='); - const key = keyValuePair[0].toLowerCase(); + let resp; - if (key === 'test') { - isTestEnvironment = true; - } - } + console.log(`Loading "${templatePath}" from Django server...`) - let resp; - - console.log(`Loading "${templatePath}" from Django server...`) - - const renderTemplate = async (failureCount = 0) => { - /* - Sometimes Django can choke on the number of requests, this function will - continue attempting to render the template until successful or 5 failures. - */ - if (failureCount < 5) { - try { - let serverAddress = PUBLIC_SERVER_ADDRESS; - if (serverAddress.charAt(serverAddress.length - 1) === '/') { - serverAddress = serverAddress.slice(0, -1) - } - - resp = await fetch(serverAddress + templatePath); - - if (resp.status === 500) { - throw new Error(); - } + const renderTemplate = async (failureCount = 0) => { + /* + Sometimes Django can choke on the number of requests, this function will + continue attempting to render the template until successful or 5 failures. + */ + if (failureCount < 5) { + try { + let serverAddress = PUBLIC_SERVER_ADDRESS; + if (serverAddress.charAt(serverAddress.length - 1) === '/') { + serverAddress = serverAddress.slice(0, -1) } - catch (e) { - failureCount += 1; - console.warn( - '\x1b[33m%s\x1b[0m', // yellow - `"${templatePath}" has failed to load. Retrying (${failureCount} / 5)...` - ); - return await renderTemplate(failureCount = failureCount); + + resp = await fetch(serverAddress + templatePath); + + if (resp.status === 500) { + throw new Error(); } } + catch (e) { + failureCount += 1; + console.warn( + '\x1b[33m%s\x1b[0m', // yellow + `"${templatePath}" has failed to load. Retrying (${failureCount} / 5)...` + ); + return await renderTemplate(failureCount = failureCount); + } + } + else { + if (!isTestEnvironment) { + loaderContext.emitError(Error(`Unable to fetch ${templatePath} from the Django server.`)) + } else { - if (!isTestEnvironment) { - loaderContext.emitError(Error(`Unable to fetch ${templatePath} from the Django server.`)) - } - else { - console.warn( - '\x1b[31m%s\x1b[0m', // red - `"${templatePath}" has failed to load! Test environment detected, falling back to un-rendered file.` - ); - } - - resp = { - text: () => ( - new Promise((resolve, _reject) => { - /* - if run in a test environment, failures will return a empty string which will - still allow the bundle to build. - */ - - resolve(isTestEnvironment ? '' : content); - }) - ) - }; + console.warn( + '\x1b[31m%s\x1b[0m', // red + `"${templatePath}" has failed to load! Test environment detected, falling back to un-rendered file.` + ); } - }; - await renderTemplate(); - - const responseText = await resp.text(); - return responseText; - } - } - }, - { - test: /\.(txt|DS_Store)$/i, - exclude: /node_modules/, - use: Path.join(PROJECT_RELATIVE_NODE_MODULES_PATH, 'raw-loader'), - }, - { - test: /\.(png|svg|jpg|jpeg|gif)$/i, - exclude: /node_modules/, - type: 'asset/resource', - }, - ], - }, - }); - }; + resp = { + text: () => ( + new Promise((resolve, _reject) => { + /* + if run in a test environment, failures will return a empty string which will + still allow the bundle to build. + */ + + resolve(isTestEnvironment ? '' : content); + }) + ) + }; + } + }; - // BEGIN get data from `settings.py` - const settingsFilePath = findFile(Path.dirname(__dirname), 'settings.py', ["node_modules", "build"]); - - const runPythonScript = (pythonCommand) => { - let projectSettings = spawn(pythonCommand, [settingsFilePath]); - - projectSettings.stderr.on("data", process.stderr.write); - projectSettings.stdout.on("data", function(data) { - if (!data) { - console.error( - '\x1b[31m%s\x1b[0m', // red - "Webpack did not receive application data! Aborting..." - ); - return; - } - - const parsedData = JSON.parse(data); - console.log('Data imported from settings.py:', parsedData); - - global.APP_ROOT = parsedData['APP_ROOT']; - global.ARCHES_APPLICATIONS = parsedData['ARCHES_APPLICATIONS']; - global.ARCHES_APPLICATIONS_PATHS = parsedData['ARCHES_APPLICATIONS_PATHS']; - global.SITE_PACKAGES_DIRECTORY = parsedData['SITE_PACKAGES_DIRECTORY']; - global.ROOT_DIR = parsedData['ROOT_DIR']; - global.STATIC_URL = parsedData['STATIC_URL']; - global.PUBLIC_SERVER_ADDRESS = parsedData['PUBLIC_SERVER_ADDRESS']; - global.WEBPACK_DEVELOPMENT_SERVER_PORT = parsedData['WEBPACK_DEVELOPMENT_SERVER_PORT']; - - createWebpackConfig(); - }); - projectSettings.on('close', (code) => { - if (code !== 0) { - console.error( - '\x1b[31m%s\x1b[0m', // red - `Could not successfully read ${settingsFilePath}, exited with code: ${code}.` - ); - } - }); - - projectSettings.on('error', () => { - if (pythonCommand === 'python') { - runPythonScript('python3'); - } - else { - console.error( - '\x1b[31m%s\x1b[0m', // red - `Could not successfully read ${settingsFilePath} with ${pythonCommand}, error occurred.` - ); - } - }); - }; + await renderTemplate(); - runPythonScript('python'); - // END get data from `settings.py` + const responseText = await resp.text(); + return responseText; + } + } + }, + { + test: /\.(txt|DS_Store)$/i, + exclude: /node_modules/, + use: Path.join(PROJECT_RELATIVE_NODE_MODULES_PATH, 'raw-loader'), + }, + { + test: /\.(png|svg|jpg|jpeg|gif)$/i, + exclude: /node_modules/, + type: 'asset/resource', + }, + ], + }, + }); }); }; From 29d7975d254e79515c3af9561e7ae20b3fcb9ee2 Mon Sep 17 00:00:00 2001 From: Cyrus Hiatt Date: Fri, 2 Aug 2024 08:38:32 -0700 Subject: [PATCH 06/18] Update workflows with latest config --- .github/workflows/main.yml | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c12aac4..f25bca3 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -6,7 +6,7 @@ on: workflow_dispatch: jobs: - build_feature_branch: + build_target_branch: runs-on: ubuntu-latest services: @@ -22,7 +22,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.10", "3.11", "3.12"] + python-version: ["3.12"] steps: - uses: actions/checkout@v4 @@ -33,14 +33,21 @@ jobs: python-version: ${{ matrix.python-version }} check-latest: true + - name: Checkout into target branch + uses: actions/checkout@v4 + with: + repository: ${{ github.repository }} + ref: ${{ github.event.pull_request.base.ref }} + path: . + - name: Build and test branch uses: ./.github/actions/build-and-test-branch with: secrets: ${{ toJSON(secrets) }} project-name: 'disco' - branch-type: 'feature' + branch-type: 'target' - build_target_branch: + build_feature_branch: runs-on: ubuntu-latest services: @@ -56,7 +63,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.12"] + python-version: ["3.10", "3.11", "3.12"] steps: - uses: actions/checkout@v4 @@ -67,12 +74,19 @@ jobs: python-version: ${{ matrix.python-version }} check-latest: true + - name: Checkout into feature branch + uses: actions/checkout@v4 + with: + repository: ${{ github.repository }} + ref: ${{ github.ref }} + path: . + - name: Build and test branch uses: ./.github/actions/build-and-test-branch with: secrets: ${{ toJSON(secrets) }} project-name: 'disco' - branch-type: 'target' + branch-type: 'feature' check_frontend_coverage: runs-on: ubuntu-latest @@ -255,4 +269,4 @@ jobs: exit 1 else echo "Feature branch coverage ($feature_branch_python_coverage%) >= Target branch coverage ($target_branch_python_coverage%)." - fi + fi \ No newline at end of file From 8eba4fc07815d59171e7f6a569f726dcccf5364b Mon Sep 17 00:00:00 2001 From: Cyrus Hiatt Date: Fri, 2 Aug 2024 08:39:04 -0700 Subject: [PATCH 07/18] Update apps.py for 7.6 latest --- disco/apps.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/disco/apps.py b/disco/apps.py index 0b8fc94..2a32879 100644 --- a/disco/apps.py +++ b/disco/apps.py @@ -1,7 +1,12 @@ from django.apps import AppConfig +from arches.settings_utils import generate_frontend_configuration + class DiscoConfig(AppConfig): name = "disco" verbose_name = "Disco" is_arches_application = True + + def ready(self): + generate_frontend_configuration() \ No newline at end of file From 8dba0d3c9457dbc8e5acc6ebd333c81d61a16ae8 Mon Sep 17 00:00:00 2001 From: Cyrus Hiatt Date: Fri, 2 Aug 2024 09:02:40 -0700 Subject: [PATCH 08/18] Update gh action --- .../actions/build-and-test-branch/action.yml | 21 +++++-------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/.github/actions/build-and-test-branch/action.yml b/.github/actions/build-and-test-branch/action.yml index db4b898..d6a4d7e 100644 --- a/.github/actions/build-and-test-branch/action.yml +++ b/.github/actions/build-and-test-branch/action.yml @@ -30,28 +30,17 @@ runs: pip install '.[dev]' echo Python packages installed shell: bash + + - name: Ensure frontend configuration files exist + run: | + python manage.py check + shell: bash - name: Install Arches applications uses: ./.github/actions/install-arches-applications with: secrets: ${{ inputs.secrets }} - - name: Checkout into feature branch - if: inputs.branch-type == 'feature' - uses: actions/checkout@v4 - with: - repository: ${{ github.repository }} - ref: ${{ github.ref }} - path: . - - - name: Checkout into target branch - if: inputs.branch-type == 'target' - uses: actions/checkout@v4 - with: - repository: ${{ github.repository }} - ref: ${{ github.event.pull_request.base.ref }} - path: . - - name: Install frontend dependencies run: | npm install From fc3e1fdacded12203d643da461c0e778a3e5e99f Mon Sep 17 00:00:00 2001 From: Cyrus Hiatt Date: Fri, 2 Aug 2024 09:34:25 -0700 Subject: [PATCH 09/18] Pin arches and afs dependencies to branches --- disco/settings.py | 4 ++-- disco/urls.py | 1 + package.json | 8 ++++---- pyproject.toml | 4 ++-- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/disco/settings.py b/disco/settings.py index b222b88..b30a446 100644 --- a/disco/settings.py +++ b/disco/settings.py @@ -106,7 +106,6 @@ } INSTALLED_APPS = ( - "disco", "webpack_loader", "django.contrib.admin", "django.contrib.auth", @@ -126,6 +125,7 @@ "django_celery_results", "pgtrigger", # "silk", + "disco", "arches_templating", "arches_for_science", ) @@ -264,7 +264,7 @@ CLUSTER_DISTANCE_MAX = 5000 #meters GRAPH_MODEL_CACHE_TIMEOUT = None -OAUTH_CLIENT_ID = '' #'9JCibwrWQ4hwuGn5fu2u1oRZSs9V6gK8Vu8hpRC4' +OAUTH_CLIENT_ID = 'vrPZJ8h0KIASrNK0IkjXKK8xMBe5G8hRRdE0dQdj' APP_TITLE = 'Arches | Heritage Data Management' COPYRIGHT_TEXT = 'All Rights Reserved.' diff --git a/disco/urls.py b/disco/urls.py index bba30fc..40ab183 100644 --- a/disco/urls.py +++ b/disco/urls.py @@ -7,6 +7,7 @@ urlpatterns = [ re_path(r"^", include("arches.urls")), re_path(r"^", include("arches_for_science.urls")), + # re_path(r"^", include("dashboard.urls")), path("reports/", include("arches_templating.urls")), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/package.json b/package.json index c6982b4..3c406b5 100644 --- a/package.json +++ b/package.json @@ -2,9 +2,9 @@ "name": "disco", "license": "AGPL-3.0-only", "scripts": { - "build_development": "npm run eslint:check && npm run ts:check && cross-env NODE_OPTIONS=--max-old-space-size=2048 webpack --config ./webpack/webpack.config.dev.js", - "build_production": "npm run eslint:check && npm run ts:check && cross-env NODE_OPTIONS=--max-old-space-size=2048 NODE_ENV=production webpack --config ./webpack/webpack.config.prod.js", - "build_test": "npm run eslint:check && npm run ts:check && cross-env NODE_OPTIONS=--max-old-space-size=2048 webpack --config ./webpack/webpack.config.dev.js --env test=true", + "build_development": "npm run eslint:check && npm run ts:check && cross-env NODE_OPTIONS=--max-old-space-size=8192 webpack --config ./webpack/webpack.config.dev.js", + "build_production": "npm run eslint:check && npm run ts:check && cross-env NODE_OPTIONS=--max-old-space-size=8192 NODE_ENV=production webpack --config ./webpack/webpack.config.prod.js", + "build_test": "npm run eslint:check && npm run ts:check && cross-env NODE_OPTIONS=--max-old-space-size=8192 webpack --config ./webpack/webpack.config.dev.js --env test=true", "eslint:check": "eslint **/src", "eslint:fix": "eslint **/src --fix", "eslint:watch": "nodemon --watch . --ext ts,vue --exec npm run --silent eslint:check", @@ -14,7 +14,7 @@ "prettier:fix": "prettier glass/src --write", "ts:check": "vue-tsc --noEmit", "ts:watch": "vue-tsc --watch --noEmit", - "start": "cross-env NODE_OPTIONS=--max-old-space-size=2048 webpack serve --config ./webpack/webpack.config.dev.js", + "start": "cross-env NODE_OPTIONS=--max-old-space-size=8192 webpack serve --config ./webpack/webpack.config.dev.js", "vitest": "vitest --run --coverage" }, "dependencies": { diff --git a/pyproject.toml b/pyproject.toml index 34b4744..e47aa7d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,8 +24,8 @@ classifiers = [ ] requires-python = ">=3.10" dependencies = [ - "arches>=7.6.0a0,<7.7.0", - "arches_for_science>=1.1.0a4", + "arches @ git+https://github.com/archesproject/arches.git@dev/7.6.x", + "arches_for_science @ git+https://github.com/archesproject/arches-for-science.git@make_afs_a_project_and_updateproject", ] version = "0.0.1" From 236479405e529549c4f63ac3635112d27a395bce Mon Sep 17 00:00:00 2001 From: Cyrus Hiatt Date: Fri, 2 Aug 2024 09:49:44 -0700 Subject: [PATCH 10/18] Cleanup --- disco/settings.py | 4 ++-- disco/urls.py | 1 - package.json | 8 ++++---- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/disco/settings.py b/disco/settings.py index b30a446..ab6964f 100644 --- a/disco/settings.py +++ b/disco/settings.py @@ -106,6 +106,7 @@ } INSTALLED_APPS = ( + "disco", "webpack_loader", "django.contrib.admin", "django.contrib.auth", @@ -125,7 +126,6 @@ "django_celery_results", "pgtrigger", # "silk", - "disco", "arches_templating", "arches_for_science", ) @@ -264,7 +264,7 @@ CLUSTER_DISTANCE_MAX = 5000 #meters GRAPH_MODEL_CACHE_TIMEOUT = None -OAUTH_CLIENT_ID = 'vrPZJ8h0KIASrNK0IkjXKK8xMBe5G8hRRdE0dQdj' +OAUTH_CLIENT_ID = '' APP_TITLE = 'Arches | Heritage Data Management' COPYRIGHT_TEXT = 'All Rights Reserved.' diff --git a/disco/urls.py b/disco/urls.py index 40ab183..bba30fc 100644 --- a/disco/urls.py +++ b/disco/urls.py @@ -7,7 +7,6 @@ urlpatterns = [ re_path(r"^", include("arches.urls")), re_path(r"^", include("arches_for_science.urls")), - # re_path(r"^", include("dashboard.urls")), path("reports/", include("arches_templating.urls")), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/package.json b/package.json index 3c406b5..c6982b4 100644 --- a/package.json +++ b/package.json @@ -2,9 +2,9 @@ "name": "disco", "license": "AGPL-3.0-only", "scripts": { - "build_development": "npm run eslint:check && npm run ts:check && cross-env NODE_OPTIONS=--max-old-space-size=8192 webpack --config ./webpack/webpack.config.dev.js", - "build_production": "npm run eslint:check && npm run ts:check && cross-env NODE_OPTIONS=--max-old-space-size=8192 NODE_ENV=production webpack --config ./webpack/webpack.config.prod.js", - "build_test": "npm run eslint:check && npm run ts:check && cross-env NODE_OPTIONS=--max-old-space-size=8192 webpack --config ./webpack/webpack.config.dev.js --env test=true", + "build_development": "npm run eslint:check && npm run ts:check && cross-env NODE_OPTIONS=--max-old-space-size=2048 webpack --config ./webpack/webpack.config.dev.js", + "build_production": "npm run eslint:check && npm run ts:check && cross-env NODE_OPTIONS=--max-old-space-size=2048 NODE_ENV=production webpack --config ./webpack/webpack.config.prod.js", + "build_test": "npm run eslint:check && npm run ts:check && cross-env NODE_OPTIONS=--max-old-space-size=2048 webpack --config ./webpack/webpack.config.dev.js --env test=true", "eslint:check": "eslint **/src", "eslint:fix": "eslint **/src --fix", "eslint:watch": "nodemon --watch . --ext ts,vue --exec npm run --silent eslint:check", @@ -14,7 +14,7 @@ "prettier:fix": "prettier glass/src --write", "ts:check": "vue-tsc --noEmit", "ts:watch": "vue-tsc --watch --noEmit", - "start": "cross-env NODE_OPTIONS=--max-old-space-size=8192 webpack serve --config ./webpack/webpack.config.dev.js", + "start": "cross-env NODE_OPTIONS=--max-old-space-size=2048 webpack serve --config ./webpack/webpack.config.dev.js", "vitest": "vitest --run --coverage" }, "dependencies": { From ac26b8fb225f42503492d266b33ee94b5cf784f7 Mon Sep 17 00:00:00 2001 From: Cyrus Hiatt Date: Fri, 2 Aug 2024 17:33:18 -0700 Subject: [PATCH 11/18] Ignore archestemp --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index c6e00c0..e04d6e9 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ disco/media/packages disco/media/build/ disco/uploadedfiles/* disco/settings_local.py +archestemp webpack-stats.json .vscode/ *.egg-info From 5fa3b5a6b9491fa17fd3531dc08f8e799c63ae20 Mon Sep 17 00:00:00 2001 From: Cyrus Hiatt Date: Fri, 2 Aug 2024 17:34:03 -0700 Subject: [PATCH 12/18] Add dev dependencies to .toml --- pyproject.toml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index e47aa7d..357ed24 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,5 +29,15 @@ dependencies = [ ] version = "0.0.1" +[project.optional-dependencies] +dev = [ + "livereload", + "sst", + "coverage", + "django-silk==5.1.0", + "pre-commit", + "black==24.4.2", +] + [tool.setuptools] packages = ["disco"] From 1fa78b3930d37878dc6597b814fa700a40a4ea39 Mon Sep 17 00:00:00 2001 From: Cyrus Hiatt Date: Fri, 2 Aug 2024 17:34:56 -0700 Subject: [PATCH 13/18] Update afs dependency branch --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 357ed24..d23b479 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,7 +25,7 @@ classifiers = [ requires-python = ">=3.10" dependencies = [ "arches @ git+https://github.com/archesproject/arches.git@dev/7.6.x", - "arches_for_science @ git+https://github.com/archesproject/arches-for-science.git@make_afs_a_project_and_updateproject", + "arches_for_science @ git+https://github.com/archesproject/arches-for-science.git@76-upgrade", ] version = "0.0.1" From 318bf66c184f56b48a4b4ea7509c6a5f625b6dbd Mon Sep 17 00:00:00 2001 From: Cyrus Hiatt Date: Fri, 2 Aug 2024 17:35:33 -0700 Subject: [PATCH 14/18] Blacken --- disco/apps.py | 2 +- disco/celery.py | 6 +- disco/migrations/0001_initial.py | 21 ++- disco/search_indexes/sample_index.py | 14 +- disco/settings.py | 247 +++++++++++++++++---------- disco/settings_docker.py | 12 +- disco/urls.py | 2 +- disco/wsgi.py | 9 +- docker/settings_docker.py | 12 +- manage.py | 4 +- 10 files changed, 214 insertions(+), 115 deletions(-) diff --git a/disco/apps.py b/disco/apps.py index 2a32879..e20ca95 100644 --- a/disco/apps.py +++ b/disco/apps.py @@ -9,4 +9,4 @@ class DiscoConfig(AppConfig): is_arches_application = True def ready(self): - generate_frontend_configuration() \ No newline at end of file + generate_frontend_configuration() diff --git a/disco/celery.py b/disco/celery.py index d3c8f71..4d3e9ff 100644 --- a/disco/celery.py +++ b/disco/celery.py @@ -7,7 +7,7 @@ if platform.system().lower() == "windows": os.environ.setdefault("FORKED_BY_MULTIPROCESSING", "1") -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'disco.settings') -app = Celery('disco') -app.config_from_object('django.conf:settings', namespace='CELERY') +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "disco.settings") +app = Celery("disco") +app.config_from_object("django.conf:settings", namespace="CELERY") app.autodiscover_tasks() diff --git a/disco/migrations/0001_initial.py b/disco/migrations/0001_initial.py index 9048d53..dedef83 100644 --- a/disco/migrations/0001_initial.py +++ b/disco/migrations/0001_initial.py @@ -6,6 +6,7 @@ from django.conf import settings import os + class Migration(migrations.Migration): initial = True @@ -22,10 +23,10 @@ def add_document_templates(apps, schema_editor): name="Example Template", description="This is an example template", defaults={ - "template":"document_templates/example-template.docx", - "preview":"document_templates/72cc4dcf-9500-418f-a42e-7d980937a9db_preview.pdf", - "thumbnail":"document_templates/72cc4dcf-9500-418f-a42e-7d980937a9db_thumbnail.png", - } + "template": "document_templates/example-template.docx", + "preview": "document_templates/72cc4dcf-9500-418f-a42e-7d980937a9db_preview.pdf", + "thumbnail": "document_templates/72cc4dcf-9500-418f-a42e-7d980937a9db_thumbnail.png", + }, ) file_names = ( @@ -35,13 +36,19 @@ def add_document_templates(apps, schema_editor): ) for name in file_names: - with open(os.path.join(settings.APP_NAME, 'document_templates', name), 'rb') as template_file: - default_storage.save(os.path.join('document_templates', name), File(template_file)) + with open( + os.path.join(settings.APP_NAME, "document_templates", name), "rb" + ) as template_file: + default_storage.save( + os.path.join("document_templates", name), File(template_file) + ) def remove_document_templates(apps, schema_editor): ArchesTemplate = apps.get_model("arches_templating", "ArchesTemplate") - example_template = ArchesTemplate.objects.get(templateid="72cc4dcf-9500-418f-a42e-7d980937a9db") + example_template = ArchesTemplate.objects.get( + templateid="72cc4dcf-9500-418f-a42e-7d980937a9db" + ) example_template.delete() operations = [ diff --git a/disco/search_indexes/sample_index.py b/disco/search_indexes/sample_index.py index 3c23155..cd9c1e8 100644 --- a/disco/search_indexes/sample_index.py +++ b/disco/search_indexes/sample_index.py @@ -3,8 +3,18 @@ class SampleIndex(BaseIndex): def prepare_index(self): - self.index_metadata = {"mappings": {"properties": {"tile_count": {"type": "keyword"}, "graph_id": {"type": "keyword"}}}} + self.index_metadata = { + "mappings": { + "properties": { + "tile_count": {"type": "keyword"}, + "graph_id": {"type": "keyword"}, + } + } + } super(SampleIndex, self).prepare_index() def get_documents_to_index(self, resourceinstance, tiles): - return ({"tile_count": len(tiles), "graph_id": resourceinstance.graph_id}, str(resourceinstance.resourceinstanceid)) + return ( + {"tile_count": len(tiles), "graph_id": resourceinstance.graph_id}, + str(resourceinstance.resourceinstanceid), + ) diff --git a/disco/settings.py b/disco/settings.py index ab6964f..87a783d 100644 --- a/disco/settings.py +++ b/disco/settings.py @@ -10,7 +10,7 @@ from arches.settings import * -APP_NAME = 'disco' +APP_NAME = "disco" APP_VERSION = semantic_version.Version(major=0, minor=0, patch=0) APP_ROOT = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) MIN_ARCHES_VERSION = arches.__version__ @@ -18,30 +18,49 @@ WEBPACK_LOADER = { "DEFAULT": { - "STATS_FILE": os.path.join(APP_ROOT, '..', 'webpack/webpack-stats.json'), + "STATS_FILE": os.path.join(APP_ROOT, "..", "webpack/webpack-stats.json"), }, } -DATATYPE_LOCATIONS.append('disco.datatypes') -FUNCTION_LOCATIONS.append('arches_for_science.functions') -FUNCTION_LOCATIONS.append('disco.functions') -ETL_MODULE_LOCATIONS.append('disco.etl_modules') -SEARCH_COMPONENT_LOCATIONS.append('disco.search_components') +DATATYPE_LOCATIONS.append("disco.datatypes") +FUNCTION_LOCATIONS.append("arches_for_science.functions") +FUNCTION_LOCATIONS.append("disco.functions") +ETL_MODULE_LOCATIONS.append("disco.etl_modules") +SEARCH_COMPONENT_LOCATIONS.append("disco.search_components") -LOCALE_PATHS.insert(0, os.path.join(APP_ROOT, 'locale')) +LOCALE_PATHS.insert(0, os.path.join(APP_ROOT, "locale")) FILE_TYPE_CHECKING = False -FILE_TYPES = ["bmp", "gif", "jpg", "jpeg", "pdf", "png", "psd", "rtf", "tif", "tiff", "xlsx", "csv", "zip", "json"] +FILE_TYPES = [ + "bmp", + "gif", + "jpg", + "jpeg", + "pdf", + "png", + "psd", + "rtf", + "tif", + "tiff", + "xlsx", + "csv", + "zip", + "json", +] # SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = 't*#3-h-$cj^1^c(g6f6%pn2&1-g@!5tk%k2!n0!ns(s@2ck!*1' +SECRET_KEY = "t*#3-h-$cj^1^c(g6f6%pn2&1-g@!5tk%k2!n0!ns(s@2ck!*1" # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True -ROOT_URLCONF = 'disco.urls' +ROOT_URLCONF = "disco.urls" # Modify this line as needed for your project to connect to elasticsearch with a password that you generate -ELASTICSEARCH_CONNECTION_OPTIONS = {"request_timeout": 30, "verify_certs": False, "basic_auth": ("elastic", "E1asticSearchforArche5")} +ELASTICSEARCH_CONNECTION_OPTIONS = { + "request_timeout": 30, + "verify_certs": False, + "basic_auth": ("elastic", "E1asticSearchforArche5"), +} # If you need to connect to Elasticsearch via an API key instead of username/password, use the syntax below: # ELASTICSEARCH_CONNECTION_OPTIONS = {"timeout": 30, "verify_certs": False, "api_key": ""} @@ -56,7 +75,7 @@ # Or Kibana: https://www.elastic.co/guide/en/kibana/current/api-keys.html # a prefix to append to all elasticsearch indexes, note: must be lower case -ELASTICSEARCH_PREFIX = 'disco' +ELASTICSEARCH_PREFIX = "disco" ELASTICSEARCH_CUSTOM_INDEXES = [] # [{ @@ -94,14 +113,9 @@ "PASSWORD": "postgis", "PORT": "5432", "POSTGIS_TEMPLATE": "template_postgis", - "TEST": { - "CHARSET": None, - "COLLATION": None, - "MIRROR": None, - "NAME": None - }, + "TEST": {"CHARSET": None, "COLLATION": None, "MIRROR": None, "NAME": None}, "TIME_ZONE": None, - "USER": "postgres" + "USER": "postgres", } } @@ -166,25 +180,27 @@ "arches.app.utils.context_processors.livereload", "arches.app.utils.context_processors.map_info", "arches.app.utils.context_processors.app_settings", - "arches_for_science.utils.context_processors.project_settings" - ] + "arches_for_science.utils.context_processors.project_settings", + ], ) ALLOWED_HOSTS = [] -SYSTEM_SETTINGS_LOCAL_PATH = os.path.join(APP_ROOT, 'system_settings', 'System_Settings.json') -WSGI_APPLICATION = 'disco.wsgi.application' +SYSTEM_SETTINGS_LOCAL_PATH = os.path.join( + APP_ROOT, "system_settings", "System_Settings.json" +) +WSGI_APPLICATION = "disco.wsgi.application" # URL that handles the media served from MEDIA_ROOT, used for managing stored files. # It must end in a slash if set to a non-empty value. -MEDIA_URL = '/files/' +MEDIA_URL = "/files/" # Absolute filesystem path to the directory that will hold user-uploaded files. -MEDIA_ROOT = os.path.join(APP_ROOT) +MEDIA_ROOT = os.path.join(APP_ROOT) # URL prefix for static files. # Example: "http://media.lawrence.com/static/" -STATIC_URL = '/static/' +STATIC_URL = "/static/" # Absolute path to the directory static files should be collected to. # Don't put anything in this directory yourself; store your static files @@ -195,37 +211,37 @@ # when hosting Arches under a sub path set this value to the sub path eg : "/{sub_path}/" FORCE_SCRIPT_NAME = None -RESOURCE_IMPORT_LOG = os.path.join(APP_ROOT, 'logs', 'resource_import.log') -DEFAULT_RESOURCE_IMPORT_USER = {'username': 'admin', 'userid': 1} +RESOURCE_IMPORT_LOG = os.path.join(APP_ROOT, "logs", "resource_import.log") +DEFAULT_RESOURCE_IMPORT_USER = {"username": "admin", "userid": 1} LOGGING = { - 'version': 1, - 'disable_existing_loggers': False, - 'formatters': { - 'console': { - 'format': '%(asctime)s %(name)-12s %(levelname)-8s %(message)s', + "version": 1, + "disable_existing_loggers": False, + "formatters": { + "console": { + "format": "%(asctime)s %(name)-12s %(levelname)-8s %(message)s", }, }, - 'handlers': { - 'file': { - 'level': 'WARNING', # DEBUG, INFO, WARNING, ERROR - 'class': 'logging.FileHandler', - 'filename': os.path.join(APP_ROOT, 'arches.log'), - 'formatter': 'console' + "handlers": { + "file": { + "level": "WARNING", # DEBUG, INFO, WARNING, ERROR + "class": "logging.FileHandler", + "filename": os.path.join(APP_ROOT, "arches.log"), + "formatter": "console", + }, + "console": { + "level": "WARNING", + "class": "logging.StreamHandler", + "formatter": "console", }, - 'console': { - 'level': 'WARNING', - 'class': 'logging.StreamHandler', - 'formatter': 'console' - } }, - 'loggers': { - 'arches': { - 'handlers': ['file', 'console'], - 'level': 'WARNING', - 'propagate': True + "loggers": { + "arches": { + "handlers": ["file", "console"], + "level": "WARNING", + "propagate": True, } - } + }, } @@ -233,16 +249,16 @@ DATA_UPLOAD_MAX_MEMORY_SIZE = 15728640 # Unique session cookie ensures that logins are treated separately for each app -SESSION_COOKIE_NAME = 'disco' +SESSION_COOKIE_NAME = "disco" # For more info on configuring your cache: https://docs.djangoproject.com/en/2.2/topics/cache/ CACHES = { - 'default': { - 'BACKEND': 'django.core.cache.backends.dummy.DummyCache', + "default": { + "BACKEND": "django.core.cache.backends.dummy.DummyCache", }, - 'user_permission': { - 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', - 'LOCATION': 'user_permission_cache', + "user_permission": { + "BACKEND": "django.core.cache.backends.db.DatabaseCache", + "LOCATION": "user_permission_cache", }, } @@ -252,23 +268,25 @@ BYPASS_UNIQUE_CONSTRAINT_TILE_VALIDATION = False BYPASS_REQUIRED_VALUE_TILE_VALIDATION = False -DATE_IMPORT_EXPORT_FORMAT = "%Y-%m-%d" # Custom date format for dates imported from and exported to csv +DATE_IMPORT_EXPORT_FORMAT = ( + "%Y-%m-%d" # Custom date format for dates imported from and exported to csv +) # This is used to indicate whether the data in the CSV and SHP exports should be # ordered as seen in the resource cards or not. EXPORT_DATA_FIELDS_IN_CARD_ORDER = False -#Identify the usernames and duration (seconds) for which you want to cache the time wheel -CACHE_BY_USER = {'anonymous': 3600 * 24} -TILE_CACHE_TIMEOUT = 600 #seconds -CLUSTER_DISTANCE_MAX = 5000 #meters +# Identify the usernames and duration (seconds) for which you want to cache the time wheel +CACHE_BY_USER = {"anonymous": 3600 * 24} +TILE_CACHE_TIMEOUT = 600 # seconds +CLUSTER_DISTANCE_MAX = 5000 # meters GRAPH_MODEL_CACHE_TIMEOUT = None -OAUTH_CLIENT_ID = '' +OAUTH_CLIENT_ID = "" -APP_TITLE = 'Arches | Heritage Data Management' -COPYRIGHT_TEXT = 'All Rights Reserved.' -COPYRIGHT_YEAR = '2019' +APP_TITLE = "Arches | Heritage Data Management" +COPYRIGHT_TEXT = "All Rights Reserved." +COPYRIGHT_YEAR = "2019" ENABLE_CAPTCHA = False # RECAPTCHA_PUBLIC_KEY = '' @@ -289,17 +307,26 @@ DEFAULT_FROM_EMAIL = EMAIL_HOST_USER -CELERY_BROKER_URL = "" # RabbitMQ --> "amqp://guest:guest@localhost", Redis --> "redis://localhost:6379/0" -CELERY_ACCEPT_CONTENT = ['json'] -CELERY_RESULT_BACKEND = 'django-db' # Use 'django-cache' if you want to use your cache as your backend -CELERY_TASK_SERIALIZER = 'json' +CELERY_BROKER_URL = "" # RabbitMQ --> "amqp://guest:guest@localhost", Redis --> "redis://localhost:6379/0" +CELERY_ACCEPT_CONTENT = ["json"] +CELERY_RESULT_BACKEND = ( + "django-db" # Use 'django-cache' if you want to use your cache as your backend +) +CELERY_TASK_SERIALIZER = "json" CELERY_SEARCH_EXPORT_EXPIRES = 24 * 3600 # seconds CELERY_SEARCH_EXPORT_CHECK = 3600 # seconds CELERY_BEAT_SCHEDULE = { - "delete-expired-search-export": {"task": "arches.app.tasks.delete_file", "schedule": CELERY_SEARCH_EXPORT_CHECK,}, - "notification": {"task": "arches.app.tasks.message", "schedule": CELERY_SEARCH_EXPORT_CHECK, "args": ("Celery Beat is Running",),}, + "delete-expired-search-export": { + "task": "arches.app.tasks.delete_file", + "schedule": CELERY_SEARCH_EXPORT_CHECK, + }, + "notification": { + "task": "arches.app.tasks.message", + "schedule": CELERY_SEARCH_EXPORT_CHECK, + "args": ("Celery Beat is Running",), + }, } # Set to True if you want to send celery tasks to the broker without being able to detect celery. @@ -349,10 +376,10 @@ # {langcode}-{regioncode} eg: en, en-gb .... # a list of language codes can be found here http://www.i18nguy.com/unicode/language-identifiers.html LANGUAGES = [ -# ('de', _('German')), - ('en', _('English')), -# ('en-gb', _('British English')), -# ('es', _('Spanish')), + # ('de', _('German')), + ("en", _("English")), + # ('en-gb', _('British English')), + # ('es', _('Spanish')), ] # override this to permenantly display/hide the language switcher @@ -369,7 +396,7 @@ AWS_STORAGE_BUCKET_NAME = "disco-dev-test-bucket" -DOCKER=False +DOCKER = False RENDERERS += [ { @@ -402,7 +429,7 @@ "iconclass": "fa fa-bolt", "component": "views/components/cards/file-renderers/raman-reader", "ext": "txt", - "type": "text/plain", + "type": "text/plain", "exclude": "", }, { @@ -435,7 +462,7 @@ "iconclass": "fa fa-bolt", "component": "views/components/cards/file-renderers/xy-reader", "ext": "txt", - "type": "text/plain", + "type": "text/plain", "exclude": "", }, ] @@ -443,15 +470,51 @@ X_FRAME_OPTIONS = "SAMEORIGIN" FORMATS = [ - {"name": "Bruker M6 (point)", "id": "bm6", "renderer": "31be40ae-dbe6-4f41-9c13-1964d7d17042"}, - {"name": "Bruker 5g", "id": "b5g", "renderer": "31be40ae-dbe6-4f41-9c13-1964d7d17042"}, - {"name": "Bruker Tracer IV-V", "id": "bt45", "renderer": "31be40ae-dbe6-4f41-9c13-1964d7d17042"}, - {"name": "Bruker Tracer III", "id": "bt3", "renderer": "31be40ae-dbe6-4f41-9c13-1964d7d17042"}, - {"name": "Bruker 5i", "id": "b5i", "renderer": "31be40ae-dbe6-4f41-9c13-1964d7d17042"}, - {"name": "Bruker Artax", "id": "bart", "renderer": "31be40ae-dbe6-4f41-9c13-1964d7d17042"}, - {"name": "Renishaw InVia - 785", "id": "r785", "renderer": "94fa1720-6773-4f99-b49b-4ea0926b3933"}, - {"name": "Ranishsaw inVia - 633/514", "id": "r633", "renderer": "94fa1720-6773-4f99-b49b-4ea0926b3933"}, - {"name": "ASD FieldSpec IV hi res", "id": "asd", "renderer": "88dccb59-14e3-4445-8f1b-07f0470b38bb"}, + { + "name": "Bruker M6 (point)", + "id": "bm6", + "renderer": "31be40ae-dbe6-4f41-9c13-1964d7d17042", + }, + { + "name": "Bruker 5g", + "id": "b5g", + "renderer": "31be40ae-dbe6-4f41-9c13-1964d7d17042", + }, + { + "name": "Bruker Tracer IV-V", + "id": "bt45", + "renderer": "31be40ae-dbe6-4f41-9c13-1964d7d17042", + }, + { + "name": "Bruker Tracer III", + "id": "bt3", + "renderer": "31be40ae-dbe6-4f41-9c13-1964d7d17042", + }, + { + "name": "Bruker 5i", + "id": "b5i", + "renderer": "31be40ae-dbe6-4f41-9c13-1964d7d17042", + }, + { + "name": "Bruker Artax", + "id": "bart", + "renderer": "31be40ae-dbe6-4f41-9c13-1964d7d17042", + }, + { + "name": "Renishaw InVia - 785", + "id": "r785", + "renderer": "94fa1720-6773-4f99-b49b-4ea0926b3933", + }, + { + "name": "Ranishsaw inVia - 633/514", + "id": "r633", + "renderer": "94fa1720-6773-4f99-b49b-4ea0926b3933", + }, + { + "name": "ASD FieldSpec IV hi res", + "id": "asd", + "renderer": "88dccb59-14e3-4445-8f1b-07f0470b38bb", + }, ] XY_TEXT_FILE_FORMATS = ["dx", "txt"] @@ -459,7 +522,7 @@ try: from .package_settings import * except ImportError: - try: + try: from package_settings import * except ImportError as e: pass @@ -467,7 +530,7 @@ try: from .settings_local import * except ImportError as e: - try: + try: from settings_local import * except ImportError as e: pass @@ -475,10 +538,10 @@ if DOCKER: try: from .settings_docker import * - except ImportError: + except ImportError: try: from settings_docker import * except ImportError as e: pass -# returns an output that can be read by NODEJS \ No newline at end of file +# returns an output that can be read by NODEJS diff --git a/disco/settings_docker.py b/disco/settings_docker.py index 7f553b3..41b8455 100644 --- a/disco/settings_docker.py +++ b/disco/settings_docker.py @@ -41,9 +41,17 @@ def get_optional_env_variable(var_name): get_env_variable("RABBITMQ_USER"), get_env_variable("RABBITMQ_PASS") ) # RabbitMQ --> "amqp://guest:guest@localhost", Redis --> "redis://localhost:6379/0" -CANTALOUPE_HTTP_ENDPOINT = "http://{}:{}".format(get_env_variable("CANTALOUPE_HOST"), get_env_variable("CANTALOUPE_PORT")) +CANTALOUPE_HTTP_ENDPOINT = "http://{}:{}".format( + get_env_variable("CANTALOUPE_HOST"), get_env_variable("CANTALOUPE_PORT") +) ELASTICSEARCH_HTTP_PORT = get_env_variable("ESPORT") -ELASTICSEARCH_HOSTS = [{"scheme": "http", "host": get_env_variable("ESHOST"), "port": int(ELASTICSEARCH_HTTP_PORT)}] +ELASTICSEARCH_HOSTS = [ + { + "scheme": "http", + "host": get_env_variable("ESHOST"), + "port": int(ELASTICSEARCH_HTTP_PORT), + } +] USER_ELASTICSEARCH_PREFIX = get_optional_env_variable("ELASTICSEARCH_PREFIX") if USER_ELASTICSEARCH_PREFIX: diff --git a/disco/urls.py b/disco/urls.py index bba30fc..f4005d5 100644 --- a/disco/urls.py +++ b/disco/urls.py @@ -16,4 +16,4 @@ if settings.SHOW_LANGUAGE_SWITCH is True: urlpatterns = i18n_patterns(*urlpatterns) - urlpatterns.append(path("i18n/", include("django.conf.urls.i18n"))) \ No newline at end of file + urlpatterns.append(path("i18n/", include("django.conf.urls.i18n"))) diff --git a/disco/wsgi.py b/disco/wsgi.py index e4bcfe1..db26eac 100644 --- a/disco/wsgi.py +++ b/disco/wsgi.py @@ -1,4 +1,4 @@ -''' +""" ARCHES - a program developed to inventory and manage immovable cultural heritage. Copyright (C) 2013 J. Paul Getty Trust and World Monuments Fund @@ -14,11 +14,12 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . -''' +""" import os import sys import inspect + path = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) if path not in sys.path: @@ -27,10 +28,12 @@ # reverting back to the old style of setting the DJANGO_SETTINGS_MODULE env variable # refer to the following blog post under the heading "Leaking of process environment variables." # http://blog.dscpl.com.au/2012/10/requests-running-in-wrong-django.html -os.environ['DJANGO_SETTINGS_MODULE'] = "disco.settings" +os.environ["DJANGO_SETTINGS_MODULE"] = "disco.settings" from django.core.wsgi import get_wsgi_application + application = get_wsgi_application() from arches.app.models.system_settings import settings + settings.update_from_db() diff --git a/docker/settings_docker.py b/docker/settings_docker.py index 7f553b3..41b8455 100644 --- a/docker/settings_docker.py +++ b/docker/settings_docker.py @@ -41,9 +41,17 @@ def get_optional_env_variable(var_name): get_env_variable("RABBITMQ_USER"), get_env_variable("RABBITMQ_PASS") ) # RabbitMQ --> "amqp://guest:guest@localhost", Redis --> "redis://localhost:6379/0" -CANTALOUPE_HTTP_ENDPOINT = "http://{}:{}".format(get_env_variable("CANTALOUPE_HOST"), get_env_variable("CANTALOUPE_PORT")) +CANTALOUPE_HTTP_ENDPOINT = "http://{}:{}".format( + get_env_variable("CANTALOUPE_HOST"), get_env_variable("CANTALOUPE_PORT") +) ELASTICSEARCH_HTTP_PORT = get_env_variable("ESPORT") -ELASTICSEARCH_HOSTS = [{"scheme": "http", "host": get_env_variable("ESHOST"), "port": int(ELASTICSEARCH_HTTP_PORT)}] +ELASTICSEARCH_HOSTS = [ + { + "scheme": "http", + "host": get_env_variable("ESHOST"), + "port": int(ELASTICSEARCH_HTTP_PORT), + } +] USER_ELASTICSEARCH_PREFIX = get_optional_env_variable("ELASTICSEARCH_PREFIX") if USER_ELASTICSEARCH_PREFIX: diff --git a/manage.py b/manage.py index cefcfcc..ef07cf3 100644 --- a/manage.py +++ b/manage.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -''' +""" ARCHES - a program developed to inventory and manage immovable cultural heritage. Copyright (C) 2013 J. Paul Getty Trust and World Monuments Fund @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . -''' +""" import os From b357e4e72e5ad37a6124b52d64a5db8ca92c81a0 Mon Sep 17 00:00:00 2001 From: Cyrus Hiatt Date: Mon, 5 Aug 2024 14:29:25 -0700 Subject: [PATCH 15/18] Pin uppy version --- package-lock.json | 1698 +++++++++++++++++++++++---------------------- package.json | 6 + 2 files changed, 876 insertions(+), 828 deletions(-) diff --git a/package-lock.json b/package-lock.json index ca7c1fa..9142fdb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,12 @@ "name": "disco", "license": "AGPL-3.0-only", "dependencies": { + "@uppy/aws-s3": "3.6.2", + "@uppy/companion-client": "3.1.3", + "@uppy/core": "3.13.0", + "@uppy/dashboard": "3.9.0", + "@uppy/drag-drop": "3.1.0", + "@uppy/progress-bar": "3.1.1", "arches": "archesproject/arches#dev/7.6.x", "arches_for_science": "archesproject/arches-for-science#76-upgrade" }, @@ -40,30 +46,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", - "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", + "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", - "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helpers": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -79,9 +85,9 @@ } }, "node_modules/@babel/eslint-parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.7.tgz", - "integrity": "sha512-SO5E3bVxDuxyNxM5agFv480YA2HO6ohZbGxbazZdIk3KQOPOGVNw6q78I9/lbviIf95eq6tPozeYnJLbjnC8IA==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.1.tgz", + "integrity": "sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg==", "dev": true, "dependencies": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", @@ -97,12 +103,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", - "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", "dev": true, "dependencies": { - "@babel/types": "^7.24.7", + "@babel/types": "^7.25.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -137,14 +143,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", - "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "browserslist": "^4.22.2", + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -153,19 +159,17 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz", - "integrity": "sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz", + "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.8", "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/helper-replace-supers": "^7.24.7", + "@babel/helper-replace-supers": "^7.25.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/traverse": "^7.25.0", "semver": "^6.3.1" }, "engines": { @@ -176,9 +180,9 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.7.tgz", - "integrity": "sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", + "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", @@ -208,51 +212,14 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", - "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", - "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", - "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.7.tgz", - "integrity": "sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", + "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", "dev": true, "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -272,16 +239,15 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", - "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", "@babel/helper-module-imports": "^7.24.7", "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7" + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" }, "engines": { "node": ">=6.9.0" @@ -303,23 +269,23 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", - "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz", - "integrity": "sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", + "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-wrap-function": "^7.24.7" + "@babel/helper-wrap-function": "^7.25.0", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -329,14 +295,14 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz", - "integrity": "sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", + "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.7", - "@babel/helper-optimise-call-expression": "^7.24.7" + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -371,23 +337,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", - "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", - "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", - "dev": true, + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", "engines": { "node": ">=6.9.0" } @@ -401,37 +354,36 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", - "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz", - "integrity": "sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", + "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.24.7", - "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", - "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", + "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", "dev": true, "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -516,9 +468,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", - "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", + "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "dependencies": { + "@babel/types": "^7.25.2" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -527,13 +482,28 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.7.tgz", - "integrity": "sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", + "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz", + "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -543,12 +513,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.7.tgz", - "integrity": "sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", + "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -575,13 +545,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.7.tgz", - "integrity": "sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", + "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -853,15 +823,15 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz", - "integrity": "sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz", + "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-remap-async-to-generator": "^7.24.7", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-remap-async-to-generator": "^7.25.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -903,12 +873,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.7.tgz", - "integrity": "sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", + "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -951,18 +921,16 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.7.tgz", - "integrity": "sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz", + "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-replace-supers": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/traverse": "^7.25.0", "globals": "^11.1.0" }, "engines": { @@ -989,12 +957,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.7.tgz", - "integrity": "sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", + "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1034,6 +1002,22 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz", + "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-transform-dynamic-import": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", @@ -1099,14 +1083,14 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.7.tgz", - "integrity": "sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", + "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.1" }, "engines": { "node": ">=6.9.0" @@ -1132,12 +1116,12 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.7.tgz", - "integrity": "sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", + "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1194,13 +1178,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.7.tgz", - "integrity": "sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", + "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-simple-access": "^7.24.7" }, "engines": { @@ -1211,15 +1195,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.7.tgz", - "integrity": "sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", + "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", "dev": true, "dependencies": { - "@babel/helper-hoist-variables": "^7.24.7", - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -1358,12 +1342,12 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.7.tgz", - "integrity": "sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", + "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, @@ -1551,12 +1535,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.7.tgz", - "integrity": "sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", + "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1629,19 +1613,20 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.7.tgz", - "integrity": "sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.7", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz", + "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", @@ -1662,29 +1647,30 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.0", "@babel/plugin-transform-async-to-generator": "^7.24.7", "@babel/plugin-transform-block-scoped-functions": "^7.24.7", - "@babel/plugin-transform-block-scoping": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.25.0", "@babel/plugin-transform-class-properties": "^7.24.7", "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.24.7", + "@babel/plugin-transform-classes": "^7.25.0", "@babel/plugin-transform-computed-properties": "^7.24.7", - "@babel/plugin-transform-destructuring": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.8", "@babel/plugin-transform-dotall-regex": "^7.24.7", "@babel/plugin-transform-duplicate-keys": "^7.24.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", "@babel/plugin-transform-dynamic-import": "^7.24.7", "@babel/plugin-transform-exponentiation-operator": "^7.24.7", "@babel/plugin-transform-export-namespace-from": "^7.24.7", "@babel/plugin-transform-for-of": "^7.24.7", - "@babel/plugin-transform-function-name": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.25.1", "@babel/plugin-transform-json-strings": "^7.24.7", - "@babel/plugin-transform-literals": "^7.24.7", + "@babel/plugin-transform-literals": "^7.25.2", "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", "@babel/plugin-transform-member-expression-literals": "^7.24.7", "@babel/plugin-transform-modules-amd": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.7", - "@babel/plugin-transform-modules-systemjs": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.8", + "@babel/plugin-transform-modules-systemjs": "^7.25.0", "@babel/plugin-transform-modules-umd": "^7.24.7", "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", "@babel/plugin-transform-new-target": "^7.24.7", @@ -1693,7 +1679,7 @@ "@babel/plugin-transform-object-rest-spread": "^7.24.7", "@babel/plugin-transform-object-super": "^7.24.7", "@babel/plugin-transform-optional-catch-binding": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.8", "@babel/plugin-transform-parameters": "^7.24.7", "@babel/plugin-transform-private-methods": "^7.24.7", "@babel/plugin-transform-private-property-in-object": "^7.24.7", @@ -1704,7 +1690,7 @@ "@babel/plugin-transform-spread": "^7.24.7", "@babel/plugin-transform-sticky-regex": "^7.24.7", "@babel/plugin-transform-template-literals": "^7.24.7", - "@babel/plugin-transform-typeof-symbol": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.8", "@babel/plugin-transform-unicode-escapes": "^7.24.7", "@babel/plugin-transform-unicode-property-regex": "^7.24.7", "@babel/plugin-transform-unicode-regex": "^7.24.7", @@ -1713,7 +1699,7 @@ "babel-plugin-polyfill-corejs2": "^0.4.10", "babel-plugin-polyfill-corejs3": "^0.10.4", "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.31.0", + "core-js-compat": "^3.37.1", "semver": "^6.3.1" }, "engines": { @@ -1744,9 +1730,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", - "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", + "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1755,33 +1741,30 @@ } }, "node_modules/@babel/template": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", - "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", "dev": true, "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", - "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", + "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-hoist-variables": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1790,12 +1773,11 @@ } }, "node_modules/@babel/types": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", - "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", - "dev": true, + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", "dependencies": { - "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-string-parser": "^7.24.8", "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, @@ -1810,9 +1792,9 @@ "dev": true }, "node_modules/@csstools/css-parser-algorithms": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.3.tgz", - "integrity": "sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz", + "integrity": "sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==", "dev": true, "funding": [ { @@ -1828,13 +1810,13 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-tokenizer": "^2.3.1" + "@csstools/css-tokenizer": "^2.4.1" } }, "node_modules/@csstools/css-tokenizer": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.3.1.tgz", - "integrity": "sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz", + "integrity": "sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==", "dev": true, "funding": [ { @@ -1851,9 +1833,9 @@ } }, "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz", - "integrity": "sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA==", + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz", + "integrity": "sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==", "dev": true, "funding": [ { @@ -1869,8 +1851,8 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1" + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1" } }, "node_modules/@csstools/selector-specificity": { @@ -2310,23 +2292,23 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz", - "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/config-array": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.16.0.tgz", - "integrity": "sha512-/jmuSd74i4Czf1XXn7wGRWZCuyaUZ330NH1Bek0Pplatt4Sy1S5haN21SCLLdbeKslQ+S0wEJ+++v5YibSi+Lg==", + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.17.1.tgz", + "integrity": "sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA==", "dev": true, "dependencies": { "@eslint/object-schema": "^2.1.4", "debug": "^4.3.1", - "minimatch": "^3.0.5" + "minimatch": "^3.1.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2368,9 +2350,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.5.0.tgz", - "integrity": "sha512-A7+AOT2ICkodvtsWnxZP4Xxk3NbZ3VMHd8oihydLRGrJgqqdEz1qSeEgXYyT/Cu8h1TWWsQRejIx48mtjZ5y1w==", + "version": "9.8.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.8.0.tgz", + "integrity": "sha512-MfluB7EUfxXtv3i/++oh89uzAr4PDI4nn201hsp+qaXqsjAWzinlZEHEfPgAX4doIlKvPG/i0A9dpKxOLII8yA==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2512,9 +2494,9 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", @@ -2565,9 +2547,9 @@ } }, "node_modules/@jsonjoy.com/util": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.2.0.tgz", - "integrity": "sha512-4B8B+3vFsY4eo33DMKyJPlQ3sBMpPFUZK2dr3O3rXrOGKKbYG44J0XSFkDo1VOQiri5HFEhIeVvItjR2xcazmg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.3.0.tgz", + "integrity": "sha512-Cebt4Vk7k1xHy87kHY7KSPLT77A7Ev7IfOblyLZhtYEhrdQ6fX4EoLq3xOQ3O/DRMEh2ok5nyC180E+ABS8Wmw==", "dev": true, "engines": { "node": ">=10.0" @@ -2724,6 +2706,11 @@ "mapbox-gl": ">= 0.47.0 < 3.0.0" } }, + "node_modules/@mapbox/mapbox-gl-geocoder/node_modules/nanoid": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz", + "integrity": "sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==" + }, "node_modules/@mapbox/mapbox-gl-supported": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.5.0.tgz", @@ -2850,10 +2837,67 @@ "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", "dev": true }, + "node_modules/@primeuix/styled": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@primeuix/styled/-/styled-0.0.5.tgz", + "integrity": "sha512-pVoGn/uPkVm/DyF3TR3EmH/pL/dP4nR42FcYbVduFq9VfO3KVeOEqvcCULHXos66RZO9MCbCFUoLy6ctf9GUGQ==", + "dependencies": { + "@primeuix/utils": "^0.0.5" + }, + "engines": { + "node": ">=12.11.0" + } + }, + "node_modules/@primeuix/utils": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@primeuix/utils/-/utils-0.0.5.tgz", + "integrity": "sha512-ntUiUgtRtkF8KuaxHffzhYxQxoXk6LAPHm7CVlFjdqS8Rx8xRkLkZVyo84E+pO2hcNFkOGVP/GxHhQ2s94O8zA==", + "engines": { + "node": ">=12.11.0" + } + }, + "node_modules/@primevue/core": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@primevue/core/-/core-4.0.1.tgz", + "integrity": "sha512-BreY1LybcRmzI8zXktqKVoq1eMeH//Ab4NUpzyFMdRKq4QoTvVuYMrlS9PGlQi+c9RmAcb6rzIIpcczqEGEAaw==", + "dependencies": { + "@primeuix/styled": "^0.0.5", + "@primeuix/utils": "^0.0.5" + }, + "engines": { + "node": ">=12.11.0" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@primevue/icons": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@primevue/icons/-/icons-4.0.1.tgz", + "integrity": "sha512-tK3cYOSabRiSmAMuivw2QM/oG1ER5RGL9k7Vua7arQiwBghyPg04J/XllJ9SjORyNIY+dwbLuNyUwLKty4S0Hg==", + "dependencies": { + "@primeuix/utils": "^0.0.5", + "@primevue/core": "4.0.1" + }, + "engines": { + "node": ">=12.11.0" + } + }, + "node_modules/@primevue/themes": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@primevue/themes/-/themes-4.0.1.tgz", + "integrity": "sha512-DIfQTH/SMY5/ekZM3wnAaC2Te69X9fwVmyxjyAf6yS3e8V9l/jj1BGjinHPlDE0n1G6daHC6qruX4QIR6Jtpwg==", + "dependencies": { + "@primeuix/styled": "^0.0.5" + }, + "engines": { + "node": ">=12.11.0" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", - "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz", + "integrity": "sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==", "cpu": [ "arm" ], @@ -2864,9 +2908,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", - "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz", + "integrity": "sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==", "cpu": [ "arm64" ], @@ -2877,9 +2921,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", - "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz", + "integrity": "sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==", "cpu": [ "arm64" ], @@ -2890,9 +2934,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", - "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz", + "integrity": "sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==", "cpu": [ "x64" ], @@ -2903,9 +2947,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", - "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz", + "integrity": "sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==", "cpu": [ "arm" ], @@ -2916,9 +2960,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", - "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz", + "integrity": "sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==", "cpu": [ "arm" ], @@ -2929,9 +2973,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", - "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz", + "integrity": "sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==", "cpu": [ "arm64" ], @@ -2942,9 +2986,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", - "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz", + "integrity": "sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==", "cpu": [ "arm64" ], @@ -2955,9 +2999,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", - "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz", + "integrity": "sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==", "cpu": [ "ppc64" ], @@ -2968,9 +3012,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", - "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz", + "integrity": "sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==", "cpu": [ "riscv64" ], @@ -2981,9 +3025,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", - "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz", + "integrity": "sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==", "cpu": [ "s390x" ], @@ -2994,9 +3038,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", - "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz", + "integrity": "sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==", "cpu": [ "x64" ], @@ -3007,9 +3051,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", - "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz", + "integrity": "sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==", "cpu": [ "x64" ], @@ -3020,9 +3064,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", - "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz", + "integrity": "sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==", "cpu": [ "arm64" ], @@ -3033,9 +3077,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", - "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz", + "integrity": "sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==", "cpu": [ "ia32" ], @@ -3046,9 +3090,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", - "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz", + "integrity": "sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==", "cpu": [ "x64" ], @@ -4722,9 +4766,9 @@ } }, "node_modules/@types/eslint": { - "version": "8.56.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", - "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", + "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", "dev": true, "dependencies": { "@types/estree": "*", @@ -4872,11 +4916,11 @@ "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==" }, "node_modules/@types/node": { - "version": "20.14.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.8.tgz", - "integrity": "sha512-DO+2/jZinXfROG7j7WKFn/3C6nFwxy2lLpgLjEXJz+0XKphZlTLJ14mo8Vfg8X5BWN6XjyESXq+LcYdT7tR3bA==", + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.1.0.tgz", + "integrity": "sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.13.0" } }, "node_modules/@types/node-forge": { @@ -4968,9 +5012,9 @@ "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" }, "node_modules/@types/ws": { - "version": "8.5.10", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", - "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "version": "8.5.12", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", + "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", "dev": true, "dependencies": { "@types/node": "*" @@ -4992,16 +5036,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.0.0-alpha.33", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.0.0-alpha.33.tgz", - "integrity": "sha512-kUI6ADSqW3oB4j8IKGmIqEfJrygAWlYbSXzfhlBBb3rwH4HK8RN7xwxj/VsTCLO81mS/dGM7unZKXBBQOZiyNA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.0.1.tgz", + "integrity": "sha512-5g3Y7GDFsJAnY4Yhvk8sZtFfV6YNF2caLzjrRPUBzewjPCaj0yokePB4LJSobyCzGMzjZZYFbwuzbfDHlimXbQ==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.0.0-alpha.33", - "@typescript-eslint/type-utils": "8.0.0-alpha.33", - "@typescript-eslint/utils": "8.0.0-alpha.33", - "@typescript-eslint/visitor-keys": "8.0.0-alpha.33", + "@typescript-eslint/scope-manager": "8.0.1", + "@typescript-eslint/type-utils": "8.0.1", + "@typescript-eslint/utils": "8.0.1", + "@typescript-eslint/visitor-keys": "8.0.1", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -5025,15 +5069,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.0.0-alpha.33", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.0.0-alpha.33.tgz", - "integrity": "sha512-GV+rE/aCf6rTgjs7lG4KJPKDivm/dhjpsZHMJHx17kC0Wzz6XeBAr6Il9lAJbJMU3BurBbvqZJno/6MES81WEg==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.0.1.tgz", + "integrity": "sha512-5IgYJ9EO/12pOUwiBKFkpU7rS3IU21mtXzB81TNwq2xEybcmAZrE9qwDtsb5uQd9aVO9o0fdabFyAmKveXyujg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.0.0-alpha.33", - "@typescript-eslint/types": "8.0.0-alpha.33", - "@typescript-eslint/typescript-estree": "8.0.0-alpha.33", - "@typescript-eslint/visitor-keys": "8.0.0-alpha.33", + "@typescript-eslint/scope-manager": "8.0.1", + "@typescript-eslint/types": "8.0.1", + "@typescript-eslint/typescript-estree": "8.0.1", + "@typescript-eslint/visitor-keys": "8.0.1", "debug": "^4.3.4" }, "engines": { @@ -5053,13 +5097,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.0.0-alpha.33", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.0.0-alpha.33.tgz", - "integrity": "sha512-H1DxFBFenaf0XgOMEAc2psy7HrFZwb6r3ziWGeE1+0MPd64+LV3VOnQPKPzz/OWMCkXvuRREj20zqMW/itTZyA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.0.1.tgz", + "integrity": "sha512-NpixInP5dm7uukMiRyiHjRKkom5RIFA4dfiHvalanD2cF0CLUuQqxfg8PtEUo9yqJI2bBhF+pcSafqnG3UBnRQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.0.0-alpha.33", - "@typescript-eslint/visitor-keys": "8.0.0-alpha.33" + "@typescript-eslint/types": "8.0.1", + "@typescript-eslint/visitor-keys": "8.0.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5070,13 +5114,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.0.0-alpha.33", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.0.0-alpha.33.tgz", - "integrity": "sha512-nUzRkfrxgGDyjE3suBzpCTUW3Amz2A15U3f6udRSBFXspAKdEfDLZggnoZn9BCr5EKREk1UFSgWKdVPr1wU2Zw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.0.1.tgz", + "integrity": "sha512-+/UT25MWvXeDX9YaHv1IS6KI1fiuTto43WprE7pgSMswHbn1Jm9GEM4Txp+X74ifOWV8emu2AWcbLhpJAvD5Ng==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "8.0.0-alpha.33", - "@typescript-eslint/utils": "8.0.0-alpha.33", + "@typescript-eslint/typescript-estree": "8.0.1", + "@typescript-eslint/utils": "8.0.1", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -5094,9 +5138,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.0.0-alpha.33", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.0.0-alpha.33.tgz", - "integrity": "sha512-uXh+IEnx1bh/utrlm2WZdtvqhLyufD81pO/7bx2ZmnEU+TlQn8ZtCM6zQfNfbKJSSvnJcKWCCa8ITyYSjt3aWw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.0.1.tgz", + "integrity": "sha512-PpqTVT3yCA/bIgJ12czBuE3iBlM3g4inRSC5J0QOdQFAn07TYrYEQBBKgXH1lQpglup+Zy6c1fxuwTk4MTNKIw==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5107,13 +5151,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.0.0-alpha.33", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.0-alpha.33.tgz", - "integrity": "sha512-XmI5EEA/OyzeSvrcuGk7Gvu6NF1iXAr8XeaplbIK26t898aZ2oj52nPsuJze8KOYr2GoAsNHwK06YHvaWaCfVw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.1.tgz", + "integrity": "sha512-8V9hriRvZQXPWU3bbiUV4Epo7EvgM6RTs+sUmxp5G//dBGy402S7Fx0W0QkB2fb4obCF8SInoUzvTYtc3bkb5w==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.0.0-alpha.33", - "@typescript-eslint/visitor-keys": "8.0.0-alpha.33", + "@typescript-eslint/types": "8.0.1", + "@typescript-eslint/visitor-keys": "8.0.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -5135,9 +5179,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -5147,15 +5191,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.0.0-alpha.33", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.0.0-alpha.33.tgz", - "integrity": "sha512-jFpIE5VgJ/8LfvAgJsHp2fGBrcjS2kc09zyhaFGHd+80zQxjR+0+BWdqmf5E7e5bbKuOW/DqA/x4HEJ8Lt3yTQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.0.1.tgz", + "integrity": "sha512-CBFR0G0sCt0+fzfnKaciu9IBsKvEKYwN9UZ+eeogK1fYHg4Qxk1yf/wLQkLXlq8wbU2dFlgAesxt8Gi76E8RTA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.0.0-alpha.33", - "@typescript-eslint/types": "8.0.0-alpha.33", - "@typescript-eslint/typescript-estree": "8.0.0-alpha.33" + "@typescript-eslint/scope-manager": "8.0.1", + "@typescript-eslint/types": "8.0.1", + "@typescript-eslint/typescript-estree": "8.0.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5169,12 +5213,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.0.0-alpha.33", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.0-alpha.33.tgz", - "integrity": "sha512-r0WTMpzFo6owx48/DgBVi9pKqNdGQhJcUAvO4JOn4V9MSeEd8UTFXmMt+Kgeqfai1NpGvRH3b+jJlr3WVZAChw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.1.tgz", + "integrity": "sha512-W5E+o0UfUcK5EgchLZsyVWqARmsM7v54/qEq6PY3YI5arkgmCzHiuk0zKSJJbm71V0xdRna4BGomkCTXz2/LkQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.0.0-alpha.33", + "@typescript-eslint/types": "8.0.1", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -5224,34 +5268,39 @@ "@uppy/core": "^3.12.0" } }, - "node_modules/@uppy/aws-s3/node_modules/nanoid": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.2.tgz", - "integrity": "sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.js" + "node_modules/@uppy/aws-s3-multipart/node_modules/@uppy/companion-client": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@uppy/companion-client/-/companion-client-3.8.2.tgz", + "integrity": "sha512-WLjZ0Y6Fe7lzwU1YPvvQ/YqooejcgIZkT2TC39xr+QQ7Y1FwJECsyUdlKwgi1ee8TNpjoCrj3Q1Hjel/+p0VhA==", + "dependencies": { + "@uppy/utils": "^5.9.0", + "namespace-emitter": "^2.0.1", + "p-retry": "^6.1.0" }, - "engines": { - "node": "^14 || ^16 || >=18" + "peerDependencies": { + "@uppy/core": "^3.13.1" } }, - "node_modules/@uppy/companion-client": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@uppy/companion-client/-/companion-client-3.8.1.tgz", - "integrity": "sha512-A1k9cOgGMsJNx1lI0Lj2ZaLAH3WIL3xImi2EPXuAHgL1uBZqjuffP2P9XK4nr+KVc+PBivOxH7MoiYpJm97/xw==", + "node_modules/@uppy/aws-s3/node_modules/@uppy/companion-client": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@uppy/companion-client/-/companion-client-3.8.2.tgz", + "integrity": "sha512-WLjZ0Y6Fe7lzwU1YPvvQ/YqooejcgIZkT2TC39xr+QQ7Y1FwJECsyUdlKwgi1ee8TNpjoCrj3Q1Hjel/+p0VhA==", "dependencies": { "@uppy/utils": "^5.9.0", "namespace-emitter": "^2.0.1", "p-retry": "^6.1.0" }, "peerDependencies": { - "@uppy/core": "^3.11.0" + "@uppy/core": "^3.13.1" + } + }, + "node_modules/@uppy/companion-client": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@uppy/companion-client/-/companion-client-3.1.3.tgz", + "integrity": "sha512-l70qOd4P9PSqxPDOFD1LMusDGGi36LCCiQko/e+Uw5hBtzN9vhAG5rQm242FlNoFdxK5T6jmfoZJSVel0UTvzg==", + "dependencies": { + "@uppy/utils": "^5.3.0", + "namespace-emitter": "^2.0.1" } }, "node_modules/@uppy/core": { @@ -5269,23 +5318,6 @@ "preact": "^10.5.13" } }, - "node_modules/@uppy/core/node_modules/nanoid": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.2.tgz", - "integrity": "sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^14 || ^16 || >=18" - } - }, "node_modules/@uppy/dashboard": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/@uppy/dashboard/-/dashboard-3.9.0.tgz", @@ -5308,23 +5340,6 @@ "@uppy/core": "^3.13.0" } }, - "node_modules/@uppy/dashboard/node_modules/nanoid": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.2.tgz", - "integrity": "sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^14 || ^16 || >=18" - } - }, "node_modules/@uppy/drag-drop": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@uppy/drag-drop/-/drag-drop-3.1.0.tgz", @@ -5376,23 +5391,6 @@ "@uppy/core": "^3.13.0" } }, - "node_modules/@uppy/provider-views/node_modules/nanoid": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.2.tgz", - "integrity": "sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^14 || ^16 || >=18" - } - }, "node_modules/@uppy/status-bar": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/@uppy/status-bar/-/status-bar-3.3.3.tgz", @@ -5434,21 +5432,34 @@ } }, "node_modules/@uppy/xhr-upload": { - "version": "3.6.7", - "resolved": "https://registry.npmjs.org/@uppy/xhr-upload/-/xhr-upload-3.6.7.tgz", - "integrity": "sha512-xd8PA6gz8/usm7wpI6w8zOjnw5KnE/Yt7fWknFubMFCbP0yutWbStgeFAj5AMdLjLQpGveGb/OVWHhBfy2LwlA==", + "version": "3.6.8", + "resolved": "https://registry.npmjs.org/@uppy/xhr-upload/-/xhr-upload-3.6.8.tgz", + "integrity": "sha512-zr3OHrIdo08jmCqTYKS0C7o3E0XQpjtZI40wmB6VvXYzu4x/aZankG9QqKxLiY0n8KbZ9aCIvO8loxBGoL7Kaw==", "dependencies": { "@uppy/companion-client": "^3.8.1", "@uppy/utils": "^5.9.0" }, "peerDependencies": { - "@uppy/core": "^3.11.3" + "@uppy/core": "^3.13.0" + } + }, + "node_modules/@uppy/xhr-upload/node_modules/@uppy/companion-client": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@uppy/companion-client/-/companion-client-3.8.2.tgz", + "integrity": "sha512-WLjZ0Y6Fe7lzwU1YPvvQ/YqooejcgIZkT2TC39xr+QQ7Y1FwJECsyUdlKwgi1ee8TNpjoCrj3Q1Hjel/+p0VhA==", + "dependencies": { + "@uppy/utils": "^5.9.0", + "namespace-emitter": "^2.0.1", + "p-retry": "^6.1.0" + }, + "peerDependencies": { + "@uppy/core": "^3.13.1" } }, "node_modules/@vitejs/plugin-vue": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.5.tgz", - "integrity": "sha512-LOjm7XeIimLBZyzinBQ6OSm3UBCNVCpLkxGC0oWmm2YPzVZoxMsdvNVimLTBzpAnR9hl/yn1SHGuRfe6/Td9rQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.1.2.tgz", + "integrity": "sha512-nY9IwH12qeiJqumTCLJLE7IiNx7HZ39cbHaysEUd+Myvbz9KAqd2yq+U01Kab1R/H1BmiyM2ShTYlNH32Fzo3A==", "dev": true, "engines": { "node": "^18.0.0 || >=20.0.0" @@ -5529,9 +5540,9 @@ } }, "node_modules/@vitest/runner/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", "dev": true, "engines": { "node": ">=12.20" @@ -5591,91 +5602,101 @@ } }, "node_modules/@volar/language-core": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.3.4.tgz", - "integrity": "sha512-wXBhY11qG6pCDAqDnbBRFIDSIwbqkWI7no+lj5+L7IlA7HRIjRP7YQLGzT0LF4lS6eHkMSsclXqy9DwYJasZTQ==", + "version": "2.4.0-alpha.18", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.0-alpha.18.tgz", + "integrity": "sha512-JAYeJvYQQROmVRtSBIczaPjP3DX4QW1fOqW1Ebs0d3Y3EwSNRglz03dSv0Dm61dzd0Yx3WgTW3hndDnTQqgmyg==", "dev": true, "dependencies": { - "@volar/source-map": "2.3.4" + "@volar/source-map": "2.4.0-alpha.18" } }, "node_modules/@volar/source-map": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.3.4.tgz", - "integrity": "sha512-C+t63nwcblqLIVTYXaVi/+gC8NukDaDIQI72J3R7aXGvtgaVB16c+J8Iz7/VfOy7kjYv7lf5GhBny6ACw9fTGQ==", + "version": "2.4.0-alpha.18", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.0-alpha.18.tgz", + "integrity": "sha512-MTeCV9MUwwsH0sNFiZwKtFrrVZUK6p8ioZs3xFzHc2cvDXHWlYN3bChdQtwKX+FY2HG6H3CfAu1pKijolzIQ8g==", "dev": true }, "node_modules/@volar/typescript": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.3.4.tgz", - "integrity": "sha512-acCvt7dZECyKcvO5geNybmrqOsu9u8n5XP1rfiYsOLYGPxvHRav9BVmEdRyZ3vvY6mNyQ1wLL5Hday4IShe17w==", + "version": "2.4.0-alpha.18", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.0-alpha.18.tgz", + "integrity": "sha512-sXh5Y8sqGUkgxpMWUGvRXggxYHAVxg0Pa1C42lQZuPDrW6vHJPR0VCK8Sr7WJsAW530HuNQT/ZIskmXtxjybMQ==", "dev": true, "dependencies": { - "@volar/language-core": "2.3.4", + "@volar/language-core": "2.4.0-alpha.18", "path-browserify": "^1.0.1", "vscode-uri": "^3.0.8" } }, "node_modules/@vue/compiler-core": { - "version": "3.4.30", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.30.tgz", - "integrity": "sha512-ZL8y4Xxdh8O6PSwfdZ1IpQ24PjTAieOz3jXb/MDTfDtANcKBMxg1KLm6OX2jofsaQGYfIVzd3BAG22i56/cF1w==", + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.35.tgz", + "integrity": "sha512-gKp0zGoLnMYtw4uS/SJRRO7rsVggLjvot3mcctlMXunYNsX+aRJDqqw/lV5/gHK91nvaAAlWFgdVl020AW1Prg==", "dependencies": { "@babel/parser": "^7.24.7", - "@vue/shared": "3.4.30", + "@vue/shared": "3.4.35", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "node_modules/@vue/compiler-dom": { - "version": "3.4.30", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.30.tgz", - "integrity": "sha512-+16Sd8lYr5j/owCbr9dowcNfrHd+pz+w2/b5Lt26Oz/kB90C9yNbxQ3bYOvt7rI2bxk0nqda39hVcwDFw85c2Q==", + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.35.tgz", + "integrity": "sha512-pWIZRL76/oE/VMhdv/ovZfmuooEni6JPG1BFe7oLk5DZRo/ImydXijoZl/4kh2406boRQ7lxTYzbZEEXEhj9NQ==", "dependencies": { - "@vue/compiler-core": "3.4.30", - "@vue/shared": "3.4.30" + "@vue/compiler-core": "3.4.35", + "@vue/shared": "3.4.35" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.4.30", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.30.tgz", - "integrity": "sha512-8vElKklHn/UY8+FgUFlQrYAPbtiSB2zcgeRKW7HkpSRn/JjMRmZvuOtwDx036D1aqKNSTtXkWRfqx53Qb+HmMg==", + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.35.tgz", + "integrity": "sha512-xacnRS/h/FCsjsMfxBkzjoNxyxEyKyZfBch/P4vkLRvYJwe5ChXmZZrj8Dsed/752H2Q3JE8kYu9Uyha9J6PgA==", "dependencies": { "@babel/parser": "^7.24.7", - "@vue/compiler-core": "3.4.30", - "@vue/compiler-dom": "3.4.30", - "@vue/compiler-ssr": "3.4.30", - "@vue/shared": "3.4.30", + "@vue/compiler-core": "3.4.35", + "@vue/compiler-dom": "3.4.35", + "@vue/compiler-ssr": "3.4.35", + "@vue/shared": "3.4.35", "estree-walker": "^2.0.2", "magic-string": "^0.30.10", - "postcss": "^8.4.38", + "postcss": "^8.4.40", "source-map-js": "^1.2.0" } }, "node_modules/@vue/compiler-ssr": { - "version": "3.4.30", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.30.tgz", - "integrity": "sha512-ZJ56YZGXJDd6jky4mmM0rNaNP6kIbQu9LTKZDhcpddGe/3QIalB1WHHmZ6iZfFNyj5mSypTa4+qDJa5VIuxMSg==", + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.35.tgz", + "integrity": "sha512-7iynB+0KB1AAJKk/biENTV5cRGHRdbdaD7Mx3nWcm1W8bVD6QmnH3B4AHhQQ1qZHhqFwzEzMwiytXm3PX1e60A==", + "dependencies": { + "@vue/compiler-dom": "3.4.35", + "@vue/shared": "3.4.35" + } + }, + "node_modules/@vue/compiler-vue2": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", + "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", + "dev": true, "dependencies": { - "@vue/compiler-dom": "3.4.30", - "@vue/shared": "3.4.30" + "de-indent": "^1.0.2", + "he": "^1.2.0" } }, "node_modules/@vue/language-core": { - "version": "2.0.22", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.0.22.tgz", - "integrity": "sha512-dNTAAtEOuMiz7N1s5tKpypnVVCtawxVSF5BukD0ELcYSw+DSbrSlYYSw8GuwvurodCeYFSHsmslE+c2sYDNoiA==", + "version": "2.0.29", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.0.29.tgz", + "integrity": "sha512-o2qz9JPjhdoVj8D2+9bDXbaI4q2uZTHQA/dbyZT4Bj1FR9viZxDJnLcKVHfxdn6wsOzRgpqIzJEEmSSvgMvDTQ==", "dev": true, "dependencies": { - "@volar/language-core": "~2.3.1", + "@volar/language-core": "~2.4.0-alpha.18", "@vue/compiler-dom": "^3.4.0", + "@vue/compiler-vue2": "^2.7.16", "@vue/shared": "^3.4.0", "computeds": "^0.0.1", "minimatch": "^9.0.3", "muggle-string": "^0.4.1", - "path-browserify": "^1.0.1", - "vue-template-compiler": "^2.7.14" + "path-browserify": "^1.0.1" }, "peerDependencies": { "typescript": "*" @@ -5687,49 +5708,49 @@ } }, "node_modules/@vue/reactivity": { - "version": "3.4.30", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.30.tgz", - "integrity": "sha512-bVJurnCe3LS0JII8PPoAA63Zd2MBzcKrEzwdQl92eHCcxtIbxD2fhNwJpa+KkM3Y/A4T5FUnmdhgKwOf6BfbcA==", + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.35.tgz", + "integrity": "sha512-Ggtz7ZZHakriKioveJtPlStYardwQH6VCs9V13/4qjHSQb/teE30LVJNrbBVs4+aoYGtTQKJbTe4CWGxVZrvEw==", "dependencies": { - "@vue/shared": "3.4.30" + "@vue/shared": "3.4.35" } }, "node_modules/@vue/runtime-core": { - "version": "3.4.30", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.30.tgz", - "integrity": "sha512-qaFEbnNpGz+tlnkaualomogzN8vBLkgzK55uuWjYXbYn039eOBZrWxyXWq/7qh9Bz2FPifZqGjVDl/FXiq9L2g==", + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.35.tgz", + "integrity": "sha512-D+BAjFoWwT5wtITpSxwqfWZiBClhBbR+bm0VQlWYFOadUUXFo+5wbe9ErXhLvwguPiLZdEF13QAWi2vP3ZD5tA==", "dependencies": { - "@vue/reactivity": "3.4.30", - "@vue/shared": "3.4.30" + "@vue/reactivity": "3.4.35", + "@vue/shared": "3.4.35" } }, "node_modules/@vue/runtime-dom": { - "version": "3.4.30", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.30.tgz", - "integrity": "sha512-tV6B4YiZRj5QsaJgw2THCy5C1H+2UeywO9tqgWEc21tn85qHEERndHN/CxlyXvSBFrpmlexCIdnqPuR9RM9thw==", + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.35.tgz", + "integrity": "sha512-yGOlbos+MVhlS5NWBF2HDNgblG8e2MY3+GigHEyR/dREAluvI5tuUUgie3/9XeqhPE4LF0i2wjlduh5thnfOqw==", "dependencies": { - "@vue/reactivity": "3.4.30", - "@vue/runtime-core": "3.4.30", - "@vue/shared": "3.4.30", + "@vue/reactivity": "3.4.35", + "@vue/runtime-core": "3.4.35", + "@vue/shared": "3.4.35", "csstype": "^3.1.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.4.30", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.30.tgz", - "integrity": "sha512-TBD3eqR1DeDc0cMrXS/vEs/PWzq1uXxnvjoqQuDGFIEHFIwuDTX/KWAQKIBjyMWLFHEeTDGYVsYci85z2UbTDg==", + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.35.tgz", + "integrity": "sha512-iZ0e/u9mRE4T8tNhlo0tbA+gzVkgv8r5BX6s1kRbOZqfpq14qoIvCZ5gIgraOmYkMYrSEZgkkojFPr+Nyq/Mnw==", "dependencies": { - "@vue/compiler-ssr": "3.4.30", - "@vue/shared": "3.4.30" + "@vue/compiler-ssr": "3.4.35", + "@vue/shared": "3.4.35" }, "peerDependencies": { - "vue": "3.4.30" + "vue": "3.4.35" } }, "node_modules/@vue/shared": { - "version": "3.4.30", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.30.tgz", - "integrity": "sha512-CLg+f8RQCHQnKvuHY9adMsMaQOcqclh6Z5V9TaoMgy0ut0tz848joZ7/CYFFyF/yZ5i2yaw7Fn498C+CNZVHIg==" + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.35.tgz", + "integrity": "sha512-hvuhBYYDe+b1G8KHxsQ0diDqDMA8D9laxWZhNAjE83VZb5UDaXl9Xnz7cGdDSyiHM90qqI/CyGMcpBpiDy6VVQ==" }, "node_modules/@vue/test-utils": { "version": "2.4.6", @@ -5966,9 +5987,9 @@ } }, "node_modules/acorn": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", - "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -6053,15 +6074,15 @@ } }, "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", - "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -6141,13 +6162,14 @@ }, "node_modules/arches": { "version": "7.6.0", - "resolved": "git+ssh://git@github.com/archesproject/arches.git#68cba7fcaca489c3fbe4cb10dee825b02931096a", + "resolved": "git+ssh://git@github.com/archesproject/arches.git#9408fdd1868221312b532716cc5b68bf973dfe37", "dependencies": { "@babel/runtime": "^7.17.2", "@mapbox/geojson-extent": "~1.0.1", "@mapbox/geojsonhint": "^3.3.0", "@mapbox/mapbox-gl-draw": "^1.4.3", "@mapbox/mapbox-gl-geocoder": "^4.4.0", + "@primevue/themes": "4.0.1", "@tmcw/togeojson": "^4.3.0", "@turf/turf": "^6.5.0", "backbone": "1.3.3", @@ -6193,7 +6215,7 @@ "moment": "^2.29.4", "nouislider": "11.0.3", "numeral": "^2.0.6", - "primevue": "4.0.0-beta.3", + "primevue": "4.0.1", "proj4": "^2.3.15", "regenerator-runtime": "^0.14.1", "requirejs": "~2.3.2", @@ -6209,13 +6231,13 @@ }, "node_modules/arches_for_science": { "version": "1.1.0", - "resolved": "git+ssh://git@github.com/archesproject/arches-for-science.git#a382c949b1db295ab0e0e84a4721deb773d3c657", + "resolved": "git+ssh://git@github.com/archesproject/arches-for-science.git#be2a00b0dad099e58f4089551fd7130f4a8ec857", "dependencies": { - "@uppy/aws-s3": "^3.3.1", - "@uppy/core": "^3.5.1", - "@uppy/dashboard": "^3.5.4", - "@uppy/drag-drop": "^3.0.3", - "@uppy/progress-bar": "^3.0.3", + "@uppy/aws-s3": "^3.6.2", + "@uppy/core": "^3.13.0", + "@uppy/dashboard": "^3.9.0", + "@uppy/drag-drop": "^3.1.0", + "@uppy/progress-bar": "^3.1.1", "arches": "archesproject/arches#dev/7.6.x", "dom-to-image": "^2.6.0", "html2canvas": "^1.4.1", @@ -6437,13 +6459,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", - "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.1", - "core-js-compat": "^3.36.1" + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -6628,9 +6650,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", - "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", "dev": true, "funding": [ { @@ -6647,10 +6669,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001629", - "electron-to-chromium": "^1.4.796", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.16" + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" }, "bin": { "browserslist": "cli.js" @@ -6791,9 +6813,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001636", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001636.tgz", - "integrity": "sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==", + "version": "1.0.30001649", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001649.tgz", + "integrity": "sha512-fJegqZZ0ZX8HOWr6rcafGr72+xcgJKI9oWfDW5DrD7ExUtgZC7a7R7ZYmZqplh7XDocFdGeIFn7roAxhOeYrPQ==", "dev": true, "funding": [ { @@ -6811,9 +6833,9 @@ ] }, "node_modules/chai": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", - "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", @@ -6822,7 +6844,7 @@ "get-func-name": "^2.0.2", "loupe": "^2.3.6", "pathval": "^1.1.1", - "type-detect": "^4.0.8" + "type-detect": "^4.1.0" }, "engines": { "node": ">=4" @@ -6994,9 +7016,9 @@ } }, "node_modules/codemirror": { - "version": "5.65.16", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.16.tgz", - "integrity": "sha512-br21LjYmSlVL0vFCPWPfhzUCT34FM/pAdK7rRIZwa0rrtrIdotvP4Oh4GUHsu2E3IrQMCfRkL/fN3ytMNxVQvg==" + "version": "5.65.17", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.17.tgz", + "integrity": "sha512-1zOsUx3lzAOu/gnMAZkQ9kpIHcPYOc9y1Fbm2UVk5UBPkdq380nhkelG0qUwm1f7wPvTbndu9ZYlug35EwAZRQ==" }, "node_modules/color-convert": { "version": "2.0.1", @@ -7261,9 +7283,9 @@ } }, "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz", - "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", + "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", "dev": true, "dependencies": { "@sindresorhus/merge-streams": "^2.1.0", @@ -7305,9 +7327,9 @@ } }, "node_modules/core-js": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz", - "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==", + "version": "3.38.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.0.tgz", + "integrity": "sha512-XPpwqEodRljce9KswjZShh95qJ1URisBeKCjUdq27YdenkslVe7OO0ZJhlYXAChW7OhXaRLl8AAba7IBfoIHug==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -7315,12 +7337,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", - "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", + "version": "3.38.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.0.tgz", + "integrity": "sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==", "dev": true, "dependencies": { - "browserslist": "^4.23.0" + "browserslist": "^4.23.3" }, "funding": { "type": "opencollective", @@ -7448,9 +7470,9 @@ } }, "node_modules/css-loader/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -7546,9 +7568,9 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/cytoscape": { - "version": "3.29.2", - "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.29.2.tgz", - "integrity": "sha512-2G1ycU28Nh7OHT9rkXRLpCDP30MKH1dXJORZuBhtEhEW7pKwgPi77ImqlCWinouyE1PNepIOGZBOrE84DG7LyQ==", + "version": "3.30.1", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.30.1.tgz", + "integrity": "sha512-TRJc3HbBPkHd50u9YfJh2FxD1lDLZ+JXnJoyBn5LkncoeuT7fapO/Hq/Ed8TdFclaKshzInge2i30bg7VKeoPQ==", "engines": { "node": ">=0.10" } @@ -8104,9 +8126,9 @@ "dev": true }, "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -8688,9 +8710,9 @@ } }, "node_modules/editorconfig/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -8706,9 +8728,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.811", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.811.tgz", - "integrity": "sha512-CDyzcJ5XW78SHzsIOdn27z8J4ist8eaFLhdto2hSMSJQgsiwvbv2fbizcKUICryw1Wii1TI/FEkvzvJsR3awrA==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", + "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==", "dev": true }, "node_modules/emoji-regex": { @@ -8744,9 +8766,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", - "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -9002,16 +9024,16 @@ } }, "node_modules/eslint": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.5.0.tgz", - "integrity": "sha512-+NAOZFrW/jFTS3dASCGBxX1pkFD0/fsO+hfAkJ4TyYKwgsXZbqzrw+seCYFCcPCYXvnD67tAnglU7GQTz6kcVw==", + "version": "9.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.8.0.tgz", + "integrity": "sha512-K8qnZ/QJzT2dLKdZJVX6W4XOwBzutMYmt0lqUS+JdXgd+HTYFlonFgkJ8s44d/zMPPCnOOk0kMWCApCPhiOy9A==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/config-array": "^0.16.0", + "@eslint-community/regexpp": "^4.11.0", + "@eslint/config-array": "^0.17.1", "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "9.5.0", + "@eslint/js": "9.8.0", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.3.0", "@nodelib/fs.walk": "^1.2.8", @@ -9020,9 +9042,9 @@ "cross-spawn": "^7.0.2", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.0.1", + "eslint-scope": "^8.0.2", "eslint-visitor-keys": "^4.0.0", - "espree": "^10.0.1", + "espree": "^10.1.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -9065,9 +9087,9 @@ } }, "node_modules/eslint-plugin-vue": { - "version": "9.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.26.0.tgz", - "integrity": "sha512-eTvlxXgd4ijE1cdur850G6KalZqk65k1JKoOI2d1kT3hr8sPD07j1q98FRFdNnpxBELGPWxZmInxeHGF/GxtqQ==", + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.27.0.tgz", + "integrity": "sha512-5Dw3yxEyuBSXTzT5/Ge1X5kIkRTQ3nvBn/VwPwInNiZBSJOO/timWMUaflONnFBzU6NhB68lxnCda7ULV5N7LA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", @@ -9076,7 +9098,7 @@ "nth-check": "^2.1.1", "postcss-selector-parser": "^6.0.15", "semver": "^7.6.0", - "vue-eslint-parser": "^9.4.2", + "vue-eslint-parser": "^9.4.3", "xml-name-validator": "^4.0.0" }, "engines": { @@ -9102,9 +9124,9 @@ } }, "node_modules/eslint-plugin-vue/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -9148,9 +9170,9 @@ } }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.1.tgz", - "integrity": "sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", + "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -9214,9 +9236,9 @@ } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -9472,6 +9494,12 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", + "dev": true + }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", @@ -10293,9 +10321,9 @@ "dev": true }, "node_modules/html-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-5.0.0.tgz", - "integrity": "sha512-puaGKdjdVVIFRtgIC2n5dt5bt0N5j6heXlAQZ4Do1MLjHmOT1gCE1Ogg7XZNeJlnOVHHsrZKGs5dfh+XwZ3XPw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-5.1.0.tgz", + "integrity": "sha512-Jb3xwDbsm0W3qlXrCZwcYqYGnYz55hb6aoKQTlzyZPXsPpi6tHXzAfqalecglMQgNvtEfxrCQPaKT90Irt5XDA==", "dev": true, "dependencies": { "html-minifier-terser": "^7.2.0", @@ -10571,9 +10599,9 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", "dev": true, "dependencies": { "agent-base": "^7.0.2", @@ -10659,9 +10687,9 @@ "dev": true }, "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==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", "dev": true }, "node_modules/import-fresh": { @@ -10680,9 +10708,9 @@ } }, "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, "dependencies": { "pkg-dir": "^4.2.0", @@ -10951,9 +10979,9 @@ } }, "node_modules/is-core-module": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", - "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", "dependencies": { "hasown": "^2.0.2" }, @@ -11322,9 +11350,9 @@ } }, "node_modules/istanbul-lib-source-maps": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.4.tgz", - "integrity": "sha512-wHOoEsNJTVltaJp8eVkm8w+GVkVNHT2YDYo53YdzQEL2gWm1hBX5cGFR9hQJtuGLebidVX7et3+dmDZrmclduw==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.23", @@ -11495,9 +11523,9 @@ } }, "node_modules/jsdom": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.0.tgz", - "integrity": "sha512-6gpM7pRXCwIOKxX47cgOyvyQDN/Eh0f1MeKySBV2xGdKtqJBLj8P25eY3EVCWo2mglDDzozR2r2MW4T+JiNUZA==", + "version": "24.1.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.1.tgz", + "integrity": "sha512-5O1wWV99Jhq4DV7rCLIoZ/UIhyQeDR7wHVyZAHAshbrvZsLs+Xzz7gtwnlJTJDjleiTKh54F4dXrX70vJQTyJQ==", "dev": true, "dependencies": { "cssstyle": "^4.0.1", @@ -11506,11 +11534,11 @@ "form-data": "^4.0.0", "html-encoding-sniffer": "^4.0.0", "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.4", + "https-proxy-agent": "^7.0.5", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.10", + "nwsapi": "^2.2.12", "parse5": "^7.1.2", - "rrweb-cssom": "^0.7.0", + "rrweb-cssom": "^0.7.1", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", "tough-cookie": "^4.1.4", @@ -11519,7 +11547,7 @@ "whatwg-encoding": "^3.1.1", "whatwg-mimetype": "^4.0.0", "whatwg-url": "^14.0.0", - "ws": "^8.17.0", + "ws": "^8.18.0", "xml-name-validator": "^5.0.0" }, "engines": { @@ -11671,9 +11699,9 @@ } }, "node_modules/known-css-properties": { - "version": "0.31.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.31.0.tgz", - "integrity": "sha512-sBPIUGTNF0czz0mwGGUoKKJC8Q7On1GPbCSFPfyEsfHb2DyBG0Y4QtV+EVWpINSaiGKZblDNuF5AezxSgOhesQ==", + "version": "0.34.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.34.0.tgz", + "integrity": "sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==", "dev": true }, "node_modules/latlon-geohash": { @@ -11682,9 +11710,9 @@ "integrity": "sha512-K1zIBU1Wtdw0Uam+Jvu4eC7mq+XBeZ/cTVGRczfE8Wbhb0pZ7+m+gbrlu0sN2i4MkHMxRu/jBc3XKo4wMXxIlg==" }, "node_modules/launch-editor": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.0.tgz", - "integrity": "sha512-vJranOAJrI/llyWGRQqiDM+adrw+k83fvmmx3+nV47g3+36xM15jE+zyZ6Ffel02+xSvuM0b2GDRosXZkbb6wA==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.1.tgz", + "integrity": "sha512-elBx2l/tp9z99X5H/qev8uyDywVh0VXAwEbjk8kJhnc5grOFkGh7aW6q55me9xnYbss261XtnUrysZ+XvGbhQA==", "dev": true, "dependencies": { "picocolors": "^1.0.0", @@ -11886,11 +11914,11 @@ "integrity": "sha512-/9PcTKSq6GdUw+bfzeStjOUgsaOmZEwrxwVCmA9CtORgUgKQNCSxKCwgIpDz81IRgBPG7Ob5DefYqINhULsn1g==" }, "node_modules/magic-string": { - "version": "0.30.10", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", - "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", + "version": "0.30.11", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", + "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, "node_modules/magicast": { @@ -11920,9 +11948,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -12005,13 +12033,13 @@ } }, "node_modules/memfs": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.9.3.tgz", - "integrity": "sha512-bsYSSnirtYTWi1+OPMFb0M048evMKyUYe0EbtuGQgq6BVQM1g1W8/KIUJCCvjgI/El0j6Q4WsmMiBwLUBSw8LA==", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.11.1.tgz", + "integrity": "sha512-LZcMTBAgqUUKNXZagcZxvXXfgF1bHX7Y7nQ0QyEiNbRJgE29GhgPd8Yna1VQcLlPiHt/5RFJMWYN9Uv/VPNvjQ==", "dev": true, "dependencies": { "@jsonjoy.com/json-pack": "^1.0.3", - "@jsonjoy.com/util": "^1.1.2", + "@jsonjoy.com/util": "^1.3.0", "tree-dump": "^1.0.1", "tslib": "^2.0.0" }, @@ -12298,9 +12326,21 @@ "integrity": "sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==" }, "node_modules/nanoid": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz", - "integrity": "sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.2.tgz", + "integrity": "sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^14 || ^16 || >=18" + } }, "node_modules/natural-compare": { "version": "1.4.0", @@ -12381,9 +12421,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "dev": true }, "node_modules/nodemon": { @@ -12424,9 +12464,9 @@ } }, "node_modules/nodemon/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -12491,9 +12531,9 @@ } }, "node_modules/normalize-package-data/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "bin": { "semver": "bin/semver.js" }, @@ -12574,9 +12614,9 @@ } }, "node_modules/nwsapi": { - "version": "2.2.10", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.10.tgz", - "integrity": "sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==", + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.12.tgz", + "integrity": "sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==", "dev": true }, "node_modules/object-assign": { @@ -12971,9 +13011,9 @@ } }, "node_modules/pbf": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", - "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.3.0.tgz", + "integrity": "sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==", "dependencies": { "ieee754": "^1.1.12", "resolve-protobuf-schema": "^2.1.0" @@ -13115,9 +13155,9 @@ } }, "node_modules/pkg-dir/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", "dev": true, "engines": { "node": ">=12.20" @@ -13127,20 +13167,20 @@ } }, "node_modules/pkg-types": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.1.tgz", - "integrity": "sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.3.tgz", + "integrity": "sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==", "dev": true, "dependencies": { "confbox": "^0.1.7", - "mlly": "^1.7.0", + "mlly": "^1.7.1", "pathe": "^1.1.2" } }, "node_modules/plotly.js-dist": { - "version": "2.33.0", - "resolved": "https://registry.npmjs.org/plotly.js-dist/-/plotly.js-dist-2.33.0.tgz", - "integrity": "sha512-Q995s9+9coO+5EStfCtlSW7HQXR14L3i/jTNXTZap7lt1v7r2QPuokAUkOHqMwmE1RsJJjtqnGRQH9JlEq8qPQ==" + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/plotly.js-dist/-/plotly.js-dist-2.34.0.tgz", + "integrity": "sha512-FZR9QT60vtE1ocdSIfop+zDIJEoy1lejwOvAjTSy+AmE4GZ//rW1nnIXwCRv4o9ejfzWq++lQMu6FJf9G+NtFg==" }, "node_modules/pofile": { "version": "1.1.4", @@ -13175,9 +13215,9 @@ } }, "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "version": "8.4.40", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz", + "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==", "funding": [ { "type": "opencollective", @@ -13194,7 +13234,7 @@ ], "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", + "picocolors": "^1.0.1", "source-map-js": "^1.2.0" }, "engines": { @@ -13233,9 +13273,9 @@ } }, "node_modules/postcss-loader/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -13304,9 +13344,9 @@ } }, "node_modules/postcss-resolve-nested-selector": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", - "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.4.tgz", + "integrity": "sha512-R6vHqZWgVnTAPq0C+xjyHfEZqfIYboCBVSy24MjxEDm+tIh1BU4O6o7DP7AA7kHzf136d+Qc5duI4tlpHjixDw==", "dev": true }, "node_modules/postcss-safe-parser": { @@ -13336,9 +13376,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", - "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", + "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -13377,9 +13417,9 @@ "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==" }, "node_modules/preact": { - "version": "10.22.0", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.22.0.tgz", - "integrity": "sha512-RRurnSjJPj4rp5K6XoP45Ui33ncb7e4H7WiOHVpjbkvqvA3U+N8Z6Qbo0AE6leGYBV66n8EhEaFixvIu3SkxFw==", + "version": "10.23.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.23.1.tgz", + "integrity": "sha512-O5UdRsNh4vdZaTieWe3XOgSpdMAmkIYBCT3VhQDlKrzyCm8lUYsk0fmVEvoQQifoOjFRTaHZO69ylrzTW2BH+A==", "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -13446,11 +13486,17 @@ } }, "node_modules/primevue": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/primevue/-/primevue-4.0.0-beta.3.tgz", - "integrity": "sha512-/aM5+qXxFplrOmriXVURLsRiiTu1BgNloiSyBozZP9Br/T6oCELid7CgEDFlkXGb/WZ75NvynoIkFbIRQaqYbw==", - "peerDependencies": { - "vue": "^3.0.0" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/primevue/-/primevue-4.0.1.tgz", + "integrity": "sha512-mAIoOcx7pnqPOhohw+JYyuVO46R4hUMComFTNzjHabEIsUIyIgTXNtWqiSwbn7zE4hEhnPwNa9XX97XE4Cz+1g==", + "dependencies": { + "@primeuix/styled": "^0.0.5", + "@primeuix/utils": "^0.0.5", + "@primevue/core": "4.0.1", + "@primevue/icons": "4.0.1" + }, + "engines": { + "node": ">=12.11.0" } }, "node_modules/process-nextick-args": { @@ -13993,9 +14039,9 @@ } }, "node_modules/requirejs": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", - "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.7.tgz", + "integrity": "sha512-DouTG8T1WanGok6Qjg2SXuCMzszOo0eHeH9hDZ5Y4x8Je+9JB38HdTLT4/VA8OaUhBa0JPVHJ0pyBkM1z+pDsw==", "bin": { "r_js": "bin/r.js", "r.js": "bin/r.js" @@ -14108,9 +14154,9 @@ } }, "node_modules/rimraf": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.7.tgz", - "integrity": "sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg==", + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", "dev": true, "dependencies": { "glob": "^10.3.7" @@ -14118,9 +14164,6 @@ "bin": { "rimraf": "dist/esm/bin.mjs" }, - "engines": { - "node": ">=14.18" - }, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -14131,9 +14174,9 @@ "integrity": "sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg==" }, "node_modules/rollup": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", - "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz", + "integrity": "sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -14146,22 +14189,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.18.0", - "@rollup/rollup-android-arm64": "4.18.0", - "@rollup/rollup-darwin-arm64": "4.18.0", - "@rollup/rollup-darwin-x64": "4.18.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", - "@rollup/rollup-linux-arm-musleabihf": "4.18.0", - "@rollup/rollup-linux-arm64-gnu": "4.18.0", - "@rollup/rollup-linux-arm64-musl": "4.18.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", - "@rollup/rollup-linux-riscv64-gnu": "4.18.0", - "@rollup/rollup-linux-s390x-gnu": "4.18.0", - "@rollup/rollup-linux-x64-gnu": "4.18.0", - "@rollup/rollup-linux-x64-musl": "4.18.0", - "@rollup/rollup-win32-arm64-msvc": "4.18.0", - "@rollup/rollup-win32-ia32-msvc": "4.18.0", - "@rollup/rollup-win32-x64-msvc": "4.18.0", + "@rollup/rollup-android-arm-eabi": "4.20.0", + "@rollup/rollup-android-arm64": "4.20.0", + "@rollup/rollup-darwin-arm64": "4.20.0", + "@rollup/rollup-darwin-x64": "4.20.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.20.0", + "@rollup/rollup-linux-arm-musleabihf": "4.20.0", + "@rollup/rollup-linux-arm64-gnu": "4.20.0", + "@rollup/rollup-linux-arm64-musl": "4.20.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.20.0", + "@rollup/rollup-linux-riscv64-gnu": "4.20.0", + "@rollup/rollup-linux-s390x-gnu": "4.20.0", + "@rollup/rollup-linux-x64-gnu": "4.20.0", + "@rollup/rollup-linux-x64-musl": "4.20.0", + "@rollup/rollup-win32-arm64-msvc": "4.20.0", + "@rollup/rollup-win32-ia32-msvc": "4.20.0", + "@rollup/rollup-win32-x64-msvc": "4.20.0", "fsevents": "~2.3.2" } }, @@ -14260,9 +14303,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sass": { - "version": "1.77.6", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", - "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", + "version": "1.77.8", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.8.tgz", + "integrity": "sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -14348,15 +14391,15 @@ } }, "node_modules/schema-utils/node_modules/ajv": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", - "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -14689,9 +14732,9 @@ } }, "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -15017,9 +15060,9 @@ } }, "node_modules/stylelint": { - "version": "16.6.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.6.1.tgz", - "integrity": "sha512-yNgz2PqWLkhH2hw6X9AweV9YvoafbAD5ZsFdKN9BvSDVwGvPh+AUIrn7lYwy1S7IHmtFin75LLfX1m0D2tHu8Q==", + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.8.1.tgz", + "integrity": "sha512-O8aDyfdODSDNz/B3gW2HQ+8kv8pfhSu7ZR7xskQ93+vI6FhKKGUJMQ03Ydu+w3OvXXE0/u4hWU4hCPNOyld+OA==", "dev": true, "funding": [ { @@ -15032,9 +15075,9 @@ } ], "dependencies": { - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", - "@csstools/media-query-list-parser": "^2.1.11", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/media-query-list-parser": "^2.1.13", "@csstools/selector-specificity": "^3.1.1", "@dual-bundle/import-meta-resolve": "^4.1.0", "balanced-match": "^2.0.0", @@ -15042,7 +15085,7 @@ "cosmiconfig": "^9.0.0", "css-functions-list": "^3.2.2", "css-tree": "^2.3.1", - "debug": "^4.3.4", + "debug": "^4.3.6", "fast-glob": "^3.3.2", "fastest-levenshtein": "^1.0.16", "file-entry-cache": "^9.0.0", @@ -15053,16 +15096,16 @@ "ignore": "^5.3.1", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.31.0", + "known-css-properties": "^0.34.0", "mathml-tag-names": "^2.1.3", "meow": "^13.2.0", "micromatch": "^4.0.7", "normalize-path": "^3.0.0", "picocolors": "^1.0.1", - "postcss": "^8.4.38", - "postcss-resolve-nested-selector": "^0.1.1", + "postcss": "^8.4.40", + "postcss-resolve-nested-selector": "^0.1.4", "postcss-safe-parser": "^7.0.0", - "postcss-selector-parser": "^6.1.0", + "postcss-selector-parser": "^6.1.1", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", "string-width": "^4.2.3", @@ -15315,15 +15358,15 @@ } }, "node_modules/table/node_modules/ajv": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", - "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -15346,9 +15389,9 @@ } }, "node_modules/terser": { - "version": "5.31.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz", - "integrity": "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==", + "version": "5.31.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz", + "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -15508,9 +15551,9 @@ "dev": true }, "node_modules/tinybench": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.8.0.tgz", - "integrity": "sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", "dev": true }, "node_modules/tinypool": { @@ -15540,7 +15583,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, "engines": { "node": ">=4" } @@ -15709,9 +15751,9 @@ } }, "node_modules/ts-loader/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -15757,9 +15799,9 @@ } }, "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "dev": true, "engines": { "node": ">=4" @@ -15883,9 +15925,9 @@ } }, "node_modules/typescript": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", - "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -15895,14 +15937,14 @@ } }, "node_modules/typescript-eslint": { - "version": "8.0.0-alpha.33", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.0.0-alpha.33.tgz", - "integrity": "sha512-jr8oGY3Jwus4al+0Taw/sgmZh+EQj7wukEdXnAxXoueYge5HX58pW/MXmGtC/In94IW+dCrS8f532IwZdayfJA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.0.1.tgz", + "integrity": "sha512-V3Y+MdfhawxEjE16dWpb7/IOgeXnLwAEEkS7v8oDqNcR1oYlqWhGH/iHqHdKVdpWme1VPZ0SoywXAkCqawj2eQ==", "dev": true, "dependencies": { - "@typescript-eslint/eslint-plugin": "8.0.0-alpha.33", - "@typescript-eslint/parser": "8.0.0-alpha.33", - "@typescript-eslint/utils": "8.0.0-alpha.33" + "@typescript-eslint/eslint-plugin": "8.0.1", + "@typescript-eslint/parser": "8.0.1", + "@typescript-eslint/utils": "8.0.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -15926,9 +15968,9 @@ } }, "node_modules/ufo": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz", - "integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", "dev": true }, "node_modules/unbox-primitive": { @@ -15952,14 +15994,14 @@ "dev": true }, "node_modules/underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==" }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz", + "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", @@ -16044,9 +16086,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", - "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "dev": true, "funding": [ { @@ -16270,13 +16312,13 @@ } }, "node_modules/vite": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.1.tgz", - "integrity": "sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==", + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.5.tgz", + "integrity": "sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==", "dev": true, "dependencies": { "esbuild": "^0.21.3", - "postcss": "^8.4.38", + "postcss": "^8.4.39", "rollup": "^4.13.0" }, "bin": { @@ -16428,15 +16470,15 @@ } }, "node_modules/vue": { - "version": "3.4.30", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.30.tgz", - "integrity": "sha512-NcxtKCwkdf1zPsr7Y8+QlDBCGqxvjLXF2EX+yi76rV5rrz90Y6gK1cq0olIhdWGgrlhs9ElHuhi9t3+W5sG5Xw==", + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.35.tgz", + "integrity": "sha512-+fl/GLmI4GPileHftVlCdB7fUL4aziPcqTudpTGXCT8s+iZWuOCeNEB5haX6Uz2IpRrbEXOgIFbe+XciCuGbNQ==", "dependencies": { - "@vue/compiler-dom": "3.4.30", - "@vue/compiler-sfc": "3.4.30", - "@vue/runtime-dom": "3.4.30", - "@vue/server-renderer": "3.4.30", - "@vue/shared": "3.4.30" + "@vue/compiler-dom": "3.4.35", + "@vue/compiler-sfc": "3.4.35", + "@vue/runtime-dom": "3.4.35", + "@vue/server-renderer": "3.4.35", + "@vue/shared": "3.4.35" }, "peerDependencies": { "typescript": "*" @@ -16448,9 +16490,9 @@ } }, "node_modules/vue-component-type-helpers": { - "version": "2.0.22", - "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.0.22.tgz", - "integrity": "sha512-gPr2Ba7efUwy/Vfbuf735bHSVdN4ycoZUCHfypkI33M9DUH+ieRblLLVM2eImccFYaWNWwEzURx02EgoXDBmaQ==", + "version": "2.0.29", + "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.0.29.tgz", + "integrity": "sha512-58i+ZhUAUpwQ+9h5Hck0D+jr1qbYl4voRt5KffBx8qzELViQ4XdT/Tuo+mzq8u63teAG8K0lLaOiL5ofqW38rg==", "dev": true }, "node_modules/vue-eslint-parser": { @@ -16532,9 +16574,9 @@ } }, "node_modules/vue-eslint-parser/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -16576,26 +16618,26 @@ } }, "node_modules/vue-tsc": { - "version": "2.0.22", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.0.22.tgz", - "integrity": "sha512-lMBIwPBO0sxCcmvu45yt1b035AaQ8/XSXQDk8m75y4j0jSXY/y/XzfEtssQ9JMS47lDaR10O3/926oCs8OeGUw==", + "version": "2.0.29", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.0.29.tgz", + "integrity": "sha512-MHhsfyxO3mYShZCGYNziSbc63x7cQ5g9kvijV7dRe1TTXBRLxXyL0FnXWpUF1xII2mJ86mwYpYsUmMwkmerq7Q==", "dev": true, "dependencies": { - "@volar/typescript": "~2.3.1", - "@vue/language-core": "2.0.22", + "@volar/typescript": "~2.4.0-alpha.18", + "@vue/language-core": "2.0.29", "semver": "^7.5.4" }, "bin": { "vue-tsc": "bin/vue-tsc.js" }, "peerDependencies": { - "typescript": "*" + "typescript": ">=5.0.0" } }, "node_modules/vue-tsc/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -16752,9 +16794,9 @@ } }, "node_modules/webpack": { - "version": "5.92.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.92.1.tgz", - "integrity": "sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==", + "version": "5.93.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz", + "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.3", @@ -16866,9 +16908,9 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.2.1.tgz", - "integrity": "sha512-hRLz+jPQXo999Nx9fXVdKlg/aehsw1ajA9skAneGmT03xwmyuhvF93p6HUKKbWhXdcERtGTzUCtIQr+2IQegrA==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.3.0.tgz", + "integrity": "sha512-xD2qnNew+F6KwOGZR7kWdbIou/ud7cVqLEXeK1q0nHcNsX/u7ul/fSdlOTX4ntSL5FNFy7ZJJXbf0piF591JYw==", "dev": true, "dependencies": { "colorette": "^2.0.10", @@ -17110,9 +17152,9 @@ } }, "node_modules/why-is-node-running": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", - "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", "dev": true, "dependencies": { "siginfo": "^2.0.0", @@ -17163,9 +17205,9 @@ } }, "node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "dev": true, "engines": { "node": ">=10.0.0" diff --git a/package.json b/package.json index c6982b4..4efd13d 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,12 @@ "vitest": "vitest --run --coverage" }, "dependencies": { + "@uppy/aws-s3": "3.6.2", + "@uppy/core": "3.13.0", + "@uppy/dashboard": "3.9.0", + "@uppy/drag-drop": "3.1.0", + "@uppy/progress-bar": "3.1.1", + "@uppy/companion-client": "3.1.3", "arches": "archesproject/arches#dev/7.6.x", "arches_for_science": "archesproject/arches-for-science#76-upgrade" }, From a3f2066a7e751c2d501d1374be54918086bc4a58 Mon Sep 17 00:00:00 2001 From: Cyrus Hiatt Date: Mon, 5 Aug 2024 14:51:10 -0700 Subject: [PATCH 16/18] Fix prettier command --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 4efd13d..6dd358f 100644 --- a/package.json +++ b/package.json @@ -10,8 +10,8 @@ "eslint:watch": "nodemon --watch . --ext ts,vue --exec npm run --silent eslint:check", "gettext:extract": "vue-gettext-extract", "gettext:compile": "vue-gettext-compile", - "prettier:check": "prettier glass/src --check", - "prettier:fix": "prettier glass/src --write", + "prettier:check": "prettier disco/src --check", + "prettier:fix": "prettier disco/src --write", "ts:check": "vue-tsc --noEmit", "ts:watch": "vue-tsc --watch --noEmit", "start": "cross-env NODE_OPTIONS=--max-old-space-size=2048 webpack serve --config ./webpack/webpack.config.dev.js", From dbd4160c203ddbf09a666a1dd7f4628253f159e0 Mon Sep 17 00:00:00 2001 From: Cyrus Hiatt Date: Mon, 5 Aug 2024 15:07:13 -0700 Subject: [PATCH 17/18] Add minimal test files --- tests/__init__.py | 0 tests/base_test.py | 81 ++++++++++++++++++++++++++++++++++++++++++ tests/test_settings.py | 73 +++++++++++++++++++++++++++++++++++++ 3 files changed, 154 insertions(+) create mode 100644 tests/__init__.py create mode 100644 tests/base_test.py create mode 100644 tests/test_settings.py diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/base_test.py b/tests/base_test.py new file mode 100644 index 0000000..7207443 --- /dev/null +++ b/tests/base_test.py @@ -0,0 +1,81 @@ +""" +ARCHES - a program developed to inventory and manage immovable cultural heritage. +Copyright (C) 2013 J. Paul Getty Trust and World Monuments Fund + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +""" + +from contextlib import contextmanager + +from arches.app.models.system_settings import settings +from arches.app.utils.context_processors import app_settings +from django.test.runner import DiscoverRunner + +from arches.app.search.mappings import ( + prepare_terms_index, + delete_terms_index, + prepare_concepts_index, + delete_concepts_index, + prepare_search_index, + delete_search_index, +) + +# these tests can be run from the command line via +# python manage.py test tests --pattern="*.py" --settings="tests.test_settings" + + +class ArchesTestRunner(DiscoverRunner): + def __init__(self, *args, **kwargs) -> None: + kwargs["debug_mode"] = True + # Unless the user has something other than the Django default, give them + # what they probably want. + if kwargs["pattern"] == "test*.py": + kwargs["pattern"] = "*.py" + super().__init__(*args, **kwargs) + + def setup_databases(self, **kwargs): + ret = super().setup_databases(**kwargs) + + # Some tests don't use the database. + if kwargs.get("aliases", None): + app_settings() # adds languages to system + prepare_terms_index(create=True) + prepare_concepts_index(create=True) + prepare_search_index(create=True) + + return ret + + def teardown_databases(self, old_config, **kwargs): + delete_terms_index() + delete_concepts_index() + delete_search_index() + + super().teardown_databases(old_config, **kwargs) + + +@contextmanager +def sync_overridden_test_settings_to_arches(): + """Django's @override_settings test util acts on django.conf.settings, + which is not enough for us, because we use SystemSettings at runtime. + + This context manager swaps in the overridden django.conf.settings for SystemSettings. + """ + from django.conf import settings as patched_settings + + original_settings_wrapped = settings._wrapped + try: + settings._wrapped = patched_settings._wrapped + yield + finally: + settings._wrapped = original_settings_wrapped diff --git a/tests/test_settings.py b/tests/test_settings.py new file mode 100644 index 0000000..c2d19ee --- /dev/null +++ b/tests/test_settings.py @@ -0,0 +1,73 @@ +""" +ARCHES - a program developed to inventory and manage immovable cultural heritage. +Copyright (C) 2013 J. Paul Getty Trust and World Monuments Fund + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +""" + +import os + +from disco.settings import * + +PACKAGE_NAME = "disco" + +PROJECT_TEST_ROOT = os.path.dirname(__file__) +MEDIA_ROOT = os.path.join(PROJECT_TEST_ROOT, "fixtures", "data") + +BUSINESS_DATA_FILES = ( + # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". + # Always use forward slashes, even on Windows. + # Don't forget to use absolute paths, not relative paths. +) + +DATABASES = { + "default": { + "ATOMIC_REQUESTS": False, + "AUTOCOMMIT": True, + "CONN_MAX_AGE": 0, + "ENGINE": "django.contrib.gis.db.backends.postgis", + "HOST": "localhost", + "NAME": "disco", + "OPTIONS": {}, + "PASSWORD": "postgis", + "PORT": "5432", + "POSTGIS_TEMPLATE": "template_postgis", + "TEST": {"CHARSET": None, "COLLATION": None, "MIRROR": None, "NAME": None}, + "TIME_ZONE": None, + "USER": "postgres", + } +} + +CACHES = { + "default": { + "BACKEND": "django.core.cache.backends.dummy.DummyCache", + }, + "user_permission": { + "BACKEND": "django.core.cache.backends.dummy.DummyCache", + "LOCATION": "user_permission_cache", + }, +} + +LOGGING["loggers"]["arches"]["level"] = "ERROR" + +ELASTICSEARCH_PREFIX = "test" + +TEST_RUNNER = "tests.base_test.ArchesTestRunner" +SILENCED_SYSTEM_CHECKS.append( + "arches.W001", # Cache backend does not support rate-limiting +) + +ELASTICSEARCH_HOSTS = [ + {"scheme": "http", "host": "localhost", "port": ELASTICSEARCH_HTTP_PORT} +] From ebfd3a3d379a80caef0e277d808f5cf8c5c18470 Mon Sep 17 00:00:00 2001 From: Cyrus Hiatt Date: Mon, 5 Aug 2024 15:42:44 -0700 Subject: [PATCH 18/18] Remove unnecessary __init__.py --- __init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 __init__.py diff --git a/__init__.py b/__init__.py deleted file mode 100644 index e69de29..0000000