mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-14 23:32:20 +00:00
- src/geo drops the ported debug argument checks and the tests that bitExact already covers; package boundaries accept a directory entry, so src/geo/ is listed once per group. - Cesium no longer carries movers and lines nobody draws with: they are optional engine capabilities. The fake engine and the Cesium camera use the shared cameraMath; unused contract tables, clock.ticked, the 'finest' surface detail and Navara click statistics are gone. - ALPR keeps one overlay core and one presentation model for both engines, bikeshare one station bookkeeping, the Navara ground effects one definition helper; image atlases, view centres, mover banks and colours are shared. - The legacy switch route, the clock offset and rate controls and other unused exports are removed. - The acceptance runs the Navara draw, geo import and scope checks; scenarios use the harness switch and page helpers; the main chunk check keeps the size budget only and runs once in CI.
59 lines
2.3 KiB
JavaScript
59 lines
2.3 KiB
JavaScript
// Build guard: the Cesium-mode page must not load three or Navara. The
|
|
// initial chunks are every entry chunk and what it imports statically;
|
|
// navaraMode.js reaches Navara only through import(), so three and
|
|
// @navaramap/* belong to lazy chunks. This checks the bundle's module ids
|
|
// (what Rollup put in each chunk), and fails the build otherwise.
|
|
|
|
/**
|
|
* Module ids that only the Navara engine may load, when no package list is
|
|
* given (the browser build passes the full dependency closure,
|
|
* navaraDependencies.js).
|
|
*/
|
|
export const ENGINE_ONLY_MODULES =
|
|
/[\\/]node_modules[\\/](?:three|@navaramap[\\/][^\\/]+|postprocessing)[\\/]/;
|
|
|
|
/**
|
|
* Engine-only modules in initial chunks of a Rollup bundle, sorted by chunk.
|
|
* @param {Record<string, { type: string, isEntry?: boolean, imports?: string[], moduleIds?: string[] }>} bundle
|
|
* @returns {{ chunk: string, module: string }[]}
|
|
*/
|
|
export function initialChunkViolations(bundle, pattern = ENGINE_ONLY_MODULES) {
|
|
const initial = new Set();
|
|
const visit = (fileName) => {
|
|
const chunk = bundle[fileName];
|
|
if (!chunk || chunk.type !== 'chunk' || initial.has(fileName)) return;
|
|
initial.add(fileName);
|
|
for (const imported of chunk.imports ?? []) visit(imported);
|
|
};
|
|
for (const [fileName, chunk] of Object.entries(bundle))
|
|
if (chunk.type === 'chunk' && chunk.isEntry) visit(fileName);
|
|
const violations = [];
|
|
for (const fileName of [...initial].sort())
|
|
for (const module of bundle[fileName].moduleIds ?? [])
|
|
if (pattern.test(module)) violations.push({ chunk: fileName, module });
|
|
return violations;
|
|
}
|
|
|
|
/** The Rollup plugin: fails generateBundle when an initial chunk holds three or Navara. */
|
|
export function initialChunkGuard({
|
|
log = console.log,
|
|
pattern = ENGINE_ONLY_MODULES,
|
|
} = {}) {
|
|
return {
|
|
name: 'gev-initial-chunk-guard',
|
|
generateBundle(_options, bundle) {
|
|
const violations = initialChunkViolations(bundle, pattern);
|
|
if (violations.length) {
|
|
this.error(
|
|
'Navara-only modules in the Cesium-mode initial chunks:\n' +
|
|
violations
|
|
.map(({ chunk, module }) => ` ${chunk}: ${module}`)
|
|
.join('\n'),
|
|
);
|
|
return;
|
|
}
|
|
log('[initial-chunks] no Navara-only modules in the initial chunks');
|
|
},
|
|
};
|
|
}
|