diff --git a/docs/CODE-BOUNDARIES.md b/docs/CODE-BOUNDARIES.md index e5a9999ca..cd3c2bf2c 100644 --- a/docs/CODE-BOUNDARIES.md +++ b/docs/CODE-BOUNDARIES.md @@ -55,15 +55,24 @@ See [application construction](APPLICATION.md) and the 2. `scripts/check-package-boundaries.mjs` builds every declared export without app Vite configuration or environment files. `scripts/package-boundaries.json` assigns each export exactly once and lists its owned modules and external - dependencies; a module entry ending in `/` (such as `src/geo/`) owns every - file under that directory. Unused imports still count. Node exports have only a `node` + dependencies. Shared foundations use directory entries: `src/i18n/`, + `src/geo/` and `src/globe/`. An entry ending in `/` owns the files below it; + `src/globe/` excludes `cesium/`, `navara/` and `testing/`, which need separate + ownership. The import-direction gate still enforces engine rules. + Aggregate groups use directories where their module lists cover the directory; + small groups retain explicit snapshots outside the shared foundations. + Unused imports still count. Node exports have only a `node` condition; browser groups cannot use build-only dependency exceptions. Run `node scripts/check-package-boundaries.mjs --write` to regenerate each group's `modules` list in `scripts/package-boundaries.json`, retaining useful - entries in order and appending newly reached paths in sorted order. The check - without `--write` is unchanged and does not reject stale entries. Review the - manifest diff like a lockfile diff before accepting changes to ownership. + entries in order and appending newly reached paths in sorted order. Directory + entries stay directories while they own reached modules; they never expand + into file lists. Without `--write`, the check rejects both undeclared reached + modules and declarations no longer reached, printing additions and removals + for each changed group. A directory becomes stale only when no reached module + belongs to it. Review the manifest diff like a lockfile diff before accepting + changes to ownership. Portable source graphs cannot reach application/rendering, Node, Cesium or browser globals. This includes `sources/*`, dedicated `layers/*/source` exports, diff --git a/scripts/check-package-boundaries.mjs b/scripts/check-package-boundaries.mjs index 71d076229..3fac43c61 100644 --- a/scripts/check-package-boundaries.mjs +++ b/scripts/check-package-boundaries.mjs @@ -6,7 +6,7 @@ import { VUE_PLUGIN_OPTIONS } from '../build/vueOptions.js'; import { build, normalizePath } from 'vite'; import * as prettier from 'prettier'; -/** Build each browser or Node export group and reject imports outside its declared ownership. */ +/** Build each browser or Node export group and check its module snapshot. */ export async function checkPackageBoundaries(root) { return buildPackageBoundaries(root, false); } @@ -36,6 +36,7 @@ async function buildPackageBoundaries(root, write) { ); } const reports = []; + const differences = []; for (const [name, group] of Object.entries(groups)) { const node = group.runtime === 'node'; if (group.runtime && !['browser', 'node'].includes(group.runtime)) { @@ -48,12 +49,18 @@ async function buildPackageBoundaries(root, write) { ) { throw new Error(`Invalid package boundary: ${name}`); } - // A module entry ending in "/" owns every file under that directory. + // The shared globe directory excludes engines and their test support. const allowed = new Set(); const allowedDirectories = []; const modulePaths = new Map(); + const globeDirectory = `${normalizePath(path.join(root, 'src/globe'))}/`; + const ownsDirectory = (id, directory) => + id.startsWith(directory) && + (directory !== globeDirectory || + !/^(?:cesium|navara|testing)\//.test(id.slice(directory.length))); const owns = (id) => - allowed.has(id) || allowedDirectories.some((dir) => id.startsWith(dir)); + allowed.has(id) || + allowedDirectories.some((directory) => ownsDirectory(id, directory)); for (const module of group.modules) { if ( typeof module !== 'string' || @@ -67,7 +74,7 @@ async function buildPackageBoundaries(root, write) { try { resolved = await realpath(path.join(root, module)); } catch (error) { - if (write && error.code === 'ENOENT') continue; + if (error.code === 'ENOENT') continue; throw error; } const relative = path.relative(root, resolved); @@ -106,11 +113,7 @@ async function buildPackageBoundaries(root, write) { ) { throw new Error(`Node export must have only a node condition: ${key}`); } - if ( - typeof target !== 'string' || - !target.startsWith('./') || - (!write && !owns(normalizePath(path.resolve(root, target)))) - ) { + if (typeof target !== 'string' || !target.startsWith('./')) { throw new Error(`Export must point to an owned module: ${key}`); } return path.resolve(root, target); @@ -136,11 +139,6 @@ async function buildPackageBoundaries(root, write) { // template blocks belong to the component file itself. if (info.id.startsWith('\0')) return; const id = info.id.split('?')[0]; - if (!write && !owns(id)) { - throw new Error( - `Package boundary ${name} imports an unowned module: ${path.relative(root, id)}`, - ); - } seen.add(id); }, }, @@ -165,38 +163,50 @@ async function buildPackageBoundaries(root, write) { }, }, }); + const reached = [...seen]; + const kept = group.modules.filter((module) => { + const resolved = modulePaths.get(module); + return module.endsWith('/') + ? reached.some((id) => ownsDirectory(id, `${resolved}/`)) + : seen.has(resolved); + }); + const removed = group.modules.filter((module) => !kept.includes(module)); + const added = reached + .filter((id) => !owns(id)) + .map((id) => { + const relative = path.relative(root, id); + if ( + !path.isAbsolute(id) || + relative === '..' || + relative.startsWith(`..${path.sep}`) || + path.isAbsolute(relative) + ) { + throw new Error(`Boundary module escapes repository: ${name}`); + } + return normalizePath(relative); + }) + .sort(); + if (added.length || removed.length) + differences.push({ name, added, removed }); if (write) { - const reached = [...seen]; - const kept = group.modules.filter((module) => { - const resolved = modulePaths.get(module); - return module.endsWith('/') - ? reached.some((id) => id.startsWith(`${resolved}/`)) - : seen.has(resolved); - }); - const removed = group.modules.filter((module) => !kept.includes(module)); - const added = reached - .filter((id) => !owns(id)) - .map((id) => { - const relative = path.relative(root, id); - if ( - !path.isAbsolute(id) || - relative === '..' || - relative.startsWith(`..${path.sep}`) || - path.isAbsolute(relative) - ) { - throw new Error(`Boundary module escapes repository: ${name}`); - } - return normalizePath(relative); - }) - .sort(); group.modules = [...kept, ...added]; - if (added.length || removed.length) - reports.push({ name, added, removed }); } else { reports.push({ name, exports: input.length, modules: seen.size }); } } - if (write && reports.length) { + if (!write && differences.length) { + throw new Error( + [ + 'Package boundary snapshots differ. Run node scripts/check-package-boundaries.mjs --write and review the diff.', + ...differences.flatMap(({ name, added, removed }) => [ + `${name}: ${added.length} added, ${removed.length} removed.`, + ...added.map((module) => ` + ${module}`), + ...removed.map((module) => ` - ${module}`), + ]), + ].join('\n'), + ); + } + if (write && differences.length) { const file = path.join(root, 'scripts/package-boundaries.json'); const formatted = await prettier.format(JSON.stringify(manifest), { ...(await prettier.resolveConfig(file)), @@ -204,7 +214,7 @@ async function buildPackageBoundaries(root, write) { }); await writeFile(file, formatted); } - return reports; + return write ? differences : reports; } const invoked = process.argv[1] diff --git a/scripts/package-boundaries.json b/scripts/package-boundaries.json index 33b529d69..ce4dee351 100644 --- a/scripts/package-boundaries.json +++ b/scripts/package-boundaries.json @@ -91,19 +91,7 @@ "src/ui/views/SceneShotList.vue", "src/ui/stores/scenes.js", "src/ui/scenePresentation.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", + "src/i18n/", "src/ui/views/panels/StreetLevelPanel.vue", "src/ui/views/panels/CctvPanel.vue", "src/ui/cctv/CctvCalValue.vue", @@ -246,7 +234,7 @@ "src/data/aisStreamAdapter.js", "src/data/aisWatchdog.js", "src/sources/httpBody.js", - "src/i18n/marker.js" + "src/i18n/" ], "external": ["ws"] }, @@ -278,7 +266,7 @@ "src/localRequestGate.mjs", "src/data/routeSteps.js", "src/sources/httpBody.js", - "src/i18n/marker.js", + "src/i18n/", "src/sources/rateLimit.js" ], "external": [] @@ -301,7 +289,7 @@ "server/providers/common/http.js", "src/data/spaceProviderRequests.js", "src/sources/httpBody.js", - "src/i18n/marker.js" + "src/i18n/" ], "external": [] }, @@ -335,7 +323,7 @@ "server/providers/traffic.js", "server/providers/common/http.js", "src/sources/httpBody.js", - "src/i18n/marker.js", + "src/i18n/", "src/data/tomtomTiles.js", "src/data/tileBudget.js", "server/providers/common/same-site.js", @@ -360,7 +348,7 @@ "server/providers/firms.js", "server/providers/common/http.js", "src/sources/httpBody.js", - "src/i18n/marker.js", + "src/i18n/", "src/data/firmsCsv.js" ], "external": [] @@ -375,7 +363,7 @@ "src/sources/rateLimit.js", "src/data/gbfsSource.js", "src/sources/httpBody.js", - "src/i18n/marker.js" + "src/i18n/" ], "external": [] }, @@ -413,7 +401,7 @@ "src/data/cctvFootprint.js", "src/sources/cctvTypes.js", "src/sources/httpBody.js", - "src/i18n/marker.js" + "src/i18n/" ], "external": [] }, @@ -430,7 +418,7 @@ "src/sources/rateLimit.js", "server/providers/common/http.js", "src/sources/httpBody.js", - "src/i18n/marker.js" + "src/i18n/" ], "external": ["pbf"] }, @@ -447,7 +435,7 @@ "server/providers/common/http.js", "src/sources/radioBrowser.js", "src/sources/httpBody.js", - "src/i18n/marker.js" + "src/i18n/" ], "external": [] }, @@ -472,7 +460,7 @@ "src/data/routeSteps.js", "src/localRequestGate.mjs", "src/sources/httpBody.js", - "src/i18n/marker.js", + "src/i18n/", "src/sources/overpass.js", "src/sources/rateLimit.js", "server/providers/common/boundedCache.js", @@ -497,7 +485,7 @@ "server/providers/overpass/geometry.js", "server/providers/overpass/transport.js", "src/sources/httpBody.js", - "src/i18n/marker.js", + "src/i18n/", "src/sources/rateLimit.js", "server/providers/common/same-site.js", "src/localRequestGate.mjs" @@ -523,7 +511,7 @@ "src/geoDistance.js", "src/nominatimGeocode.js", "src/sources/httpBody.js", - "src/i18n/marker.js", + "src/i18n/", "src/sources/rateLimit.js", "src/data/naturalEarthRegions.js", "src/data/bundledJson.js", @@ -544,8 +532,7 @@ "runtime": "node", "exports": ["./server/providers/openai"], "modules": [ - "src/i18n/marker.js", - "src/i18n/locale.js", + "src/i18n/", "src/hudLayoutPolicy.js", "server/providers/common/rate-limit.js", "server/providers/common/request.js", @@ -589,7 +576,7 @@ "runtime": "node", "exports": ["./server/standalone/key-setup"], "modules": [ - "src/i18n/marker.js", + "src/i18n/", "scripts/pinokio-environment.mjs", "server/providers/common/source-root.js", "server/standalone/key-setup.js", @@ -623,7 +610,7 @@ "src/data/bundledJson.js", "src/data/retryableLoad.js", "src/sources/httpBody.js", - "src/i18n/marker.js", + "src/i18n/", "src/sources/nominatim.js" ], "external": [] @@ -659,19 +646,7 @@ "src/ui/applicationShortcuts.js", "src/ui/styleParameters.js", "src/ui/rail/rangeValue.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", + "src/i18n/", "src/ui/rail/fieldValue.js", "src/ui/kit/UiSlider.js" ], @@ -694,39 +669,26 @@ "src/styles/thermal.js", "src/styles/anime.js", "src/styles/noir.js", - "src/i18n/marker.js" + "src/i18n/" ], "external": ["cesium"] }, "map-source-controls": { "exports": ["./ui/maps"], "modules": [ - "src/i18n/marker.js", + "src/i18n/", "src/ui/mapSource.js", "src/ui/mapSourceControls.js", "src/mapStackChips.js", "src/keySetupCore.mjs", - "src/localRequestGate.mjs", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json" + "src/localRequestGate.mjs" ], "external": [] }, "layer-panel": { "exports": ["./ui/layers", "./ui/layers/feedback"], "modules": [ - "src/i18n/marker.js", + "src/i18n/", "src/ui/layers.js", "src/ui/layerPanel.js", "src/ui/layerNames.js", @@ -743,19 +705,6 @@ "src/keySetupCore.mjs", "src/localRequestGate.mjs", "src/data/feedState.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", "src/ui/unitLabels.js", "src/ui/keyGuidance.js", "src/ui/statusText.js", @@ -786,19 +735,7 @@ "src/ui/placeNames.js", "src/locationStatus.js", "src/app/stateChannel.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json" + "src/i18n/" ], "external": [] }, @@ -813,19 +750,7 @@ "src/ui/stores/radio.js", "src/ui/stores/owners.js", "src/ui/radioTunerModel.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", + "src/i18n/", "src/ui/i18n.js" ], "external": ["vue", "pinia", "vue-i18n"] @@ -842,45 +767,19 @@ "src/ui/cctvVideo.js", "src/ui/cctvPresentation.js", "src/ui/quebecCctvOverlay.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", + "src/i18n/", "src/ui/vueRuntime.js", "src/ui/stores/cctv.js", "src/ui/stores/status.js", "src/ui/i18n.js", - "src/geo/boundingSphere.js", - "src/geo/cartesian2.js", - "src/geo/cartesian3.js", - "src/geo/cartographic.js", - "src/geo/ellipsoid.js", - "src/geo/ellipsoidGeodesic.js", - "src/geo/index.js", - "src/geo/julianDate.js", - "src/geo/math.js", - "src/geo/matrix3.js", - "src/geo/matrix4.js", - "src/geo/quaternion.js", - "src/geo/scaleToGeodeticSurface.js", - "src/geo/simon1994.js", - "src/geo/transforms.js" + "src/geo/" ], "external": ["vue", "pinia", "vue-i18n", "cesium"] }, "context-controls": { "exports": ["./ui/context", "./ui/context/policy"], "modules": [ - "src/i18n/marker.js", + "src/i18n/", "src/ui/context.js", "src/ui/contextActions.js", "src/ui/contextBindings.js", @@ -892,19 +791,6 @@ "src/ui/contextTransactions.js", "src/contextModePolicy.js", "src/rightRailPolicy.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", "src/ui/layerNames.js" ], "external": [] @@ -932,7 +818,7 @@ "src/cockpitOrbitalSatellites.js", "src/layers/installations/classLabel.js", "src/data/installationNames.js", - "src/i18n/marker.js", + "src/i18n/", "src/data/placeBelow.js", "src/layers/satellites/sensors.js", "src/data/adminBoundaries.js", @@ -961,19 +847,6 @@ "src/geoDistance.js", "src/data/motionModel.js", "src/ui/panelRailGeometry.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", "src/ui/layerNames.js", "src/ui/unitLabels.js", "src/geo/", @@ -989,19 +862,7 @@ "src/ui/sceneControls.js", "src/ui/scenePresentation.js", "src/ui/stores/scenes.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", + "src/i18n/", "src/ui/vueRuntime.js", "src/ui/i18n.js" ], @@ -1017,7 +878,7 @@ "src/data/trackingGesture.js", "src/data/headingDegrees.js", "src/data/distanceFormat.js", - "src/i18n/marker.js", + "src/i18n/", "src/ui/mobileShell.js", "src/exclusiveSurfaces.js", "src/ui/placeNames.js", @@ -1060,11 +921,7 @@ "src/navigationPolicy.js", "src/panelStackLayout.js", "src/rightRailPolicy.js", - "src/styles/anime.js", - "src/styles/noir.js", - "src/styles/retro.js", - "src/styles/surveillance.js", - "src/styles/thermal.js", + "src/styles/", "src/ui/applicationShell.js", "src/app/layerSession.js", "src/ui/shellScene.js", @@ -1130,11 +987,8 @@ "src/ui/layerPanel.js", "src/ui/weatherPanel.js", "src/ui/layerRowText.js", - "src/ui/layerPanel/LayerRows.vue", + "src/ui/layerPanel/", "src/ui/rail/classToggle.js", - "src/ui/layerPanel/RowText.vue", - "src/ui/layerPanel/RowSwitch.vue", - "src/ui/layerPanel/RowSlider.vue", "src/ui/leftPanelRail.js", "src/ui/location.js", "src/ui/locationControls.js", @@ -1180,19 +1034,6 @@ "src/layers/localAdsb/feedNames.js", "src/ui/localSdrPresentation.js", "src/data/cameraArrival.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", "src/ui/unitLabels.js", "src/ui/keyGuidance.js", "src/ui/layerNames.js", @@ -1245,10 +1086,9 @@ "src/ui/stores/recording.js", "src/ui/i18n.js", "src/cameraAngles.js", - "src/globe/contract.js", + "src/globe/", "src/geo/", "src/app/layers/directory.js", - "src/globe/follow.js", "src/time/worldClock.js", "src/ui/kit/UiSegmented.vue", "src/ui/wildlifeSightingCard.js", @@ -1260,8 +1100,7 @@ "src/layers/wildlifeSightings/photoText.js", "src/globe/cesium/doubleClick.js", "src/celestialRing.js", - "src/celestialRing/ephemeris.js", - "src/celestialRing/view.js", + "src/celestialRing/", "src/data/detectionCohort.js", "src/data/labelArbiter.js", "src/globe/cesium/celestial.js", @@ -1299,7 +1138,7 @@ "src/director/interactions/session.js", "src/director/sharing/bundle.js", "src/director/sharing/preview.js", - "src/i18n/marker.js", + "src/i18n/", "src/director/sharing/lifetime.js", "src/director/authoring.js" ], @@ -1352,26 +1191,13 @@ "src/data/inputOwnership.js", "src/director/sharing/bundle.js", "src/director/sharing/preview.js", - "src/i18n/marker.js", + "src/i18n/", "src/director/sharing/lifetime.js", "src/director/authoring.js", "src/scenes/sharing.js", "src/ui/sceneSharing.js", "src/ui/stores/sceneSharing.js", "src/data/cameraArrival.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", "src/visualStylePolicy.js", "src/ui/vueRuntime.js", "src/ui/stores/status.js", @@ -1387,7 +1213,7 @@ "exports": ["./sources/live"], "modules": [ "src/sources/adsbFields.js", - "src/i18n/marker.js", + "src/i18n/", "src/data/aircraftEmergency.js", "src/sources/live/aircraft.js", "src/sources/live/contract.js", @@ -1402,7 +1228,7 @@ "exports": ["./layers/flights"], "modules": [ "src/data/headingDegrees.js", - "src/i18n/marker.js", + "src/i18n/", "src/cyberSonar.js", "src/data/aircraftClass.js", "src/data/aircraftEmergency.js", @@ -1444,19 +1270,6 @@ "src/layers/flights/snapshotRenderer.js", "src/layers/flights/modelSpec.js", "src/data/modelEligibility.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", "src/ui/unitLabels.js", "src/globe/cesium/sceneProjection.js", "src/geo/", @@ -1473,7 +1286,7 @@ "exports": ["./layers/military"], "modules": [ "src/data/headingDegrees.js", - "src/i18n/marker.js", + "src/i18n/", "src/cyberSonar.js", "src/data/aircraftClass.js", "src/data/aircraftEmergency.js", @@ -1509,19 +1322,6 @@ "src/layers/military/recordPolicy.js", "src/layers/military/snapshotRenderer.js", "src/data/modelEligibility.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", "src/globe/cesium/sceneProjection.js", "src/layers/shared/color.js", "src/geo/", @@ -1536,7 +1336,7 @@ "exports": ["./aircraft"], "modules": [ "src/data/trackingGesture.js", - "src/i18n/marker.js", + "src/i18n/", "src/data/aircraftClass.js", "src/data/aircraftIcons.js", "src/data/aircraftMeta.js", @@ -1591,19 +1391,7 @@ "src/layers/vessels/cockpitSubject.js", "src/geoDistance.js", "src/data/inputOwnership.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", + "src/i18n/", "src/layers/vessels/icons.js", "src/layers/shared/color.js", "src/globe/cesium/sceneProjection.js", @@ -1629,24 +1417,11 @@ "recent-imagery": { "exports": ["./layers/recent-imagery"], "modules": [ - "src/i18n/marker.js", + "src/i18n/", "src/layers/recentImagery/index.js", "src/layers/recentImagery/model.js", "src/layers/recentImagery/catalog.js", "src/layers/shared/imageryHost.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", "src/ui/unitLabels.js", "src/layers/recentImagery/display.js" ], @@ -1673,19 +1448,7 @@ "src/layers/firms/state.js", "src/layers/firms/viewport.js", "src/data/inputOwnership.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", + "src/i18n/", "src/geo/", "src/layers/firms/rectangle.js", "src/layers/shared/color.js", @@ -1717,19 +1480,7 @@ "src/layers/satellites/testing.js", "src/layers/satellites/tracking.js", "src/data/inputOwnership.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", + "src/i18n/", "src/ui/unitLabels.js", "src/geo/", "src/layers/shared/color.js", @@ -1768,19 +1519,7 @@ "src/layers/launches/source.js", "src/layers/launches/state.js", "src/layers/launches/testing.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", + "src/i18n/", "src/layers/shared/color.js", "src/geo/", "src/time/clock.js", @@ -1807,7 +1546,7 @@ "src/data/tileBudget.js", "src/sources/capability.js", "src/sources/httpBody.js", - "src/i18n/marker.js", + "src/i18n/", "src/sources/openFreeMap.js", "src/sources/militaryTileGeometry.js", "src/sources/vectorTiles.js", @@ -1816,19 +1555,6 @@ "src/sources/requestDeadline.js", "src/data/bundledJson.js", "src/data/retryableLoad.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", "src/layers/shared/color.js", "src/geo/" ], @@ -1839,7 +1565,7 @@ "modules": [ "src/data/headingDegrees.js", "src/data/distanceFormat.js", - "src/i18n/marker.js", + "src/i18n/", "src/cyberSonar.js", "src/awarenessEcho.js", "src/cockpitMath.js", @@ -1864,19 +1590,6 @@ "src/layers/awareness/subject.js", "src/layers/awareness/testing.js", "src/ui/panelRailGeometry.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", "src/data/feedState.js", "src/loadingFeedback.js", "src/data/installationFeedback.js", @@ -1923,26 +1636,13 @@ "src/sources/overpassRoads.js", "src/sources/capability.js", "src/sources/httpBody.js", - "src/i18n/marker.js", + "src/i18n/", "src/sources/openFreeMap.js", "src/data/installationNames.js", "src/sources/militaryTileGeometry.js", "src/sources/vectorTiles.js", "src/sources/phaseTiming.js", "src/layers/traffic/roadModes.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", "src/geo/", "src/layers/traffic/render/display.js" ], @@ -1963,19 +1663,7 @@ "src/layers/bikeshare/source.js", "src/layers/bikeshare/state.js", "src/layers/bikeshare/testing.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", + "src/i18n/", "src/layers/bikeshare/selectionModel.js", "src/layers/shared/color.js", "src/overlays/bindOverlayHost.js" @@ -2021,19 +1709,7 @@ "src/data/cctvFootprint.js", "src/data/inputOwnership.js", "src/layers/cctv/sourcePolicy.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", + "src/i18n/", "src/layers/shared/color.js", "src/geo/", "src/overlays/bindOverlayHost.js" @@ -2093,26 +1769,13 @@ "src/layers/streetLevel/tileCache.js", "src/layers/streetLevel/panorama.js", "src/layers/streetLevel/providers/mapillary/source.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", + "src/i18n/", "src/layers/streetLevel/providers/mapillary/policy.js", "src/geo/", "src/layers/shared/color.js", - "src/globe/cameraMath.js", + "src/globe/", "src/layers/streetLevel/render/display.js", "src/layers/shared/render/surfacePoints.js", - "src/globe/contract.js", "src/time/worldClock.js", "src/time/clock.js" ], @@ -2131,22 +1794,9 @@ "src/layers/alpr/tileRecords.js", "src/sources/capability.js", "src/sources/httpBody.js", - "src/i18n/marker.js", + "src/i18n/", "src/sources/vectorTiles.js", "src/sources/phaseTiming.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", "src/geo/" ], "external": ["@mapbox/vector-tile", "pbf"] @@ -2183,19 +1833,7 @@ "src/layers/radio/volume.js", "src/ui/radioTunerModel.js", "src/data/inputOwnership.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", + "src/i18n/", "src/geo/", "src/overlays/bindOverlayHost.js" ], @@ -2211,19 +1849,7 @@ "src/layers/submarineCables/policy.js", "src/layers/submarineCables/surface.js", "src/data/inputOwnership.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", + "src/i18n/", "src/geo/", "src/sources/requestDeadline.js", "src/layers/shared/color.js", @@ -2259,7 +1885,7 @@ "./maps/defaults" ], "modules": [ - "src/i18n/marker.js", + "src/i18n/", "src/maps/availability.js", "src/maps/catalog.js", "src/maps/controller.js", @@ -2273,20 +1899,7 @@ "src/maps/terrainRetry.js", "src/keySetupCore.mjs", "src/localRequestGate.mjs", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", - "src/globe/contract.js" + "src/globe/" ], "external": ["cesium"] }, @@ -2352,19 +1965,7 @@ "src/voice/earcon.js", "src/voice/pointerContext.js", "src/voice/pointerReticle.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", + "src/i18n/", "src/ui/statusText.js", "src/voice/providerCommands.js", "src/voice/providerCapabilities.js", @@ -2372,7 +1973,6 @@ "src/voice/geminiAudio.js", "src/sources/httpBody.js", "src/sources/requestDeadline.js", - "src/i18n/marker.js", "src/ui/stores/voice.js", "src/ui/vueRuntime.js", "src/ui/stores/pointerReticle.js", @@ -2412,7 +2012,7 @@ "src/hudLayoutPolicy.js", "src/ui/radioPanelPlacement.js", "src/globe/cesium/sonarCommands.js", - "src/scenes/nepalEvidencePack.js", + "src/scenes/", "src/data/approxDistance.js", "src/data/bhoteKoshiEvent.js", "src/ui/imagerySplit.js", @@ -2421,15 +2021,9 @@ "src/data/bhoteKoshiIncidentPlaces.js", "src/data/bhoteKoshiFloodPath.js", "src/data/bhoteKoshiShotPaths.js", - "src/annotations/annotationEngine.js", + "src/annotations/", "src/geoDistance.js", - "src/annotations/annotationResolver.js", - "src/annotations/hybridAnnotationRenderer.js", - "src/annotations/index.js", - "src/annotations/resolver.js", - "src/globe/cesium/annotations/screenAnnotationRenderer.js", - "src/annotations/screenScene.js", - "src/globe/cesium/annotations/worldAnnotationRenderer.js", + "src/globe/cesium/annotations/", "src/app/catalog.js", "src/app/constructCatalog.js", "src/app/sourceComposition.js", @@ -2480,7 +2074,7 @@ "src/cctvFocusPolicy.js", "src/cctvFocusRequest.js", "src/celestialRing.js", - "src/celestialRing/ephemeris.js", + "src/celestialRing/", "src/cockpitCloudEffects.js", "src/cockpitMath.js", "src/cockpitTracking.js", @@ -2517,16 +2111,7 @@ "src/data/contextStore.js", "src/data/dataCredits.js", "src/data/wind.js", - "src/layers/wind/index.js", - "src/layers/wind/model.js", - "src/layers/wind/fields.js", - "src/layers/wind/streamlines.js", - "src/layers/wind/gpuRendering.js", - "src/layers/wind/relief.js", - "src/layers/wind/inspection.js", - "src/layers/wind/presentation.js", - "src/layers/wind/rendering.js", - "src/layers/wind/source.js", + "src/layers/wind/", "src/sources/windBody.js", "src/data/detection.js", "src/data/detectionCohort.js", @@ -2548,7 +2133,7 @@ "src/data/groundSnap.js", "src/data/iconOrientation.js", "src/data/infrastructure.js", - "src/layers/infrastructure/index.js", + "src/layers/infrastructure/", "src/data/osmOverlays.js", "src/data/installationFeedback.js", "src/data/labelArbiter.js", @@ -2621,92 +2206,15 @@ "src/layers/alpr/policy.js", "src/layers/alpr/visuals.js", "src/layers/alpr/source.js", - "src/layers/awareness/controls.js", - "src/layers/awareness/dependencies.js", - "src/layers/awareness/focus.js", - "src/layers/awareness/history.js", - "src/layers/awareness/index.js", - "src/layers/awareness/ingestion.js", - "src/layers/awareness/lifecycle.js", - "src/layers/awareness/model.js", - "src/layers/awareness/navigation.js", - "src/layers/awareness/panel.js", - "src/layers/awareness/policy.js", - "src/layers/awareness/presentation.js", - "src/layers/awareness/queries.js", - "src/layers/awareness/rendering.js", - "src/layers/awareness/state.js", - "src/layers/awareness/subject.js", - "src/layers/awareness/testing.js", - "src/layers/bikeshare/controls.js", - "src/layers/bikeshare/index.js", - "src/layers/bikeshare/ingestion.js", - "src/layers/bikeshare/model.js", + "src/layers/awareness/", + "src/layers/bikeshare/", "src/sources/gbfsStations.js", - "src/layers/bikeshare/policy.js", - "src/layers/bikeshare/queries.js", - "src/layers/bikeshare/registry.js", - "src/layers/bikeshare/source.js", - "src/layers/bikeshare/state.js", - "src/layers/bikeshare/testing.js", - "src/layers/bikeshare/viewport.js", - "src/layers/cctv/calibration.js", - "src/layers/cctv/cards.js", - "src/layers/cctv/catalog.js", - "src/layers/cctv/controls.js", - "src/layers/cctv/frames.js", - "src/layers/cctv/geometry.js", - "src/layers/cctv/geometryQueue.js", - "src/layers/cctv/ground.js", - "src/layers/cctv/headingConfidence.js", - "src/layers/cctv/health.js", - "src/layers/cctv/hover.js", - "src/layers/cctv/index.js", - "src/layers/cctv/ingestion.js", - "src/layers/cctv/lifecycle.js", - "src/layers/cctv/model.js", - "src/layers/cctv/modelSpecs.js", - "src/layers/cctv/navigation.js", - "src/layers/cctv/policy.js", - "src/layers/cctv/presentation.js", - "src/layers/cctv/projection.js", - "src/layers/cctv/videoPlayback.js", - "src/layers/cctv/rendering.js", - "src/layers/cctv/selection.js", - "src/layers/cctv/source.js", - "src/layers/cctv/state.js", - "src/layers/cctv/testing.js", - "src/layers/earthquakes/index.js", - "src/layers/earthquakes/model.js", - "src/layers/earthquakes/source.js", - "src/layers/firms/anchors.js", - "src/layers/firms/cards.js", - "src/layers/firms/index.js", - "src/layers/firms/ingestion.js", - "src/layers/firms/lifecycle.js", - "src/layers/firms/model.js", - "src/layers/firms/policy.js", - "src/layers/firms/queries.js", - "src/layers/firms/rendering.js", - "src/layers/firms/selection.js", - "src/layers/firms/source.js", - "src/layers/firms/state.js", - "src/layers/firms/viewport.js", - "src/layers/flights/controller.js", - "src/layers/flights/enrichment.js", - "src/layers/flights/evidence.js", - "src/layers/flights/index.js", - "src/layers/flights/ingestion.js", - "src/layers/flights/lifecycle.js", + "src/layers/cctv/", + "src/layers/earthquakes/", + "src/layers/firms/", + "src/layers/flights/", "src/layers/aircraft/sceneBinding.js", "src/layers/aircraft/tracking.js", - "src/layers/flights/motion.js", - "src/layers/flights/policy.js", - "src/layers/flights/queries.js", - "src/layers/flights/rendering.js", - "src/layers/flights/state.js", - "src/layers/flights/testing.js", - "src/layers/flights/tracking.js", "src/layers/installations/controls.js", "src/layers/installations/index.js", "src/layers/installations/ingestion.js", @@ -2715,102 +2223,14 @@ "src/layers/installations/source.js", "src/layers/installations/state.js", "src/layers/installations/viewport.js", - "src/layers/launches/camera.js", - "src/layers/launches/controls.js", - "src/layers/launches/index.js", - "src/layers/launches/ingestion.js", - "src/layers/launches/launchPad.js", - "src/layers/launches/lifecycle.js", - "src/layers/launches/model.js", - "src/layers/launches/orbitRendering.js", - "src/layers/launches/overlays.js", - "src/layers/launches/panel.js", - "src/layers/launches/paths.js", - "src/layers/launches/policy.js", - "src/layers/launches/policyHelpers.js", - "src/layers/launches/rendering.js", - "src/layers/launches/replay.js", - "src/layers/launches/selection.js", - "src/layers/launches/source.js", - "src/layers/launches/state.js", - "src/layers/launches/testing.js", - "src/layers/military/controller.js", - "src/layers/military/index.js", - "src/layers/military/ingestion.js", - "src/layers/military/lifecycle.js", - "src/layers/military/motion.js", - "src/layers/military/policy.js", - "src/layers/military/queries.js", - "src/layers/military/rendering.js", - "src/layers/military/state.js", - "src/layers/military/testing.js", - "src/layers/military/tracking.js", - "src/layers/radio/catalogModel.js", - "src/layers/radio/categories.js", - "src/layers/radio/clustering.js", - "src/layers/radio/controls.js", - "src/layers/radio/index.js", - "src/layers/radio/ingestion.js", - "src/layers/radio/interaction.js", - "src/layers/radio/labels.js", - "src/layers/radio/lifecycle.js", - "src/layers/radio/model.js", - "src/layers/radio/navigation.js", - "src/layers/radio/playback.js", - "src/layers/radio/policy.js", - "src/layers/radio/presentation.js", - "src/layers/radio/queries.js", - "src/layers/radio/rendering.js", - "src/layers/radio/selection.js", - "src/layers/radio/source.js", - "src/layers/radio/state.js", - "src/layers/radio/tuning.js", - "src/layers/radio/tuningNoise.js", - "src/layers/radio/volume.js", - "src/layers/satellites/catalog.js", - "src/layers/satellites/cockpitSubject.js", - "src/layers/satellites/controls.js", - "src/layers/satellites/index.js", - "src/layers/satellites/ingestion.js", - "src/layers/satellites/interaction.js", - "src/layers/satellites/labels.js", - "src/layers/satellites/lifecycle.js", - "src/layers/satellites/orbits.js", + "src/layers/launches/", + "src/layers/military/", + "src/layers/radio/", + "src/layers/satellites/", "src/sources/tle.js", - "src/layers/satellites/records.js", - "src/layers/satellites/policy.js", - "src/layers/satellites/rendering.js", - "src/layers/satellites/source.js", - "src/layers/satellites/state.js", - "src/layers/satellites/testing.js", - "src/layers/satellites/tracking.js", - "src/layers/submarineCables/bundledSource.js", - "src/layers/submarineCables/geometry.js", - "src/layers/submarineCables/index.js", - "src/layers/submarineCables/session.js", - "src/layers/submarineCables/overlay.js", - "src/layers/submarineCables/policy.js", - "src/layers/submarineCables/surface.js", - "src/layers/traffic/animation.js", - "src/layers/traffic/controls.js", - "src/layers/traffic/flow.js", - "src/layers/traffic/flowDecode.js", - "src/layers/traffic/flowSource.js", - "src/layers/traffic/footprint.js", - "src/layers/traffic/index.js", - "src/layers/traffic/ingestion.js", + "src/layers/submarineCables/", + "src/layers/traffic/", "src/sources/requestDeadline.js", - "src/layers/traffic/lifecycle.js", - "src/layers/traffic/model.js", - "src/layers/traffic/policy.js", - "src/layers/traffic/rendering.js", - "src/layers/traffic/retention.js", - "src/layers/traffic/source.js", - "src/layers/traffic/state.js", - "src/layers/traffic/style.js", - "src/layers/traffic/surface.js", - "src/layers/traffic/timing.js", - "src/layers/traffic/viewport.js", "src/layers/vessels/cards.js", "src/layers/vessels/evidence.js", "src/layers/vessels/index.js", @@ -2852,12 +2272,7 @@ "src/panelStackLayout.js", "src/renderGovernor.js", "src/rightRailPolicy.js", - "src/scenes/director.js", - "src/scenes/sceneSaveError.js", - "src/scenes/playbackAdapter.js", - "src/director/playback.js", - "src/scenes/recipes.js", - "src/scenes/scenePolicy.js", + "src/director/", "src/scopeMask.js", "src/search/alpsGeocoder.js", "src/search/defaults.js", @@ -2865,17 +2280,8 @@ "src/search/google.js", "src/search/http.js", "src/search/placeSearch.js", - "src/services/application.js", - "src/services/groundFloor.js", - "src/services/groundSnap.js", - "src/services/meshFloorSampler.js", - "src/services/requests.js", - "src/services/terrainHeights.js", - "src/share/follow.js", - "src/share/legacyShareState.js", - "src/share/shareLinkPath.js", - "src/share/viewCodec.js", - "src/share/wire.js", + "src/services/", + "src/share/", "src/sharelink.js", "src/sources/live/aircraft.js", "src/sources/live/contract.js", @@ -2883,11 +2289,7 @@ "src/sources/live/vessels.js", "src/standalone/catalog.js", "src/standalone/layerSources.js", - "src/styles/anime.js", - "src/styles/noir.js", - "src/styles/retro.js", - "src/styles/surveillance.js", - "src/styles/thermal.js", + "src/styles/", "src/ui/applicationShell.js", "src/app/layerSession.js", "src/ui/shellScene.js", @@ -2950,11 +2352,8 @@ "src/ui/layerPanel.js", "src/ui/weatherPanel.js", "src/ui/layerRowText.js", - "src/ui/layerPanel/LayerRows.vue", + "src/ui/layerPanel/", "src/ui/rail/classToggle.js", - "src/ui/layerPanel/RowText.vue", - "src/ui/layerPanel/RowSwitch.vue", - "src/ui/layerPanel/RowSlider.vue", "src/ui/layers.js", "src/ui/leftPanelRail.js", "src/ui/location.js", @@ -2993,12 +2392,7 @@ "src/ui/visualPresets.js", "src/ui/visualSettings.js", "src/voice/commands.js", - "src/voice/panel/actionObserver.js", - "src/voice/panel/host.js", - "src/voice/panel/inactivity.js", - "src/voice/panel/manualPanel.js", - "src/voice/panel/nativeActivity.js", - "src/voice/panel/preferences.js", + "src/voice/panel/", "src/voice/control.js", "src/voice/chatControl.js", "src/voice/geminiTextChat.js", @@ -3028,28 +2422,17 @@ "src/voice/voiceCost.js", "src/weatherEffectsMath.js", "src/worldFocus.js", - "src/layers/flights/records.js", - "src/layers/flights/recordPolicy.js", - "src/layers/flights/snapshotRenderer.js", - "src/layers/flights/modelSpec.js", - "src/layers/military/records.js", - "src/layers/military/recordPolicy.js", - "src/layers/military/snapshotRenderer.js", "src/layers/vessels/records.js", "src/layers/vessels/recordPolicy.js", "src/layers/vessels/snapshotRenderer.js", "src/layers/vessels/cockpitSubject.js", "src/data/inputOwnership.js", - "src/annotations/drawMarks.js", - "src/annotations/drawMode.js", - "src/annotations/drawTool.js", "src/data/geoFileImport.js", "src/ui/flyToDataSource.js", "src/ui/geoFileImport.js", "src/data/routeSteps.js", - "src/layers/directions/index.js", + "src/layers/directions/", "src/data/pointerOwnerNames.js", - "src/layers/directions/source.js", "src/data/directions.js", "src/app/layers/directions.js", "src/search/coordinateGeocoder.js", @@ -3063,34 +2446,19 @@ "src/data/feedState.js", "src/data/layerSnapshot.js", "src/layers/alpr/records.js", - "src/layers/earthquakes/records.js", "src/app/layers/perimeters.js", - "src/layers/perimeters/index.js", - "src/layers/perimeters/source.js", - "src/layers/perimeters/records.js", - "src/layers/perimeters/cards.js", - "src/layers/perimeters/inciweb.js", + "src/layers/perimeters/", "src/app/layers/gnss.js", - "src/layers/gnss/index.js", - "src/layers/gnss/source.js", - "src/layers/gnss/records.js", + "src/layers/gnss/", "src/app/layers/ghostMaps.js", - "src/layers/ghostMaps/index.js", - "src/layers/ghostMaps/catalog.js", - "src/layers/ghostMaps/records.js", - "src/layers/ghostMaps/kml.js", - "src/layers/ghostMaps/source.js", + "src/layers/ghostMaps/", "src/app/layers/droneAirspace.js", - "src/layers/droneAirspace/index.js", - "src/layers/droneAirspace/source.js", - "src/layers/droneAirspace/records.js", - "src/layers/droneAirspace/cards.js", - "src/layers/cctv/sourcePolicy.js", + "src/layers/droneAirspace/", "src/sources/reference.js", "src/search/nominatim.js", "src/nominatimGeocode.js", "src/sources/httpBody.js", - "src/i18n/marker.js", + "src/i18n/", "src/sources/nominatim.js", "src/app/layers/transit.js", "src/data/transitFeeds.js", @@ -3137,58 +2505,13 @@ "src/voice/realtimeRadio.js", "src/voice/realtimeTurns.js", "src/voice/realtimeConnection.js", - "src/layers/weather/index.js", - "src/layers/weather/clock.js", - "src/layers/weather/display.js", - "src/layers/weather/shellRendering.js", - "src/layers/weather/infraredAlpha.js", - "src/layers/weather/infraredImage.js", - "src/layers/weather/source.js", - "src/director/clock.js", - "src/director/timeline.js", - "src/scenes/shotPresentation.js", - "src/scenes/packs/registry.js", - "src/scenes/packs/defaults.js", - "src/scenes/packs/nepal.js", - "src/director/document.js", - "src/scenes/project.js", - "src/director/documentFields.js", - "src/director/cameraDocument.js", - "src/director/camera.js", - "src/scenes/cameraMotion.js", - "src/director/packs/source.js", - "src/director/packs/session.js", - "src/director/packs/geojson.js", - "src/director/packs/manifest.js", - "src/scenes/dataPacks/controller.js", - "src/scenes/dataPacks/presentation.js", - "src/scenes/dataPacks/display.js", - "src/scenes/dataPacks/shapes.js", - "src/director/interactions/document.js", - "src/director/interactions/session.js", - "src/scenes/interactions.js", - "src/director/sharing/bundle.js", - "src/director/sharing/preview.js", - "src/director/sharing/lifetime.js", - "src/director/authoring.js", - "src/scenes/sharing.js", + "src/layers/weather/", "src/ui/sceneSharing.js", "src/ui/stores/sceneSharing.js", - "src/layers/shared/imageryHost.js", - "src/layers/cyclones/index.js", - "src/layers/cyclones/rendering.js", - "src/layers/cyclones/labels.js", - "src/layers/cyclones/source.js", + "src/layers/shared/", + "src/layers/cyclones/", "src/app/layers/localAdsb.js", - "src/layers/localAdsb/index.js", - "src/layers/localAdsb/policy.js", - "src/layers/localAdsb/card.js", - "src/layers/localAdsb/feeds.js", - "src/layers/localAdsb/status.js", - "src/layers/localAdsb/feedNames.js", - "src/layers/localAdsb/motion.js", - "src/layers/localAdsb/models.js", - "src/layers/localAdsb/enrichment.js", + "src/layers/localAdsb/", "src/sources/adsbRecords.js", "src/sdr/controller.js", "src/sdr/spectrum.js", @@ -3234,20 +2557,9 @@ "src/layers/streetLevel/selection.js", "src/layers/streetLevel/providers/mapillary/viewer.js", "src/layers/streetLevel/groundClick.js", - "src/layers/streetLevel/providers/google/index.js", - "src/layers/streetLevel/providers/google/policy.js", - "src/layers/streetLevel/providers/google/viewer.js", - "src/layers/streetLevel/providers/google/mapsLoader.js", - "src/layers/streetLevel/providers/kartaview/index.js", - "src/layers/streetLevel/providers/kartaview/policy.js", - "src/layers/streetLevel/providers/kartaview/source.js", - "src/layers/streetLevel/providers/kartaview/decode.js", - "src/layers/streetLevel/providers/kartaview/viewer.js", - "src/layers/streetLevel/providers/panoramax/index.js", - "src/layers/streetLevel/providers/panoramax/policy.js", - "src/layers/streetLevel/providers/panoramax/source.js", - "src/layers/streetLevel/providers/panoramax/decode.js", - "src/layers/streetLevel/providers/panoramax/viewer.js", + "src/layers/streetLevel/providers/google/", + "src/layers/streetLevel/providers/kartaview/", + "src/layers/streetLevel/providers/panoramax/", "src/layers/streetLevel/photoViewer.js", "src/layers/streetLevel/limiter.js", "src/layers/streetLevel/imageSize.js", @@ -3261,7 +2573,6 @@ "src/sources/militaryTileGeometry.js", "src/sources/vectorTiles.js", "src/sources/phaseTiming.js", - "src/layers/traffic/roadModes.js", "src/data/cameraArrival.js", "src/layers/alpr/floors.js", "src/data/militaryNames.js", @@ -3271,19 +2582,6 @@ "src/voice/actionSchemas.js", "src/view/index.js", "src/app/embed.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", "src/ui/unitLabels.js", "src/layers/recentImagery/display.js", "src/ui/keyGuidance.js", @@ -3292,9 +2590,7 @@ "src/data/geoImportPins.js", "src/data/geoImportImages.js", "src/app/layers/airQuality.js", - "src/layers/airQuality/index.js", - "src/layers/airQuality/model.js", - "src/layers/airQuality/source.js", + "src/layers/airQuality/", "src/ui/statusText.js", "src/layers/streetLevel/providers/mapillary/policy.js", "src/voice/providerCommands.js", @@ -3325,8 +2621,7 @@ "src/ui/rail/RailTimeline.vue", "src/ui/rail/rangeValue.js", "src/ui/weather/WeatherReadout.vue", - "src/ui/recentImagery/RecentImageryCard.vue", - "src/ui/recentImagery/RecentImageryReadout.vue", + "src/ui/recentImagery/", "src/ui/stores/streetLevel.js", "src/ui/stores/cctv.js", "src/ui/stores/radio.js", @@ -3345,7 +2640,6 @@ "src/ui/stores/dataPacks.js", "src/ui/stores/pointerReticle.js", "src/ui/stores/windInspection.js", - "src/layers/wind/inspectionMarker.js", "src/ui/stores/missionReplay.js", "src/ui/stores/bhoteKoshiPanel.js", "src/ui/stores/celestialRing.js", @@ -3368,7 +2662,7 @@ "src/ui/i18n.js", "src/cameraAngles.js", "src/app/globeEngine.js", - "src/globe/contract.js", + "src/globe/", "src/globe/cesium/createCesiumEngine.js", "src/globe/cesium/camera.js", "src/globe/cesium/convert.js", @@ -3383,7 +2677,6 @@ "src/globe/cesium/surface.js", "src/globe/cesium/movers.js", "src/globe/cesium/lines.js", - "src/globe/cameraMath.js", "src/globe/navara/cameraModel.js", "src/globe/navara/createNavaraEngine.js", "src/globe/navara/credits.js", @@ -3404,75 +2697,41 @@ "src/globe/navara/surface.js", "src/globe/navara/viewOptions.js", "src/app/navaraMode.js", - "src/annotations/navaraAnnotationRenderer.js", - "src/annotations/drawSurface.js", "src/globe/cesium/sceneProjection.js", "src/layers/alpr/overlay.js", "src/layers/alpr/presentation.js", - "src/layers/bikeshare/selectionModel.js", - "src/layers/bikeshare/presentation.js", "src/layers/vessels/icons.js", "src/globe/cesium/mapScene.js", - "src/layers/localAdsb/qaDrawn.js", "src/geo/", "src/time/clock.js", "src/globe/navara/overlay.js", "src/globe/navara/frameDescriptor.js", "src/globe/cesium/clock.js", - "src/globe/pickDelivery.js", "src/globe/navara/clock.js", - "src/globe/follow.js", - "src/globe/lines.js", - "src/globe/navara/movers/pickIds.js", - "src/globe/navara/movers/batchIds.js", - "src/globe/movers.js", + "src/globe/navara/movers/", "src/globe/cesium/follow.js", - "src/globe/cpuPicks.js", "src/globe/navara/picking.js", - "src/globe/navara/lines/lineMesh.js", - "src/globe/navara/lines/index.js", + "src/globe/navara/lines/", "src/globe/navara/cascadedLightCopy.js", "src/globe/navara/overlayDepth.js", - "src/globe/navara/movers/moverMesh.js", - "src/globe/navara/movers/pack.js", - "src/globe/navara/movers/frameCamera.js", "src/globe/navara/overlayPass.js", "src/globe/navara/postSampling.js", "src/globe/navara/postSamplingPass.js", "src/globe/navara/emptySceneRender.js", - "src/globe/navara/movers/modelMover.js", - "src/globe/navara/movers/modelTint.js", - "src/globe/navara/movers/index.js", - "src/globe/surfaceDetail.js", "src/globe/navara/followGestures.js", "src/app/layers/directory.js", "src/app/layers/renderers.js", "src/app/layers/displays.js", "src/layers/aircraft/render/display.js", - "src/layers/flights/render/display.js", - "src/layers/military/render/display.js", "src/data/selectionDispatcher.js", - "src/layers/shared/selectionKeeper.js", - "src/layers/shared/color.js", "src/layers/aircraft/qaDrawn.js", - "src/layers/localAdsb/render/display.js", - "src/layers/shared/render/engineView.js", "src/globe/cesium/celestial.js", - "src/celestialRing/view.js", - "src/globe/navara/ground/pulse.js", + "src/globe/navara/ground/", "src/globe/navara/shaderChunks.js", "src/globe/navara/sceneDepth.js", - "src/layers/bhoteKoshi/render/story.js", + "src/layers/bhoteKoshi/", "src/globe/navara/windFlowMesh.js", - "src/layers/bikeshare/stationPoints.js", - "src/layers/shared/viewRectangle.js", - "src/layers/firms/rectangle.js", - "src/layers/shared/render/moverBank.js", - "src/layers/radio/screenClusters.js", - "src/layers/shared/render/imageAtlas.js", - "src/globe/navara/ground/surface.js", "src/time/worldClock.js", - "src/annotations/outlineRungs.js", "src/sources/openFreeMapOutlines.js", "src/sources/nominatimOutlines.js", "src/sources/nominatimStatus.js", @@ -3484,13 +2743,12 @@ "src/voice/imageryActions.js", "src/voice/layerActionOwnership.js", "src/data/areaGeometry.js", - "src/layers/osmPlaces/model.js", + "src/layers/osmPlaces/", "src/data/areaStore.js", "src/data/areaResolver.js", "src/voice/areaCandidateContract.js", "src/data/osmPresets.js", "src/voice/osmActions.js", - "src/layers/osmPlaces/index.js", "src/app/layers/osmPlaces.js", "src/voice/areaActions.js", "src/app/layers/wildlifeSightings.js", @@ -3520,73 +2778,32 @@ "src/layers/wildlifeSightings/performance.js", "src/globe/cesium/doubleClick.js", "src/layers/wildlifeSightings/display.js", - "src/layers/osmPlaces/render/display.js", - "src/layers/bikeshare/render/style.js", - "src/layers/satellites/render/display.js", - "src/layers/launches/render/display.js", - "src/layers/bikeshare/render/display.js", "src/layers/vessels/render/display.js", "src/layers/alpr/render/display.js", - "src/layers/radio/render/style.js", "src/layers/transit/render/style.js", - "src/layers/cctv/render/style.js", - "src/layers/radio/render/display.js", - "src/globe/ground.js", - "src/globe/groundPulse.js", "src/globe/cesium/ground.js", - "src/globe/navara/ground/pass.js", - "src/globe/navara/ground/pack.js", - "src/globe/navara/ground/index.js", - "src/layers/cctv/render/meshes.js", - "src/layers/cctv/render/display.js", "src/layers/transit/render/display.js", - "src/layers/earthquakes/render/display.js", - "src/layers/airQuality/render/display.js", - "src/layers/submarineCables/render/display.js", - "src/layers/shared/render/surfacePoints.js", - "src/layers/firms/render/sprites.js", - "src/layers/cyclones/render/display.js", - "src/layers/droneAirspace/render/display.js", - "src/layers/ghostMaps/render/display.js", - "src/layers/perimeters/render/display.js", - "src/layers/gnss/render/display.js", - "src/layers/firms/render/display.js", "src/layers/installations/render/style.js", "src/globe/cesium/groundPulse.js", - "src/layers/awareness/render/display.js", "src/layers/installations/render/namedMarkers.js", "src/layers/installations/render/display.js", - "src/layers/infrastructure/render/display.js", - "src/layers/directions/render/style.js", - "src/layers/directions/render/display.js", "src/layers/streetLevel/render/display.js", - "src/layers/traffic/render/display.js", "src/layers/recentImagery/render/display.js", - "src/layers/weather/render/display.js", - "src/layers/wind/render/display.js", "src/globe/navara/windFlow.js", - "src/layers/bhoteKoshi/render/display.js", - "src/globe/navara/imagery/pass.js", - "src/globe/navara/imagery/index.js", - "src/globe/imagery.js", + "src/globe/navara/imagery/", "src/globe/cesium/imagery.js", "src/globe/cesium/imageryShell.js", - "src/globe/navara/ground/corridors.js", "src/globe/cesium/windFlow.js", "src/globe/cesium/postStages.js", "src/data/geoImportRecords.js", "src/data/geoImportKml.js", "src/data/geoImportDisplay.js", "src/globe/cesium/meshes.js", - "src/globe/meshes.js", "src/globe/navara/meshes.js", - "src/globe/exclusivePointer.js", "src/globe/cesium/followOffset.js", "src/overlays/bindOverlayHost.js", "src/ui/releaseTrackers.js", "src/data/trackingGesture.js", - "src/layers/satellites/classes.js", - "src/layers/satellites/sensors.js", "src/data/ucsSatellites.js", "src/data/imagingSensors.js", "src/data/planespottersPhoto.js", @@ -3675,7 +2892,7 @@ "src/sources/sourceSlot.js", "src/cctvFocusRequest.js", "src/celestialRing.js", - "src/celestialRing/ephemeris.js", + "src/celestialRing/", "src/cockpitMath.js", "src/data/aircraftClass.js", "src/data/aircraftEmergency.js", @@ -3705,7 +2922,7 @@ "src/data/geoid.js", "src/data/iconOrientation.js", "src/data/infrastructure.js", - "src/layers/infrastructure/index.js", + "src/layers/infrastructure/", "src/data/osmOverlays.js", "src/data/installationFeedback.js", "src/data/satellitePass.js", @@ -3753,92 +2970,15 @@ "src/layers/alpr/policy.js", "src/layers/alpr/visuals.js", "src/layers/alpr/source.js", - "src/layers/awareness/controls.js", - "src/layers/awareness/dependencies.js", - "src/layers/awareness/focus.js", - "src/layers/awareness/history.js", - "src/layers/awareness/index.js", - "src/layers/awareness/ingestion.js", - "src/layers/awareness/lifecycle.js", - "src/layers/awareness/model.js", - "src/layers/awareness/navigation.js", - "src/layers/awareness/panel.js", - "src/layers/awareness/policy.js", - "src/layers/awareness/presentation.js", - "src/layers/awareness/queries.js", - "src/layers/awareness/rendering.js", - "src/layers/awareness/state.js", - "src/layers/awareness/subject.js", - "src/layers/awareness/testing.js", - "src/layers/bikeshare/controls.js", - "src/layers/bikeshare/index.js", - "src/layers/bikeshare/ingestion.js", - "src/layers/bikeshare/model.js", + "src/layers/awareness/", + "src/layers/bikeshare/", "src/sources/gbfsStations.js", - "src/layers/bikeshare/policy.js", - "src/layers/bikeshare/queries.js", - "src/layers/bikeshare/registry.js", - "src/layers/bikeshare/source.js", - "src/layers/bikeshare/state.js", - "src/layers/bikeshare/testing.js", - "src/layers/bikeshare/viewport.js", - "src/layers/cctv/calibration.js", - "src/layers/cctv/cards.js", - "src/layers/cctv/catalog.js", - "src/layers/cctv/controls.js", - "src/layers/cctv/frames.js", - "src/layers/cctv/geometry.js", - "src/layers/cctv/geometryQueue.js", - "src/layers/cctv/ground.js", - "src/layers/cctv/headingConfidence.js", - "src/layers/cctv/health.js", - "src/layers/cctv/hover.js", - "src/layers/cctv/index.js", - "src/layers/cctv/ingestion.js", - "src/layers/cctv/lifecycle.js", - "src/layers/cctv/model.js", - "src/layers/cctv/modelSpecs.js", - "src/layers/cctv/navigation.js", - "src/layers/cctv/policy.js", - "src/layers/cctv/presentation.js", - "src/layers/cctv/projection.js", - "src/layers/cctv/videoPlayback.js", - "src/layers/cctv/rendering.js", - "src/layers/cctv/selection.js", - "src/layers/cctv/source.js", - "src/layers/cctv/state.js", - "src/layers/cctv/testing.js", - "src/layers/earthquakes/index.js", - "src/layers/earthquakes/model.js", - "src/layers/earthquakes/source.js", - "src/layers/firms/anchors.js", - "src/layers/firms/cards.js", - "src/layers/firms/index.js", - "src/layers/firms/ingestion.js", - "src/layers/firms/lifecycle.js", - "src/layers/firms/model.js", - "src/layers/firms/policy.js", - "src/layers/firms/queries.js", - "src/layers/firms/rendering.js", - "src/layers/firms/selection.js", - "src/layers/firms/source.js", - "src/layers/firms/state.js", - "src/layers/firms/viewport.js", - "src/layers/flights/controller.js", - "src/layers/flights/enrichment.js", - "src/layers/flights/evidence.js", - "src/layers/flights/index.js", - "src/layers/flights/ingestion.js", - "src/layers/flights/lifecycle.js", + "src/layers/cctv/", + "src/layers/earthquakes/", + "src/layers/firms/", + "src/layers/flights/", "src/layers/aircraft/sceneBinding.js", "src/layers/aircraft/tracking.js", - "src/layers/flights/motion.js", - "src/layers/flights/policy.js", - "src/layers/flights/queries.js", - "src/layers/flights/rendering.js", - "src/layers/flights/state.js", - "src/layers/flights/testing.js", - "src/layers/flights/tracking.js", "src/layers/installations/controls.js", "src/layers/installations/index.js", "src/layers/installations/ingestion.js", @@ -3847,102 +2987,20 @@ "src/layers/installations/source.js", "src/layers/installations/state.js", "src/layers/installations/viewport.js", - "src/layers/launches/camera.js", - "src/layers/launches/controls.js", - "src/layers/launches/index.js", - "src/layers/launches/ingestion.js", - "src/layers/launches/launchPad.js", - "src/layers/launches/lifecycle.js", - "src/layers/launches/model.js", - "src/layers/launches/orbitRendering.js", - "src/layers/launches/overlays.js", - "src/layers/launches/panel.js", - "src/layers/launches/paths.js", - "src/layers/launches/policy.js", - "src/layers/launches/policyHelpers.js", - "src/layers/launches/rendering.js", - "src/layers/launches/replay.js", - "src/layers/launches/selection.js", - "src/layers/launches/source.js", - "src/layers/launches/state.js", - "src/layers/launches/testing.js", - "src/layers/military/controller.js", - "src/layers/military/index.js", - "src/layers/military/ingestion.js", - "src/layers/military/lifecycle.js", - "src/layers/military/motion.js", - "src/layers/military/policy.js", - "src/layers/military/queries.js", - "src/layers/military/rendering.js", - "src/layers/military/state.js", - "src/layers/military/testing.js", - "src/layers/military/tracking.js", - "src/layers/radio/catalogModel.js", - "src/layers/radio/categories.js", - "src/layers/radio/clustering.js", - "src/layers/radio/controls.js", - "src/layers/radio/index.js", - "src/layers/radio/ingestion.js", - "src/layers/radio/interaction.js", - "src/layers/radio/labels.js", - "src/layers/radio/lifecycle.js", - "src/layers/radio/model.js", - "src/layers/radio/navigation.js", - "src/layers/radio/playback.js", - "src/layers/radio/policy.js", - "src/layers/radio/presentation.js", - "src/layers/radio/queries.js", - "src/layers/radio/rendering.js", - "src/layers/radio/selection.js", - "src/layers/radio/source.js", - "src/layers/radio/state.js", - "src/layers/radio/tuning.js", - "src/layers/radio/tuningNoise.js", - "src/layers/radio/volume.js", - "src/layers/satellites/catalog.js", - "src/layers/satellites/cockpitSubject.js", - "src/layers/satellites/controls.js", - "src/layers/satellites/index.js", - "src/layers/satellites/ingestion.js", - "src/layers/satellites/interaction.js", - "src/layers/satellites/labels.js", - "src/layers/satellites/lifecycle.js", - "src/layers/satellites/orbits.js", + "src/layers/launches/", + "src/layers/military/", + "src/layers/radio/", + "src/layers/satellites/", "src/sources/tle.js", - "src/layers/satellites/records.js", - "src/layers/satellites/policy.js", - "src/layers/satellites/rendering.js", - "src/layers/satellites/source.js", - "src/layers/satellites/state.js", - "src/layers/satellites/testing.js", - "src/layers/satellites/tracking.js", "src/layers/submarineCables/geometry.js", "src/layers/submarineCables/index.js", "src/layers/submarineCables/session.js", "src/layers/submarineCables/overlay.js", "src/layers/submarineCables/policy.js", "src/layers/submarineCables/surface.js", - "src/layers/traffic/animation.js", - "src/layers/traffic/controls.js", - "src/layers/traffic/flow.js", - "src/layers/traffic/flowDecode.js", - "src/layers/traffic/flowSource.js", - "src/layers/traffic/footprint.js", - "src/layers/traffic/index.js", - "src/layers/traffic/ingestion.js", + "src/layers/traffic/", "src/sources/requestDeadline.js", - "src/layers/traffic/lifecycle.js", "src/app/loadCesium.js", - "src/layers/traffic/model.js", - "src/layers/traffic/policy.js", - "src/layers/traffic/rendering.js", - "src/layers/traffic/retention.js", - "src/layers/traffic/source.js", - "src/layers/traffic/state.js", - "src/layers/traffic/style.js", - "src/layers/traffic/surface.js", - "src/layers/traffic/timing.js", - "src/layers/traffic/viewport.js", "src/layers/vessels/cards.js", "src/layers/vessels/evidence.js", "src/layers/vessels/index.js", @@ -3975,13 +3033,6 @@ "src/ui/panelRailGeometry.js", "src/ui/radioTunerModel.js", "src/worldFocus.js", - "src/layers/flights/records.js", - "src/layers/flights/recordPolicy.js", - "src/layers/flights/snapshotRenderer.js", - "src/layers/flights/modelSpec.js", - "src/layers/military/records.js", - "src/layers/military/recordPolicy.js", - "src/layers/military/snapshotRenderer.js", "src/layers/vessels/records.js", "src/layers/vessels/recordPolicy.js", "src/layers/vessels/snapshotRenderer.js", @@ -3994,9 +3045,8 @@ "src/scopeMask.js", "src/services/groundFloor.js", "src/data/routeSteps.js", - "src/layers/directions/index.js", + "src/layers/directions/", "src/data/pointerOwnerNames.js", - "src/layers/directions/source.js", "src/services/terrainHeights.js", "src/data/terrainHeights.js", "src/data/groundFloor.js", @@ -4007,34 +3057,19 @@ "src/search/presetGeocoder.js", "src/app/localGeojsonServices.js", "src/layers/alpr/records.js", - "src/layers/earthquakes/records.js", "src/app/layers/perimeters.js", - "src/layers/perimeters/index.js", - "src/layers/perimeters/source.js", - "src/layers/perimeters/records.js", - "src/layers/perimeters/cards.js", - "src/layers/perimeters/inciweb.js", + "src/layers/perimeters/", "src/app/layers/gnss.js", - "src/layers/gnss/index.js", - "src/layers/gnss/source.js", - "src/layers/gnss/records.js", + "src/layers/gnss/", "src/app/layers/ghostMaps.js", - "src/layers/ghostMaps/index.js", - "src/layers/ghostMaps/catalog.js", - "src/layers/ghostMaps/records.js", - "src/layers/ghostMaps/kml.js", - "src/layers/ghostMaps/source.js", + "src/layers/ghostMaps/", "src/app/layers/droneAirspace.js", - "src/layers/droneAirspace/index.js", - "src/layers/droneAirspace/source.js", - "src/layers/droneAirspace/records.js", - "src/layers/droneAirspace/cards.js", - "src/layers/cctv/sourcePolicy.js", + "src/layers/droneAirspace/", "src/search/nominatim.js", "src/nominatimGeocode.js", "src/data/regionalModel.js", "src/sources/httpBody.js", - "src/i18n/marker.js", + "src/i18n/", "src/sources/nominatim.js", "src/app/layers/transit.js", "src/data/transitFeeds.js", @@ -4053,7 +3088,7 @@ "src/layers/transit/state.js", "src/layers/transit/testing.js", "src/layers/transit/viewport.js", - "src/layers/shared/viewRectangle.js", + "src/layers/shared/", "src/data/cameraSensitivity.js", "src/data/contactPlayback.js", "src/layers/transit/trails.js", @@ -4065,27 +3100,12 @@ "src/sources/overpassFeatures.js", "src/sources/featureSource.js", "src/sources/overpassRoads.js", - "src/layers/weather/index.js", - "src/layers/weather/clock.js", - "src/layers/weather/display.js", - "src/layers/weather/shellRendering.js", - "src/layers/weather/infraredAlpha.js", - "src/layers/weather/infraredImage.js", - "src/layers/weather/source.js", - "src/layers/shared/imageryHost.js", + "src/layers/weather/", "src/layers/cyclones/index.js", "src/layers/cyclones/rendering.js", "src/layers/cyclones/labels.js", "src/app/layers/localAdsb.js", - "src/layers/localAdsb/index.js", - "src/layers/localAdsb/policy.js", - "src/layers/localAdsb/card.js", - "src/layers/localAdsb/feeds.js", - "src/layers/localAdsb/status.js", - "src/layers/localAdsb/feedNames.js", - "src/layers/localAdsb/motion.js", - "src/layers/localAdsb/models.js", - "src/layers/localAdsb/enrichment.js", + "src/layers/localAdsb/", "src/sources/adsbRecords.js", "src/sdr/controller.js", "src/sdr/spectrum.js", @@ -4123,20 +3143,9 @@ "src/layers/streetLevel/selection.js", "src/layers/streetLevel/providers/mapillary/viewer.js", "src/layers/streetLevel/groundClick.js", - "src/layers/streetLevel/providers/google/index.js", - "src/layers/streetLevel/providers/google/policy.js", - "src/layers/streetLevel/providers/google/viewer.js", - "src/layers/streetLevel/providers/google/mapsLoader.js", - "src/layers/streetLevel/providers/kartaview/index.js", - "src/layers/streetLevel/providers/kartaview/policy.js", - "src/layers/streetLevel/providers/kartaview/source.js", - "src/layers/streetLevel/providers/kartaview/decode.js", - "src/layers/streetLevel/providers/kartaview/viewer.js", - "src/layers/streetLevel/providers/panoramax/index.js", - "src/layers/streetLevel/providers/panoramax/policy.js", - "src/layers/streetLevel/providers/panoramax/source.js", - "src/layers/streetLevel/providers/panoramax/decode.js", - "src/layers/streetLevel/providers/panoramax/viewer.js", + "src/layers/streetLevel/providers/google/", + "src/layers/streetLevel/providers/kartaview/", + "src/layers/streetLevel/providers/panoramax/", "src/layers/streetLevel/photoViewer.js", "src/layers/streetLevel/limiter.js", "src/layers/streetLevel/imageSize.js", @@ -4149,32 +3158,16 @@ "src/sources/militaryTileGeometry.js", "src/sources/vectorTiles.js", "src/sources/phaseTiming.js", - "src/layers/traffic/roadModes.js", "src/data/cameraArrival.js", "src/layers/alpr/floors.js", "src/data/militaryNames.js", "src/data/infrastructureOverlayEntry.js", "src/sources/infrastructureData.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", "src/ui/unitLabels.js", "src/layers/recentImagery/display.js", "src/layers/installations/classLabel.js", "src/app/layers/airQuality.js", - "src/layers/airQuality/index.js", - "src/layers/airQuality/model.js", - "src/layers/airQuality/source.js", + "src/layers/airQuality/", "src/ui/statusText.js", "src/ui/layerNames.js", "src/layers/streetLevel/providers/mapillary/policy.js", @@ -4187,34 +3180,19 @@ "src/ui/stores/bhoteKoshiPanel.js", "src/hudReadouts.js", "src/ui/i18n.js", - "src/globe/cameraMath.js", - "src/globe/contract.js", + "src/globe/", "src/globe/cesium/sceneProjection.js", "src/layers/alpr/overlay.js", "src/layers/alpr/presentation.js", - "src/layers/bikeshare/selectionModel.js", - "src/layers/bikeshare/presentation.js", - "src/layers/bikeshare/stationPoints.js", "src/layers/vessels/icons.js", - "src/layers/localAdsb/qaDrawn.js", "src/geo/", "src/time/clock.js", - "src/globe/follow.js", "src/app/layers/renderers.js", "src/app/layers/displays.js", "src/layers/aircraft/render/display.js", "src/data/selectionDispatcher.js", - "src/layers/shared/selectionKeeper.js", - "src/layers/shared/color.js", - "src/layers/flights/render/display.js", - "src/layers/military/render/display.js", "src/layers/aircraft/qaDrawn.js", - "src/layers/localAdsb/render/display.js", - "src/layers/shared/render/moverBank.js", "src/globe/cesium/celestial.js", - "src/celestialRing/view.js", - "src/layers/shared/render/engineView.js", - "src/layers/firms/rectangle.js", "src/time/worldClock.js", "src/annotations/outlineRungs.js", "src/sources/openFreeMapOutlines.js", @@ -4224,8 +3202,7 @@ "src/data/placeNames.js", "src/data/local_data/us_census_places/files.js", "src/data/local_data/wof_neighborhoods/files.js", - "src/layers/osmPlaces/model.js", - "src/layers/osmPlaces/index.js", + "src/layers/osmPlaces/", "src/app/layers/osmPlaces.js", "src/app/layers/wildlifeSightings.js", "src/layers/wildlifeSightings/cards.js", @@ -4250,59 +3227,26 @@ "src/layers/wildlifeSightings/photoText.js", "src/layers/wildlifeSightings/performance.js", "src/layers/wildlifeSightings/display.js", - "src/layers/satellites/render/display.js", - "src/layers/shared/render/imageAtlas.js", - "src/layers/osmPlaces/render/display.js", "src/layers/vessels/render/display.js", - "src/layers/launches/render/display.js", - "src/globe/cpuPicks.js", - "src/layers/bikeshare/render/style.js", - "src/layers/bikeshare/render/display.js", "src/layers/alpr/render/display.js", - "src/layers/radio/render/style.js", - "src/layers/radio/screenClusters.js", - "src/layers/radio/render/display.js", "src/layers/transit/render/style.js", - "src/layers/cctv/render/style.js", - "src/layers/cctv/render/meshes.js", - "src/layers/cctv/render/display.js", "src/layers/transit/render/display.js", - "src/layers/earthquakes/render/display.js", - "src/layers/airQuality/render/display.js", "src/layers/cyclones/render/display.js", - "src/layers/gnss/render/display.js", - "src/layers/firms/render/sprites.js", "src/layers/submarineCables/render/display.js", - "src/layers/shared/render/surfacePoints.js", - "src/layers/perimeters/render/display.js", - "src/layers/droneAirspace/render/display.js", - "src/globe/ground.js", - "src/globe/groundPulse.js", - "src/layers/ghostMaps/render/display.js", - "src/layers/firms/render/display.js", - "src/layers/infrastructure/render/display.js", "src/layers/installations/render/style.js", - "src/layers/awareness/render/display.js", "src/layers/installations/render/namedMarkers.js", "src/layers/installations/render/display.js", - "src/layers/directions/render/style.js", - "src/layers/directions/render/display.js", "src/layers/streetLevel/render/display.js", - "src/layers/traffic/render/display.js", "src/layers/recentImagery/render/display.js", - "src/layers/weather/render/display.js", "src/layers/wind/render/display.js", "src/globe/navara/windFlow.js", - "src/layers/bhoteKoshi/render/display.js", - "src/layers/bhoteKoshi/render/story.js", + "src/layers/bhoteKoshi/", "src/globe/navara/windFlowMesh.js", "src/globe/cesium/windFlow.js", "src/data/geoImportRecords.js", "src/data/geoImportKml.js", "src/overlays/bindOverlayHost.js", "src/data/trackingGesture.js", - "src/layers/satellites/classes.js", - "src/layers/satellites/sensors.js", "src/data/ucsSatellites.js", "src/data/imagingSensors.js", "src/data/planespottersPhoto.js", @@ -4370,7 +3314,7 @@ "src/nominatimGeocode.js", "src/data/regionalModel.js", "src/sources/httpBody.js", - "src/i18n/marker.js", + "src/i18n/", "src/sources/nominatim.js", "src/sources/featureGeometry.js", "src/sources/overpassFeaturesRecords.js", @@ -4379,7 +3323,7 @@ "src/sources/capability.js", "src/data/cameraArrival.js", "src/geo/", - "src/globe/surfaceDetail.js", + "src/globe/", "src/sources/openFreeMap.js", "src/sources/vectorTiles.js", "src/sources/phaseTiming.js", @@ -4421,19 +3365,7 @@ "src/ui/navigationController.js", "src/app/stateChannel.js", "src/data/cameraArrival.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", - "src/i18n/index.js", + "src/i18n/", "src/ui/releaseTrackers.js" ], "external": ["cesium"] @@ -4442,7 +3374,7 @@ "exports": ["./ui/share-restoration"], "modules": [ "src/ui/layerNames.js", - "src/i18n/marker.js", + "src/i18n/", "src/data/installationFeedback.js", "src/data/idSwitches.js", "src/data/layerState.js", @@ -4454,19 +3386,6 @@ "src/share/follow.js", "src/ui/shareRestoration.js", "src/ui/uiLifetime.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", "src/app/layers/directory.js", "src/time/worldClock.js", "src/time/clock.js" @@ -4499,20 +3418,7 @@ "src/ui/stores/display.js", "src/ui/stores/owners.js", "src/ui/vueRuntime.js", - "src/i18n/marker.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", + "src/i18n/", "src/scopeMaskPolicy.js", "src/visualStylePolicy.js", "src/ui/rail/fieldValue.js", @@ -4537,19 +3443,7 @@ "src/ui/panelRails.js", "src/ui/rightPanelRail.js", "src/ui/uiLifetime.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", + "src/i18n/", "src/ui/panelRailCatalog.js", "src/ui/panelAccordion.js", "src/ui/vueRuntime.js", @@ -4562,7 +3456,7 @@ "civil-flight-records": { "exports": ["./layers/flights/records"], "modules": [ - "src/i18n/marker.js", + "src/i18n/", "src/layers/flights/records.js", "src/layers/flights/recordPolicy.js", "src/data/aircraftMeta.js", @@ -4585,7 +3479,7 @@ "military-flight-records": { "exports": ["./layers/military/records"], "modules": [ - "src/i18n/marker.js", + "src/i18n/", "src/layers/military/records.js", "src/layers/military/recordPolicy.js", "src/data/aircraftMeta.js", @@ -4638,25 +3532,12 @@ "exports": ["./layers/directions"], "modules": [ "src/data/distanceFormat.js", - "src/i18n/marker.js", + "src/i18n/", "src/layers/directions/index.js", "src/layers/shared/color.js", "src/data/pointerOwnerNames.js", "src/layers/directions/source.js", "src/data/routeSteps.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", "src/ui/unitLabels.js", "src/geo/", "src/layers/directions/render/display.js", @@ -4718,19 +3599,7 @@ "src/ui/layerNames.js", "src/ui/unitLabels.js", "src/voice/pointerReticle.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", + "src/i18n/", "src/ui/statusText.js", "src/voice/providerCapabilities.js", "src/ui/vueRuntime.js", @@ -4750,7 +3619,7 @@ "src/data/tileBudget.js", "src/layers/alpr/tileRecords.js", "src/sources/httpBody.js", - "src/i18n/marker.js", + "src/i18n/", "src/sources/vectorTiles.js", "src/sources/phaseTiming.js" ], @@ -4789,7 +3658,7 @@ "src/data/tileBudget.js", "src/sources/capability.js", "src/sources/httpBody.js", - "src/i18n/marker.js", + "src/i18n/", "src/sources/openFreeMap.js", "src/sources/militaryTileGeometry.js", "src/sources/vectorTiles.js", @@ -4833,7 +3702,7 @@ "src/layers/traffic/source.js", "src/sources/overpassRoads.js", "src/sources/httpBody.js", - "src/i18n/marker.js", + "src/i18n/", "src/sources/openFreeMap.js", "src/data/installationNames.js", "src/sources/militaryTileGeometry.js", @@ -4851,7 +3720,7 @@ "src/layers/earthquakes/source.js", "src/layers/earthquakes/records.js", "src/sources/httpBody.js", - "src/i18n/marker.js", + "src/i18n/", "src/layers/perimeters/source.js", "src/layers/submarineCables/bundledSource.js", "src/layers/gnss/source.js", @@ -4879,14 +3748,14 @@ "src/data/regionalModel.js", "src/geoDistance.js", "src/sources/httpBody.js", - "src/i18n/marker.js", + "src/i18n/", "src/sources/nominatim.js" ], "external": [] }, "source-http-body": { "exports": ["./sources/http-body"], - "modules": ["src/sources/httpBody.js", "src/i18n/marker.js"], + "modules": ["src/sources/httpBody.js", "src/i18n/"], "external": [] }, "overpass-lexer": { @@ -4903,7 +3772,7 @@ "src/data/regionalModel.js", "src/geoDistance.js", "src/sources/httpBody.js", - "src/i18n/marker.js" + "src/i18n/" ], "external": [] }, @@ -4918,7 +3787,7 @@ "src/geoDistance.js", "src/data/transitProxy.js", "src/sources/httpBody.js", - "src/i18n/marker.js", + "src/i18n/", "src/sources/transitHistory.js", "src/sources/transitService.js", "src/sources/transitHistoryStore.js", @@ -5000,25 +3869,13 @@ "src/sources/overpassFeatures.js", "src/sources/featureSource.js", "src/sources/capability.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", + "src/i18n/", "src/celestialRing/view.js", "src/layers/shared/render/engineView.js", "src/globe/cesium/sceneProjection.js", "src/layers/shared/color.js", "src/geo/", - "src/globe/surfaceDetail.js", + "src/globe/", "src/globe/cesium/celestial.js", "src/overlays/worldOverlayChrome.js", "src/layers/shared/render/moverBank.js", @@ -5063,19 +3920,7 @@ "src/layers/transit/movement.js", "src/layers/transit/source.js", "src/sources/transitHistory.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", + "src/i18n/", "src/layers/shared/color.js", "src/geo/", "src/overlays/bindOverlayHost.js", @@ -5101,7 +3946,7 @@ "src/data/transitProxy.js", "src/data/gtfsRealtime.js", "src/sources/httpBody.js", - "src/i18n/marker.js", + "src/i18n/", "src/sources/transitHistory.js", "src/sources/transitService.js", "src/sources/transitHistoryStore.js", @@ -5123,28 +3968,14 @@ "perimeters": { "exports": ["./layers/perimeters"], "modules": [ - "src/geo/cartesian3.js", - "src/geo/math.js", + "src/geo/", "src/layers/perimeters/index.js", "src/sources/httpBody.js", - "src/i18n/marker.js", + "src/i18n/", "src/layers/perimeters/source.js", "src/layers/perimeters/records.js", "src/layers/perimeters/cards.js", "src/layers/perimeters/inciweb.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", "src/layers/shared/color.js", "src/layers/perimeters/render/display.js", "src/overlays/bindOverlayHost.js" @@ -5156,33 +3987,13 @@ "modules": [ "src/layers/gnss/index.js", "src/sources/httpBody.js", - "src/i18n/marker.js", + "src/i18n/", "src/layers/gnss/source.js", "src/layers/gnss/records.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", "src/ui/statusText.js", "src/ui/layerNames.js", "src/layers/shared/viewRectangle.js", "src/layers/shared/color.js", - "src/geo/math.js", - "src/geo/cartesian2.js", - "src/geo/matrix3.js", - "src/geo/cartesian3.js", - "src/geo/matrix4.js", - "src/geo/quaternion.js", - "src/geo/boundingSphere.js", "src/geo/", "src/layers/gnss/render/display.js" ], @@ -5192,7 +4003,7 @@ "exports": ["./layers/gnss/source"], "modules": [ "src/sources/httpBody.js", - "src/i18n/marker.js", + "src/i18n/", "src/layers/gnss/source.js" ], "external": [] @@ -5217,7 +4028,7 @@ "src/data/idSwitches.js", "src/data/detectionPolicy.js", "src/scopeMaskPolicy.js", - "src/i18n/marker.js", + "src/i18n/", "src/visualStylePolicy.js", "src/time/worldClock.js", "src/time/clock.js" @@ -5237,24 +4048,10 @@ "src/layers/ghostMaps/records.js", "src/layers/ghostMaps/kml.js", "src/layers/ghostMaps/source.js", - "src/geo/cartesian3.js", - "src/geo/math.js", + "src/geo/", "src/sources/httpBody.js", "src/data/geoFileImport.js", - "src/i18n/marker.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", + "src/i18n/", "src/data/geoImportImages.js", "src/data/geoImportRecords.js", "src/data/geoImportKml.js", @@ -5269,7 +4066,7 @@ "src/layers/ghostMaps/source.js", "src/layers/ghostMaps/catalog.js", "src/sources/httpBody.js", - "src/i18n/marker.js" + "src/i18n/" ], "external": [] }, @@ -5277,7 +4074,7 @@ "exports": ["./layers/perimeters/source"], "modules": [ "src/sources/httpBody.js", - "src/i18n/marker.js", + "src/i18n/", "src/layers/perimeters/source.js" ], "external": [] @@ -5290,21 +4087,8 @@ "src/sources/httpBody.js", "src/layers/droneAirspace/source.js", "src/layers/droneAirspace/records.js", - "src/i18n/marker.js", + "src/i18n/", "src/layers/droneAirspace/cards.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", "src/layers/shared/color.js", "src/layers/droneAirspace/render/display.js", "src/overlays/bindOverlayHost.js" @@ -5316,7 +4100,7 @@ "modules": [ "src/sources/httpBody.js", "src/layers/droneAirspace/source.js", - "src/i18n/marker.js" + "src/i18n/" ], "external": [] }, @@ -5354,7 +4138,7 @@ "src/layers/wind/inspection.js", "src/layers/wind/model.js", "src/layers/wind/fields.js", - "src/i18n/marker.js", + "src/i18n/", "src/tools/queries/imagery.js", "src/tools/queries/cables.js", "src/tools/queries/surveillance.js", @@ -5413,7 +4197,7 @@ "src/layers/cctv/sourcePolicy.js", "src/layers/cyclones/source.js", "src/sources/httpBody.js", - "src/i18n/marker.js", + "src/i18n/", "src/layers/earthquakes/source.js", "src/layers/earthquakes/records.js", "src/layers/firms/source.js", @@ -5493,26 +4277,12 @@ "air-quality": { "exports": ["./layers/air-quality"], "modules": [ - "src/geo/cartesian3.js", - "src/geo/math.js", + "src/geo/", "src/layers/airQuality/index.js", "src/layers/airQuality/model.js", "src/layers/airQuality/source.js", "src/sources/httpBody.js", - "src/i18n/marker.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", + "src/i18n/", "src/ui/statusText.js", "src/ui/layerNames.js", "src/layers/shared/color.js", @@ -5527,7 +4297,7 @@ "src/layers/airQuality/model.js", "src/layers/airQuality/source.js", "src/sources/httpBody.js", - "src/i18n/marker.js" + "src/i18n/" ], "external": [] }, @@ -5540,7 +4310,7 @@ "src/contextModePolicy.js", "src/loadingFeedback.js", "src/data/installationFeedback.js", - "src/i18n/marker.js", + "src/i18n/", "src/geo/" ], "external": ["cesium"] @@ -5549,20 +4319,7 @@ "exports": ["./layers/wildlife-sightings"], "modules": [ "src/data/dataCredits.js", - "src/i18n/index.js", - "src/i18n/locale.js", - "src/i18n/locales/ar.json", - "src/i18n/locales/de.json", - "src/i18n/locales/es.json", - "src/i18n/locales/fr.json", - "src/i18n/locales/it.json", - "src/i18n/locales/ja.json", - "src/i18n/locales/pt.json", - "src/i18n/locales/ru.json", - "src/i18n/locales/uk.json", - "src/i18n/locales/zh-CN.json", - "src/i18n/locales/zh-Hant.json", - "src/i18n/marker.js", + "src/i18n/", "src/layers/wildlifeSightings/cards.js", "src/layers/wildlifeSightings/controls.js", "src/layers/wildlifeSightings/index.js", @@ -5599,7 +4356,7 @@ "wildlife-sightings-source": { "exports": ["./layers/wildlife-sightings/source"], "modules": [ - "src/i18n/marker.js", + "src/i18n/", "src/layers/wildlifeSightings/policy.js", "src/layers/wildlifeSightings/records.js", "src/layers/wildlifeSightings/source.js", diff --git a/src/annotations/drawTool.test.mjs b/src/annotations/drawTool.test.mjs index 420d1bcc7..1e833795d 100644 --- a/src/annotations/drawTool.test.mjs +++ b/src/annotations/drawTool.test.mjs @@ -238,7 +238,12 @@ test('the draw modules are registered for formatting and boundary checks', () => const boundaries = JSON.parse(read('scripts/package-boundaries.json')); const owners = (file) => Object.entries(boundaries) - .filter(([, group]) => group.modules?.includes(file)) + .filter(([, group]) => + // An entry ending in '/' owns every module in that directory. + group.modules?.some((entry) => + entry.endsWith('/') ? file.startsWith(entry) : entry === file, + ), + ) .map(([name]) => name); for (const file of [ 'src/annotations/drawMode.js', diff --git a/src/tooling/packageBoundaries.test.mjs b/src/tooling/packageBoundaries.test.mjs index c823448c8..b4ee353fd 100644 --- a/src/tooling/packageBoundaries.test.mjs +++ b/src/tooling/packageBoundaries.test.mjs @@ -1,6 +1,6 @@ import test from 'node:test'; import assert from 'node:assert/strict'; -import { execFileSync } from 'node:child_process'; +import { execFileSync, spawnSync } from 'node:child_process'; import { copyFile, mkdtemp, @@ -23,7 +23,9 @@ async function fixture( entry = 'export const value = 1;', extraExports = {}, ) { - const root = await mkdtemp(path.join(repoRoot, 'tmp_package_boundaries_')); + const root = await mkdtemp( + path.join(repoRoot, 'tmp_e11_package_boundaries_'), + ); t.after(() => rm(root, { recursive: true, force: true })); await mkdir(path.join(root, 'scripts')); await writeFile( @@ -69,7 +71,7 @@ test('even an unused import of application code violates ownership', async (t) = "import { app } from './startup.js'; export const value = 1;", ); await writeFile(path.join(root, 'startup.js'), 'export const app = 2;'); - await assert.rejects(checkPackageBoundaries(root), /unowned module.*startup/); + await assert.rejects(checkPackageBoundaries(root), /\+ startup\.js/); }); test('Node builtins cannot enter a browser export', async (t) => { @@ -77,7 +79,10 @@ test('Node builtins cannot enter a browser export', async (t) => { t, "import fs from 'node:fs'; export const value = fs;", ); - await assert.rejects(checkPackageBoundaries(root), /unowned module|browser/); + await assert.rejects( + checkPackageBoundaries(root), + /browser|escapes repository/, + ); }); test('dynamic imports obey the same component ownership rule', async (t) => { @@ -86,7 +91,7 @@ test('dynamic imports obey the same component ownership rule', async (t) => { "export const load = () => import('./startup.js');", ); await writeFile(path.join(root, 'startup.js'), 'export const app = 2;'); - await assert.rejects(checkPackageBoundaries(root), /unowned module.*startup/); + await assert.rejects(checkPackageBoundaries(root), /\+ startup\.js/); }); test('a Node build export must be explicitly classified and scoped', async (t) => { @@ -118,7 +123,7 @@ test('a Node build export must be explicitly classified and scoped', async (t) = "import './startup.js'; export const value = 1;", ); await writeFile(path.join(root, 'startup.js'), 'export const app = 2;'); - await assert.rejects(checkPackageBoundaries(root), /unowned module.*startup/); + await assert.rejects(checkPackageBoundaries(root), /\+ startup\.js/); }); test('a lifecycle owner cannot acquire a layer panel even through an unused import', async (t) => { @@ -137,7 +142,7 @@ test('a lifecycle owner cannot acquire a layer panel even through an unused impo }, }), ); - await assert.rejects(checkPackageBoundaries(root), /unowned module.*panel/); + await assert.rejects(checkPackageBoundaries(root), /\+ panel\.js/); }); test('a module entry ending in a slash owns every file under that directory', async (t) => { @@ -151,6 +156,10 @@ test('a module entry ending in a slash owns every file under that directory', as "export { b as a } from './nested/b.js';", ); await writeFile(path.join(root, 'shared/nested/b.js'), 'export const b = 1;'); + await writeFile( + path.join(root, 'shared/unreached.js'), + 'export const c = 2;', + ); await writeFile( path.join(root, 'scripts/package-boundaries.json'), JSON.stringify({ @@ -170,10 +179,7 @@ test('a module entry ending in a slash owns every file under that directory', as "export { c as b } from '../../shared.js';", ); await writeFile(path.join(root, 'shared.js'), 'export const c = 1;'); - await assert.rejects( - checkPackageBoundaries(root), - /unowned module.*shared\.js/, - ); + await assert.rejects(checkPackageBoundaries(root), /\+ shared\.js/); }); test('regeneration adds unowned modules, including unused and dynamic imports', async (t) => { @@ -199,16 +205,17 @@ test('regeneration adds unowned modules, including unused and dynamic imports', ]); }); -test('regeneration removes unreached files without making the check reject stale entries', async (t) => { +test('the check rejects unreached files and regeneration removes them', async (t) => { const root = await fixture(t); const file = path.join(root, 'scripts/package-boundaries.json'); const manifest = JSON.parse(await readFile(file, 'utf8')); manifest.feature.modules.push('stale.js'); await writeFile(path.join(root, 'stale.js'), 'export const stale = 1;'); await writeFile(file, JSON.stringify(manifest)); - assert.deepEqual(await checkPackageBoundaries(root), [ - { name: 'feature', exports: 1, modules: 1 }, - ]); + await assert.rejects( + checkPackageBoundaries(root), + /feature: 0 added, 1 removed\.\n - stale\.js/, + ); assert.deepEqual(await writePackageBoundaries(root), [ { name: 'feature', added: [], removed: ['stale.js'] }, ]); @@ -223,6 +230,10 @@ test('regeneration removes deleted entries and adds an unowned export entry', as const manifest = JSON.parse(await readFile(file, 'utf8')); manifest.feature.modules = ['deleted.js', 'deleted/']; await writeFile(file, JSON.stringify(manifest)); + await assert.rejects( + checkPackageBoundaries(root), + /feature: 1 added, 2 removed\.\n \+ entry\.js\n - deleted\.js\n - deleted\//, + ); assert.deepEqual(await writePackageBoundaries(root), [ { name: 'feature', @@ -262,6 +273,10 @@ test('regeneration keeps a directory only while it owns a reached module', async path.join(root, 'entry.js'), "export { other } from './shared.js';", ); + await assert.rejects( + checkPackageBoundaries(root), + /feature: 0 added, 1 removed\.\n - shared\//, + ); assert.deepEqual(await writePackageBoundaries(root), [ { name: 'feature', added: [], removed: ['shared/'] }, ]); @@ -271,6 +286,90 @@ test('regeneration keeps a directory only while it owns a reached module', async ]); }); +test('shared globe ownership excludes engine and testing directories', async (t) => { + const root = await fixture( + t, + "export { value } from './src/globe/shared/value.js';", + ); + await mkdir(path.join(root, 'src/globe/shared'), { recursive: true }); + await writeFile( + path.join(root, 'src/globe/shared/value.js'), + 'export const value = 1;', + ); + const file = path.join(root, 'scripts/package-boundaries.json'); + const manifest = JSON.parse(await readFile(file, 'utf8')); + manifest.feature.modules.push('src/globe/'); + await writeFile(file, JSON.stringify(manifest)); + assert.deepEqual(await checkPackageBoundaries(root), [ + { name: 'feature', exports: 1, modules: 2 }, + ]); + assert.deepEqual(await writePackageBoundaries(root), []); + for (const directory of ['cesium', 'navara', 'testing']) { + await mkdir(path.join(root, 'src/globe', directory)); + const module = `src/globe/${directory}/value.js`; + await writeFile(path.join(root, module), 'export const value = 2;'); + await writeFile( + path.join(root, 'entry.js'), + `export { value } from './src/globe/shared/value.js'; import './${module}';`, + ); + await assert.rejects(checkPackageBoundaries(root), (error) => { + assert.ok( + error.message.includes(`feature: 1 added, 0 removed.\n + ${module}`), + ); + return true; + }); + assert.deepEqual(await writePackageBoundaries(root), [ + { name: 'feature', added: [module], removed: [] }, + ]); + assert.deepEqual(JSON.parse(await readFile(file, 'utf8')).feature.modules, [ + 'entry.js', + 'src/globe/', + module, + ]); + assert.deepEqual(await checkPackageBoundaries(root), [ + { name: 'feature', exports: 1, modules: 3 }, + ]); + await writeFile(file, JSON.stringify(manifest)); + } +}); + +test('the check reports additions and removals for every changed group', async (t) => { + const root = await fixture(t, "export { value } from './value.js';", { + './other': './other.js', + }); + for (const name of ['value.js', 'stale.js', 'other.js', 'other-stale.js']) { + await writeFile(path.join(root, name), 'export const value = 1;'); + } + const file = path.join(root, 'scripts/package-boundaries.json'); + const manifest = JSON.parse(await readFile(file, 'utf8')); + manifest.feature.modules.push('stale.js'); + manifest.other = { + exports: ['./other'], + modules: ['other.js', 'other-stale.js'], + external: [], + }; + const original = JSON.stringify(manifest); + await writeFile(file, original); + await assert.rejects(checkPackageBoundaries(root), (error) => { + assert.equal( + error.message, + 'Package boundary snapshots differ. Run node scripts/check-package-boundaries.mjs --write and review the diff.\n' + + 'feature: 1 added, 1 removed.\n + value.js\n - stale.js\n' + + 'other: 0 added, 1 removed.\n - other-stale.js', + ); + return true; + }); + assert.equal(await readFile(file, 'utf8'), original); + assert.deepEqual(await writePackageBoundaries(root), [ + { name: 'feature', added: ['value.js'], removed: ['stale.js'] }, + { name: 'other', added: [], removed: ['other-stale.js'] }, + ]); + assert.deepEqual(await checkPackageBoundaries(root), [ + { name: 'feature', exports: 1, modules: 2 }, + { name: 'other', exports: 1, modules: 1 }, + ]); +}); + test('regeneration preserves kept entry order and all other manifest fields', async (t) => { const root = await fixture( t, @@ -344,6 +443,20 @@ test('the CLI reports changes and a second --write leaves the manifest untouched env: { ...process.env, GOOGLE_MAPS_API_KEY: '', CESIUM_ION_TOKEN: '' }, }, ); + const checked = spawnSync( + process.execPath, + ['scripts/check-package-boundaries.mjs'], + { + cwd: root, + encoding: 'utf8', + env: { ...process.env, GOOGLE_MAPS_API_KEY: '', CESIUM_ION_TOKEN: '' }, + }, + ); + assert.equal(checked.status, 1); + assert.match( + checked.stderr, + /feature: 1 added, 1 removed\.\n \+ value\.js\n - stale\.js/, + ); assert.equal( run(['--write']), 'Updated feature: 1 added, 1 removed.\n + value.js\n - stale.js\n',