diff --git a/InfoLogger/.dockerignore b/InfoLogger/.dockerignore
index 3476a2a3bb..82c1be9e7c 100644
--- a/InfoLogger/.dockerignore
+++ b/InfoLogger/.dockerignore
@@ -5,7 +5,10 @@
!lib/
!package*.json
!public/
+!src/
+!index.html
!index.js
+!vite.config.mjs
!test/
!eslint.config.js
!config.js
diff --git a/InfoLogger/.gitignore b/InfoLogger/.gitignore
index ebfc1ab9a7..15a49435a0 100644
--- a/InfoLogger/.gitignore
+++ b/InfoLogger/.gitignore
@@ -7,5 +7,6 @@ node_modules
coverage*
db.json
testdb.json
+dist
error.log
\ No newline at end of file
diff --git a/InfoLogger/.npmignore b/InfoLogger/.npmignore
new file mode 100644
index 0000000000..6ed091a0a1
--- /dev/null
+++ b/InfoLogger/.npmignore
@@ -0,0 +1,11 @@
+config.js
+*~
+.DS_Store
+cert/*
+node_modules
+.nyc*
+coverage*
+db.json
+testdb.json
+
+error.log
diff --git a/InfoLogger/README.md b/InfoLogger/README.md
index 2f4052c0a2..e88f8e9fae 100644
--- a/InfoLogger/README.md
+++ b/InfoLogger/README.md
@@ -116,12 +116,14 @@ Should you want to run the ILG with the status quo (your changes applied) you ca
## Frontend
-Static files served from [public/](public/); no build step. A lightweight MVC app on top of `@aliceo2/web-ui`.
-
-- **App shell** - [index.html](public/index.html) bootstraps [index.js](public/index.js), which mounts the top-level [Model](public/Model.js) and renders [view.js](public/view.js).
-- **Sub-models** - [log/Log.js](public/log/Log.js) drives the log table (rendering in `tableLogs*.js`, inspector, status bar, context menu, zoom, etc.). [logFilter/LogFilter.js](public/logFilter/LogFilter.js) owns the filter inputs. [table/Table.js](public/table/Table.js) holds shared table state.
-- **Supporting code** - [services/](public/services/), [constants/](public/constants/), [common/](public/common/), [about/](public/about/) (about component).
-- **Styles** - [app.css](public/app.css), layered on the framework's [bootstrap.css](../Framework/Frontend/css/src/bootstrap.css).
+Sources live in [src/](src/) and are bundled by [Vite](https://vite.dev/) ([vite.config.mjs](vite.config.mjs)). A lightweight MVC app on top of `@aliceo2/web-ui`.
+
+- **Build & serving** - `npm run build` bundles the frontend into `dist/`, which [index.js](index.js) serves (`npm run mocha` builds first).
+- **App shell** - [index.html](index.html) bootstraps [src/index.js](src/index.js), which mounts the top-level [Model](src/Model.js) and renders [view.js](src/view.js).
+- **Sub-models** - [log/Log.js](src/log/Log.js) drives the log table (rendering in `tableLogs*.js`, inspector, status bar, context menu, zoom, etc.). [logFilter/LogFilter.js](src/logFilter/LogFilter.js) owns the filter inputs. [table/Table.js](src/table/Table.js) holds shared table state.
+- **Supporting code** - [services/](src/services/), [constants/](src/constants/), [common/](src/common/), [about/](src/about/) (about component).
+- **Styles** - [app.css](src/app.css), layered on the framework's [bootstrap.css](../Framework/Frontend/css/src/bootstrap.css).
+- **Static assets** - [public/](public/) holds files copied as-is into the bundle (vendored `moment` / `moment-timezone`).
## Local Development
diff --git a/InfoLogger/docker-compose.dev.yaml b/InfoLogger/docker-compose.dev.yaml
index b98754263f..001329a0c4 100644
--- a/InfoLogger/docker-compose.dev.yaml
+++ b/InfoLogger/docker-compose.dev.yaml
@@ -21,6 +21,18 @@ services:
read_only: true
source: ./public
target: /home/node/app/public
+ - type: bind
+ read_only: true
+ source: ./src
+ target: /home/node/app/src
+ - type: bind
+ read_only: true
+ source: ./index.html
+ target: /home/node/app/index.html
+ - type: bind
+ read_only: true
+ source: ./vite.config.mjs
+ target: /home/node/app/vite.config.mjs
- type: bind
read_only: true
source: ./config.js
diff --git a/InfoLogger/eslint.config.js b/InfoLogger/eslint.config.js
index c9aa70ccba..b11dfccfd6 100644
--- a/InfoLogger/eslint.config.js
+++ b/InfoLogger/eslint.config.js
@@ -25,6 +25,7 @@ module.exports = [
'tmp/',
'.nyc_output/',
'coverage/',
+ 'dist/',
'docker/database/',
],
},
diff --git a/InfoLogger/public/index.html b/InfoLogger/index.html
similarity index 78%
rename from InfoLogger/public/index.html
rename to InfoLogger/index.html
index 95a76decec..90da3c581a 100644
--- a/InfoLogger/public/index.html
+++ b/InfoLogger/index.html
@@ -2,7 +2,7 @@
InfoLogger - Alice O2 UI
-
+
@@ -19,6 +19,6 @@
-
-
-
\ No newline at end of file
+
+
+
\ No newline at end of file
diff --git a/InfoLogger/index.js b/InfoLogger/index.js
index b46cbe2261..9a87605b2e 100644
--- a/InfoLogger/index.js
+++ b/InfoLogger/index.js
@@ -12,8 +12,9 @@
* or submit itself to any jurisdiction.
*/
+const fs = require('fs');
const path = require('path');
-const { HttpServer, WebSocket } = require('@aliceo2/web-ui');
+const { HttpServer, WebSocket, LogManager } = require('@aliceo2/web-ui');
const config = require('./lib/configProvider.js');
const api = require('./lib/api.js');
@@ -24,8 +25,16 @@ const api = require('./lib/api.js');
const http = new HttpServer(config.http, config.jwt, config.openId);
const ws = new WebSocket(http);
+const logger = LogManager.getLogger(`${process.env.npm_config_log_label ?? 'ilg'}/index`);
+
// Expose application to /
-http.addStaticPath(path.join(__dirname, 'public'));
+const distPath = path.join(__dirname, 'dist');
+if (!fs.existsSync(distPath)) {
+ logger.errorMessage(`Frontend build not found at ${distPath}, run "npm run build" first`);
+} else {
+ logger.infoMessage(`Serving frontend files from ${distPath}`);
+}
+http.addStaticPath(distPath);
// Attach services to web server
api.attachTo(http, ws);
diff --git a/InfoLogger/package-lock.json b/InfoLogger/package-lock.json
index 573d537219..e13dea6b09 100644
--- a/InfoLogger/package-lock.json
+++ b/InfoLogger/package-lock.json
@@ -25,7 +25,8 @@
"nodemon": "^3.1.14",
"nyc": "18.0.0",
"puppeteer": "25.16.0",
- "sinon": "22.1.0"
+ "sinon": "22.1.0",
+ "vite": "8.3.5"
},
"engines": {
"node": ">= 22.x"
@@ -847,6 +848,16 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@oxc-project/types": {
+ "version": "0.156.0",
+ "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.156.0.tgz",
+ "integrity": "sha512-1Duyg48TdJNdyhEB8Xn1L36bT9Pv6GUtlKjHxOys8xkaF/rQq3XJE+bAurSK/AgIz5mGFsb77cn9Pb20+WCScw==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/oxc-project"
+ }
+ },
"node_modules/@puppeteer/browsers": {
"version": "3.2.6",
"resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-3.2.6.tgz",
@@ -876,6 +887,286 @@
}
}
},
+ "node_modules/@rolldown/binding-android-arm-eabi": {
+ "version": "1.2.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.18.tgz",
+ "integrity": "sha512-ubTG+4KlidvioxjOFdsdEa2F6JVGZb8m2ByJUqQ7fYzUeT1cEn194POcsQ10PKH4p//q0YQn4SB3YpSuzcA1Yg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-android-arm64": {
+ "version": "1.2.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.18.tgz",
+ "integrity": "sha512-2Xa1t/JeFGTZn5TbzgPppcCftF8sCVnTNvrIvoSdcZhoFzAuVy1L3xxQUQ4sfWDtwVzg1u6Yi1R3SlJugRNV2Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-darwin-arm64": {
+ "version": "1.2.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.18.tgz",
+ "integrity": "sha512-iUzw9HshVvrWci9gVXjxWS7/M/IcLvNo67vu2c/w9zKBz4hIvPRixdUpIW/iCfhldLaq9ER2hecsI9UY5z0/yA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-darwin-x64": {
+ "version": "1.2.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.18.tgz",
+ "integrity": "sha512-XuDHFzbFEtZl0QGJi92+fmG67tfnp1iZ9VOeDkwasGyTq2VG3/5PnJnvAr+MTzFh/rNScJ3VhN+XpZyyGsN7Jw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-freebsd-x64": {
+ "version": "1.2.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.18.tgz",
+ "integrity": "sha512-MM8opLfsLK15oEXDz6iBc0t3ahu+ew9jsAmha+ovZ33hSwYgqo7YmpRITqFTfW7xA71BLEQ3jJdTsaCmhB1c9w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-arm-gnueabihf": {
+ "version": "1.2.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.18.tgz",
+ "integrity": "sha512-J6EoCWiy5RnFQzHrKyHXXevZ9lukQfGpnchX/zG/k/WC2nc9O9XyS1JgA8kI9VxMFggMbCPjpv7LcikriXfehw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-arm64-gnu": {
+ "version": "1.2.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.18.tgz",
+ "integrity": "sha512-HIkFuLF7CdDeki+1aCZLLbLq0hk/PHntb+z4/YCTo47JbksTD6jJEELIz92tYROmDmvMrNqUMqBi71BkJLDR+A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-arm64-musl": {
+ "version": "1.2.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.18.tgz",
+ "integrity": "sha512-4oqWItLLYt7IceOnElCct8T2ek5p7PmD7LN04TRJRXGo5f3HtKTgGH6PhYRFK4C2ICkq/LMUU0BVPvvlAKhm8g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-ppc64-gnu": {
+ "version": "1.2.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.18.tgz",
+ "integrity": "sha512-+AkRly5SrCEgnPhGRfub7pucASYEC2fTsxZg7VCcnozpA2+Wn/gCYy1t7LuJS67/xyJu/7noYBJncDUkbwgw2A==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-s390x-gnu": {
+ "version": "1.2.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.18.tgz",
+ "integrity": "sha512-Ttg1r9vVykMnQrE/GwYO9icKtXiuiMfRe/w74xJkeoVuvhRG+WtT6LEMOf58Yl63yd77lhHzO8Y55R8CC3XALA==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-x64-gnu": {
+ "version": "1.2.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.18.tgz",
+ "integrity": "sha512-xX1Tt4o5jUMma0vJsXp5eRZA9nOuyigb2dKJMMzZRmzMxLYGE9PaKKSqHPzPvSQgM8ZOEacSTQwDQcwWfh0xmQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-x64-musl": {
+ "version": "1.2.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.18.tgz",
+ "integrity": "sha512-4VVlGI5K2kociZlW3lSN8VjG3TW5yQIlAcfCdBXMgGjJxZll15Fa4ocRHXHvIVVnwlibCw/NQajJrNDiqqpiiw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-openharmony-arm64": {
+ "version": "1.2.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.18.tgz",
+ "integrity": "sha512-PApTsgH1jLYuyy3tSCz9De82Gq5qXwi7vImVZhEzTgX1C4150Cp5M2ZfL3pLvbCvbEHL0oJeC6pd6podtv8Y5w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-win32-arm64-msvc": {
+ "version": "1.2.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.18.tgz",
+ "integrity": "sha512-J2XjWjx/SP+4x0H4r6dz3Vzb5WVkg7re40Do9K7HJ3sK2/xcmZrWwakXlSwaMvOkvruLJCD4CL/3wqsIR/thgg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-win32-x64-msvc": {
+ "version": "1.2.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.18.tgz",
+ "integrity": "sha512-XwRJxRQvkuEtS0hIIt29QrqPJ+JzMJSNYHJw4ae/mc6uEarfRG1ceyg4HmmWiBdL/YCb6g7N5BLbSvmRJRYZHw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/pluginutils": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.1.0.tgz",
+ "integrity": "sha512-K+NU2HDCEem4sClgHH4ZZXwdJeNFkJo+hRk479DIwdIviAPN2hFJH1KHHwg8CxHQXvi0M5XY4deTXINfIiSG6w==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@sindresorhus/base62": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/base62/-/base62-1.0.0.tgz",
@@ -1922,6 +2213,16 @@
"npm": "1.2.8000 || >= 1.4.16"
}
},
+ "node_modules/detect-libc": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
+ "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/devtools-protocol": {
"version": "0.0.1704951",
"resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1704951.tgz",
@@ -3389,6 +3690,279 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/lightningcss": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz",
+ "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==",
+ "dev": true,
+ "license": "MPL-2.0",
+ "dependencies": {
+ "detect-libc": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ },
+ "optionalDependencies": {
+ "lightningcss-android-arm64": "1.33.0",
+ "lightningcss-darwin-arm64": "1.33.0",
+ "lightningcss-darwin-x64": "1.33.0",
+ "lightningcss-freebsd-x64": "1.33.0",
+ "lightningcss-linux-arm-gnueabihf": "1.33.0",
+ "lightningcss-linux-arm64-gnu": "1.33.0",
+ "lightningcss-linux-arm64-musl": "1.33.0",
+ "lightningcss-linux-x64-gnu": "1.33.0",
+ "lightningcss-linux-x64-musl": "1.33.0",
+ "lightningcss-win32-arm64-msvc": "1.33.0",
+ "lightningcss-win32-x64-msvc": "1.33.0"
+ }
+ },
+ "node_modules/lightningcss-android-arm64": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz",
+ "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-darwin-arm64": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz",
+ "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-darwin-x64": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz",
+ "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-freebsd-x64": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz",
+ "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm-gnueabihf": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz",
+ "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm64-gnu": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz",
+ "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm64-musl": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz",
+ "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-x64-gnu": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz",
+ "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-x64-musl": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz",
+ "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-win32-arm64-msvc": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz",
+ "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-win32-x64-msvc": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz",
+ "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
"node_modules/lilconfig": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
@@ -3753,6 +4327,25 @@
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"inBundle": true
},
+ "node_modules/nanoid": {
+ "version": "3.3.20",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz",
+ "integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
"node_modules/natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
@@ -4385,9 +4978,9 @@
"license": "ISC"
},
"node_modules/picomatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
- "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz",
+ "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4461,6 +5054,35 @@
"node": ">=8"
}
},
+ "node_modules/postcss": {
+ "version": "8.5.32",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.32.tgz",
+ "integrity": "sha512-LJlKCCAUFKOuZxipUdYw1NzIITEsPcgyOG9LkvRJvuKj/bRzbuRY0ARXvL0pWGpsZvn8jku+LMep2eU0seHp8g==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.20",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
"node_modules/prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -4729,6 +5351,40 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/rolldown": {
+ "version": "1.2.18",
+ "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.18.tgz",
+ "integrity": "sha512-C1uuT3UR60SShuCaPQFAAZyefJCWZlAKB02BV3BuPE2Rs4fevRQltEKoFO2tV5W9/eJhU5RieV6vJj3euulfNQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@oxc-project/types": "=0.156.0",
+ "@rolldown/pluginutils": "^1.0.0"
+ },
+ "bin": {
+ "rolldown": "bin/cli.mjs"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "optionalDependencies": {
+ "@rolldown/binding-android-arm-eabi": "1.2.18",
+ "@rolldown/binding-android-arm64": "1.2.18",
+ "@rolldown/binding-darwin-arm64": "1.2.18",
+ "@rolldown/binding-darwin-x64": "1.2.18",
+ "@rolldown/binding-freebsd-x64": "1.2.18",
+ "@rolldown/binding-linux-arm-gnueabihf": "1.2.18",
+ "@rolldown/binding-linux-arm64-gnu": "1.2.18",
+ "@rolldown/binding-linux-arm64-musl": "1.2.18",
+ "@rolldown/binding-linux-ppc64-gnu": "1.2.18",
+ "@rolldown/binding-linux-s390x-gnu": "1.2.18",
+ "@rolldown/binding-linux-x64-gnu": "1.2.18",
+ "@rolldown/binding-linux-x64-musl": "1.2.18",
+ "@rolldown/binding-openharmony-arm64": "1.2.18",
+ "@rolldown/binding-win32-arm64-msvc": "1.2.18",
+ "@rolldown/binding-win32-x64-msvc": "1.2.18"
+ }
+ },
"node_modules/safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@@ -5001,6 +5657,16 @@
"node": ">=0.10.0"
}
},
+ "node_modules/source-map-js": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz",
+ "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/spawn-wrap": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-3.0.0.tgz",
@@ -5425,6 +6091,84 @@
"node": ">= 0.8"
}
},
+ "node_modules/vite": {
+ "version": "8.3.5",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.5.tgz",
+ "integrity": "sha512-z1YpjieJ9g0ebTmQpLBv/oq9E3F9EIlOe+7LahW8SrE3LTiG3udBRUXQOlYXP9b+IC2q2phHeVxj9xGlw34OEQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lightningcss": "^1.33.0",
+ "picomatch": "^4.0.7",
+ "postcss": "^8.5.30",
+ "rolldown": "~1.2.14",
+ "tinyglobby": "^0.2.17"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^20.19.0 || >=22.12.0",
+ "@vitejs/devtools": "^0.7.1 || ^0.8.0",
+ "esbuild": "^0.27.0 || ^0.28.0",
+ "jiti": ">=1.21.0",
+ "less": "^4.0.0",
+ "sass": "^1.70.0",
+ "sass-embedded": "^1.70.0",
+ "stylus": ">=0.54.8",
+ "sugarss": "^5.0.0",
+ "terser": "^5.16.0",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "@vitejs/devtools": {
+ "optional": true
+ },
+ "esbuild": {
+ "optional": true
+ },
+ "jiti": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
+ }
+ },
"node_modules/webdriver-bidi-protocol": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-1.0.1.tgz",
diff --git a/InfoLogger/package.json b/InfoLogger/package.json
index 92b323300e..1261fa85b9 100644
--- a/InfoLogger/package.json
+++ b/InfoLogger/package.json
@@ -21,11 +21,12 @@
"lint": "eslint --config eslint.config.js",
"lint:fix": "npm run lint -- --fix",
"test": "npm run lint && npm run mocha",
- "mocha": "mocha --exit $(find test -name 'mocha-*.js')",
+ "build": "vite build",
+ "mocha": "npm run build && mocha --exit $(find test -name 'mocha-*.js')",
"coverage": "nyc npm test && npm run coverage:report",
"coverage:report": "nyc report --reporter=html --reporter=json",
"start": "node index.js",
- "start:dev": "nodemon --inspect --watch index.js --watch lib --watch config.js index.js",
+ "start:dev": "vite build && nodemon --inspect --watch index.js --watch lib --watch config.js index.js",
"simul": "node test/live-simulator/runInfoLoggerServer.js",
"seed": "node docker/database/seed-messages.js",
"docker:dev": "docker compose -f docker-compose.yaml -f docker-compose.dev.yaml up --build",
@@ -50,7 +51,8 @@
"nodemon": "^3.1.14",
"nyc": "18.0.0",
"puppeteer": "25.16.0",
- "sinon": "22.1.0"
+ "sinon": "22.1.0",
+ "vite": "8.3.5"
},
"bundleDependencies": [
"@aliceo2/web-ui"
diff --git a/InfoLogger/public/common/moment-timezone.js b/InfoLogger/public/moment-timezone.js
similarity index 100%
rename from InfoLogger/public/common/moment-timezone.js
rename to InfoLogger/public/moment-timezone.js
diff --git a/InfoLogger/public/common/moment.js b/InfoLogger/public/moment.js
similarity index 100%
rename from InfoLogger/public/common/moment.js
rename to InfoLogger/public/moment.js
diff --git a/InfoLogger/public/Model.js b/InfoLogger/src/Model.js
similarity index 100%
rename from InfoLogger/public/Model.js
rename to InfoLogger/src/Model.js
diff --git a/InfoLogger/public/about/about.component.js b/InfoLogger/src/about/about.component.js
similarity index 100%
rename from InfoLogger/public/about/about.component.js
rename to InfoLogger/src/about/about.component.js
diff --git a/InfoLogger/public/app.css b/InfoLogger/src/app.css
similarity index 100%
rename from InfoLogger/public/app.css
rename to InfoLogger/src/app.css
diff --git a/InfoLogger/public/common/Timezone.js b/InfoLogger/src/common/Timezone.js
similarity index 100%
rename from InfoLogger/public/common/Timezone.js
rename to InfoLogger/src/common/Timezone.js
diff --git a/InfoLogger/public/common/bkpLogEntryRedirectButton.js b/InfoLogger/src/common/bkpLogEntryRedirectButton.js
similarity index 100%
rename from InfoLogger/public/common/bkpLogEntryRedirectButton.js
rename to InfoLogger/src/common/bkpLogEntryRedirectButton.js
diff --git a/InfoLogger/public/common/datePicker.js b/InfoLogger/src/common/datePicker.js
similarity index 100%
rename from InfoLogger/public/common/datePicker.js
rename to InfoLogger/src/common/datePicker.js
diff --git a/InfoLogger/public/common/errorComponent.js b/InfoLogger/src/common/errorComponent.js
similarity index 100%
rename from InfoLogger/public/common/errorComponent.js
rename to InfoLogger/src/common/errorComponent.js
diff --git a/InfoLogger/public/common/jsonFetch.js b/InfoLogger/src/common/jsonFetch.js
similarity index 100%
rename from InfoLogger/public/common/jsonFetch.js
rename to InfoLogger/src/common/jsonFetch.js
diff --git a/InfoLogger/public/common/jsonPost.js b/InfoLogger/src/common/jsonPost.js
similarity index 100%
rename from InfoLogger/public/common/jsonPost.js
rename to InfoLogger/src/common/jsonPost.js
diff --git a/InfoLogger/public/common/loadingAnimation.js b/InfoLogger/src/common/loadingAnimation.js
similarity index 100%
rename from InfoLogger/public/common/loadingAnimation.js
rename to InfoLogger/src/common/loadingAnimation.js
diff --git a/InfoLogger/public/common/utils.js b/InfoLogger/src/common/utils.js
similarity index 100%
rename from InfoLogger/public/common/utils.js
rename to InfoLogger/src/common/utils.js
diff --git a/InfoLogger/public/constants/button-states.const.js b/InfoLogger/src/constants/button-states.const.js
similarity index 100%
rename from InfoLogger/public/constants/button-states.const.js
rename to InfoLogger/src/constants/button-states.const.js
diff --git a/InfoLogger/public/constants/log-level-filters.const.js b/InfoLogger/src/constants/log-level-filters.const.js
similarity index 100%
rename from InfoLogger/public/constants/log-level-filters.const.js
rename to InfoLogger/src/constants/log-level-filters.const.js
diff --git a/InfoLogger/public/constants/mode.const.js b/InfoLogger/src/constants/mode.const.js
similarity index 100%
rename from InfoLogger/public/constants/mode.const.js
rename to InfoLogger/src/constants/mode.const.js
diff --git a/InfoLogger/public/constants/text-filter-operators.const.js b/InfoLogger/src/constants/text-filter-operators.const.js
similarity index 100%
rename from InfoLogger/public/constants/text-filter-operators.const.js
rename to InfoLogger/src/constants/text-filter-operators.const.js
diff --git a/InfoLogger/public/constants/visual.const.js b/InfoLogger/src/constants/visual.const.js
similarity index 100%
rename from InfoLogger/public/constants/visual.const.js
rename to InfoLogger/src/constants/visual.const.js
diff --git a/InfoLogger/public/index.js b/InfoLogger/src/index.js
similarity index 95%
rename from InfoLogger/public/index.js
rename to InfoLogger/src/index.js
index 7f56cad9e9..3ff5b7ed60 100644
--- a/InfoLogger/public/index.js
+++ b/InfoLogger/src/index.js
@@ -12,7 +12,7 @@
* or submit itself to any jurisdiction.
*/
-import sessionService from '/js/src/sessionService.js';
+import { sessionService } from '/js/src/index.js';
sessionService.loadAndHideParameters();
// Expose sessionService to interact with it the browser's console
diff --git a/InfoLogger/public/log/ContextMenu.js b/InfoLogger/src/log/ContextMenu.js
similarity index 100%
rename from InfoLogger/public/log/ContextMenu.js
rename to InfoLogger/src/log/ContextMenu.js
diff --git a/InfoLogger/public/log/Log.js b/InfoLogger/src/log/Log.js
similarity index 100%
rename from InfoLogger/public/log/Log.js
rename to InfoLogger/src/log/Log.js
diff --git a/InfoLogger/public/log/Zoom.js b/InfoLogger/src/log/Zoom.js
similarity index 100%
rename from InfoLogger/public/log/Zoom.js
rename to InfoLogger/src/log/Zoom.js
diff --git a/InfoLogger/public/log/cellContextMenu.js b/InfoLogger/src/log/cellContextMenu.js
similarity index 100%
rename from InfoLogger/public/log/cellContextMenu.js
rename to InfoLogger/src/log/cellContextMenu.js
diff --git a/InfoLogger/public/log/commandLogs.js b/InfoLogger/src/log/commandLogs.js
similarity index 100%
rename from InfoLogger/public/log/commandLogs.js
rename to InfoLogger/src/log/commandLogs.js
diff --git a/InfoLogger/public/log/inspector.js b/InfoLogger/src/log/inspector.js
similarity index 100%
rename from InfoLogger/public/log/inspector.js
rename to InfoLogger/src/log/inspector.js
diff --git a/InfoLogger/public/log/severityUtils.js b/InfoLogger/src/log/severityUtils.js
similarity index 100%
rename from InfoLogger/public/log/severityUtils.js
rename to InfoLogger/src/log/severityUtils.js
diff --git a/InfoLogger/public/log/statusBar.js b/InfoLogger/src/log/statusBar.js
similarity index 100%
rename from InfoLogger/public/log/statusBar.js
rename to InfoLogger/src/log/statusBar.js
diff --git a/InfoLogger/public/log/tableColGroup.js b/InfoLogger/src/log/tableColGroup.js
similarity index 100%
rename from InfoLogger/public/log/tableColGroup.js
rename to InfoLogger/src/log/tableColGroup.js
diff --git a/InfoLogger/public/log/tableLogsContent.js b/InfoLogger/src/log/tableLogsContent.js
similarity index 100%
rename from InfoLogger/public/log/tableLogsContent.js
rename to InfoLogger/src/log/tableLogsContent.js
diff --git a/InfoLogger/public/log/tableLogsHeader.js b/InfoLogger/src/log/tableLogsHeader.js
similarity index 100%
rename from InfoLogger/public/log/tableLogsHeader.js
rename to InfoLogger/src/log/tableLogsHeader.js
diff --git a/InfoLogger/public/log/tableLogsScrollMap.js b/InfoLogger/src/log/tableLogsScrollMap.js
similarity index 100%
rename from InfoLogger/public/log/tableLogsScrollMap.js
rename to InfoLogger/src/log/tableLogsScrollMap.js
diff --git a/InfoLogger/public/logFilter/LogFilter.js b/InfoLogger/src/logFilter/LogFilter.js
similarity index 98%
rename from InfoLogger/public/logFilter/LogFilter.js
rename to InfoLogger/src/logFilter/LogFilter.js
index 61e0bfe7e0..340f3dacbf 100644
--- a/InfoLogger/public/logFilter/LogFilter.js
+++ b/InfoLogger/src/logFilter/LogFilter.js
@@ -380,7 +380,8 @@ export default class LogFilter extends Observable {
const criteriasJSON = JSON.stringify(this.criterias);
const functionAsString = filterFunction.toString();
- const functionWithCriterias = functionAsString.replace('\'DATA_PLACEHOLDER\'', criteriasJSON);
+ // Minifiers can rewrite the placeholder's quotes so match any quote style
+ const functionWithCriterias = functionAsString.replace(/(['"`])DATA_PLACEHOLDER\1/, criteriasJSON);
return functionWithCriterias;
}
diff --git a/InfoLogger/public/logFilter/commandFilters.js b/InfoLogger/src/logFilter/commandFilters.js
similarity index 100%
rename from InfoLogger/public/logFilter/commandFilters.js
rename to InfoLogger/src/logFilter/commandFilters.js
diff --git a/InfoLogger/public/logFilter/tableFilters.js b/InfoLogger/src/logFilter/tableFilters.js
similarity index 100%
rename from InfoLogger/public/logFilter/tableFilters.js
rename to InfoLogger/src/logFilter/tableFilters.js
diff --git a/InfoLogger/src/mithril-global.js b/InfoLogger/src/mithril-global.js
new file mode 100644
index 0000000000..48567ffd80
--- /dev/null
+++ b/InfoLogger/src/mithril-global.js
@@ -0,0 +1,22 @@
+/**
+ * @license
+ * Copyright 2019-2020 CERN and copyright holders of ALICE O2.
+ * See http://alice-o2.web.cern.ch/copyright for details of the copyright holders.
+ * All rights not expressly granted are reserved.
+ *
+ * This software is distributed under the terms of the GNU General Public
+ * License v3 (GPL Version 3), copied verbatim in the file "COPYING".
+ *
+ * In applying this license CERN does not waive the privileges and immunities
+ * granted to it by virtue of its status as an Intergovernmental Organization
+ * or submit itself to any jurisdiction.
+ */
+
+/*
+ * The Framework expects Mithril to set window.m, but once bundled
+ * Vite provides a fake module object and the condition in `mithril.min.js` means it just exports itself.
+ * So the alias in vite.config.mjs points the Framework's import here and the global is set explicitly.
+ */
+import m from 'mithril';
+
+window.m = m;
diff --git a/InfoLogger/public/services/ConfigurationService.js b/InfoLogger/src/services/ConfigurationService.js
similarity index 100%
rename from InfoLogger/public/services/ConfigurationService.js
rename to InfoLogger/src/services/ConfigurationService.js
diff --git a/InfoLogger/public/services/externalRouting/getBkpLogEntryFormUrl.js b/InfoLogger/src/services/externalRouting/getBkpLogEntryFormUrl.js
similarity index 100%
rename from InfoLogger/public/services/externalRouting/getBkpLogEntryFormUrl.js
rename to InfoLogger/src/services/externalRouting/getBkpLogEntryFormUrl.js
diff --git a/InfoLogger/public/table/Table.js b/InfoLogger/src/table/Table.js
similarity index 100%
rename from InfoLogger/public/table/Table.js
rename to InfoLogger/src/table/Table.js
diff --git a/InfoLogger/public/view.js b/InfoLogger/src/view.js
similarity index 100%
rename from InfoLogger/public/view.js
rename to InfoLogger/src/view.js
diff --git a/InfoLogger/test/public/query-mode-mocha.js b/InfoLogger/test/public/query-mode-mocha.js
index 0435a81937..d1601d75d1 100644
--- a/InfoLogger/test/public/query-mode-mocha.js
+++ b/InfoLogger/test/public/query-mode-mocha.js
@@ -186,7 +186,7 @@ describe('Query Mode test-suite', async () => {
before(async () => {
({
TEXT_FILTER_OPERATORS: textFilterOperators,
- } = await import('../../public/constants/text-filter-operators.const.js'));
+ } = await import('../../src/constants/text-filter-operators.const.js'));
});
it('should ask for confirmation when no text filters are set and not execute query when user cancels', async () => {
diff --git a/InfoLogger/test/public/zoom.mocha.js b/InfoLogger/test/public/zoom.mocha.js
index 5c86a52f59..920d2afb0a 100644
--- a/InfoLogger/test/public/zoom.mocha.js
+++ b/InfoLogger/test/public/zoom.mocha.js
@@ -36,8 +36,8 @@ describe('Zoom test-suite', async () => {
});
assert.strictEqual(result.zoomLevel, 1, 'default zoom level should be 1');
- assert.strictEqual(result.fontSize, '0.7rem', 'default font size should be 0.7rem');
- assert.strictEqual(result.rowHeight, '0.91rem', 'default row height should be 0.91rem');
+ assert.match(result.fontSize, /^0*\.70*rem$/, 'default font size should be 0.7rem');
+ assert.match(result.rowHeight, /^0*\.910*rem$/, 'default row height should be 0.91rem');
});
});
@@ -252,8 +252,8 @@ describe('Zoom test-suite', async () => {
});
assert.strictEqual(result.zoomLevel, 1, 'zoom level should reset to 1');
- assert.strictEqual(result.fontSize, '0.700rem', 'font size should reset to default');
- assert.strictEqual(result.rowHeight, '0.910rem', 'row height should reset to default');
+ assert.match(result.fontSize, /^0*\.70*rem$/, 'font size should reset to default');
+ assert.match(result.rowHeight, /^0*\.910*rem$/, 'row height should reset to default');
});
});
diff --git a/InfoLogger/vite.config.mjs b/InfoLogger/vite.config.mjs
new file mode 100644
index 0000000000..b68079c641
--- /dev/null
+++ b/InfoLogger/vite.config.mjs
@@ -0,0 +1,37 @@
+/**
+ * @license
+ * Copyright 2019-2020 CERN and copyright holders of ALICE O2.
+ * See http://alice-o2.web.cern.ch/copyright for details of the copyright holders.
+ * All rights not expressly granted are reserved.
+ *
+ * This software is distributed under the terms of the GNU General Public
+ * License v3 (GPL Version 3), copied verbatim in the file "COPYING".
+ *
+ * In applying this license CERN does not waive the privileges and immunities
+ * granted to it by virtue of its status as an Intergovernmental Organization
+ * or submit itself to any jurisdiction.
+ */
+
+import { createRequire } from 'node:module';
+import path from 'node:path';
+import { defineConfig } from 'vite';
+
+const webUi = path.resolve(import.meta.dirname, 'node_modules/@aliceo2/web-ui');
+const requireFromWebUi = createRequire(path.join(webUi, 'package.json'));
+
+export default defineConfig({
+ resolve: {
+ alias: [
+ // Map the Framework's absolute paths into its package
+ { find: /^\/(js|css)\//, replacement: `${path.join(webUi, 'Frontend')}/$1/` },
+ // Bundled build of Mithril will not set window.m so wrap it
+ { find: '/mithril/mithril.min.js', replacement: path.resolve(import.meta.dirname, 'src/mithril-global.js') },
+ // When the Framework is linked in dev, Mithril is only installed inside the Framework, so resolve it from there
+ { find: /^mithril$/, replacement: requireFromWebUi.resolve('mithril') },
+ ],
+ },
+ build: {
+ outDir: 'dist',
+ emptyOutDir: true,
+ },
+});