From 744523e8565f235eb39b01bed180f7fe49d30c92 Mon Sep 17 00:00:00 2001 From: Arman Jivanyan Date: Thu, 30 Apr 2026 12:18:53 +0400 Subject: [PATCH 1/2] remove gulp from apps demos --- .github/copilot-instructions.md | 4 +-- apps/demos/.gitignore | 1 - apps/demos/gulpfile.js/index.js | 3 -- apps/demos/gulpfile.js/js.js | 40 ------------------------ apps/demos/gulpfile.js/shared.js | 8 ----- apps/demos/package.json | 9 +++--- apps/demos/project.json | 25 ++++++++++++--- apps/demos/scripts/build-bundles.js | 24 ++++++++++++++ apps/demos/scripts/prepare-js-configs.js | 18 +++++++++++ apps/demos/scripts/prepare-shared.js | 11 +++++++ apps/demos/scripts/update-config.js | 13 ++++++++ 11 files changed, 92 insertions(+), 64 deletions(-) delete mode 100644 apps/demos/gulpfile.js/index.js delete mode 100644 apps/demos/gulpfile.js/js.js delete mode 100644 apps/demos/gulpfile.js/shared.js create mode 100644 apps/demos/scripts/build-bundles.js create mode 100644 apps/demos/scripts/prepare-js-configs.js create mode 100644 apps/demos/scripts/prepare-shared.js create mode 100644 apps/demos/scripts/update-config.js diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 49ff37314634..59968f1763c9 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -10,7 +10,7 @@ - **Languages:** TypeScript, JavaScript, SCSS - **Package Manager:** pnpm 9.15.4 (specified in package.json) - **Node Version:** 20.x (required by CI) -- **Build System:** Gulp + Nx + custom build scripts + custom Nx executors (via `devextreme-nx-infra-plugin`) +- **Build System:** Nx + custom build scripts + custom Nx executors (via `devextreme-nx-infra-plugin`) - **Test Frameworks:** QUnit, Jest, TestCafe, Karma (Angular) ## Critical Setup Requirements @@ -493,7 +493,7 @@ Before making any changes, always check `.github/instructions/` directory for fi These instructions are based on actual repository analysis including: - Package.json scripts and configurations - GitHub Actions workflows -- Build system files (gulpfile.js, nx.json) +- Build system files (nx.json, project.json) - Project structure and file organization - CI/CD pipeline requirements diff --git a/apps/demos/.gitignore b/apps/demos/.gitignore index 82d6e6478557..ffc42632e700 100644 --- a/apps/demos/.gitignore +++ b/apps/demos/.gitignore @@ -22,7 +22,6 @@ bundles changed-files.json !.vscode/settings.json -gulpfile.js/.eslintrc.js shared/empty-file.js diff --git a/apps/demos/gulpfile.js/index.js b/apps/demos/gulpfile.js/index.js deleted file mode 100644 index 167923ee01e1..000000000000 --- a/apps/demos/gulpfile.js/index.js +++ /dev/null @@ -1,3 +0,0 @@ -exports.js = require('./js').js; -exports.bundles = require('./js').bundles; -exports.shared = require('./shared').shared; diff --git a/apps/demos/gulpfile.js/js.js b/apps/demos/gulpfile.js/js.js deleted file mode 100644 index 2eea68d0b1e5..000000000000 --- a/apps/demos/gulpfile.js/js.js +++ /dev/null @@ -1,40 +0,0 @@ -/* eslint-disable import/no-extraneous-dependencies */ -const { join } = require('path'); -const { task, parallel, series } = require('gulp'); - -const { init } = require('../utils/shared/config-helper'); -const createConfig = require('../utils/internal/create-config'); -const { copyJsSharedResources } = require('../utils/copy-shared-resources/copy'); -const { copyBundlesFolder, build } = require('../utils/bundle'); - -const demosDir = join(__dirname, '..', 'Demos'); - -function prepareJs(callback) { - init(); - copyJsSharedResources(callback); - createConfig.useBundles = false; - createConfig.run(demosDir); - callback(); -} - -exports.js = prepareJs; - -task('copy-bundles', (callback) => { - copyBundlesFolder(); - callback(); -}); - -task('update-config', (callback) => { - createConfig.useBundles = true; - createConfig.run(demosDir); - callback(); -}); - -exports.bundles = series( - 'copy-bundles', - parallel( - ['vue', 'angular', 'react'].map((framework) => Object.assign((callback) => { - build(framework).then(callback); - }, { displayName: `bundle-${framework}` })), - ), -); diff --git a/apps/demos/gulpfile.js/shared.js b/apps/demos/gulpfile.js/shared.js deleted file mode 100644 index 8e1c9eae4f09..000000000000 --- a/apps/demos/gulpfile.js/shared.js +++ /dev/null @@ -1,8 +0,0 @@ -/* eslint-disable import/no-extraneous-dependencies */ -const { series } = require('gulp'); -const { copyJsSharedResources, copyMvcSharedResources } = require('../utils/copy-shared-resources/copy'); - -exports.shared = series( - copyJsSharedResources, - copyMvcSharedResources, -); diff --git a/apps/demos/package.json b/apps/demos/package.json index d7364ef13cf8..e963b50b056f 100644 --- a/apps/demos/package.json +++ b/apps/demos/package.json @@ -131,7 +131,6 @@ "express": "4.22.1", "glob": "11.1.0", "globals": "catalog:", - "gulp": "4.0.2", "jest": "29.7.0", "jest-environment-node": "29.7.0", "lodash": "4.18.1", @@ -164,8 +163,8 @@ "generate-tgz-packages": "node utils/create-tgz-packages.js", "generate-devextreme-angular-umd": "rollup -c ./rollup.devextreme-angular.umd.config.mjs --silent", "generate-external-bundles": "rollup -c ./rollup.external.bundles.config.mjs --silent", - "prepare-js": "gulp js && pnpm run generate-ng-umd && pnpm run generate-devextreme-angular-umd && pnpm run generate-external-bundles && npm run generate-tgz-packages", - "prepare-shared": "pnpm run prepare-ts && gulp shared", + "prepare-js": "node scripts/prepare-js-configs.js && pnpm run generate-ng-umd && pnpm run generate-devextreme-angular-umd && pnpm run generate-external-bundles && node utils/create-tgz-packages.js", + "prepare-shared": "node scripts/prepare-shared.js", "eslint": "eslint", "lint-html": "prettier --check .", "lint-js": "eslint . --ignore-pattern 'Demos'", @@ -180,8 +179,8 @@ "csp-check": "node utils/server/csp-check.js", "fix-lint": "prettier --write . && eslint --fix . && stylelint **/*.{css,vue} --fix", "prettier": "prettier", - "build-bundles": "gulp bundles", - "prepare-bundles": "pnpm run generate-devextreme-angular-umd && gulp bundles && gulp update-config", + "build-bundles": "node scripts/build-bundles.js", + "prepare-bundles": "pnpm run generate-devextreme-angular-umd && node scripts/build-bundles.js && node scripts/update-config.js", "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", diff --git a/apps/demos/project.json b/apps/demos/project.json index 92602e2a4ffe..bdb30a70a62b 100644 --- a/apps/demos/project.json +++ b/apps/demos/project.json @@ -49,16 +49,24 @@ ] }, "prepare-bundles": { - "executor": "nx:run-script", + "executor": "nx:run-commands", "options": { - "script": "prepare-bundles" + "commands": [ + "pnpm run generate-devextreme-angular-umd", + "node scripts/build-bundles.js", + "node scripts/update-config.js" + ], + "parallel": false, + "cwd": "{projectRoot}" }, "dependsOn": [ // "^build" uncomment me after migrating to PNPM ], "inputs": [ "default", - "{projectRoot}/gulpfile.js/**/*", + "{projectRoot}/scripts/**/*", + "{projectRoot}/utils/bundle/**/*", + "{projectRoot}/utils/internal/create-config.js", "{projectRoot}/rollup.devextreme-angular.umd.config.mjs" ], "outputs": [ @@ -103,14 +111,21 @@ "commands": [ "pnpm nx build devextreme", "pnpm nx run-many --targets=pack --projects=devextreme-angular,devextreme-react,devextreme-vue --parallel", - "pnpm run prepare-js" + "node scripts/prepare-js-configs.js", + "pnpm run generate-ng-umd", + "pnpm run generate-devextreme-angular-umd", + "pnpm run generate-external-bundles", + "node utils/create-tgz-packages.js" ], "parallel": false, "cwd": "{projectRoot}" }, "inputs": [ "default", - "{projectRoot}/gulpfile.js/**/*", + "{projectRoot}/scripts/**/*", + "{projectRoot}/utils/shared/config-helper.js", + "{projectRoot}/utils/internal/create-config.js", + "{projectRoot}/utils/copy-shared-resources/**/*", "{projectRoot}/rollup.devextreme-angular.umd.config.mjs" ], "outputs": [ diff --git a/apps/demos/scripts/build-bundles.js b/apps/demos/scripts/build-bundles.js new file mode 100644 index 000000000000..41993d144827 --- /dev/null +++ b/apps/demos/scripts/build-bundles.js @@ -0,0 +1,24 @@ +/** + * Replaces `gulp bundles` task. + * Copies devextreme bundles and builds framework bundles in parallel. + */ +const { copyBundlesFolder, build } = require('../utils/bundle'); + +async function main() { + copyBundlesFolder(); + console.log('copy-bundles: done'); + + const frameworks = ['vue', 'angular', 'react']; + await Promise.all(frameworks.map(async (framework) => { + console.log(`bundle-${framework}: starting...`); + await build(framework); + console.log(`bundle-${framework}: done`); + })); + + console.log('build-bundles: done'); +} + +main().catch((err) => { + console.error('build-bundles failed:', err); + process.exit(1); +}); diff --git a/apps/demos/scripts/prepare-js-configs.js b/apps/demos/scripts/prepare-js-configs.js new file mode 100644 index 000000000000..717094f2e557 --- /dev/null +++ b/apps/demos/scripts/prepare-js-configs.js @@ -0,0 +1,18 @@ +/** + * Replaces `gulp js` task. + * Initializes repository config, copies JS shared resources, + * and creates demo config files (without bundles). + */ +const { join } = require('path'); +const { init } = require('../utils/shared/config-helper'); +const createConfig = require('../utils/internal/create-config'); +const { copyJsSharedResources } = require('../utils/copy-shared-resources/copy'); + +const demosDir = join(__dirname, '..', 'Demos'); + +init(); +copyJsSharedResources(() => {}); +createConfig.useBundles = false; +createConfig.run(demosDir); + +console.log('prepare-js-configs: done'); diff --git a/apps/demos/scripts/prepare-shared.js b/apps/demos/scripts/prepare-shared.js new file mode 100644 index 000000000000..99f6d56f2573 --- /dev/null +++ b/apps/demos/scripts/prepare-shared.js @@ -0,0 +1,11 @@ +/** + * Replaces `gulp shared` task. + * Copies JS and MVC shared resources sequentially. + */ +const { copyJsSharedResources, copyMvcSharedResources } = require('../utils/copy-shared-resources/copy'); + +copyJsSharedResources(() => { + copyMvcSharedResources(() => { + console.log('prepare-shared: done'); + }); +}); diff --git a/apps/demos/scripts/update-config.js b/apps/demos/scripts/update-config.js new file mode 100644 index 000000000000..475e105aedac --- /dev/null +++ b/apps/demos/scripts/update-config.js @@ -0,0 +1,13 @@ +/** + * Replaces `gulp update-config` task. + * Creates demo config files with bundle mode enabled. + */ +const { join } = require('path'); +const createConfig = require('../utils/internal/create-config'); + +const demosDir = join(__dirname, '..', 'Demos'); + +createConfig.useBundles = true; +createConfig.run(demosDir); + +console.log('update-config: done'); From 899365dce7ddc39f3958467a507102abe475b287 Mon Sep 17 00:00:00 2001 From: Arman Jivanyan Date: Thu, 30 Apr 2026 12:27:44 +0400 Subject: [PATCH 2/2] update lock --- pnpm-lock.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2d0aeb786dce..c6d5c40a2221 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -737,9 +737,6 @@ importers: globals: specifier: 'catalog:' version: 15.14.0 - gulp: - specifier: 4.0.2 - version: 4.0.2 jest: specifier: 29.7.0 version: 29.7.0(@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@5.9.3))