diff --git a/core/frontend/public/assets/ArduPilot-Parameter-Repository b/core/frontend/public/assets/ArduPilot-Parameter-Repository index de465837c1..4dcfe038dd 160000 --- a/core/frontend/public/assets/ArduPilot-Parameter-Repository +++ b/core/frontend/public/assets/ArduPilot-Parameter-Repository @@ -1 +1 @@ -Subproject commit de465837c133cdd27f11a89e4011530a6ab75742 +Subproject commit 4dcfe038dd9b5ab93a73d6c2f7d1e54667e1166e diff --git a/core/frontend/src/types/autopilot/parameter-table.ts b/core/frontend/src/types/autopilot/parameter-table.ts index e150a69264..05d0a1f35f 100644 --- a/core/frontend/src/types/autopilot/parameter-table.ts +++ b/core/frontend/src/types/autopilot/parameter-table.ts @@ -1,4 +1,5 @@ import { isNumber } from 'lodash' +import ardupilotParamPaths from 'virtual:ardupilot-param-index' import { fetchVehicleType } from '@/components/autopilot/AutopilotManagerUpdater' import { MavAutopilot } from '@/libs/MAVLink2Rest/mavlink2rest-ts/messages/mavlink2rest-enum' @@ -108,7 +109,7 @@ export default class ParametersTable { console.debug(`Metadata override not present`) } await fetchFirmwareVehicleType() // required to populate autopilot.vehicle_type - const jsons = Object.keys(await import.meta.glob('/public/assets/ArduPilot-Parameter-Repository/**/*.json')) as string[] + const jsons = ardupilotParamPaths let folder = "Copter" switch (autopilot.firmware_vehicle_type) { case FirmwareVehicleType.ArduSub: diff --git a/core/frontend/src/types/parameter_repository.d.ts b/core/frontend/src/types/parameter_repository.d.ts index 3164157ce4..31b7684ad3 100644 --- a/core/frontend/src/types/parameter_repository.d.ts +++ b/core/frontend/src/types/parameter_repository.d.ts @@ -2,3 +2,8 @@ declare module 'https://bluerobotics.github.io/Blueos-Parameter-Repository/param const parameters: Dictionary> export default parameters } + +declare module 'virtual:ardupilot-param-index' { + const paths: string[] + export default paths +} diff --git a/core/frontend/vite.config.js b/core/frontend/vite.config.js index cf102f4f32..2fc103124d 100644 --- a/core/frontend/vite.config.js +++ b/core/frontend/vite.config.js @@ -79,6 +79,38 @@ export default defineConfig(({ command, mode }) => { }) } }, + // Expose the list of ArduPilot parameter JSON paths without bundling their contents. + // Using import.meta.glob would pull every (multi-MB) file into the module graph and blow up + // build memory; we only need the paths, the contents are fetched at runtime from public/. + { + name: 'ardupilot-param-index', + resolveId(id) { + if (id === 'virtual:ardupilot-param-index') { + return '\0virtual:ardupilot-param-index' + } + return null + }, + load(id) { + if (id !== '\0virtual:ardupilot-param-index') return null + const fs = require('fs') + const publicDir = path.resolve(__dirname, 'public') + const repoDir = path.resolve(publicDir, 'assets/ArduPilot-Parameter-Repository') + const paths = [] + const walk = (dir) => { + if (!fs.existsSync(dir)) return + for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { + const fullPath = path.join(dir, entry.name) + if (entry.isDirectory()) { + walk(fullPath) + } else if (entry.name.endsWith('.json')) { + paths.push(`/public/${path.relative(publicDir, fullPath).split(path.sep).join('/')}`) + } + } + } + walk(repoDir) + return `export default ${JSON.stringify(paths)}` + }, + }, // Remove non-JSON files from ArduPilot parameter repository to reduce image size { name: 'cleanup-ardupilot-files',