From 1728cb1bed4797b6cff8a6940bd60d7aa17b2041 Mon Sep 17 00:00:00 2001 From: EugeniyKiyashko Date: Tue, 27 Oct 2026 15:21:26 +0400 Subject: [PATCH] Demos: remove the GitHub Pages demos pipeline --- .github/workflows/github-pages-publish.yml | 35 -- .github/workflows/publish-demos.yml | 297 ------------- .../workflows/run-testcafe-on-gh-pages.yml | 148 ------- apps/demos/.gitignore | 4 - apps/demos/.prettierignore | 2 - apps/demos/.stylelintignore | 1 - apps/demos/eslint.config.mjs | 2 - apps/demos/package.json | 9 - apps/demos/project.json | 2 - apps/demos/testing/common.test.ts | 17 +- .../utils/create-bundles/Angular/bundler.ts | 60 --- .../utils/create-bundles/Angular/polyfill.ts | 1 - .../Angular/post-process-index.ts | 89 ---- .../create-bundles/Angular/template.html | 24 -- .../Angular/update-angular-json.ts | 99 ----- .../utils/create-bundles/Angular/utils.ts | 6 - .../utils/create-bundles/React/bundler.ts | 41 -- .../utils/create-bundles/React/template.html | 27 -- .../demos/utils/create-bundles/Vue/bundler.ts | 42 -- .../utils/create-bundles/Vue/template.html | 27 -- .../utils/create-bundles/helper/bundler.ts | 41 -- .../helper/external-resource-metadata.ts | 400 ------------------ .../utils/create-bundles/helper/index.ts | 195 --------- .../helper/metadata/scripts/init-theme.js | 11 - .../utils/create-bundles/helper/types.ts | 26 -- apps/demos/utils/create-bundles/index.ts | 96 ----- .../plugins/ignore-missing-css.ts | 22 - .../utils/visual-tests/github-ignored-list.js | 37 -- .../utils/visual-tests/matrix-test-helper.ts | 18 +- pnpm-lock.yaml | 353 ---------------- 30 files changed, 4 insertions(+), 2128 deletions(-) delete mode 100644 .github/workflows/github-pages-publish.yml delete mode 100644 .github/workflows/publish-demos.yml delete mode 100644 .github/workflows/run-testcafe-on-gh-pages.yml delete mode 100644 apps/demos/utils/create-bundles/Angular/bundler.ts delete mode 100644 apps/demos/utils/create-bundles/Angular/polyfill.ts delete mode 100644 apps/demos/utils/create-bundles/Angular/post-process-index.ts delete mode 100644 apps/demos/utils/create-bundles/Angular/template.html delete mode 100644 apps/demos/utils/create-bundles/Angular/update-angular-json.ts delete mode 100644 apps/demos/utils/create-bundles/Angular/utils.ts delete mode 100644 apps/demos/utils/create-bundles/React/bundler.ts delete mode 100644 apps/demos/utils/create-bundles/React/template.html delete mode 100644 apps/demos/utils/create-bundles/Vue/bundler.ts delete mode 100644 apps/demos/utils/create-bundles/Vue/template.html delete mode 100644 apps/demos/utils/create-bundles/helper/bundler.ts delete mode 100644 apps/demos/utils/create-bundles/helper/external-resource-metadata.ts delete mode 100644 apps/demos/utils/create-bundles/helper/index.ts delete mode 100644 apps/demos/utils/create-bundles/helper/metadata/scripts/init-theme.js delete mode 100644 apps/demos/utils/create-bundles/helper/types.ts delete mode 100644 apps/demos/utils/create-bundles/index.ts delete mode 100644 apps/demos/utils/create-bundles/plugins/ignore-missing-css.ts delete mode 100644 apps/demos/utils/visual-tests/github-ignored-list.js diff --git a/.github/workflows/github-pages-publish.yml b/.github/workflows/github-pages-publish.yml deleted file mode 100644 index 463e9490bcd6..000000000000 --- a/.github/workflows/github-pages-publish.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: Publishing to GitHub Pages step 3 (to prod) - -on: - workflow_dispatch: - -permissions: - contents: read - pages: write - id-token: write - -concurrency: - group: "pages" - cancel-in-progress: false - -jobs: - deploy: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v6 - with: - ref: gh-pages - - name: Setup Pages - uses: actions/configure-pages@v6 - - name: Upload artifact - uses: actions/upload-pages-artifact@v5 - with: - # Upload entire repository - path: '.' - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v5 diff --git a/.github/workflows/publish-demos.yml b/.github/workflows/publish-demos.yml deleted file mode 100644 index d95a63e22430..000000000000 --- a/.github/workflows/publish-demos.yml +++ /dev/null @@ -1,297 +0,0 @@ -name: Publishing to GitHub Pages step 1 (to branch) - -on: - workflow_dispatch: - -permissions: - contents: read - -jobs: - build-devextreme-all: - runs-on: ubuntu-latest - name: Build DevExtreme + wrappers - timeout-minutes: 20 - - steps: - - name: Get sources - uses: actions/checkout@v6 - - - name: Use Node.js - uses: actions/setup-node@v7 - with: - node-version-file: '.node-version' - - - uses: pnpm/action-setup@v6 - with: - run_install: false - - - uses: actions/cache@v5 - name: Setup pnpm cache - with: - path: ${{ env.STORE_PATH }} - key: ${{ runner.os }}-pnpm-cache-${{ hashFiles('**/pnpm-lock.yaml') }} - restore-keys: | - ${{ runner.os }}-pnpm-cache - - - name: Lookup nx cache - id: lookup-nx-cache - uses: actions/cache/restore@v5 - with: - path: | - .nx/cache - .nx/workspace-data/*.db - .nx/workspace-data/*.db-wal - .nx/workspace-data/*.db-shm - key: ${{ runner.os }}-nx-v2-${{ github.workflow }}-${{ github.job }}-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-nx-v2-${{ github.workflow }}-${{ github.job }}-${{ github.sha }}- - ${{ runner.os }}-nx-v2-${{ github.workflow }}-${{ github.job }}- - ${{ runner.os }}-nx-v2- - - lookup-only: true - - - name: Show nx cache status - shell: bash - run: | - echo "Nx cache lookup exact hit: ${{ steps.lookup-nx-cache.outputs.cache-hit }}" - echo "Nx cache primary key: ${{ steps.lookup-nx-cache.outputs.cache-primary-key }}" - echo "Nx cache matched key: ${{ steps.lookup-nx-cache.outputs.cache-matched-key }}" - if [ -z "${{ steps.lookup-nx-cache.outputs.cache-matched-key }}" ]; then - echo "Nx cache lookup: miss" - elif [ "${{ steps.lookup-nx-cache.outputs.cache-hit }}" = "true" ]; then - echo "Nx cache lookup: exact hit" - else - echo "Nx cache lookup: partial hit via restore-keys" - fi - - - name: Install dependencies - run: | - corepack enable - pnpm install --frozen-lockfile - - - name: Setup nx cache - id: setup-nx-cache - uses: actions/cache@v5 - with: - path: | - .nx/cache - .nx/workspace-data/*.db - .nx/workspace-data/*.db-wal - .nx/workspace-data/*.db-shm - key: ${{ runner.os }}-nx-v2-${{ github.workflow }}-${{ github.job }}-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-nx-v2-${{ github.workflow }}-${{ github.job }}-${{ github.sha }}- - ${{ runner.os }}-nx-v2-${{ github.workflow }}-${{ github.job }}- - ${{ runner.os }}-nx-v2- - - - name: DevExtreme - Build-all - run: pnpm nx all:build-testing workflows - - - name: Move packages - run: | - mv ./packages/devextreme/artifacts/npm/devextreme/*.tgz ./devextreme-installer.tgz - mv ./packages/devextreme/artifacts/npm/devextreme-dist/*.tgz ./devextreme-dist-installer.tgz - mv ./packages/devextreme-angular/npm/dist/*.tgz ./devextreme-angular-installer.tgz - mv ./packages/devextreme-react/npm/*.tgz ./devextreme-react-installer.tgz - mv ./packages/devextreme-vue/npm/*.tgz ./devextreme-vue-installer.tgz - - - name: Copy build artifacts - uses: actions/upload-artifact@v7 - with: - name: devextreme-sources - path: | - devextreme-installer.tgz - devextreme-dist-installer.tgz - devextreme-angular-installer.tgz - devextreme-react-installer.tgz - devextreme-vue-installer.tgz - retention-days: 1 - - publish-ES: - runs-on: ubuntu-latest - needs: [build-devextreme-all] - steps: - - name: Get sources - uses: actions/checkout@v6 - - - name: Use Node.js - uses: actions/setup-node@v7 - with: - node-version-file: '.node-version' - - - name: Download devextreme sources - uses: actions/download-artifact@v8 - with: - name: devextreme-sources - - - uses: pnpm/action-setup@v6 - with: - run_install: false - - - name: Get pnpm store directory - shell: bash - run: | - echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV - - - uses: actions/cache@v5 - name: Setup pnpm cache - with: - path: ${{ env.STORE_PATH }} - key: ${{ runner.os }}-pnpm-cache-${{ hashFiles('**/pnpm-lock.yaml') }} - restore-keys: | - ${{ runner.os }}-pnpm-cache - - - name: Install dependencies - run: | - corepack enable - pnpm install --frozen-lockfile - - - name: Install tgz - working-directory: apps/demos - run: pnpm add ../../devextreme-installer.tgz ../../devextreme-dist-installer.tgz ../../devextreme-react-installer.tgz ../../devextreme-vue-installer.tgz ../../devextreme-angular-installer.tgz - - - name: Copy metadata - working-directory: apps/demos - run: pnpm run make-demos-bundle --copy-metadata - - - name: Prepare React demo bundles - working-directory: apps/demos - run: pnpm run make-demos-bundle --framework="React" - - - name: Prepare Vue demo bundles - working-directory: apps/demos - run: pnpm run make-demos-bundle --framework="Vue" - - - name: Save publish-demos directory for ES as an artifact - uses: actions/upload-artifact@v7 - with: - name: publish-demos - path: ./apps/demos/publish-demos - - publish-angular: - runs-on: ubuntu-latest - needs: [build-devextreme-all] - strategy: - fail-fast: false - matrix: - include: - - name: Check generated demos (1/10) - command: CONSTEL=1/10 pnpm run make-demos-bundle --framework="Angular" - index: 1 - - name: Check generated demos (2/10) - command: CONSTEL=2/10 pnpm run make-demos-bundle --framework="Angular" - index: 2 - - name: Check generated demos (3/10) - command: CONSTEL=3/10 pnpm run make-demos-bundle --framework="Angular" - index: 3 - - name: Check generated demos (4/10) - command: CONSTEL=4/10 pnpm run make-demos-bundle --framework="Angular" - index: 4 - - name: Check generated demos (5/10) - command: CONSTEL=5/10 pnpm run make-demos-bundle --framework="Angular" - index: 5 - - name: Check generated demos (6/10) - command: CONSTEL=6/10 pnpm run make-demos-bundle --framework="Angular" - index: 6 - - name: Check generated demos (7/10) - command: CONSTEL=7/10 pnpm run make-demos-bundle --framework="Angular" - index: 7 - - name: Check generated demos (8/10) - command: CONSTEL=8/10 pnpm run make-demos-bundle --framework="Angular" - index: 8 - - name: Check generated demos (9/10) - command: CONSTEL=9/10 pnpm run make-demos-bundle --framework="Angular" - index: 9 - - name: Check generated demos (10/10) - command: CONSTEL=10/10 pnpm run make-demos-bundle --framework="Angular" - index: 10 - steps: - - name: Get sources - uses: actions/checkout@v6 - - - name: Use Node.js - uses: actions/setup-node@v7 - with: - node-version-file: '.node-version' - - - name: Download devextreme sources - uses: actions/download-artifact@v8 - with: - name: devextreme-sources - - - uses: pnpm/action-setup@v6 - with: - run_install: false - - - name: Get pnpm store directory - shell: bash - run: | - echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV - - - uses: actions/cache@v5 - name: Setup pnpm cache - with: - path: ${{ env.STORE_PATH }} - key: ${{ runner.os }}-pnpm-cache-${{ hashFiles('**/pnpm-lock.yaml') }} - restore-keys: | - ${{ runner.os }}-pnpm-cache - - - name: Install dependencies - run: | - corepack enable - pnpm install --frozen-lockfile - - - name: Install tgz - working-directory: apps/demos - run: pnpm add ../../devextreme-installer.tgz ../../devextreme-dist-installer.tgz ../../devextreme-react-installer.tgz ../../devextreme-vue-installer.tgz ../../devextreme-angular-installer.tgz - - - name: Copy metadata - working-directory: apps/demos - run: pnpm run make-demos-bundle --copy-metadata - - - name: Update angular.json - working-directory: apps/demos - run: pnpm run update-angular-json - - - name: Prepare Angular demo bundles - working-directory: apps/demos - run: | - ${{ matrix.command }} - - - name: Angular post process index.html - working-directory: apps/demos - run: pnpm run post-process-angular - - - name: Save publish-demos directory for Angular as an artifact - uses: actions/upload-artifact@v7 - with: - name: publish-demos-angular-${{ matrix.index }} - path: ./apps/demos/publish-demos/ - - deploy: - runs-on: ubuntu-latest - needs: [build-devextreme-all, publish-ES, publish-angular] - permissions: - contents: write - environment: gh-pages-demos - steps: - - name: Download publish-demos artifact - uses: actions/download-artifact@v8 - with: - name: publish-demos - path: ./apps/demos/publish-demos - - - name: Download publish-demos artifact - uses: actions/download-artifact@v8 - with: - pattern: publish-demos-angular-* - merge-multiple: true - path: ./apps/demos/publish-demos/ - - - name: Deploy to gh-pages - uses: peaceiris/actions-gh-pages@v4 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./apps/demos/publish-demos - destination_dir: demos - keep_files: true diff --git a/.github/workflows/run-testcafe-on-gh-pages.yml b/.github/workflows/run-testcafe-on-gh-pages.yml deleted file mode 100644 index 66d8f102637a..000000000000 --- a/.github/workflows/run-testcafe-on-gh-pages.yml +++ /dev/null @@ -1,148 +0,0 @@ -name: Publishing to GitHub Pages step 2 (run tests on branch) - -concurrency: - group: wf-${{github.event.pull_request.number || github.sha}}-${{github.workflow}} - cancel-in-progress: true - -on: - workflow_dispatch: - -jobs: - testcafe: - strategy: - fail-fast: false - matrix: - CONSTEL: [react(1/4), react(2/4), react(3/4), react(4/4), vue(1/4), vue(2/4), vue(3/4), vue(4/4), angular(1/4), angular(2/4), angular(3/4), angular(4/4)] - THEME: ['material.blue.light', 'fluent.blue.light', 'fluent-next.blue.light'] - - - runs-on: ubuntu-22.04 - name: testcafe-${{ matrix.CONSTEL }}-${{ matrix.THEME }} - timeout-minutes: 60 - env: - TARGET_BRANCH: ${{ github.ref_name }} - - steps: - - name: Use Node.js - uses: actions/setup-node@v7 - with: - node-version-file: '.node-version' - - - name: Checkout gh-pages branch - uses: actions/checkout@v6 - with: - ref: gh-pages - path: gh-pages - - - name: Run Web Server - working-directory: gh-pages - run: | - python -m http.server 8080 & - python -m http.server 8081 & - python -m http.server 8082 & - python -m http.server 8083 & - - - name: Checkout main branch - uses: actions/checkout@v6 - with: - ref: ${{ env.TARGET_BRANCH }} - path: devextreme - - - name: Console.log ls - run: ls -al & cd gh-pages & ls -al - - - name: Setup Chrome - uses: ./devextreme/.github/actions/setup-chrome - with: - chrome-version: '155.0.8059.39' - - - uses: pnpm/action-setup@v6 - with: - run_install: false - - - uses: actions/cache@v5 - name: Setup pnpm cache - with: - path: ${{ env.STORE_PATH }} - key: ${{ runner.os }}-pnpm-cache-${{ hashFiles('**/pnpm-lock.yaml') }} - restore-keys: | - ${{ runner.os }}-pnpm-cache - - - name: Lookup nx cache - id: lookup-nx-cache - uses: actions/cache/restore@v5 - with: - path: | - devextreme/.nx/cache - devextreme/.nx/workspace-data/*.db - devextreme/.nx/workspace-data/*.db-wal - devextreme/.nx/workspace-data/*.db-shm - key: ${{ runner.os }}-nx-v2-${{ github.workflow }}-${{ github.job }}-${{ matrix.CONSTEL }}-${{ matrix.THEME }}-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-nx-v2-${{ github.workflow }}-${{ github.job }}-${{ matrix.CONSTEL }}-${{ matrix.THEME }}-${{ github.sha }}- - ${{ runner.os }}-nx-v2-${{ github.workflow }}-${{ github.job }}-${{ matrix.CONSTEL }}-${{ matrix.THEME }}- - ${{ runner.os }}-nx-v2-${{ github.workflow }}-${{ github.job }}- - ${{ runner.os }}-nx-v2- - - lookup-only: true - - - name: Show nx cache status - shell: bash - run: | - echo "Nx cache lookup exact hit: ${{ steps.lookup-nx-cache.outputs.cache-hit }}" - echo "Nx cache primary key: ${{ steps.lookup-nx-cache.outputs.cache-primary-key }}" - echo "Nx cache matched key: ${{ steps.lookup-nx-cache.outputs.cache-matched-key }}" - if [ -z "${{ steps.lookup-nx-cache.outputs.cache-matched-key }}" ]; then - echo "Nx cache lookup: miss" - elif [ "${{ steps.lookup-nx-cache.outputs.cache-hit }}" = "true" ]; then - echo "Nx cache lookup: exact hit" - else - echo "Nx cache lookup: partial hit via restore-keys" - fi - - - name: Install dependencies - working-directory: devextreme - run: | - corepack enable - pnpm install --frozen-lockfile - - - name: Setup nx cache - id: setup-nx-cache - uses: actions/cache@v5 - with: - path: | - devextreme/.nx/cache - devextreme/.nx/workspace-data/*.db - devextreme/.nx/workspace-data/*.db-wal - devextreme/.nx/workspace-data/*.db-shm - key: ${{ runner.os }}-nx-v2-${{ github.workflow }}-${{ github.job }}-${{ matrix.CONSTEL }}-${{ matrix.THEME }}-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-nx-v2-${{ github.workflow }}-${{ github.job }}-${{ matrix.CONSTEL }}-${{ matrix.THEME }}-${{ github.sha }}- - ${{ runner.os }}-nx-v2-${{ github.workflow }}-${{ github.job }}-${{ matrix.CONSTEL }}-${{ matrix.THEME }}- - ${{ runner.os }}-nx-v2-${{ github.workflow }}-${{ github.job }}- - ${{ runner.os }}-nx-v2- - - - name: Run TestCafe tests - working-directory: devextreme/apps/demos - env: - CHANGEDFILEINFOSPATH: changed-files.json - BROWSERS: chrome:headless --window-size=1200,800 --disable-partial-raster --disable-skia-runtime-opts --run-all-compositor-stages-before-draw --disable-new-content-rendering-timeout --disable-threaded-animation --disable-threaded-scrolling --disable-checker-imaging --disable-image-animation-resync --use-gl="swiftshader" --disable-features=PaintHolding --js-flags=--random-seed=2147483647 --font-render-hinting=none --disable-font-subpixel-positioning - #DEBUG: hammerhead:*,testcafe:* - CONCURRENCY: 4 - TCQUARANTINE: true - CONSTEL: ${{ matrix.CONSTEL }} - THEME: ${{ matrix.THEME }} - ISGITHUBDEMOS: true - # DISABLE_DEMO_TEST_SETTINGS: all # Uncomment to ignore all the visualtestrc.json settings - # DISABLE_DEMO_TEST_SETTINGS: ignore # Uncomment to ignore the `ignore` field - # DISABLE_DEMO_TEST_SETTINGS: comparison-options # Uncomment to ignore the `comparison-options` field - CI_ENV: true # The `ignore` field in the visualtestrc.json should be disabled when running test locally - run: pnpm exec nx test-testcafe - - - name: Copy screenshots artifacts - if: ${{ failure() }} - uses: actions/upload-artifact@v7 - with: - name: screenshots - path: ${{ github.workspace }}/devextreme/apps/demos/testing/artifacts/compared-screenshots/**/* - if-no-files-found: ignore diff --git a/apps/demos/.gitignore b/apps/demos/.gitignore index c03001f31c47..f5a9d6ed5880 100644 --- a/apps/demos/.gitignore +++ b/apps/demos/.gitignore @@ -34,7 +34,6 @@ Demos/**/_chunks .DS_Store **/.DS_Store -publish-demos csp-reports @@ -44,6 +43,3 @@ Demos/**/.demo-bundle-angular-patched.*.ts # Scratch entry files from utils/server/vendor-bundle.js (cleaned up on success). .vendor-entry-tmp - -.angular -angular.json diff --git a/apps/demos/.prettierignore b/apps/demos/.prettierignore index 1759b9938476..6be4ecd1fd0c 100644 --- a/apps/demos/.prettierignore +++ b/apps/demos/.prettierignore @@ -7,7 +7,5 @@ *.md *.json .github -publish-demos coverage testing/artifacts -utils/**/template.html diff --git a/apps/demos/.stylelintignore b/apps/demos/.stylelintignore index e48bb9ae0821..4ebc8aea50e0 100644 --- a/apps/demos/.stylelintignore +++ b/apps/demos/.stylelintignore @@ -1,2 +1 @@ -publish-demos coverage diff --git a/apps/demos/eslint.config.mjs b/apps/demos/eslint.config.mjs index d6880e294b3f..8ed10c4d9481 100644 --- a/apps/demos/eslint.config.mjs +++ b/apps/demos/eslint.config.mjs @@ -39,7 +39,6 @@ export default [ 'node_modules', 'bundles', 'coverage', - 'publish-demos', 'Demos/**/testcafe-test-code.js', 'shared/empty-file.ts', 'Demos/**/Vue/**/*.html', @@ -108,7 +107,6 @@ export default [ 'timestamps', 'urls', 'whitespace', - 'yargs', 'treshold', // should be updated to 'threshold' in the codebase 'callstack', 'Deprecations', diff --git a/apps/demos/package.json b/apps/demos/package.json index cad43d8572a7..5b3624627f0a 100644 --- a/apps/demos/package.json +++ b/apps/demos/package.json @@ -18,7 +18,6 @@ "dependencies": { "@angular/animations": "^22.2.1", "@angular-devkit/build-angular": "^22.2.1", - "@angular/cli": "^22.2.1", "@angular/common": "^22.2.1", "@angular/compiler": "^22.2.1", "@angular/compiler-cli": "^22.2.1", @@ -80,7 +79,6 @@ "vue": "^3.3.4", "vuex": "4.0.0-beta.4", "whatwg-fetch": "2.0.4", - "yargs": "17.7.2", "zod": "catalog:", "zone.js": "0.16.2", "express-rate-limit": "^8.3.1" @@ -102,7 +100,6 @@ "@types/fs-extra": "11.0.2", "@types/react": "17.0.91", "@types/react-dom": "17.0.26", - "@types/yargs": "17.0.35", "@typescript-eslint/eslint-plugin": "catalog:", "@typescript-eslint/parser": "catalog:", "@vue/eslint-config-typescript": "12.0.0", @@ -128,7 +125,6 @@ "express": "4.22.1", "glob": "11.1.0", "globals": "catalog:", - "http-server": "14.1.1", "jest": "30.4.2", "jest-environment-node": "30.4.1", "lodash": "4.18.1", @@ -171,11 +167,6 @@ "prettier": "prettier", "convert-to-js": "ts-node ./utils/ts-to-js-converter/cli.ts", "create-typestat-cfg": "cd ./utils/internal && node ./create-typestat-cfg.js", - "make-demos-bundle": "ts-node ./utils/create-bundles", - "update-angular-json": "ts-node ./utils/create-bundles/Angular/update-angular-json.ts", - "build-angular": "ng build", - "post-process-angular": "ts-node ./utils/create-bundles/Angular/post-process-index.ts", - "webserver-gh": "cd ./publish-demos && http-server --port 5645", "ts-check-react": "pnpm exec tsc --noEmit --project tsconfig.react-check.json", "ts-check-ng": "pnpm exec ngc --noEmit --project tsconfig.ngc-check.json", "ts-check-vue": "pnpm exec vue-tsc --noEmit --project tsconfig.vue-check.json" diff --git a/apps/demos/project.json b/apps/demos/project.json index e29c28ac65ca..dcb5108ff9fa 100644 --- a/apps/demos/project.json +++ b/apps/demos/project.json @@ -85,7 +85,6 @@ "{projectRoot}/**/*.vue", "!{projectRoot}/node_modules/**/*", "!{projectRoot}/coverage/**/*", - "!{projectRoot}/publish-demos/**/*", "!{projectRoot}/testing/artifacts/**/*", "{projectRoot}/.stylelintrc.json", "{projectRoot}/.stylelintignore" @@ -100,7 +99,6 @@ "{projectRoot}/**/*", "!{projectRoot}/node_modules/**/*", "!{projectRoot}/coverage/**/*", - "!{projectRoot}/publish-demos/**/*", "!{projectRoot}/testing/artifacts/**/*" ] }, diff --git a/apps/demos/testing/common.test.ts b/apps/demos/testing/common.test.ts index 9344bc853794..e6b04220dc90 100644 --- a/apps/demos/testing/common.test.ts +++ b/apps/demos/testing/common.test.ts @@ -29,8 +29,6 @@ import { skippedTests } from './skipped-tests'; import { widgetsGalleryServiceMock } from './apiMocks/widgetsGalleryServiceMock'; import { xmlaServiceMock } from './apiMocks/xmlaServiceMock'; -import { gitHubIgnored } from '../utils/visual-tests/github-ignored-list'; - const execTestCafeCode = (t, code) => { // eslint-disable-next-line no-eval const testCafeFunction = eval(code); @@ -206,19 +204,8 @@ Object.values(FRAMEWORKS).forEach((approach) => { } } - const isGitHubDemos = process.env.ISGITHUBDEMOS; - let pageURL = ''; - const theme = process.env.THEME.replace('generic.', ''); - if (isGitHubDemos) { - pageURL = `http://127.0.0.1:8080/Demos/${widgetName}/${demoName}/${approach}/?theme=dx.${theme}`; - } else { - changeTheme(__dirname, `../${demoPath}/index.html`, process.env.THEME); - pageURL = `http://127.0.0.1:8080/apps/demos/Demos/${widgetName}/${demoName}/${approach}/`; - } - // remove when tests enabled not only for datagrid - if (isGitHubDemos && (widgetName !== 'DataGrid' || gitHubIgnored.includes(demoName))) { - return; - } + changeTheme(__dirname, `../${demoPath}/index.html`, process.env.THEME); + const pageURL = `http://127.0.0.1:8080/apps/demos/Demos/${widgetName}/${demoName}/${approach}/`; if (shouldSkipDemo(approach, widgetName, demoName, skippedTests) && process.env.STRATEGY !== 'accessibility') { return; diff --git a/apps/demos/utils/create-bundles/Angular/bundler.ts b/apps/demos/utils/create-bundles/Angular/bundler.ts deleted file mode 100644 index 1b76b9cea5fa..000000000000 --- a/apps/demos/utils/create-bundles/Angular/bundler.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { spawn } from 'child_process'; -import { BuildOptions } from 'esbuild'; -import { existsSync, mkdirSync, removeSync } from 'fs-extra'; -import { Demo, Framework } from '../helper/types'; -import { createDemoLayout, getDestinationPathByDemo, getSourcePathByDemo } from '../helper'; -import { getIndexHtmlPath, getProjectNameByDemo } from './utils'; - -interface Bundler { - framework: Framework; - getBuildOptions: (demo: Demo) => BuildOptions; - buildDemo: (demo: Demo, res) => void; -} -export default class AngularBundler implements Bundler { - framework: Framework; - - constructor() { - this.framework = 'Angular'; - } - - getBuildOptions = (): BuildOptions => ({}); - - buildDemo = (demo: Demo, res): Promise => { - const sourceDemoPath = getSourcePathByDemo(demo, this.framework); - if (!existsSync(sourceDemoPath)) { - res(); - return; - } - - const destinationDemoPath = getDestinationPathByDemo(demo, this.framework); - const indexHtmlPath = getIndexHtmlPath(demo); - - if (existsSync(destinationDemoPath)) { - removeSync(destinationDemoPath); - } - - if (existsSync(indexHtmlPath)) { - removeSync(indexHtmlPath); - } - - mkdirSync(destinationDemoPath, { recursive: true }); - mkdirSync(indexHtmlPath, { recursive: true }); - - createDemoLayout(demo, this.framework); - - const isWin = process.platform === 'win32'; - const npmCmd = isWin ? 'npm.cmd' : 'npm'; - const npmArgs = ['run', 'build-angular', '--', getProjectNameByDemo(demo)]; - const ngBuildProcess = spawn(npmCmd, npmArgs); - ngBuildProcess.stdout.on('data', (data) => { - console.log(`stdout: ${data}`); - }); - ngBuildProcess.stderr.on('data', (data) => { - console.error(`stderr: ${data}`); - }); - ngBuildProcess.on('close', (code) => { - console.log(`child process exited with code ${code}`); - res(); - }); - }; -} diff --git a/apps/demos/utils/create-bundles/Angular/polyfill.ts b/apps/demos/utils/create-bundles/Angular/polyfill.ts deleted file mode 100644 index aa09a9ff6ae6..000000000000 --- a/apps/demos/utils/create-bundles/Angular/polyfill.ts +++ /dev/null @@ -1 +0,0 @@ -import 'zone.js'; diff --git a/apps/demos/utils/create-bundles/Angular/post-process-index.ts b/apps/demos/utils/create-bundles/Angular/post-process-index.ts deleted file mode 100644 index 78164a9a64f1..000000000000 --- a/apps/demos/utils/create-bundles/Angular/post-process-index.ts +++ /dev/null @@ -1,89 +0,0 @@ -import fs from 'fs'; -import path from 'path'; - -const demoProjectsDir = path.join(__dirname, '../../../publish-demos/Demos/'); - -// In the demo, we need to wait, while themes are loaded -// Angular build add scripts to the end of index.html, here we are wrapping them in onload callback -function wrapBundleScripts(filePath) { - fs.readFile(filePath, 'utf8', (err, data) => { - if (err) { - console.error(`Error reading file ${filePath}:`, err); - return; - } - - const polyfillRegex = /<\/script>/g; - const runtimeRegex = /<\/script>/g; - const mainRegex = /<\/script>/g; - - const scripts = []; - - [polyfillRegex, runtimeRegex, mainRegex].forEach((regex) => { - const match = regex.exec(data); - if (match) { - scripts.push(match[1]); - } - }); - - if (scripts.length === 0) { - console.log('There are no bundle scripts to edit'); - return; - } - - const cleanedHtml = data.replace(polyfillRegex, '').replace(runtimeRegex, '').replace(mainRegex, ''); - - const wrappedBundleScripts = ` - - `; - - const newHtml = cleanedHtml.replace('', wrappedBundleScripts); - - fs.writeFile(filePath, newHtml, 'utf8', (err) => { - if (err) { - console.error(`Error writing file ${filePath}:`, err); - return; - } - console.log(`Modified ${filePath} successfully.`); - }); - }); -} - -function processDemoProjects(demosDirectory) { - fs.readdir(demosDirectory, (err, widgets) => { - if (err) { - console.error(`Error reading directory ${demosDirectory}:`, err); - return; - } - - widgets.forEach((widget) => { - const widgetPath = path.join(demosDirectory, widget); - fs.readdir(widgetPath, (err, demoName) => { - if (err) { - console.error(`Error reading directory ${widgetPath}:`, err); - return; - } - demoName.forEach((demo) => { - const filePath = path.join(widgetPath, demo, 'Angular', 'index.html'); - if (fs.existsSync(filePath)) { - wrapBundleScripts(filePath); - } else { - console.warn(`File not found: ${filePath}`); - } - }); - }); - }); - }); -} - -processDemoProjects(demoProjectsDir); diff --git a/apps/demos/utils/create-bundles/Angular/template.html b/apps/demos/utils/create-bundles/Angular/template.html deleted file mode 100644 index 7acb8301f99c..000000000000 --- a/apps/demos/utils/create-bundles/Angular/template.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - {{demo_title}} - - - - - {{additional_css}} - - - - - -
- Loading... -
- - - - - diff --git a/apps/demos/utils/create-bundles/Angular/update-angular-json.ts b/apps/demos/utils/create-bundles/Angular/update-angular-json.ts deleted file mode 100644 index 627bfc794c5e..000000000000 --- a/apps/demos/utils/create-bundles/Angular/update-angular-json.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { writeFileSync, existsSync } from 'fs-extra'; -import { relative, join } from 'path'; -import { Demo, Item } from '../helper/types'; -import { getSourcePathByDemo, getDestinationPathByDemo, isSkipDemo } from '../helper'; -import * as menuMeta from '../../../menuMeta.json'; -import { getProjectNameByDemo, getIndexHtmlPath } from './utils'; - -// use this script either from npm, or from devextreme-demos root folder -const rootFolder = process.cwd(); - -const createConfigForDemo = (Demo: Demo) => { - const demoSourcePathRelative = getSourcePathByDemo(Demo, 'Angular', true).split('\\').join('/'); - const demoDestinationPathRelative = getDestinationPathByDemo(Demo, 'Angular', true).split('\\').join('/'); - const indexPath = relative( - rootFolder, - join(getIndexHtmlPath(Demo), 'index.html'), - ).split('\\').join('/'); - return { - projectType: 'application', - schematics: { - '@schematics/angular:application': { - strict: false, - }, - }, - root: demoSourcePathRelative, - sourceRoot: demoSourcePathRelative, - - architect: { - build: { - builder: '@angular-devkit/build-angular:browser-esbuild', - options: { - outputPath: demoDestinationPathRelative, - index: `${indexPath}`, - main: `${demoSourcePathRelative}/app/app.component.ts`, - polyfills: join(__dirname, 'polyfill.ts').split('\\').join('/'), - tsConfig: `${demoSourcePathRelative}/tsconfig.json`, - scripts: [], - allowedCommonJsDependencies: [ - 'jszip', - 'devexpress-diagram', - 'devexpress-gantt', - 'devextreme-quill', - 'devextreme-aspnet-data-nojquery', - ], - }, - configurations: { - production: { - budgets: [ - { - type: 'initial', - maximumWarning: '2mb', - maximumError: '4mb', - }, - { - type: 'anyComponentStyle', - maximumWarning: '2kb', - maximumError: '4kb', - }, - ], - outputHashing: 'all', - }, - }, - defaultConfiguration: 'production', - }, - }, - }; -}; - -const createAngularJson = () => { - const angularJsonObject = { - version: 1, - newProjectRoot: 'projects', - projects: {}, - }; - const menu: Item[] = (menuMeta as any).default; - - for (const meta of menu) { - for (const group of meta.Groups) { - const demos = group.Demos || []; - for (const demo of demos) { - if (!isSkipDemo(demo)) { - if (existsSync(getSourcePathByDemo(demo, 'Angular'))) { - console.log(`Angular Config created: ${demo.Widget} - ${demo.Name}`); - - angularJsonObject.projects[getProjectNameByDemo(demo)] = createConfigForDemo(demo); - } else { - console.log(`No angular project for: ${demo.Widget} - ${demo.Name}`); - } - } - } - } - } - - const jsonString = JSON.stringify(angularJsonObject); - const filePath = 'angular.json'; - writeFileSync(filePath, jsonString); -}; - -createAngularJson(); diff --git a/apps/demos/utils/create-bundles/Angular/utils.ts b/apps/demos/utils/create-bundles/Angular/utils.ts deleted file mode 100644 index 74bd626eb113..000000000000 --- a/apps/demos/utils/create-bundles/Angular/utils.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { join } from 'path'; -import { getDestinationPathByDemo } from '../helper'; -import { Demo } from '../helper/types'; - -export const getProjectNameByDemo = (Demo: Demo) => (`${Demo.Widget.toLowerCase()}-${Demo.Name.toLowerCase()}`); -export const getIndexHtmlPath = (Demo: Demo) => (join(getDestinationPathByDemo(Demo, 'Angular'), '..', 'AngularTemplates')); diff --git a/apps/demos/utils/create-bundles/React/bundler.ts b/apps/demos/utils/create-bundles/React/bundler.ts deleted file mode 100644 index f7d61dd84f47..000000000000 --- a/apps/demos/utils/create-bundles/React/bundler.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { BuildOptions } from 'esbuild'; -import { join, resolve } from 'path'; -import ignoreMissingCss from '../plugins/ignore-missing-css'; -import { - getDestinationPathByDemo, getSourcePathByDemo, -} from '../helper'; -import { ESBundler } from '../helper/bundler'; -import { Demo } from '../helper/types'; - -export default class ReactBundler extends ESBundler { - constructor() { - super('React'); - } - - getBuildOptions = (demo: Demo): BuildOptions => { - const sourceDemoPath = getSourcePathByDemo(demo, this.framework); - const destinationDemoPath = getDestinationPathByDemo(demo, this.framework); - - const options: BuildOptions = { - bundle: true, - minify: true, - loader: { - '.js': 'jsx', - '.png': 'dataurl', - '.svg': 'dataurl', - }, - entryNames: '[dir]/bundle.[hash]', - outdir: destinationDemoPath, - alias: { - react: resolve(__dirname, '../../../node_modules/react'), - 'react-dom': resolve(__dirname, '../../../node_modules/react-dom'), - }, - entryPoints: this.#getEntryPoints(sourceDemoPath), - plugins: [ignoreMissingCss], - }; - - return options; - }; - - #getEntryPoints = (sourceDemoPath: string) => [join(sourceDemoPath, 'index.js'), join(sourceDemoPath, 'styles.css')]; -} diff --git a/apps/demos/utils/create-bundles/React/template.html b/apps/demos/utils/create-bundles/React/template.html deleted file mode 100644 index 7d9fafd53a83..000000000000 --- a/apps/demos/utils/create-bundles/React/template.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - {{demo_title}} - - - - {{additional_css}} - - - - -
- - - - - - diff --git a/apps/demos/utils/create-bundles/Vue/bundler.ts b/apps/demos/utils/create-bundles/Vue/bundler.ts deleted file mode 100644 index 568a3c3bcf22..000000000000 --- a/apps/demos/utils/create-bundles/Vue/bundler.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { BuildOptions } from 'esbuild'; - -import vuePlugin from 'esbuild-plugin-vue3'; -import { join } from 'path'; -import { - getDestinationPathByDemo, getSourcePathByDemo, -} from '../helper'; -import { ESBundler } from '../helper/bundler'; -import { Demo } from '../helper/types'; - -export default class VueBundler extends ESBundler { - constructor() { - super('Vue'); - } - - getBuildOptions = (demo: Demo): BuildOptions => { - const sourceDemoPath = getSourcePathByDemo(demo, this.framework); - const destinationDemoPath = getDestinationPathByDemo(demo, this.framework); - - return { - bundle: true, - minify: true, - loader: { - '.png': 'dataurl', - '.svg': 'dataurl', - }, - alias: { - vue: join(__dirname, '..', '..', '..', 'node_modules', 'vue'), - }, - entryNames: '[dir]/bundle.[hash]', - outdir: destinationDemoPath, - entryPoints: this.#getEntryPoints(sourceDemoPath), - plugins: [vuePlugin() as any], - define: { - __VUE_OPTIONS_API__: 'true', - __VUE_PROD_DEVTOOLS__: 'false', - }, - }; - }; - - #getEntryPoints = (sourceDemoPath: string) => [join(sourceDemoPath, 'index.js')]; -} diff --git a/apps/demos/utils/create-bundles/Vue/template.html b/apps/demos/utils/create-bundles/Vue/template.html deleted file mode 100644 index 7f800b630cb5..000000000000 --- a/apps/demos/utils/create-bundles/Vue/template.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - {{demo_title}} - - - - {{additional_css}} - - - {{custom_css}} - - -
- - - - - diff --git a/apps/demos/utils/create-bundles/helper/bundler.ts b/apps/demos/utils/create-bundles/helper/bundler.ts deleted file mode 100644 index e64b70666159..000000000000 --- a/apps/demos/utils/create-bundles/helper/bundler.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { BuildOptions, build } from 'esbuild'; -import { existsSync, mkdirSync, removeSync } from 'fs-extra'; -import { Demo, Framework } from './types'; -import { createDemoLayout, getDestinationPathByDemo, getSourcePathByDemo } from '.'; - -interface Bundler { - framework: Framework; - getBuildOptions: (demo: Demo) => BuildOptions; - buildDemo: (demo: Demo, res) => Promise; -} - -export abstract class ESBundler implements Bundler { - abstract getBuildOptions(demo: Demo): BuildOptions; - - framework: Framework; - - constructor(framework: Framework) { - this.framework = framework; - } - - buildDemo = async (demo: Demo, res): Promise => { - const sourceDemoPath = getSourcePathByDemo(demo, this.framework); - if (!existsSync(sourceDemoPath)) { - res(); - return; - } - - const destinationDemoPath = getDestinationPathByDemo(demo, this.framework); - if (existsSync(destinationDemoPath)) { - removeSync(destinationDemoPath); - } - - mkdirSync(destinationDemoPath, { recursive: true }); - - const options = this.getBuildOptions(demo); - await build(options); - - createDemoLayout(demo, this.framework); - res(); - }; -} diff --git a/apps/demos/utils/create-bundles/helper/external-resource-metadata.ts b/apps/demos/utils/create-bundles/helper/external-resource-metadata.ts deleted file mode 100644 index e443d8a648ae..000000000000 --- a/apps/demos/utils/create-bundles/helper/external-resource-metadata.ts +++ /dev/null @@ -1,400 +0,0 @@ -const fontAwesome = ''; -const polyfillMin = ''; -interface resorceLinksType { - [Widget: string]: { - [Name: string]: { - resources: Resource[]; - }; - }; -} -interface Resource { - link?: string; - title?: string; - frameworks: ('React' | 'Vue' | 'Angular')[]; -} -export const resourceLinks: resorceLinksType = { - Button: { - Icons: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue', 'Angular'], - }, - ], - }, - }, - Calendar: { - MultipleSelection: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - Overview: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - }, - Charts: { - Doughnut: { - resources: [ - { - link: polyfillMin, - frameworks: [], - }, - ], - }, - }, - CheckBox: { - Overview: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - }, - DateRangeBox: { - Overview: { - resources: [ - { - link: fontAwesome, - frameworks: ['React'], - }, - ], - }, - }, - Diagram: { - Adaptability: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - AdvancedDataBinding: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - Containers: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - CustomShapesWithIcons: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - CustomShapesWithTemplates: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - CustomShapesWithTemplatesWithEditing: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - CustomShapesWithTexts: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - ImagesInShapes: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - ItemSelection: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - NodesAndEdgesArrays: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - NodesArrayHierarchicalStructure: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - NodesArrayPlainStructure: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - OperationRestrictions: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - Overview: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - ReadOnly: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - SimpleView: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - UICustomization: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - WebAPIService: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - }, - Drawer: { - LeftOrRightPosition: { - resources: [ - { - link: fontAwesome, - frameworks: ['Angular'], - }, - ], - }, - TopOrBottomPosition: { - resources: [ - { - link: fontAwesome, - frameworks: ['Angular'], - }, - ], - }, - }, - FilterBuilder: { - Customization: { - resources: [ - { - link: fontAwesome, - frameworks: ['Angular'], - }, - ], - }, - WithDataGrid: { - resources: [ - { - link: fontAwesome, - frameworks: ['Angular'], - }, - ], - }, - WithList: { - resources: [ - { - link: fontAwesome, - frameworks: ['Angular'], - }, - ], - }, - }, - Form: { - ColumnsAdaptability: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - CustomizeItem: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - GroupedFields: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - Overview: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - UpdateItemsDynamically: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - Validation: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - }, - Lookup: { - Templates: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - }, - PivotGrid: { - ChartIntegration: { - resources: [ - { - link: polyfillMin, - frameworks: [], - }, - ], - }, - Overview: { - resources: [ - { - link: polyfillMin, - frameworks: [], - }, - ], - }, - }, - SelectBox: { - GroupedItems: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - SearchAndEditing: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - }, - Slider: { - Overview: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - }, - Sortable: { - Customization: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - }, - TagBox: { - GroupedItems: { - resources: [ - { - link: fontAwesome, - frameworks: ['React', 'Vue'], - }, - ], - }, - }, - TileView: { - ItemTemplate: { - resources: [ - { - link: polyfillMin, - frameworks: [], - }, - ], - }, - }, -}; diff --git a/apps/demos/utils/create-bundles/helper/index.ts b/apps/demos/utils/create-bundles/helper/index.ts deleted file mode 100644 index b15b7954897c..000000000000 --- a/apps/demos/utils/create-bundles/helper/index.ts +++ /dev/null @@ -1,195 +0,0 @@ -import { - existsSync, readFileSync, writeFileSync, readdirSync, copyFileSync, mkdirSync, copySync, - removeSync, cpSync, -} from 'fs-extra'; -import { - join, basename, extname, relative, -} from 'path'; -import { createHash } from 'crypto'; -import { version as DX_Version } from 'devextreme/package.json'; -import { Demo, Framework } from './types'; -import { resourceLinks } from './external-resource-metadata'; - -export const isSkipDemo = (demo: Demo) => { - const { Widget, Name } = demo; - const excluded = ['Localization', 'RowTemplate', 'CellCustomization', 'TimeZonesSupport', 'ExportToPDF']; - return excluded.includes(Widget) || excluded.includes(Name); -}; - -const demosRootDir = join(__dirname, '..', '..', '..'); -const destinationPublishDir = join(demosRootDir, 'publish-demos'); - -// eslint-disable-next-line @typescript-eslint/default-param-last -export const getDemoPath = (path: string = '', demo: Demo, framework: string) => join(path, 'Demos', demo.Widget, demo.Name, framework); - -export const getSourcePathByDemo = (demo: Demo, framework: string, relative = false) => { - if (relative) { - return getDemoPath('', demo, framework); - } - return getDemoPath(demosRootDir, demo, framework); -}; - -export const getDestinationPathByDemo = (demo: Demo, framework: string, relative = false) => { - if (relative) { - return getDemoPath('publish-demos', demo, framework); - } - return getDemoPath(destinationPublishDir, demo, framework); -}; - -const getFileHash = (fileContent: string) => { - const hash = createHash('shake256', { outputLength: 4 }).update(fileContent); - return hash.digest('hex'); -}; - -const getTemplateContent = (framework: Framework) => { - const templatePath = join(__dirname, '..', framework, 'template.html'); - if (!existsSync(templatePath)) { - throw new Error(`Not found ${framework} template\n${templatePath}`); - } - return readFileSync(templatePath, { encoding: 'utf-8' }); -}; - -const getBundlePath = (demoPath: string, prefix: string, postfix: string) => readdirSync(demoPath) - .find((item) => item.startsWith(prefix) && item.endsWith(postfix)); - -const widgetsWithSpecificCss = ['Gantt', 'Diagram']; - -const getSpecificCssPath = (WidgetName: string, demoPath: string) => { - if (!widgetsWithSpecificCss.includes(WidgetName)) { - return ''; - } - return relative( - demoPath, - join( - destinationPublishDir, - 'css', - `dx-${WidgetName.toLowerCase()}.css`, - ), - ).split('\\').join('/'); -}; - -export const copyVueCustomCss = (demo: Demo): boolean => { - const customCssPath = join(getSourcePathByDemo(demo, 'Vue'), 'styles.css'); - const destinationDir = join(getDestinationPathByDemo(demo, 'Vue'), 'styles.css'); - - if (existsSync(customCssPath)) { - copyFileSync(customCssPath, destinationDir); - return true; - } - return false; -}; - -const addExternalResources = (demo: Demo, framework: Framework, cssLinks: string) => { - let newCssLinks = cssLinks; - const externalResources = resourceLinks[demo.Widget]?.[demo.Name]; - externalResources?.resources?.forEach((resource) => { - if (resource.frameworks.includes(framework)) { - newCssLinks = newCssLinks.concat('\n', resource.link); - } - }); - return newCssLinks; -}; - -export const createDemoLayout = (demo: Demo, framework: Framework) => { - const demoPath = getDestinationPathByDemo(demo, framework); - const demoHtmlPath = framework !== 'Angular' - ? join(demoPath, 'index.html') - : join(demoPath, '..', 'AngularTemplates', 'index.html'); - const templateContent = getTemplateContent(framework); - - const metadataScripts = join(destinationPublishDir, 'scripts'); - let cssLinks = ``; - - cssLinks = addExternalResources(demo, framework, cssLinks); - - let hasCustomCss = false; - - if (framework === 'Vue') { - hasCustomCss = copyVueCustomCss(demo); - } - - const options = { - css_bundle_path: getBundlePath(demoPath, 'bundle', '.css'), - demo_title: `${framework} ${demo.Widget} - ${demo.Title} - DevExtreme ${framework} Demo`, - dx_version: DX_Version, - js_bundle_path: getBundlePath(demoPath, 'bundle', '.js'), - init_theme: getBundlePath(metadataScripts, 'init-theme', '.js'), - additional_css: cssLinks, - custom_css: hasCustomCss ? '' : '', - }; - - let result = templateContent; - Object.keys(options).forEach((key) => { - result = result.replace(`{{${key}}}`, options[key]); - }); - - writeFileSync(demoHtmlPath, result, { encoding: 'utf-8' }); -}; - -const getFilesByPath = (sourcePath: string) => { - const files = readdirSync(sourcePath); - const filePaths = []; - - files.forEach((fileName) => { - const filePath = join(sourcePath, fileName); - filePaths.push(filePath); - }); - - return filePaths; -}; - -const getFileInfo = (filePath: string) => { - const fileExt = extname(filePath); - const fileName = basename(filePath, fileExt); - - return { - ext: fileExt, - name: fileName, - }; -}; - -const copyMetadataDir = (sourceDir: string, destinatonDir: string) => { - const listFiles = getFilesByPath(sourceDir); - if (existsSync(destinatonDir)) { - removeSync(destinatonDir); - } - mkdirSync(destinatonDir, { recursive: true }); - listFiles.forEach((sourceFilePath) => { - const fileContent = readFileSync(sourceFilePath, 'utf-8'); - const hash = getFileHash(fileContent); - const fileInfo = getFileInfo(sourceFilePath); - - const hashName = `${fileInfo.name}.${hash}${fileInfo.ext}`; - const destinationFilePath = join(destinatonDir, hashName); - - console.log(`Copy metadata ${fileInfo.name}${fileInfo.ext}\n ${sourceFilePath}\n ${destinationFilePath}`); - copyFileSync(sourceFilePath, destinationFilePath); - }); -}; - -export const copyMetadata = () => { - const sourceScripts = join(__dirname, 'metadata', 'scripts'); - const destScripts = join(destinationPublishDir, 'scripts'); - copyMetadataDir(sourceScripts, destScripts); - - const nodeModulesPath = join(__dirname, '..', '..', '..', 'node_modules'); - - const imagesPath = join(__dirname, '..', '..', '..', 'images'); - const imagesDest = join(destinationPublishDir, 'images'); - cpSync(imagesPath, imagesDest, { recursive: true }); - - const destinationCss = join(destinationPublishDir, 'css'); - - const themesPath = join(nodeModulesPath, 'devextreme', 'dist', 'css'); - cpSync(themesPath, destinationCss, { recursive: true }); - - const diagramCssPath = join(nodeModulesPath, 'devexpress-diagram', 'dist', 'dx-diagram.css'); - copySync(diagramCssPath, join(destinationCss, 'dx-diagram.css')); - - const ganttCssPath = join(nodeModulesPath, 'devexpress-gantt', 'dist', 'dx-gantt.css'); - copySync(ganttCssPath, join(destinationCss, 'dx-gantt.css')); - - const sourceData = join(demosRootDir, 'data'); - const destinationData = join(destinationPublishDir, 'data'); - copySync(sourceData, destinationData); -}; diff --git a/apps/demos/utils/create-bundles/helper/metadata/scripts/init-theme.js b/apps/demos/utils/create-bundles/helper/metadata/scripts/init-theme.js deleted file mode 100644 index a26a880bb33f..000000000000 --- a/apps/demos/utils/create-bundles/helper/metadata/scripts/init-theme.js +++ /dev/null @@ -1,11 +0,0 @@ -// eslint-disable-next-line no-unused-vars -function DXDemoTheme() { - const searchParams = new URLSearchParams(window.location.search); - const theme = searchParams.get('theme') ?? 'dx.material.blue.light'; - - const themeLink = document.createElement('link'); - themeLink.rel = 'stylesheet'; - themeLink.href = `../../../../css/${theme}.css`; - - document.head.appendChild(themeLink); -} diff --git a/apps/demos/utils/create-bundles/helper/types.ts b/apps/demos/utils/create-bundles/helper/types.ts deleted file mode 100644 index 439464478c8e..000000000000 --- a/apps/demos/utils/create-bundles/helper/types.ts +++ /dev/null @@ -1,26 +0,0 @@ -export type Framework = 'Angular' | 'React' | 'Vue'; - -export type Args = { - framework: Framework, - 'copy-metadata': boolean, -}; - -export interface Demo { - Title: string; - Name: string; - DocUrl: string; - Widget: string; - DemoType: string; -} - -export interface Group { - Name: string; - Equivalents: string; - Demos: Demo[]; -} - -export interface Item { - Name: string; - Equivalents: string; - Groups: Group[]; -} diff --git a/apps/demos/utils/create-bundles/index.ts b/apps/demos/utils/create-bundles/index.ts deleted file mode 100644 index 9502f0fe54cd..000000000000 --- a/apps/demos/utils/create-bundles/index.ts +++ /dev/null @@ -1,96 +0,0 @@ -import yargs from 'yargs'; - -import { - Framework, Args, Item, Demo, -} from './helper/types'; -import { copyMetadata, isSkipDemo } from './helper'; - -import { ESBundler } from './helper/bundler'; -import ReactBundler from './React/bundler'; -import VueBundler from './Vue/bundler'; -import AngularBundler from './Angular/bundler'; - -import * as menuMeta from '../../menuMeta.json'; - -const argv = yargs.options({ - framework: { type: 'string' }, - 'copy-metadata': { type: 'boolean' }, -}).argv as Args; - -const getBundler = (framework: Framework): ESBundler => { - if (framework === 'Angular') { - return new AngularBundler(); - } - if (framework === 'React') { - return new ReactBundler(); - } - - if (framework === 'Vue') { - return new VueBundler(); - } - - return undefined; -}; - -const menu: Item[] = (menuMeta as any).default; -const allDemos: Demo[] = []; - -for (const meta of menu) { - for (const group of meta.Groups) { - const demos = group.Demos || []; - for (const demo of demos) { - if (!isSkipDemo(demo)) { - allDemos.push(demo); - } - } - } -} - -async function processDemosInBatches(bundler: ESBundler, demoList: Demo[], batchSize: number) { - const batches = []; - for (let i = 0; i < demoList.length; i += batchSize) { - const batch = demoList.slice(i, i + batchSize); - - batches.push(await processBatch(bundler, batch)); - } - await Promise.all(batches); -} - -async function processBatch(bundler: ESBundler, demos: Demo[]) { - const promises = demos.map((demo) => processDemo(bundler, demo)); - await Promise.all(promises); -} - -// eslint-disable-next-line require-await -async function processDemo(bundler: ESBundler, demo: Demo) { - return new Promise((res) => { - bundler.buildDemo(demo, res); - }).then(() => { console.log(`${bundler.framework} Demo: ${demo.Widget} - ${demo.Name}`); }); -} - -const currentBundler = getBundler(argv.framework); - -if (argv['copy-metadata']) { - copyMetadata(); -} -if (currentBundler) { - const CONSTEL = process.env.CONSTEL || '1/1'; - const [current, total] = CONSTEL.split('/').map(Number); - const start = (current - 1) * allDemos.length / total; - const end = start + allDemos.length / total; - const currentDemos = allDemos.slice(start, end); - - let batchSize = Math.ceil(allDemos.length / total); - if (currentBundler.framework === 'Angular') { - batchSize = 1; - processDemosInBatches(currentBundler, currentDemos, batchSize) - .then(() => { - console.log('All batches processed successfully.'); - }) - .catch((error) => { - console.error(`Error processing batches: ${error}`); - }); - } else { - processDemosInBatches(currentBundler, allDemos, 5); - } -} diff --git a/apps/demos/utils/create-bundles/plugins/ignore-missing-css.ts b/apps/demos/utils/create-bundles/plugins/ignore-missing-css.ts deleted file mode 100644 index 62ed489cdcdd..000000000000 --- a/apps/demos/utils/create-bundles/plugins/ignore-missing-css.ts +++ /dev/null @@ -1,22 +0,0 @@ -import * as fs from 'fs'; -import * as path from 'path'; -import { Plugin } from 'esbuild'; - -const ignoreMissingCssPlugin: Plugin = { - name: 'ignore-missing-css', - setup(build) { - build.onResolve({ filter: /\.css$/ }, (args) => { - const fullPath = path.resolve(args.resolveDir, args.path); - if (!fs.existsSync(fullPath)) { - return { path: args.path, namespace: 'ignore-missing-css' }; - } - }); - - build.onLoad({ filter: /\.css$/, namespace: 'ignore-missing-css' }, () => ({ - contents: '', - loader: 'css', - })); - }, -}; - -export default ignoreMissingCssPlugin; diff --git a/apps/demos/utils/visual-tests/github-ignored-list.js b/apps/demos/utils/visual-tests/github-ignored-list.js deleted file mode 100644 index ca2fe7a020c9..000000000000 --- a/apps/demos/utils/visual-tests/github-ignored-list.js +++ /dev/null @@ -1,37 +0,0 @@ -// ignored because they have import of localization package and fail during bundling -// 2 for Grid (RowTemplate, CellCustomization) -const ignoredLocalization = ['Localization', 'RowTemplate', 'CellCustomization', 'TimeZonesSupport', 'ExportToPDF']; -// ignored becuse react and vue fail to max callstack exceeded - -const ignoredCallstack = [ - 'AdvancedMasterDetailView', - 'BatchUpdateRequest', - 'CollaborativeEditing', - 'CustomEditors', - 'CustomNewRecordPosition', - 'DataValidation', - 'EditStateManagement', // fail only in vue - 'RemoteGrouping', - 'RemoteReordering', - 'RemoteVirtualScrolling', - 'WebAPIService', -]; - -// ignored, because test uses DevExtreme which is not defined -// (probably something with path on CI, need to research) -const ignoredDevextreme = ['SignalRService']; - -// ignored vue some problems with template + 1 miss style -const ignoredVue = [ - 'FilteringAPI', - 'MultiRowHeadersBands', - 'RightToLeftSupport', - 'EditStateManagement', -]; - -export const gitHubIgnored = [ - ...ignoredLocalization, - ...ignoredCallstack, - ...ignoredDevextreme, - ...ignoredVue, -]; diff --git a/apps/demos/utils/visual-tests/matrix-test-helper.ts b/apps/demos/utils/visual-tests/matrix-test-helper.ts index ef8ee37dba52..e3a2d50ec57b 100644 --- a/apps/demos/utils/visual-tests/matrix-test-helper.ts +++ b/apps/demos/utils/visual-tests/matrix-test-helper.ts @@ -2,7 +2,6 @@ import { readFileSync, existsSync, writeFileSync } from 'fs'; import { join } from 'path'; import { ClientFunction } from 'testcafe'; import { THEME } from './helpers/theme-utils'; -import { gitHubIgnored } from './github-ignored-list'; import { getTestGlobalsScriptPath } from './test-globals-bundle'; import { widgetsGalleryServiceMock } from '../../testing/apiMocks/widgetsGalleryServiceMock'; import { xmlaServiceMock } from '../../testing/apiMocks/xmlaServiceMock'; @@ -286,8 +285,6 @@ export function runManualTestCore( framework, callback, ) { - const isGitHubDemos = process.env.ISGITHUBDEMOS; - settings.manualTestIndex += 1; const index = settings.manualTestIndex; @@ -298,19 +295,8 @@ export function runManualTestCore( const clientScriptSource = globalReadFrom(__dirname, `../../Demos/${widget}/${demo}/client-script.js`, (x) => [{ content: x }]) || []; const testCodeSource = globalReadFrom(__dirname, `../../Demos/${widget}/${demo}/test-code.js`, (x) => x) || ''; - let testURL = ''; - - if (isGitHubDemos) { - if (widget !== 'DataGrid' || gitHubIgnored.includes(demo)) { - return; - } - - const theme = process.env.THEME.replace('generic.', ''); - testURL = `http://127.0.0.1:8080/${widget}/${demo}/${FRAMEWORKS[framework]}/?theme=dx.${theme}`; - } else { - changeTheme(__dirname, `../../Demos/${widget}/${demo}/${FRAMEWORKS[framework]}/index.html`, process.env.THEME); - testURL = `http://127.0.0.1:8080/apps/demos/Demos/${widget}/${demo}/${FRAMEWORKS[framework]}/`; - } + changeTheme(__dirname, `../../Demos/${widget}/${demo}/${FRAMEWORKS[framework]}/index.html`, process.env.THEME); + const testURL = `http://127.0.0.1:8080/apps/demos/Demos/${widget}/${demo}/${FRAMEWORKS[framework]}/`; const getTestStyles = (demoName) => { switch (demoName) { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6db9c9c18a1e..b090c38ad2b6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -362,9 +362,6 @@ importers: '@angular/animations': specifier: ^22.2.1 version: 22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)(zone.js@0.16.2)) - '@angular/cli': - specifier: ^22.2.1 - version: 22.2.3(@types/node@20.19.37)(chokidar@5.0.0) '@angular/common': specifier: ^22.2.1 version: 22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) @@ -569,9 +566,6 @@ importers: whatwg-fetch: specifier: 2.0.4 version: 2.0.4 - yargs: - specifier: 17.7.2 - version: 17.7.2 zod: specifier: 'catalog:' version: 4.6.7 @@ -627,9 +621,6 @@ importers: '@types/react-dom': specifier: 17.0.26 version: 17.0.26(@types/react@17.0.91) - '@types/yargs': - specifier: 17.0.35 - version: 17.0.35 '@typescript-eslint/eslint-plugin': specifier: 'catalog:' version: 8.52.0(@typescript-eslint/parser@8.52.0(eslint@9.39.4(jiti@2.6.1)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@9.39.4(jiti@2.6.1)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) @@ -705,9 +696,6 @@ importers: globals: specifier: 'catalog:' version: 15.14.0 - http-server: - specifier: 14.1.1 - version: 14.1.1(supports-color@7.2.0) jest: specifier: 30.4.2 version: 30.4.2(@types/node@20.19.37)(babel-plugin-macros@3.1.0)(node-notifier@9.0.1)(ts-node@10.9.2(@swc/core@1.15.30(@swc/helpers@0.5.21))(@types/node@20.19.37)(typescript@6.0.3)) @@ -2456,10 +2444,6 @@ packages: resolution: {integrity: sha512-mLOme2vfbLrHFmMyM6ybPuGCnCvPiemXWdHnptY2Q7Hzum72DabfgtTNsrMcI2F5zrQV2DDQunNjC5cXqtq4/w==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - '@angular-devkit/schematics@22.2.3': - resolution: {integrity: sha512-+XfBViIGqiFQK8KJXA6PgANX9tLuMO/x8GFjlzEmA4LIe9ikAtpGZw+Ezo547BIJQoJBIKCJYR0knE4BmbFeSQ==} - engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - '@angular/animations@22.2.3': resolution: {integrity: sha512-sslKnTrKwHwtTvT/pWj7UoYq0cfuX3PijZM7v0JtCajQkK1Nj0Ljob0mebxXBXUVBrOixfCnfBS0EG4JNEznFA==} engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0} @@ -2570,11 +2554,6 @@ packages: engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} hasBin: true - '@angular/cli@22.2.3': - resolution: {integrity: sha512-ObTX0DxJ0/PMl4pkUKI+uWPr7UC7Je94KpHP8l1lr3exhundapgr7VvNsozprJb1hMlOMDab6+quTReSYvF85Q==} - engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - hasBin: true - '@angular/common@21.2.25': resolution: {integrity: sha512-1oxSrFqMyJF6xYXBDrciZSe3A67E5feYQXhmxH3d0hLe0wWM/pFZTvCvSnA65wHj8NTonuI7/HMBPwRKddHoGw==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} @@ -5074,15 +5053,6 @@ packages: '@types/node': optional: true - '@inquirer/checkbox@5.2.6': - resolution: {integrity: sha512-XkOardciF3tow2NUlY6/Qjk1QqYa+6WpmVLTpxXl97Uv4erczDEZ+xg1j6LqBf0ekcRSUiICQA4nQXHHkVKQ9w==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/confirm@5.1.21': resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==} engines: {node: '>=18'} @@ -5101,15 +5071,6 @@ packages: '@types/node': optional: true - '@inquirer/confirm@6.3.3': - resolution: {integrity: sha512-ImOBgpl/sJTFp8naeSkNu4S0Sf8F8pxv3/CUx+LoBAdQvCVqFz6rSB2A/oZYsJge3+yphbEDxEkfaRNYq1OU0A==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/core@10.3.2': resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==} engines: {node: '>=18'} @@ -5137,15 +5098,6 @@ packages: '@types/node': optional: true - '@inquirer/editor@5.3.4': - resolution: {integrity: sha512-imzxQDfw26NpcJAubMj/dE5RjU9Mp80IcT+FzsD6YoxXmL8L1QYnAFdCNv7ccGWh//73+0YP+1kfhwnExdl2VQ==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/expand@4.0.23': resolution: {integrity: sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==} engines: {node: '>=18'} @@ -5155,15 +5107,6 @@ packages: '@types/node': optional: true - '@inquirer/expand@5.1.6': - resolution: {integrity: sha512-JfiLKi7qGuHmcQO/DqR10UFEp054Y1FXZaszP5ZEfHhgHeuFoT5nNFQIXFhed/5/p07SbsV2tIJFwG/dg5+NmQ==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/external-editor@1.0.3': resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} engines: {node: '>=18'} @@ -5173,15 +5116,6 @@ packages: '@types/node': optional: true - '@inquirer/external-editor@3.0.6': - resolution: {integrity: sha512-rWmw6WG8JZ7LMn/srXEylYGhL6EXXJeROE7/4x4GREh6NgzqJBDbIgpNGsYoLPfobeb4VZtEYzPGnT5EFNYhiQ==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/figures@1.0.15': resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} engines: {node: '>=18'} @@ -5199,15 +5133,6 @@ packages: '@types/node': optional: true - '@inquirer/input@5.1.7': - resolution: {integrity: sha512-Icrs9tuMBCxGI+lFYNO71VFOnqGO8IIrLIGqnTGh07X8jZ2la9QLAYxXcikHZQjjVhIZUtU2xyH89DVN/pPhVg==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/number@3.0.23': resolution: {integrity: sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==} engines: {node: '>=18'} @@ -5217,15 +5142,6 @@ packages: '@types/node': optional: true - '@inquirer/number@4.2.4': - resolution: {integrity: sha512-C6g80U4U2+w2Vxa1CB0MN3a2WnQIfzLSUG0lduO3Au9GsirJsKATZkOwZPK+vZ1BlAlz+/Z5ParfQCS9E0svmg==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/password@4.0.23': resolution: {integrity: sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==} engines: {node: '>=18'} @@ -5235,15 +5151,6 @@ packages: '@types/node': optional: true - '@inquirer/password@5.2.3': - resolution: {integrity: sha512-1Uo2qfI2K3wXbfunMpvwAzoZPIUf5iEETwDGqRVbswoorXGqYQJ/bfIJFeLj+pxjq+e2UFPNOmx+fsIl4Urigw==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/prompts@7.10.1': resolution: {integrity: sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==} engines: {node: '>=18'} @@ -5253,15 +5160,6 @@ packages: '@types/node': optional: true - '@inquirer/prompts@8.7.2': - resolution: {integrity: sha512-QoRB4wFIjgH5iOhSjoIKMkTvSHDuV+O3OITlIqAYO0oK5x364GJILXiMBvlPiE+klg7Xx9tq5XVqQHcGUDYYPA==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/rawlist@4.1.11': resolution: {integrity: sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==} engines: {node: '>=18'} @@ -5271,15 +5169,6 @@ packages: '@types/node': optional: true - '@inquirer/rawlist@5.3.6': - resolution: {integrity: sha512-2exExhQ5xTBqfN/rRlZkvM1Gm3b0eiLcWe2NqxWxe7qYmnU4M3j/n9TwzfPUb+Q7dAAz9TmBtDWWdF3jbp4ZLA==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/search@3.2.2': resolution: {integrity: sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==} engines: {node: '>=18'} @@ -5289,15 +5178,6 @@ packages: '@types/node': optional: true - '@inquirer/search@4.3.4': - resolution: {integrity: sha512-xsk0UeFP04jsbEeFMzghjUaH2aHXyt+WykSajQzq/8qyBNHsgGYHea/sFwv5T08kW7Sp+KDX8aF124zPUIs1Ww==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/select@4.4.2': resolution: {integrity: sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==} engines: {node: '>=18'} @@ -5307,15 +5187,6 @@ packages: '@types/node': optional: true - '@inquirer/select@5.2.6': - resolution: {integrity: sha512-jFu7CFghlr0vpi/326a4wz6BGkJH9X3H/iIu+ahyV2Ja52ktqQE3fC9BYP47JKeSPQYGUv5xquE2Vp9PbepZ3g==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/type@3.0.10': resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==} engines: {node: '>=18'} @@ -5325,15 +5196,6 @@ packages: '@types/node': optional: true - '@inquirer/type@4.0.7': - resolution: {integrity: sha512-t28inv14nMQ1PhKpsJPY+kEs/c00qzeCOS2gTNRyTjG5d6qsVA2fItxW4hkvGZ5lvanGLdtCzVIx5dwdRpN1+g==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/type@4.1.1': resolution: {integrity: sha512-yJoHYrMnxIsJZCY+0Vb66Dy3he3kL3e2wOBKhoSwWWAzZAY82emlxwgprCtp6yRixvNRNq9ztfRWQYPNr3Go7A==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} @@ -5638,13 +5500,6 @@ packages: '@inquirer/prompts': '>= 3 < 8' listr2: 9.0.5 - '@listr2/prompt-adapter-inquirer@4.2.7': - resolution: {integrity: sha512-k180vxSv2KqmnDxoato6pCqEJsov4U5C0EVmldZkAdNeVBxY48A/LM6TCNPGIzDK/iZSfsZP0Mw+gbWc5hXLyA==} - engines: {node: '>=22.13.0'} - peerDependencies: - '@inquirer/prompts': '>= 3 < 9' - listr2: 11.1.0 - '@lmdb/lmdb-darwin-arm64@2.8.5': resolution: {integrity: sha512-KPDeVScZgA1oq0CiPBcOa3kHIqU+pTOwRFDIhxvmf8CTNvqdZQYp5cCKW0bUk69VygB2PuTiINFWbY78aR2pQw==} cpu: [arm64] @@ -5755,10 +5610,6 @@ packages: resolution: {integrity: sha512-iA7+tyVqfrATAIsIRWQG+a7ZLLD0VaOCKV2Wd/v4mqIU3J9c4jx9p7S0nw1XH3gJCKNBOOwACOPYYSUu9pgT+w==} engines: {node: '>=12.0.0'} - '@modelcontextprotocol/core@2.3.1': - resolution: {integrity: sha512-laVmIhPGpWi7rG9q+0UigblRN0Hws/Yjlb6qLFtVqryXVLkc4h+yN8z731POD2LnAGQlFe7/tXhUm7Bi0YB91g==} - engines: {node: '>=20'} - '@modelcontextprotocol/sdk@1.32.1': resolution: {integrity: sha512-2DdE+SJDtzLEEWzY1ZjY7Q+VcPhcV1KisD3zI4u0XZyktsjHum1mwbMI+JaulUBi2OZk+KJAi2uPXzxichPkdw==} engines: {node: '>=18'} @@ -5769,10 +5620,6 @@ packages: '@cfworker/json-schema': optional: true - '@modelcontextprotocol/server@2.3.1': - resolution: {integrity: sha512-e59MfWuSssj6DoQ96JCTqdW1AXT5/XtnTl0WWd6MU1Ka434fFUGGosCLJbGNySDhHGvxQWoRWK137FXYFkYNWw==} - engines: {node: '>=20'} - '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': resolution: {integrity: sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==} cpu: [arm64] @@ -7614,10 +7461,6 @@ packages: resolution: {integrity: sha512-eGBr4Yhg/A8Lt8QGtWxmXAyKboX8QBwbDG1hSyApQfHAh9iNFbV7mgWSmk0qPWvRJM38s0t3EEkEg79QZ98dWQ==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - '@schematics/angular@22.2.3': - resolution: {integrity: sha512-DY8wv/LtNf3YD/EEoFdER4ihMyw5yywuOQEKasm4d2uBJ5peGIWV3LXJXXqD7b4WVC8xS1eUAjingyWfI9reHw==} - engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - '@sigstore/bundle@4.0.0': resolution: {integrity: sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A==} engines: {node: ^20.17.0 || >=22.9.0} @@ -11964,10 +11807,6 @@ packages: hookified@2.1.1: resolution: {integrity: sha512-AHb76R16GB5EsPBE2J7Ko5kiEyXwviB9P5SMrAKcuAu4vJPZttViAbj9+tZeaQE5zjDme+1vcHP78Yj/WoAveA==} - hosted-git-info@10.1.1: - resolution: {integrity: sha512-DeOnSPAvOndYKfw075gt8yZzQ7S2hNztw34zBTfhIzLhmBTswIBg5/y+pqu/VD5cYWm5goAFTusDmUEmKZ0PEQ==} - engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0} - hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -14042,10 +13881,6 @@ packages: resolution: {integrity: sha512-IciCE3SY3uE84Ld8WZU23gAPPV9rIYod4F+rc+vJ7h7cwAJt9Vk6TVsK60ry7Uj3SRS3bqRRIGuTp9YVlk6WNA==} engines: {node: ^20.17.0 || >=22.9.0} - npm-package-arg@14.0.0: - resolution: {integrity: sha512-69XQh3k+dtGa1p+7RaR57IuG3rCko96xr/nUfN4yDYBXbTYICiWcOpsFKLN2GtGE9cyIljE+f1exnaYt9MvM+Q==} - engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0} - npm-packlist@10.0.4: resolution: {integrity: sha512-uMW73iajD8hiH4ZBxEV3HC+eTnppIqwakjOYuvgddnalIw2lJguKviK1pcUJDlIWm1wSJkchpDZDSVVsZEYRng==} engines: {node: ^20.17.0 || >=22.9.0} @@ -14773,10 +14608,6 @@ packages: resolution: {integrity: sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==} engines: {node: ^20.17.0 || >=22.9.0} - proc-log@7.0.0: - resolution: {integrity: sha512-FYgfaA69XZ93zaXLoMNQ+ViDXGGBgR8aLh03txzcFhV+9xOXx7+8DLCULrKKpR9+GsH9ZfHm82aSUPpozX0Ztg==} - engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0} - process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -16967,10 +16798,6 @@ packages: resolution: {integrity: sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==} engines: {node: ^20.17.0 || >=22.9.0} - validate-npm-package-name@8.0.0: - resolution: {integrity: sha512-SCv6OOV6Xj2/3cXy3dGmADluJTNcL3o7hZAglNPTe+WYuEuvxgJzxPrSDLZhF+CwyQOubqgecjMmTJGMVLWjYQ==} - engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0} - varint@6.0.0: resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} @@ -17660,9 +17487,6 @@ packages: peerDependencies: zod: ^4.6.6 - zod@4.6.6: - resolution: {integrity: sha512-4UmzQUF5fxvfcYHlbjBmejU+w+hbDnWFx4aS8kBx7nPBHcO2SqPbpAG8snbdg+Xse4pRefR98hgjFgIMCI/UhA==} - zod@4.6.7: resolution: {integrity: sha512-g8W2D2kU6a8untc053fX1uVBKzM7yqAxW/3zwk83+6RyF2+SKOuV+c0wBDhUwzV1PaGapmZH+rmcUzPf+3CGwg==} @@ -18137,16 +17961,6 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular-devkit/schematics@22.2.3(chokidar@5.0.0)': - dependencies: - '@angular-devkit/core': 22.2.3(chokidar@5.0.0) - jsonc-parser: 3.3.1 - magic-string: 1.4.1 - ora: 9.4.1 - rxjs: 7.8.2 - transitivePeerDependencies: - - chokidar - '@angular/animations@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)(zone.js@0.16.2))': dependencies: '@angular/core': 22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)(zone.js@0.16.2) @@ -18399,26 +18213,6 @@ snapshots: - chokidar - supports-color - '@angular/cli@22.2.3(@types/node@20.19.37)(chokidar@5.0.0)': - dependencies: - '@angular-devkit/architect': 0.2202.3(chokidar@5.0.0) - '@angular-devkit/core': 22.2.3(chokidar@5.0.0) - '@angular-devkit/schematics': 22.2.3(chokidar@5.0.0) - '@inquirer/prompts': 8.7.2(@types/node@20.19.37) - '@listr2/prompt-adapter-inquirer': 4.2.7(@inquirer/prompts@8.7.2(@types/node@20.19.37))(@types/node@20.19.37)(listr2@11.1.0) - '@modelcontextprotocol/server': 2.3.1 - '@schematics/angular': 22.2.3(chokidar@5.0.0) - jsonc-parser: 3.3.1 - listr2: 11.1.0 - npm-package-arg: 14.0.0 - parse5-html-rewriting-stream: 8.0.1 - semver: 7.8.5 - yargs: 18.1.0 - zod: 4.6.6 - transitivePeerDependencies: - - '@types/node' - - chokidar - '@angular/common@21.2.25(@angular/core@21.2.25(@angular/compiler@21.2.25)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)': dependencies: '@angular/core': 21.2.25(@angular/compiler@21.2.25)(rxjs@7.8.2)(zone.js@0.15.1) @@ -21398,15 +21192,6 @@ snapshots: optionalDependencies: '@types/node': 26.1.1 - '@inquirer/checkbox@5.2.6(@types/node@20.19.37)': - dependencies: - '@inquirer/ansi': 2.0.9 - '@inquirer/core': 12.0.4(@types/node@20.19.37) - '@inquirer/figures': 2.0.9 - '@inquirer/type': 4.2.0(@types/node@20.19.37) - optionalDependencies: - '@types/node': 20.19.37 - '@inquirer/confirm@5.1.21(@types/node@20.11.17)': dependencies: '@inquirer/core': 10.3.2(@types/node@20.11.17) @@ -21435,13 +21220,6 @@ snapshots: optionalDependencies: '@types/node': 20.19.37 - '@inquirer/confirm@6.3.3(@types/node@20.19.37)': - dependencies: - '@inquirer/core': 12.0.4(@types/node@20.19.37) - '@inquirer/type': 4.2.0(@types/node@20.19.37) - optionalDependencies: - '@types/node': 20.19.37 - '@inquirer/core@10.3.2(@types/node@20.11.17)': dependencies: '@inquirer/ansi': 1.0.2 @@ -21517,14 +21295,6 @@ snapshots: optionalDependencies: '@types/node': 26.1.1 - '@inquirer/editor@5.3.4(@types/node@20.19.37)': - dependencies: - '@inquirer/core': 12.0.4(@types/node@20.19.37) - '@inquirer/external-editor': 3.0.6(@types/node@20.19.37) - '@inquirer/type': 4.2.0(@types/node@20.19.37) - optionalDependencies: - '@types/node': 20.19.37 - '@inquirer/expand@4.0.23(@types/node@20.11.17)': dependencies: '@inquirer/core': 10.3.2(@types/node@20.11.17) @@ -21549,13 +21319,6 @@ snapshots: optionalDependencies: '@types/node': 26.1.1 - '@inquirer/expand@5.1.6(@types/node@20.19.37)': - dependencies: - '@inquirer/core': 12.0.4(@types/node@20.19.37) - '@inquirer/type': 4.2.0(@types/node@20.19.37) - optionalDependencies: - '@types/node': 20.19.37 - '@inquirer/external-editor@1.0.3(@types/node@20.11.17)': dependencies: chardet: 2.1.1 @@ -21577,13 +21340,6 @@ snapshots: optionalDependencies: '@types/node': 26.1.1 - '@inquirer/external-editor@3.0.6(@types/node@20.19.37)': - dependencies: - chardet: 2.1.1 - iconv-lite: 0.7.2 - optionalDependencies: - '@types/node': 20.19.37 - '@inquirer/figures@1.0.15': {} '@inquirer/figures@2.0.9': {} @@ -21609,13 +21365,6 @@ snapshots: optionalDependencies: '@types/node': 26.1.1 - '@inquirer/input@5.1.7(@types/node@20.19.37)': - dependencies: - '@inquirer/core': 12.0.4(@types/node@20.19.37) - '@inquirer/type': 4.2.0(@types/node@20.19.37) - optionalDependencies: - '@types/node': 20.19.37 - '@inquirer/number@3.0.23(@types/node@20.11.17)': dependencies: '@inquirer/core': 10.3.2(@types/node@20.11.17) @@ -21637,13 +21386,6 @@ snapshots: optionalDependencies: '@types/node': 26.1.1 - '@inquirer/number@4.2.4(@types/node@20.19.37)': - dependencies: - '@inquirer/core': 12.0.4(@types/node@20.19.37) - '@inquirer/type': 4.2.0(@types/node@20.19.37) - optionalDependencies: - '@types/node': 20.19.37 - '@inquirer/password@4.0.23(@types/node@20.11.17)': dependencies: '@inquirer/ansi': 1.0.2 @@ -21668,14 +21410,6 @@ snapshots: optionalDependencies: '@types/node': 26.1.1 - '@inquirer/password@5.2.3(@types/node@20.19.37)': - dependencies: - '@inquirer/ansi': 2.0.9 - '@inquirer/core': 12.0.4(@types/node@20.19.37) - '@inquirer/type': 4.2.0(@types/node@20.19.37) - optionalDependencies: - '@types/node': 20.19.37 - '@inquirer/prompts@7.10.1(@types/node@20.11.17)': dependencies: '@inquirer/checkbox': 4.3.2(@types/node@20.11.17) @@ -21721,21 +21455,6 @@ snapshots: optionalDependencies: '@types/node': 26.1.1 - '@inquirer/prompts@8.7.2(@types/node@20.19.37)': - dependencies: - '@inquirer/checkbox': 5.2.6(@types/node@20.19.37) - '@inquirer/confirm': 6.3.3(@types/node@20.19.37) - '@inquirer/editor': 5.3.4(@types/node@20.19.37) - '@inquirer/expand': 5.1.6(@types/node@20.19.37) - '@inquirer/input': 5.1.7(@types/node@20.19.37) - '@inquirer/number': 4.2.4(@types/node@20.19.37) - '@inquirer/password': 5.2.3(@types/node@20.19.37) - '@inquirer/rawlist': 5.3.6(@types/node@20.19.37) - '@inquirer/search': 4.3.4(@types/node@20.19.37) - '@inquirer/select': 5.2.6(@types/node@20.19.37) - optionalDependencies: - '@types/node': 20.19.37 - '@inquirer/rawlist@4.1.11(@types/node@20.11.17)': dependencies: '@inquirer/core': 10.3.2(@types/node@20.11.17) @@ -21760,13 +21479,6 @@ snapshots: optionalDependencies: '@types/node': 26.1.1 - '@inquirer/rawlist@5.3.6(@types/node@20.19.37)': - dependencies: - '@inquirer/core': 12.0.4(@types/node@20.19.37) - '@inquirer/type': 4.2.0(@types/node@20.19.37) - optionalDependencies: - '@types/node': 20.19.37 - '@inquirer/search@3.2.2(@types/node@20.11.17)': dependencies: '@inquirer/core': 10.3.2(@types/node@20.11.17) @@ -21794,14 +21506,6 @@ snapshots: optionalDependencies: '@types/node': 26.1.1 - '@inquirer/search@4.3.4(@types/node@20.19.37)': - dependencies: - '@inquirer/core': 12.0.4(@types/node@20.19.37) - '@inquirer/figures': 2.0.9 - '@inquirer/type': 4.2.0(@types/node@20.19.37) - optionalDependencies: - '@types/node': 20.19.37 - '@inquirer/select@4.4.2(@types/node@20.11.17)': dependencies: '@inquirer/ansi': 1.0.2 @@ -21832,15 +21536,6 @@ snapshots: optionalDependencies: '@types/node': 26.1.1 - '@inquirer/select@5.2.6(@types/node@20.19.37)': - dependencies: - '@inquirer/ansi': 2.0.9 - '@inquirer/core': 12.0.4(@types/node@20.19.37) - '@inquirer/figures': 2.0.9 - '@inquirer/type': 4.2.0(@types/node@20.19.37) - optionalDependencies: - '@types/node': 20.19.37 - '@inquirer/type@3.0.10(@types/node@20.11.17)': optionalDependencies: '@types/node': 20.11.17 @@ -21853,10 +21548,6 @@ snapshots: optionalDependencies: '@types/node': 26.1.1 - '@inquirer/type@4.0.7(@types/node@20.19.37)': - optionalDependencies: - '@types/node': 20.19.37 - '@inquirer/type@4.1.1(@types/node@20.19.37)': optionalDependencies: '@types/node': 20.19.37 @@ -22402,14 +22093,6 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@listr2/prompt-adapter-inquirer@4.2.7(@inquirer/prompts@8.7.2(@types/node@20.19.37))(@types/node@20.19.37)(listr2@11.1.0)': - dependencies: - '@inquirer/prompts': 8.7.2(@types/node@20.19.37) - '@inquirer/type': 4.0.7(@types/node@20.19.37) - listr2: 11.1.0 - transitivePeerDependencies: - - '@types/node' - '@lmdb/lmdb-darwin-arm64@2.8.5': optional: true @@ -22482,10 +22165,6 @@ snapshots: '@lezer/lr': 1.4.10 json5: 2.2.3 - '@modelcontextprotocol/core@2.3.1': - dependencies: - zod: 4.6.7 - '@modelcontextprotocol/sdk@1.32.1(supports-color@7.2.0)(zod@4.6.7)': dependencies: '@hono/node-server': 2.0.12(hono@4.13.13) @@ -22508,11 +22187,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@modelcontextprotocol/server@2.3.1': - dependencies: - '@modelcontextprotocol/core': 2.3.1 - zod: 4.6.7 - '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': optional: true @@ -24251,16 +23925,6 @@ snapshots: transitivePeerDependencies: - chokidar - '@schematics/angular@22.2.3(chokidar@5.0.0)': - dependencies: - '@angular-devkit/core': 22.2.3(chokidar@5.0.0) - '@angular-devkit/schematics': 22.2.3(chokidar@5.0.0) - jsonc-parser: 3.3.1 - oxc-parser: 0.150.0 - typescript: 6.0.3 - transitivePeerDependencies: - - chokidar - '@sigstore/bundle@4.0.0': dependencies: '@sigstore/protobuf-specs': 0.5.1 @@ -30217,10 +29881,6 @@ snapshots: hookified@2.1.1: {} - hosted-git-info@10.1.1: - dependencies: - lru-cache: 11.3.5 - hosted-git-info@2.8.9: {} hosted-git-info@9.0.2: @@ -33078,13 +32738,6 @@ snapshots: semver: 7.8.5 validate-npm-package-name: 7.0.2 - npm-package-arg@14.0.0: - dependencies: - hosted-git-info: 10.1.1 - proc-log: 7.0.0 - semver: 7.8.5 - validate-npm-package-name: 8.0.0 - npm-packlist@10.0.4: dependencies: ignore-walk: 8.0.0 @@ -34081,8 +33734,6 @@ snapshots: proc-log@6.1.0: {} - proc-log@7.0.0: {} - process-nextick-args@2.0.1: {} process@0.11.10: {} @@ -37069,8 +36720,6 @@ snapshots: validate-npm-package-name@7.0.2: {} - validate-npm-package-name@8.0.0: {} - varint@6.0.0: {} vary@1.1.2: {} @@ -38112,8 +37761,6 @@ snapshots: dependencies: zod: 4.6.7 - zod@4.6.6: {} - zod@4.6.7: {} zone.js@0.15.1: {}