From acf9cc617fc43ca617ca258ca27d794bda3b93eb Mon Sep 17 00:00:00 2001 From: Nolan Ehrstrom Date: Thu, 17 Sep 2026 07:17:16 -0700 Subject: [PATCH 01/10] Fix security advisory --- composer.json | 4 ++-- composer.lock | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/composer.json b/composer.json index ada5d40a50..526cddb10f 100644 --- a/composer.json +++ b/composer.json @@ -36,7 +36,7 @@ "laravel/ui": "^4.6", "lavary/laravel-menu": "^1.8", "lcobucci/jwt": "^5.6", - "league/commonmark": "^2.9.0", + "league/commonmark": "^2.10.0", "league/flysystem-aws-s3-v3": "^3.25.1", "mateusjunges/laravel-kafka": "^2.11", "mittwald/vault-php": "^2.1", @@ -254,4 +254,4 @@ "ignore": [] } } -} \ No newline at end of file +} diff --git a/composer.lock b/composer.lock index 11c8f03784..3b9ca347ac 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c997e22562116936e09802acf25e699a", + "content-hash": "d9827bc0486bccbd88d0c56d5e1d5043", "packages": [ { "name": "aws/aws-crt-php", @@ -4184,16 +4184,16 @@ }, { "name": "league/commonmark", - "version": "2.9.0", + "version": "2.10.1", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "5703d83ba3da3b2e356a5fedc848ed6d8ffb6529" + "reference": "9d489ab67a02960fd8ffe624d93f751daf95439e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/5703d83ba3da3b2e356a5fedc848ed6d8ffb6529", - "reference": "5703d83ba3da3b2e356a5fedc848ed6d8ffb6529", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/9d489ab67a02960fd8ffe624d93f751daf95439e", + "reference": "9d489ab67a02960fd8ffe624d93f751daf95439e", "shasum": "" }, "require": { @@ -4230,7 +4230,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.10-dev" + "dev-main": "2.11-dev" } }, "autoload": { @@ -4287,7 +4287,7 @@ "type": "tidelift" } ], - "time": "2026-08-03T13:42:31+00:00" + "time": "2026-09-07T13:44:26+00:00" }, { "name": "league/config", From 7d974bc2c75933edc0153949f80574a867e68bca Mon Sep 17 00:00:00 2001 From: Nolan Ehrstrom Date: Thu, 17 Sep 2026 09:16:42 -0700 Subject: [PATCH 02/10] Update for incremental vite migration --- package-lock.json | 79 ++++++++++++++++--- package.json | 1 + .../js/components/common/mixins/datatable.js | 1 + .../components/ProcessScreen.vue | 22 ------ resources/js/vite/bootstrap-globals.js | 4 + .../cases/casesMain/casesMain.js | 1 + .../cases/casesMain/loaderCasesMain.js | 1 + .../processes/screen-builder/screen.blade.php | 6 -- resources/views/requests/preview.blade.php | 6 -- vite.config.js | 6 ++ webpack.mix.js | 4 + 11 files changed, 85 insertions(+), 46 deletions(-) create mode 100644 resources/js/vite/bootstrap-globals.js diff --git a/package-lock.json b/package-lock.json index 2224904e9b..7854b3af7b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -108,6 +108,7 @@ "sass-loader": "^12.6.0", "tailwindcss": "^3.4.10", "vite": "^7.3.6", + "vite-plugin-static-copy": "^4.1.1", "vue-loader": "^15.10.0", "vue-template-compiler": "^2.7.16", "webpack-bundle-analyzer": "^4.10.2" @@ -9440,15 +9441,10 @@ } }, "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -9461,6 +9457,9 @@ "engines": { "node": ">= 8.10.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, "optionalDependencies": { "fsevents": "~2.3.2" } @@ -22825,6 +22824,42 @@ "picomatch": "^2.3.1" } }, + "node_modules/vite-plugin-static-copy": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/vite-plugin-static-copy/-/vite-plugin-static-copy-4.1.1.tgz", + "integrity": "sha512-GrlA8YklrAfSyxJ4M3fdQLOo9oNkp56IM9FYgX/WtEgeIFkPwhu4wzpufBCIuNKCa6Fn77FkRdYxkHqV0FwjAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.6.0", + "p-map": "^7.0.4", + "picocolors": "^1.1.1", + "tinyglobby": "^0.2.17" + }, + "engines": { + "node": "^22.0.0 || >=24.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/sapphi-red" + }, + "peerDependencies": { + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/vite-plugin-static-copy/node_modules/p-map": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.8.tgz", + "integrity": "sha512-MitaVsCuCFIvOLLPIU7NnfrZvS9H9h7kwMUkDo+T2pEISaJD48IV9S8iIdXB7PsvvdxyYcsSTTrr90XKsbulNw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/vite/node_modules/@esbuild/android-arm": { "version": "0.28.1", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz", @@ -31149,9 +31184,9 @@ } }, "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -41170,6 +41205,26 @@ "picomatch": "^2.3.1" } }, + "vite-plugin-static-copy": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/vite-plugin-static-copy/-/vite-plugin-static-copy-4.1.1.tgz", + "integrity": "sha512-GrlA8YklrAfSyxJ4M3fdQLOo9oNkp56IM9FYgX/WtEgeIFkPwhu4wzpufBCIuNKCa6Fn77FkRdYxkHqV0FwjAw==", + "dev": true, + "requires": { + "chokidar": "^3.6.0", + "p-map": "^7.0.4", + "picocolors": "^1.1.1", + "tinyglobby": "^0.2.17" + }, + "dependencies": { + "p-map": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.8.tgz", + "integrity": "sha512-MitaVsCuCFIvOLLPIU7NnfrZvS9H9h7kwMUkDo+T2pEISaJD48IV9S8iIdXB7PsvvdxyYcsSTTrr90XKsbulNw==", + "dev": true + } + } + }, "vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", diff --git a/package.json b/package.json index 4e42bf8a54..147fa7a19a 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "sass-loader": "^12.6.0", "tailwindcss": "^3.4.10", "vite": "^7.3.6", + "vite-plugin-static-copy": "^4.1.1", "vue-loader": "^15.10.0", "vue-template-compiler": "^2.7.16", "webpack-bundle-analyzer": "^4.10.2" diff --git a/resources/js/components/common/mixins/datatable.js b/resources/js/components/common/mixins/datatable.js index 356fd25b1c..45521acb4d 100644 --- a/resources/js/components/common/mixins/datatable.js +++ b/resources/js/components/common/mixins/datatable.js @@ -3,6 +3,7 @@ * pagination transformers, etc. * */ +import _ from "lodash"; import Vuetable from "vuetable-2/src/components/Vuetable"; import Pagination from "../../../components/common/Pagination"; import FilterTableBodyMixin from "../../shared/FilterTableBodyMixin"; diff --git a/resources/js/processes-catalogue/components/ProcessScreen.vue b/resources/js/processes-catalogue/components/ProcessScreen.vue index 7a26ea6b07..ed927ed6bb 100644 --- a/resources/js/processes-catalogue/components/ProcessScreen.vue +++ b/resources/js/processes-catalogue/components/ProcessScreen.vue @@ -18,8 +18,6 @@ :title="title" :process="process" :full-carousel="fullCarousel" - :is-wizard-template="createdFromWizardTemplate" - @getHelperProcess="getHelperProcess" @closeCarousel="closeFullCarousel" @close="closeProcessInfo" > @@ -68,13 +66,6 @@ :description-settings="process.description" :process="process" /> - @@ -93,7 +84,6 @@ import ProcessHeaderStart from "./ProcessHeaderStart.vue"; import SlideProcessInfo from "./slideProcessInfo/SlideProcessInfo.vue"; import CarouselSlide from "./CarouselSlide.vue"; import ProcessOptions from "./ProcessOptions.vue"; -import WizardHelperProcessModal from "../../components/templates/WizardHelperProcessModal.vue"; const tceValidScreen = ["tce-student", "tce-college", "tce-grants"]; @@ -110,7 +100,6 @@ export default { SlideProcessInfo, CarouselSlide, ProcessOptions, - WizardHelperProcessModal, }, mixins: [ellipsisMenuMixin, processNavigationMixin, ProcessesMixin], props: ["process", "currentUserId", "ellipsisPermission"], @@ -131,12 +120,6 @@ export default { ? this.process.name : this.$t("Process Information"); }, - createdFromWizardTemplate() { - return !!this.process?.properties?.wizardTemplateUuid; - }, - wizardTemplateUuid() { - return this.process?.properties?.wizardTemplateUuid; - }, }, mounted() { this.getScreen(); @@ -174,11 +157,6 @@ export default { closeFullCarousel() { this.fullCarousel = false; }, - getHelperProcess() { - if (this.$refs.wizardHelperProcessModal) { - this.$refs.wizardHelperProcessModal.getHelperProcessStartEvent(); - } - }, }, }; diff --git a/resources/js/vite/bootstrap-globals.js b/resources/js/vite/bootstrap-globals.js new file mode 100644 index 0000000000..cf2927ed51 --- /dev/null +++ b/resources/js/vite/bootstrap-globals.js @@ -0,0 +1,4 @@ +import lodash from "lodash"; + +window._ = lodash; +window.debounce = lodash.debounce; diff --git a/resources/jscomposition/cases/casesMain/casesMain.js b/resources/jscomposition/cases/casesMain/casesMain.js index 0778d9dfe4..6485bf1254 100644 --- a/resources/jscomposition/cases/casesMain/casesMain.js +++ b/resources/jscomposition/cases/casesMain/casesMain.js @@ -1,3 +1,4 @@ +import "../../../js/vite/bootstrap-globals.js"; import Vue from "vue"; import VueRouter from "vue-router"; import App from "./App.vue"; diff --git a/resources/jscomposition/cases/casesMain/loaderCasesMain.js b/resources/jscomposition/cases/casesMain/loaderCasesMain.js index 35b3ef543e..b81fd9902a 100644 --- a/resources/jscomposition/cases/casesMain/loaderCasesMain.js +++ b/resources/jscomposition/cases/casesMain/loaderCasesMain.js @@ -1,3 +1,4 @@ +import "../../../js/vite/bootstrap-globals.js"; import { setupMain } from "../../../js/next/setupMain.js"; import screenBuilderNext from "../../../js/next/screenBuilder.js"; import * as ScreenBuilder from "@processmaker/screen-builder"; diff --git a/resources/views/processes/screen-builder/screen.blade.php b/resources/views/processes/screen-builder/screen.blade.php index 042d1bae15..e5bb09f04b 100644 --- a/resources/views/processes/screen-builder/screen.blade.php +++ b/resources/views/processes/screen-builder/screen.blade.php @@ -138,12 +138,6 @@ function handleClipboardError(error) { @endforeach - @if ($type === 'FORM') - @vite(['resources/js/processes/screen-builder/typeForm.js']) - @elseif ($type === 'DISPLAY') - @vite(['resources/js/processes/screen-builder/typeDisplay.js']) - @endif - @vite(['resources/js/leave-warning.js']) @vite(['resources/js/processes/screen-builder/main.js']) @endsection diff --git a/resources/views/requests/preview.blade.php b/resources/views/requests/preview.blade.php index 29e9185e54..64fe454cfc 100644 --- a/resources/views/requests/preview.blade.php +++ b/resources/views/requests/preview.blade.php @@ -35,12 +35,6 @@ var screenBuilderScripts = @json($manager->getScripts()); @vite(['resources/js/requests/loaderRequestsPreview.js']) - - @if ($type === 'FORM') - @vite(['resources/js/processes/screen-builder/typeForm.js']) - @elseif ($type === 'DISPLAY') - @vite(['resources/js/processes/screen-builder/typeDisplay.js']) - @endif + @vite(['resources/js/processes/modeler/globals.js']) @vite(['resources/js/processes/modeler/loaderModeler.js']) @vite(['resources/js/leave-warning.js']) @vite(['resources/js/processes/modeler/initialLoad.js']) - @foreach($manager->getScriptWithParams() as $params) - - @endforeach - @vite(['resources/js/processes/modeler/index.js']) + @foreach($modelerPackageScripts as $script) + + @endforeach + @vite(['resources/js/processes/modeler/index.js']) @yield('extra_js') @endsection diff --git a/vite.config.js b/vite.config.js index 1bbefba4e5..65b2c853f4 100644 --- a/vite.config.js +++ b/vite.config.js @@ -229,6 +229,7 @@ export default defineConfig(({ mode }) => { "resources/js/processes/scripts/preview.js", + "resources/js/processes/modeler/globals.js", "resources/js/processes/modeler/loaderModeler.js", "resources/js/processes/modeler/index.js", "resources/js/processes/modeler/initialLoad.js", @@ -348,7 +349,11 @@ export default defineConfig(({ mode }) => { rollupOptions: { treeshake: { moduleSideEffects: (id) => id.includes("bootstrap-globals") - || id.includes("libraries/lodash"), + || id.includes("libraries/lodash") + || id.includes("libraries/modelerInspector") + || id.includes("libraries/sharedComponents") + || id.includes("libraries/vueFormElements") + || id.includes("libraries/processesComponents"), }, }, }, From 6cfcbe84600eabd6c194d12cdc68ebb73b177509 Mon Sep 17 00:00:00 2001 From: Nolan Ehrstrom Date: Thu, 17 Sep 2026 10:24:32 -0700 Subject: [PATCH 04/10] Fix module loading --- .../Http/Controllers/Process/ModelerController.php | 9 +++------ resources/views/processes/modeler/index.blade.php | 6 +++++- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/ProcessMaker/Http/Controllers/Process/ModelerController.php b/ProcessMaker/Http/Controllers/Process/ModelerController.php index ca82daaa9a..67ee00a72d 100644 --- a/ProcessMaker/Http/Controllers/Process/ModelerController.php +++ b/ProcessMaker/Http/Controllers/Process/ModelerController.php @@ -128,12 +128,9 @@ public function prepareModelerData( $defaultEmailNotification = $this->getDefaultEmailNotification(); - $modelerPackageScripts = array_values(array_map( - fn ($params) => $params['src'], - array_filter( - $manager->getScriptWithParams(), - fn ($params) => !str_contains($params['src'], 'initialLoad') - ) + $modelerPackageScripts = array_values(array_filter( + $manager->getScriptWithParams(), + fn ($params) => !str_contains($params['src'], 'initialLoad') )); return [ diff --git a/resources/views/processes/modeler/index.blade.php b/resources/views/processes/modeler/index.blade.php index 3cf69436a4..b94ac1bad6 100644 --- a/resources/views/processes/modeler/index.blade.php +++ b/resources/views/processes/modeler/index.blade.php @@ -116,7 +116,11 @@ @vite(['resources/js/leave-warning.js']) @vite(['resources/js/processes/modeler/initialLoad.js']) @foreach($modelerPackageScripts as $script) - + @if(($script['type'] ?? '') === 'module') + + @else + + @endif @endforeach @vite(['resources/js/processes/modeler/index.js']) @yield('extra_js') From ac654ac8bed020ca59c11ac68d1ac0b0f1445692 Mon Sep 17 00:00:00 2001 From: Nolan Ehrstrom Date: Thu, 17 Sep 2026 14:58:37 -0700 Subject: [PATCH 05/10] Fix images, lodash, and monaco --- resources/js/next/setupMain.js | 2 +- .../taskPreview/TaskPreviewAssignment.vue | 3 +- resources/js/vite/tasks/loaderTasks.js | 1 + resources/js/vite/tasks/tasks.js | 1 + vite.config.js | 60 +++++++++++++++---- 5 files changed, 53 insertions(+), 14 deletions(-) diff --git a/resources/js/next/setupMain.js b/resources/js/next/setupMain.js index ecb8a4335c..b1070d2a50 100644 --- a/resources/js/next/setupMain.js +++ b/resources/js/next/setupMain.js @@ -9,7 +9,7 @@ import { import vuex from "./libraries/vuex"; import bootstrap from "./libraries/bootstrap"; import jquery from "./libraries/jquery"; -import lodash from "./libraries/lodash"; +import "./libraries/lodash"; import sharedComponents from "./libraries/sharedComponents"; import asyncComponents from "./components/index"; import ProcessesComponents from "./libraries/processesComponents"; diff --git a/resources/js/tasks/components/taskPreview/TaskPreviewAssignment.vue b/resources/js/tasks/components/taskPreview/TaskPreviewAssignment.vue index dab085918e..9a4d108c0e 100644 --- a/resources/js/tasks/components/taskPreview/TaskPreviewAssignment.vue +++ b/resources/js/tasks/components/taskPreview/TaskPreviewAssignment.vue @@ -57,11 +57,10 @@ import { ref, onMounted, nextTick, computed, } from "vue"; +import _ from "lodash"; import PMDropdownSuggest from "../../../components/PMDropdownSuggest.vue"; import { getReassignUsers, updateReassignUser, updateComment } from "../../api"; -const { _ } = window; - const props = defineProps({ task: { type: Object, diff --git a/resources/js/vite/tasks/loaderTasks.js b/resources/js/vite/tasks/loaderTasks.js index 20787250f8..f2768631fe 100644 --- a/resources/js/vite/tasks/loaderTasks.js +++ b/resources/js/vite/tasks/loaderTasks.js @@ -1,3 +1,4 @@ +import "../../../js/vite/bootstrap-globals.js"; import { setupMain } from "../../../js/next/setupMain"; import vueFormElements from "../../../js/next/libraries/vueFormElements"; import modelerInspector from "../../../js/next/libraries/modelerInspector"; diff --git a/resources/js/vite/tasks/tasks.js b/resources/js/vite/tasks/tasks.js index f49c98ef1e..e02183db29 100644 --- a/resources/js/vite/tasks/tasks.js +++ b/resources/js/vite/tasks/tasks.js @@ -1,3 +1,4 @@ +import "../../vite/bootstrap-globals.js"; import Vue from "vue"; import TasksList from "../../tasks/components/TasksList.vue"; import TasksListCounter from "../../tasks/components/TasksListCounter.vue"; diff --git a/vite.config.js b/vite.config.js index 65b2c853f4..dfa037ea9d 100644 --- a/vite.config.js +++ b/vite.config.js @@ -23,17 +23,26 @@ const monacoFiles = [ "base/common/worker/simpleWorker.nls.js", ]; const monacoLanguages = ["php", "css", "lua", "javascript", "csharp", "java", "python", "r", "html", "xml", "typescript", "sql"]; +// vite-plugin-static-copy preserves src path segments unless stripBase is set. +// Mix used mix.copy(src, dest+file) — strip node_modules/monaco-editor/min/vs (4 segments). +const monacoStripBase = 4; const monacoTargets = [ ...monacoFiles.map((file) => ({ src: `${monacoSrc}/${file}`, - dest: path.join(monacoDest, path.dirname(file)).replace(/\\/g, "/"), + dest: monacoDest, + rename: { stripBase: monacoStripBase }, })), ...monacoLanguages.map((lang) => ({ src: `${monacoSrc}/basic-languages/${lang}/${lang}.js`, - dest: `${monacoDest}/basic-languages/${lang}`, + dest: monacoDest, + rename: { stripBase: monacoStripBase }, })), // mirrors mix.copyDirectory(`${monacoSource}language`, `${monacoDestination}language`) - { src: `${monacoSrc}/language`, dest: monacoDest }, + { + src: `${monacoSrc}/language/**/*`, + dest: monacoDest, + rename: { stripBase: monacoStripBase }, + }, ]; /** @@ -112,6 +121,35 @@ const vueMonacoRequireShim = { * SFC's main module and picks that asset node, sending the hot update to * tailwind.css instead of the component. */ +/** + * Mix/bootstrap set window._ globally; legacy code uses bare `_.method` without + * importing lodash. Webpack ProvidePlugin injected lodash automatically — mirror + * that here so Vite ESM bundles resolve `_` correctly. + */ +const lodashGlobalPlugin = { + name: "pm:lodash-global", + enforce: "pre", + transform(code, id) { + if (!/[/\\]resources[/\\]js[/\\]/.test(id)) { + return null; + } + if (!/\b_\.[a-zA-Z_$]/.test(code)) { + return null; + } + if ( + /from\s+['"]lodash/.test(code) + || /require\s*\(\s*['"]lodash/.test(code) + || /import\s+_\s+from/.test(code) + ) { + return null; + } + return { + code: `import _ from "lodash";\n${code}`, + map: null, + }; + }, +}; + const vue2HmrMainModuleFix = { name: "pm:vue2-hmr-main-module-fix", enforce: "post", @@ -152,6 +190,7 @@ export default defineConfig(({ mode }) => { return { plugins: [ + lodashGlobalPlugin, modelerPublicPathPlugin, yaml(), laravel({ @@ -284,14 +323,13 @@ export default defineConfig(({ mode }) => { // dest paths are relative to outDir (public/build), so '../' escapes to public/ viteStaticCopy({ targets: [ - // Static images (mirrors webpack.mix.js .copy() calls) - { src: "resources/img/*", dest: "../img" }, - { src: "resources/img/launchpad-images/*", dest: "../img/launchpad-images" }, - { src: "resources/img/launchpad-images/icons/*", dest: "../img/launchpad-images/icons" }, - { src: "resources/img/connected-account-images/*", dest: "../img/connected-account-images" }, - { src: "resources/img/smartinbox-images/*", dest: "../img/smartinbox-images" }, - { src: "resources/img/pagination-images/*", dest: "../img/pagination-images" }, - { src: "resources/img/script_lang/*", dest: "../img/script_lang" }, + // Static images — stripBase removes the resources/img/ prefix so files land + // directly under public/img/ (not public/img/resources/img/). + { + src: "resources/img/**/*", + dest: "../img", + rename: { stripBase: 2 }, + }, // Vendor JS / Vue files served as plain scripts by Mix pages { src: "node_modules/snapsvg/dist/snap.svg.js", dest: "../js" }, { src: "resources/js/components/CustomActions.vue", dest: "../js" }, From 5320ee5e0723dc678cf8fa16d19a05d98a60c47e Mon Sep 17 00:00:00 2001 From: Nolan Ehrstrom Date: Thu, 17 Sep 2026 15:34:07 -0700 Subject: [PATCH 06/10] Update modules with side effects --- vite.config.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/vite.config.js b/vite.config.js index dfa037ea9d..5c09958feb 100644 --- a/vite.config.js +++ b/vite.config.js @@ -386,12 +386,16 @@ export default defineConfig(({ mode }) => { manifest: "manifest.json", rollupOptions: { treeshake: { - moduleSideEffects: (id) => id.includes("bootstrap-globals") + moduleSideEffects: (id) => /\.(css|scss|sass)(\?|$)/.test(id) + || id.includes("bootstrap-globals") || id.includes("libraries/lodash") || id.includes("libraries/modelerInspector") || id.includes("libraries/sharedComponents") || id.includes("libraries/vueFormElements") - || id.includes("libraries/processesComponents"), + || id.includes("libraries/processesComponents") + || id.includes("libraries/processesCatalogueComponents") + || id.includes("libraries/scriptsComponents") + || id.includes("libraries/screensComponents"), }, }, }, From 93bbd4cd717f238615df0e5c9a3d5e275f6777a3 Mon Sep 17 00:00:00 2001 From: Nolan Ehrstrom Date: Thu, 17 Sep 2026 15:58:14 -0700 Subject: [PATCH 07/10] Add customFilters to moduleSideEffects to fix script editor --- .../js/processes/scripts/components/ScriptEditor.vue | 4 ++-- resources/js/processes/scripts/customFilters.js | 2 ++ vite.config.js | 11 ++++++++--- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/resources/js/processes/scripts/components/ScriptEditor.vue b/resources/js/processes/scripts/components/ScriptEditor.vue index 08060d18f8..b512a01d3c 100644 --- a/resources/js/processes/scripts/components/ScriptEditor.vue +++ b/resources/js/processes/scripts/components/ScriptEditor.vue @@ -402,11 +402,11 @@