t33-cesium-stub-loader.mjs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. // 票 33 离线闸门的 'cesium' 桩(配合 t33-jitter-diff.mjs 的 module.register 使用)。
  2. // 只替换裸 'cesium':引擎层用到的最小面(常量 + 两个坐标类 + 颜色 + 数据源),
  3. // 被测模块 cesiumPipeLayer / 领域层 modeLayerPlan 一律保持真实。
  4. // 实体集合的 add/remove/removeAll 是行为桩:add 保留 spec 的**对象引用**,
  5. // 「属性有没有被重赋值」靠比对引用身份判定——这是零重赋值断言的牙。
  6. const STUB = `
  7. function makeEntityCollection() {
  8. const values = []
  9. return {
  10. values,
  11. add(spec) { const entity = { ...spec }; values.push(entity); return entity },
  12. remove(entity) { const i = values.indexOf(entity); if (i === -1) return false; values.splice(i, 1); return true },
  13. removeAll() { values.length = 0 },
  14. }
  15. }
  16. export class Cartesian2 { constructor(x = 0, y = 0) { this.x = x; this.y = y } }
  17. export class Cartesian3 {
  18. static fromDegrees(lon, lat) { return { lon, lat } }
  19. static fromDegreesArray(flat) { return flat }
  20. static fromRadians(lon, lat, h) { return { lon, lat, h } }
  21. }
  22. export class Color {
  23. static fromCssColorString(css) { return { css, withAlpha: (alpha) => ({ css, alpha }) } }
  24. }
  25. export class CustomDataSource {
  26. constructor(name) { this.name = name; this.entities = makeEntityCollection() }
  27. }
  28. export const HeightReference = { CLAMP_TO_GROUND: 'CLAMP_TO_GROUND' }
  29. export const LabelStyle = { FILL_AND_OUTLINE: 'FILL_AND_OUTLINE' }
  30. export const VerticalOrigin = { CENTER: 'CENTER', BOTTOM: 'BOTTOM' }
  31. `
  32. export async function resolve(specifier, context, nextResolve) {
  33. if (specifier === 'cesium') {
  34. return { url: 'data:text/javascript,' + encodeURIComponent(STUB), shortCircuit: true }
  35. }
  36. return nextResolve(specifier, context)
  37. }