m4-w-fast 1.2.0 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/dist/index.cjs +1 -1
  2. package/dist/index.js +1 -1
  3. package/dist/index.mjs +1 -1
  4. package/dist/intersect.worker.js +2 -2
  5. package/dist/isoBands.worker.js +1 -1
  6. package/dist/m4-w-fast.umd.js +1 -1
  7. package/dist/raster-leaflet/index.cjs +2 -2
  8. package/dist/raster-leaflet/index.js +1 -1
  9. package/dist/raster-leaflet/index.mjs +2 -2
  10. package/dist/raster-leaflet/m4-w-raster-leaflet.umd.js +2 -2
  11. package/dist/raster-mars3d/cesiumRasterPlaneRenderer.js +1 -1
  12. package/dist/raster-mars3d/cesiumRasterTextureAdapter.js +1 -1
  13. package/dist/raster-mars3d/index.cjs +2 -2
  14. package/dist/raster-mars3d/index.js +1 -1
  15. package/dist/raster-mars3d/index.mjs +2 -2
  16. package/dist/raster-mars3d/m4-w-raster-mars3d.umd.js +2 -2
  17. package/dist/raster-mars3d/mars3dRasterImageryProvider.js +1 -1
  18. package/dist/raster-mars3d/mars3dRasterPlaneLayer.js +1 -1
  19. package/dist/raster-mars3d/rasterPlaneGeometry.js +1 -1
  20. package/dist/raster-mars3d/rasterPlaneGridChunks.js +1 -1
  21. package/dist/raster-mars3d/rasterPlaneMaterial.js +1 -1
  22. package/dist/raster-overlay/color.js +1 -1
  23. package/dist/raster-overlay/core.js +1 -1
  24. package/dist/raster-overlay/index.cjs +2 -2
  25. package/dist/raster-overlay/index.js +1 -1
  26. package/dist/raster-overlay/index.mjs +2 -2
  27. package/dist/raster-overlay/leaflet-renderers/createRenderer.js +1 -1
  28. package/dist/raster-overlay/leafletLayer.js +1 -1
  29. package/dist/raster-overlay/m4-w-raster-overlay.umd.js +2 -2
  30. package/dist/raster-overlay/query.js +1 -1
  31. package/dist/raster-overlay/rendering/createRasterRenderer.js +1 -1
  32. package/dist/raster-overlay/rendering/index.js +1 -1
  33. package/dist/raster-overlay/rendering/rasterRenderState.js +1 -1
  34. package/dist/raster-overlay/rendering/webgl2RasterRenderer.js +1 -1
  35. package/dist/raster-overlay/rendering/webgpuRasterRenderer.js +1 -1
  36. package/dist/raster-rendering/index.cjs +2 -2
  37. package/dist/raster-rendering/index.js +1 -1
  38. package/dist/raster-rendering/index.mjs +2 -2
  39. package/dist/raster-rendering/m4-w-raster-rendering.umd.js +2 -2
  40. package/dist/raster-rendering/webgpuRasterTileRenderer.js +1 -1
  41. package/dist/readFile.js +1 -1
  42. package/dist/rendering/index.js +1 -1
  43. package/dist/rendering/webgl2/baseWebgl2Renderer.js +1 -1
  44. package/dist/rendering/webgl2/index.js +1 -1
  45. package/dist/rendering/webgl2/webgl2CoverageResources.js +1 -1
  46. package/dist/rendering/webgl2/webgl2VisualizationResources.js +1 -1
  47. package/dist/rendering/webgpu/baseWebgpuRenderer.js +1 -1
  48. package/dist/rendering/webgpu/index.js +1 -1
  49. package/dist/rendering/webgpu/visualizationParams.js +1 -1
  50. package/dist/rendering/webgpu/visualizationResources.js +1 -1
  51. package/dist/rendering/webgpu/webgpuCoverageResources.js +1 -1
  52. package/dist/road-overlay/coordinateTransform.js +1 -1
  53. package/dist/road-overlay/index.cjs +2 -2
  54. package/dist/road-overlay/index.js +1 -1
  55. package/dist/road-overlay/index.mjs +2 -2
  56. package/dist/road-overlay/leaflet-renderers/createRenderer.js +1 -1
  57. package/dist/road-overlay/leafletLayer.js +1 -1
  58. package/dist/road-overlay/m4-w-road-overlay.umd.js +2 -2
  59. package/dist/road-overlay/options.js +1 -1
  60. package/dist/road-overlay/rendering/index.js +1 -1
  61. package/dist/road-overlay/rendering/roadRenderState.js +1 -1
  62. package/dist/road-overlay/rendering/webgl2RoadRenderer.js +1 -1
  63. package/dist/road-overlay/rendering/webgpuRoadRenderer.js +1 -1
  64. package/dist/road-overlay/roadData.js +1 -1
  65. package/dist/road-overlay/roadGeometry.js +1 -1
  66. package/dist/road-overlay/roadMesh.js +1 -1
  67. package/dist/shared/coordinate-shader/webgl2/index.js +1 -1
  68. package/dist/shared/coordinate-shader/webgpu/index.js +1 -1
  69. package/dist/shared/map/index.js +1 -1
  70. package/dist/shared/map/leaflet.js +1 -1
  71. package/dist/shared/polygon/contains.js +1 -1
  72. package/dist/shared/polygon/index.js +1 -1
  73. package/dist/shared/polygon/polygonMesh.js +1 -1
  74. package/dist/shared/shader/assemble.js +1 -1
  75. package/dist/shared/visualization/index.js +1 -1
  76. package/dist/shared/visualization/shader/webgl2/index.js +1 -1
  77. package/dist/shared/visualization/shader/webgpu/index.js +1 -1
  78. package/dist/shared/visualization/utils.js +1 -1
  79. package/dist/volume-data/index.cjs +1 -0
  80. package/dist/volume-data/index.d.ts +5 -0
  81. package/dist/volume-data/index.js +1 -0
  82. package/dist/volume-data/index.mjs +1 -0
  83. package/dist/volume-data/input.d.ts +2 -0
  84. package/dist/volume-data/input.js +1 -0
  85. package/dist/volume-data/loadVolumeSource.d.ts +2 -0
  86. package/dist/volume-data/loadVolumeSource.js +1 -0
  87. package/dist/volume-data/m4-w-volume-data.umd.js +1 -0
  88. package/dist/volume-data/parserRegistry.d.ts +5 -0
  89. package/dist/volume-data/parserRegistry.js +1 -0
  90. package/dist/volume-data/radarGridVolumeMetadata.d.ts +2 -0
  91. package/dist/volume-data/radarGridVolumeMetadata.js +1 -0
  92. package/dist/volume-data/radarGridVolumeParser.d.ts +2 -0
  93. package/dist/volume-data/radarGridVolumeParser.js +1 -0
  94. package/dist/volume-data/radarGridVolumeSource.d.ts +3 -0
  95. package/dist/volume-data/radarGridVolumeSource.js +1 -0
  96. package/dist/volume-data/volumeDataError.d.ts +5 -0
  97. package/dist/volume-data/volumeDataError.js +1 -0
  98. package/dist/volume-data/volumeDataTypes.d.ts +54 -0
  99. package/dist/volume-data/volumeDataTypes.js +1 -0
  100. package/dist/volume-data/zipArchive.d.ts +6 -0
  101. package/dist/volume-data/zipArchive.js +1 -0
  102. package/dist/volume-mars3d/createMars3dVolumeScene.js +1 -1
  103. package/dist/volume-mars3d/index.cjs +1 -1
  104. package/dist/volume-mars3d/index.js +1 -1
  105. package/dist/volume-mars3d/index.mjs +1 -1
  106. package/dist/volume-mars3d/m4-w-volume-mars3d.umd.js +1 -1
  107. package/dist/volume-mars3d/mars3dCanvasCompensation.js +1 -1
  108. package/dist/volume-mars3d/mars3dRaymarchShader.js +1 -1
  109. package/dist/volume-mars3d/mars3dVolumeLayer.js +1 -1
  110. package/dist/volume-mars3d/mars3dVolumeRenderer.js +1 -1
  111. package/dist/volume-mars3d-native/index.cjs +1 -1
  112. package/dist/volume-mars3d-native/index.js +1 -1
  113. package/dist/volume-mars3d-native/index.mjs +1 -1
  114. package/dist/volume-mars3d-native/liveUpdateScheduler.js +1 -1
  115. package/dist/volume-mars3d-native/m4-w-volume-mars3d-native.umd.js +1 -1
  116. package/dist/volume-mars3d-native/mars3dNativeSliceLayer.js +1 -1
  117. package/dist/volume-mars3d-native/mars3dNativeSliceRenderer.js +1 -1
  118. package/dist/volume-mars3d-native/mars3dNativeVolumeLayer.js +1 -1
  119. package/dist/volume-mars3d-native/mars3dNativeVolumeRenderer.js +1 -1
  120. package/dist/volume-mars3d-native/nativeAxisSliceRenderer.js +1 -1
  121. package/dist/volume-mars3d-native/nativeSliceAtlas.js +1 -1
  122. package/dist/volume-mars3d-native/nativeVoxelProvider.js +1 -1
  123. package/dist/volume-mars3d-native/nativeVoxelShader.js +1 -1
  124. package/dist/volume-mars3d-native/voxelData.js +1 -1
  125. package/dist/volume-scene/brickLayout.js +1 -1
  126. package/dist/volume-scene/brickResidency.js +1 -1
  127. package/dist/volume-scene/camera.js +1 -1
  128. package/dist/volume-scene/createVolumeScene.js +1 -1
  129. package/dist/volume-scene/geographicVolume.js +1 -1
  130. package/dist/volume-scene/inMemoryVolumeSource.js +1 -1
  131. package/dist/volume-scene/index.cjs +1 -1
  132. package/dist/volume-scene/index.js +1 -1
  133. package/dist/volume-scene/index.mjs +1 -1
  134. package/dist/volume-scene/m4-w-volume-scene.umd.js +1 -1
  135. package/dist/volume-scene/matrix.js +1 -1
  136. package/dist/volume-scene/rendering/webgpu/index.js +1 -1
  137. package/dist/volume-scene/rendering/webgpu/webgpuBrickAtlas.js +1 -1
  138. package/dist/volume-scene/rendering/webgpu/webgpuSceneAttachments.js +1 -1
  139. package/dist/volume-scene/rendering/webgpu/webgpuSceneMeshResources.js +1 -1
  140. package/dist/volume-scene/rendering/webgpu/webgpuSliceResources.js +1 -1
  141. package/dist/volume-scene/rendering/webgpu/webgpuTransferResources.js +1 -1
  142. package/dist/volume-scene/rendering/webgpu/webgpuVolumeSceneRenderer.js +1 -1
  143. package/dist/volume-scene/routeProfileMesh.js +1 -1
  144. package/dist/volume-scene/sliceInteractionController.js +1 -1
  145. package/dist/volume-scene/sliceMarkerOverlay.js +1 -1
  146. package/dist/volume-scene/sliceState.js +1 -1
  147. package/dist/volume-scene/volumeBrickData.js +1 -1
  148. package/dist/volume-scene/volumeScene.js +1 -1
  149. package/dist/volume-scene/volumeTransfer.js +1 -1
  150. package/dist/volume-scene/volumeValidation.js +1 -1
  151. package/dist/volume-section/createHorizontalRasterGrid.d.ts +3 -0
  152. package/dist/volume-section/createHorizontalRasterGrid.js +1 -0
  153. package/dist/volume-section/createVolumeSection.d.ts +3 -0
  154. package/dist/volume-section/createVolumeSection.js +1 -0
  155. package/dist/volume-section/createVolumeSectionRasterGrid.d.ts +3 -0
  156. package/dist/volume-section/createVolumeSectionRasterGrid.js +1 -0
  157. package/dist/volume-section/createVolumeSectionRouteProfile.d.ts +3 -0
  158. package/dist/volume-section/createVolumeSectionRouteProfile.js +1 -0
  159. package/dist/volume-section/geographic.d.ts +3 -0
  160. package/dist/volume-section/geographic.js +1 -0
  161. package/dist/volume-section/gridLayerStatistics.d.ts +9 -0
  162. package/dist/volume-section/gridLayerStatistics.js +1 -0
  163. package/dist/volume-section/index.cjs +1 -0
  164. package/dist/volume-section/index.d.ts +8 -0
  165. package/dist/volume-section/index.js +1 -0
  166. package/dist/volume-section/index.mjs +1 -0
  167. package/dist/volume-section/m4-w-volume-section.umd.js +1 -0
  168. package/dist/volume-section/routeSampling.d.ts +9 -0
  169. package/dist/volume-section/routeSampling.js +1 -0
  170. package/dist/volume-section/volumeSectionTypes.d.ts +39 -0
  171. package/dist/volume-section/volumeSectionTypes.js +1 -0
  172. package/package.json +58 -12
@@ -1 +1 @@
1
- const _0x1e2e9e=_0xe4c9;(function(_0x31e48f,_0x5745d3){const _0x148b2a=_0xe4c9,_0x43ab7e=_0x31e48f();while(!![]){try{const _0x5a9c2e=-parseInt(_0x148b2a(0x203))/0x1*(-parseInt(_0x148b2a(0x20b))/0x2)+-parseInt(_0x148b2a(0x1f3))/0x3+parseInt(_0x148b2a(0x1f0))/0x4+parseInt(_0x148b2a(0x216))/0x5*(-parseInt(_0x148b2a(0x20e))/0x6)+-parseInt(_0x148b2a(0x1fe))/0x7+parseInt(_0x148b2a(0x1f7))/0x8*(parseInt(_0x148b2a(0x21b))/0x9)+-parseInt(_0x148b2a(0x1f2))/0xa*(-parseInt(_0x148b2a(0x213))/0xb);if(_0x5a9c2e===_0x5745d3)break;else _0x43ab7e['push'](_0x43ab7e['shift']());}catch(_0x55443d){_0x43ab7e['push'](_0x43ab7e['shift']());}}}(_0xc75c,0x301bf));export const shaderFloatMax=0xfffffeff8381b0000000000000000000;export const toShaderFloat=_0x382851=>{const _0x1fc444=_0xe4c9;if(_0x382851===Number[_0x1fc444(0x21e)])return shaderFloatMax;if(_0x382851===Number[_0x1fc444(0x20c)])return-shaderFloatMax;return _0x382851;};export const prepareColorStops=_0x5bbc7b=>{const _0x2a1f2e=_0xe4c9;validateColorStops(_0x5bbc7b);const _0x53e050=cloneColorStops(_0x5bbc7b);return{'colorStops':_0x53e050,'arrays':createColorStopArraysFromValidated(_0x53e050,_0x53e050[_0x2a1f2e(0x214)])};};export const createColorStopArrays=(_0x1aaaeb,_0x5d4a6a=_0x1aaaeb[_0x1e2e9e(0x214)])=>{const _0x56a850=_0x1e2e9e;return validateColorStops(_0x1aaaeb),validateColorStopCapacity(_0x1aaaeb[_0x56a850(0x214)],_0x5d4a6a),createColorStopArraysFromValidated(_0x1aaaeb,_0x5d4a6a);};function _0xc75c(){const _0x1abf25=['Color\x20stop\x20','Opacity\x20must\x20be\x20a\x20finite\x20number:\x20','map','209bdroDe','Grid\x20valueScale\x20must\x20be\x20a\x20finite\x20number:\x20','minLat','.\x20色标容量必须是大于或等于色标数量的整数。','width','\x20values\x20but\x20received\x20','Grid\x20longitude\x20bounds\x20are\x20invalid:\x20','Grid\x20noData\x20must\x20be\x20a\x20finite\x20number\x20when\x20provided:\x20','638bRdhIo','NEGATIVE_INFINITY','Color\x20stop\x20capacity\x20must\x20be\x20an\x20integer\x20greater\x20than\x20or\x20equal\x20to\x20','426uTchsA','.\x20透明度必须是有限数值。','\x20contains\x20an\x20invalid\x20color\x20channel:\x20','.\x20网格纬度范围无效。','color','83699ymzssg','length','.\x20网格\x20noData\x20存在时必须是有限数值。','13895WWFQEO','maxLng','Grid\x20requires\x20','isNaN','maxValue','7767pledMD','Grid\x20dimensions\x20must\x20be\x20positive\x20integers:\x20','minValue','POSITIVE_INFINITY','\x20包含无效颜色通道。','height','valueScale','.\x20网格\x20valueScale\x20必须是有限数值。','forEach','\x20的数值范围无效。','min','1187888RVlBpk','isFinite','740YQHqHi','1130877OXhrlk','maxLat','\x20has\x20an\x20invalid\x20value\x20range.\x20色标\x20','minLng','632UFGUPq','.\x20色标\x20','max','isInteger','Grid\x20latitude\x20bounds\x20are\x20invalid:\x20','noData','Color\x20stops\x20must\x20be\x20ordered\x20by\x20minimum\x20value.\x20色标必须按照最小值升序排列。','1564941fDoYzx','values'];_0xc75c=function(){return _0x1abf25;};return _0xc75c();}export const validateColorRange=_0x3c616f=>{const _0x38d40e=_0x1e2e9e;if(Number[_0x38d40e(0x219)](_0x3c616f[_0x38d40e(0x21d)])||Number[_0x38d40e(0x219)](_0x3c616f[_0x38d40e(0x21a)])||_0x3c616f[_0x38d40e(0x21d)]>_0x3c616f[_0x38d40e(0x21a)])throw new Error('Color\x20range\x20is\x20invalid:\x20'+_0x3c616f['minValue']+',\x20'+_0x3c616f[_0x38d40e(0x21a)]+'.\x20可见颜色范围无效。');};export const clampOpacity=_0xa30fc8=>{const _0x3a993d=_0x1e2e9e;if(!Number[_0x3a993d(0x1f1)](_0xa30fc8))throw new Error(_0x3a993d(0x201)+_0xa30fc8+_0x3a993d(0x20f));return Math[_0x3a993d(0x1ef)](0x1,Math[_0x3a993d(0x1f9)](0x0,_0xa30fc8));};export const colorModeToShaderValue=_0xfcd536=>{return _0xfcd536==='smooth'?0x1:0x0;};export const sampleModeToShaderValue=_0x3adc53=>{return _0x3adc53==='cell'?0x1:0x0;};function _0xe4c9(_0x382d98,_0x2aec03){const _0xc75c88=_0xc75c();return _0xe4c9=function(_0xe4c9a1,_0xb36d0f){_0xe4c9a1=_0xe4c9a1-0x1ee;let _0x3c2f00=_0xc75c88[_0xe4c9a1];return _0x3c2f00;},_0xe4c9(_0x382d98,_0x2aec03);}export const validateGridData=_0x366c16=>{const _0x5d374d=_0x1e2e9e;if(!Number['isInteger'](_0x366c16[_0x5d374d(0x207)])||!Number[_0x5d374d(0x1fa)](_0x366c16[_0x5d374d(0x220)])||_0x366c16[_0x5d374d(0x207)]<=0x0||_0x366c16[_0x5d374d(0x220)]<=0x0)throw new Error(_0x5d374d(0x21c)+_0x366c16['width']+'x'+_0x366c16[_0x5d374d(0x220)]+'.\x20网格尺寸必须是正整数。');const _0x4ade41=_0x366c16[_0x5d374d(0x207)]*_0x366c16['height'];if(_0x366c16['values'][_0x5d374d(0x214)]!==_0x4ade41)throw new Error(_0x5d374d(0x218)+_0x4ade41+_0x5d374d(0x208)+_0x366c16[_0x5d374d(0x1ff)][_0x5d374d(0x214)]+'.\x20网格数据数量与尺寸不匹配。');if(!Number[_0x5d374d(0x1f1)](_0x366c16[_0x5d374d(0x1f6)])||!Number[_0x5d374d(0x1f1)](_0x366c16[_0x5d374d(0x217)])||_0x366c16[_0x5d374d(0x1f6)]>=_0x366c16[_0x5d374d(0x217)])throw new Error(_0x5d374d(0x209)+_0x366c16[_0x5d374d(0x1f6)]+',\x20'+_0x366c16[_0x5d374d(0x217)]+'.\x20网格经度范围无效。');if(!Number['isFinite'](_0x366c16[_0x5d374d(0x205)])||!Number['isFinite'](_0x366c16[_0x5d374d(0x1f4)])||_0x366c16[_0x5d374d(0x205)]>=_0x366c16[_0x5d374d(0x1f4)])throw new Error(_0x5d374d(0x1fb)+_0x366c16['minLat']+',\x20'+_0x366c16['maxLat']+_0x5d374d(0x211));if(!Number[_0x5d374d(0x1f1)](_0x366c16[_0x5d374d(0x221)]))throw new Error(_0x5d374d(0x204)+_0x366c16[_0x5d374d(0x221)]+_0x5d374d(0x222));if(_0x366c16['noData']!==undefined&&!Number[_0x5d374d(0x1f1)](_0x366c16[_0x5d374d(0x1fc)]))throw new Error(_0x5d374d(0x20a)+_0x366c16[_0x5d374d(0x1fc)]+_0x5d374d(0x215));};const validateColorStops=_0x3ef2ff=>{const _0x5004c5=_0x1e2e9e;if(_0x3ef2ff[_0x5004c5(0x214)]===0x0)throw new Error('Color\x20stops\x20cannot\x20be\x20empty.\x20色标配置不能为空。');let _0x230eaf=Number[_0x5004c5(0x20c)];_0x3ef2ff[_0x5004c5(0x223)]((_0x5ccf34,_0x3f9b7f)=>{const _0x23f04f=_0x5004c5;if(Number['isNaN'](_0x5ccf34['min'])||Number[_0x23f04f(0x219)](_0x5ccf34[_0x23f04f(0x1f9)])||_0x5ccf34[_0x23f04f(0x1ef)]>_0x5ccf34[_0x23f04f(0x1f9)])throw new Error(_0x23f04f(0x200)+_0x3f9b7f+_0x23f04f(0x1f5)+_0x3f9b7f+_0x23f04f(0x1ee));if(_0x5ccf34[_0x23f04f(0x1ef)]<_0x230eaf)throw new Error(_0x23f04f(0x1fd));for(const _0x84b63e of _0x5ccf34[_0x23f04f(0x212)]){if(!Number[_0x23f04f(0x1f1)](_0x84b63e)||_0x84b63e<0x0||_0x84b63e>0x1)throw new Error('Color\x20stop\x20'+_0x3f9b7f+_0x23f04f(0x210)+_0x84b63e+_0x23f04f(0x1f8)+_0x3f9b7f+_0x23f04f(0x21f));}_0x230eaf=_0x5ccf34[_0x23f04f(0x1ef)];});},cloneColorStops=_0x5098f9=>{const _0x401a13=_0x1e2e9e;return _0x5098f9[_0x401a13(0x202)](_0x8dc852=>({'min':_0x8dc852[_0x401a13(0x1ef)],'max':_0x8dc852['max'],'color':[_0x8dc852['color'][0x0],_0x8dc852[_0x401a13(0x212)][0x1],_0x8dc852[_0x401a13(0x212)][0x2],_0x8dc852[_0x401a13(0x212)][0x3]]}));},validateColorStopCapacity=(_0x2d63f4,_0x548602)=>{const _0x1c782b=_0x1e2e9e;if(!Number[_0x1c782b(0x1fa)](_0x548602)||_0x548602<_0x2d63f4)throw new Error(_0x1c782b(0x20d)+_0x2d63f4+':\x20'+_0x548602+_0x1c782b(0x206));},createColorStopArraysFromValidated=(_0x402bb3,_0x1950c5)=>{const _0x475000=_0x1e2e9e,_0x158502=new Float32Array(_0x1950c5),_0x326ae0=new Float32Array(_0x1950c5),_0x1b2e8c=new Float32Array(_0x1950c5*0x4);return _0x402bb3[_0x475000(0x223)]((_0x588a2c,_0x382c8b)=>{const _0x1fcc94=_0x475000;_0x158502[_0x382c8b]=toShaderFloat(_0x588a2c[_0x1fcc94(0x1ef)]),_0x326ae0[_0x382c8b]=toShaderFloat(_0x588a2c[_0x1fcc94(0x1f9)]);const _0x524008=_0x382c8b*0x4;_0x1b2e8c[_0x524008]=_0x588a2c[_0x1fcc94(0x212)][0x0],_0x1b2e8c[_0x524008+0x1]=_0x588a2c['color'][0x1],_0x1b2e8c[_0x524008+0x2]=_0x588a2c[_0x1fcc94(0x212)][0x2],_0x1b2e8c[_0x524008+0x3]=_0x588a2c[_0x1fcc94(0x212)][0x3];}),{'mins':_0x158502,'maxs':_0x326ae0,'colors':_0x1b2e8c};};
1
+ const _0x1ca320=_0x5e8b;(function(_0x2fbefe,_0x584685){const _0x33b0a3=_0x5e8b,_0x892d96=_0x2fbefe();while(!![]){try{const _0x8854d1=parseInt(_0x33b0a3(0x12a))/0x1*(parseInt(_0x33b0a3(0x131))/0x2)+parseInt(_0x33b0a3(0x127))/0x3+-parseInt(_0x33b0a3(0x132))/0x4*(parseInt(_0x33b0a3(0x12b))/0x5)+parseInt(_0x33b0a3(0x123))/0x6+parseInt(_0x33b0a3(0x11d))/0x7+-parseInt(_0x33b0a3(0x133))/0x8+parseInt(_0x33b0a3(0x10f))/0x9*(-parseInt(_0x33b0a3(0x113))/0xa);if(_0x8854d1===_0x584685)break;else _0x892d96['push'](_0x892d96['shift']());}catch(_0x22df9b){_0x892d96['push'](_0x892d96['shift']());}}}(_0x2f89,0x5a297));export const shaderFloatMax=0xfffffeff8381b0000000000000000000;function _0x5e8b(_0x230b53,_0x3ddcdb){const _0x2f896e=_0x2f89();return _0x5e8b=function(_0x5e8b3e,_0x233761){_0x5e8b3e=_0x5e8b3e-0x10b;let _0x40a474=_0x2f896e[_0x5e8b3e];return _0x40a474;},_0x5e8b(_0x230b53,_0x3ddcdb);}function _0x2f89(){const _0x19f310=['minValue','.\x20透明度必须是有限数值。','292oBnDXp','373855wNpIYE','Grid\x20noData\x20must\x20be\x20a\x20finite\x20number\x20when\x20provided:\x20','Color\x20stop\x20capacity\x20must\x20be\x20an\x20integer\x20greater\x20than\x20or\x20equal\x20to\x20','\x20has\x20an\x20invalid\x20value\x20range.\x20色标\x20','\x20的数值范围无效。','NEGATIVE_INFINITY','3114cRKiee','24Nmuphb','347520ETEfQz','cell','minLng','noData','Grid\x20requires\x20','.\x20色标容量必须是大于或等于色标数量的整数。','color','Grid\x20longitude\x20bounds\x20are\x20invalid:\x20','maxLat','isNaN','Grid\x20dimensions\x20must\x20be\x20positive\x20integers:\x20','min','\x20values\x20but\x20received\x20','isFinite','valueScale','.\x20网格\x20valueScale\x20必须是有限数值。','4458357QNsqqW','.\x20网格尺寸必须是正整数。','length','Color\x20stop\x20','20AwvqYx','width','height','Color\x20stops\x20cannot\x20be\x20empty.\x20色标配置不能为空。','isInteger','smooth','.\x20网格数据数量与尺寸不匹配。','maxLng','Color\x20stops\x20must\x20be\x20ordered\x20by\x20minimum\x20value.\x20色标必须按照最小值升序排列。','max','2698416zvIRjt','.\x20可见颜色范围无效。','POSITIVE_INFINITY','Grid\x20latitude\x20bounds\x20are\x20invalid:\x20','Color\x20range\x20is\x20invalid:\x20','.\x20网格经度范围无效。','2726634ACdDfW','forEach','minLat','\x20包含无效颜色通道。','1672632ibrpvR'];_0x2f89=function(){return _0x19f310;};return _0x2f89();}export const toShaderFloat=_0x298579=>{const _0x4569bc=_0x5e8b;if(_0x298579===Number[_0x4569bc(0x11f)])return shaderFloatMax;if(_0x298579===Number[_0x4569bc(0x130)])return-shaderFloatMax;return _0x298579;};export const prepareColorStops=_0x49cfee=>{const _0xf74dc1=_0x5e8b;validateColorStops(_0x49cfee);const _0x2ab05d=cloneColorStops(_0x49cfee);return{'colorStops':_0x2ab05d,'arrays':createColorStopArraysFromValidated(_0x2ab05d,_0x2ab05d[_0xf74dc1(0x111)])};};export const createColorStopArrays=(_0x590b1c,_0x444a16=_0x590b1c[_0x1ca320(0x111)])=>{const _0x904bcb=_0x1ca320;return validateColorStops(_0x590b1c),validateColorStopCapacity(_0x590b1c[_0x904bcb(0x111)],_0x444a16),createColorStopArraysFromValidated(_0x590b1c,_0x444a16);};export const validateColorRange=_0x563742=>{const _0x2e7a88=_0x1ca320;if(Number[_0x2e7a88(0x13c)](_0x563742[_0x2e7a88(0x128)])||Number[_0x2e7a88(0x13c)](_0x563742['maxValue'])||_0x563742[_0x2e7a88(0x128)]>_0x563742['maxValue'])throw new Error(_0x2e7a88(0x121)+_0x563742[_0x2e7a88(0x128)]+',\x20'+_0x563742['maxValue']+_0x2e7a88(0x11e));};export const clampOpacity=_0x706fc=>{const _0x28c19f=_0x1ca320;if(!Number['isFinite'](_0x706fc))throw new Error('Opacity\x20must\x20be\x20a\x20finite\x20number:\x20'+_0x706fc+_0x28c19f(0x129));return Math[_0x28c19f(0x13e)](0x1,Math[_0x28c19f(0x11c)](0x0,_0x706fc));};export const colorModeToShaderValue=_0x5e38d1=>{const _0x2e5a35=_0x1ca320;return _0x5e38d1===_0x2e5a35(0x118)?0x1:0x0;};export const sampleModeToShaderValue=_0x1ea556=>{const _0x26c148=_0x1ca320;return _0x1ea556===_0x26c148(0x134)?0x1:0x0;};export const validateGridData=_0x23dbad=>{const _0x552b74=_0x1ca320;if(!Number[_0x552b74(0x117)](_0x23dbad[_0x552b74(0x114)])||!Number[_0x552b74(0x117)](_0x23dbad['height'])||_0x23dbad['width']<=0x0||_0x23dbad[_0x552b74(0x115)]<=0x0)throw new Error(_0x552b74(0x13d)+_0x23dbad[_0x552b74(0x114)]+'x'+_0x23dbad[_0x552b74(0x115)]+_0x552b74(0x110));const _0x549e36=_0x23dbad[_0x552b74(0x114)]*_0x23dbad[_0x552b74(0x115)];if(_0x23dbad['values'][_0x552b74(0x111)]!==_0x549e36)throw new Error(_0x552b74(0x137)+_0x549e36+_0x552b74(0x10b)+_0x23dbad['values'][_0x552b74(0x111)]+_0x552b74(0x119));if(!Number[_0x552b74(0x10c)](_0x23dbad['minLng'])||!Number[_0x552b74(0x10c)](_0x23dbad[_0x552b74(0x11a)])||_0x23dbad[_0x552b74(0x135)]>=_0x23dbad[_0x552b74(0x11a)])throw new Error(_0x552b74(0x13a)+_0x23dbad['minLng']+',\x20'+_0x23dbad[_0x552b74(0x11a)]+_0x552b74(0x122));if(!Number[_0x552b74(0x10c)](_0x23dbad[_0x552b74(0x125)])||!Number[_0x552b74(0x10c)](_0x23dbad[_0x552b74(0x13b)])||_0x23dbad[_0x552b74(0x125)]>=_0x23dbad[_0x552b74(0x13b)])throw new Error(_0x552b74(0x120)+_0x23dbad['minLat']+',\x20'+_0x23dbad['maxLat']+'.\x20网格纬度范围无效。');if(!Number[_0x552b74(0x10c)](_0x23dbad[_0x552b74(0x10d)]))throw new Error('Grid\x20valueScale\x20must\x20be\x20a\x20finite\x20number:\x20'+_0x23dbad['valueScale']+_0x552b74(0x10e));if(_0x23dbad[_0x552b74(0x136)]!==undefined&&!Number['isFinite'](_0x23dbad[_0x552b74(0x136)]))throw new Error(_0x552b74(0x12c)+_0x23dbad['noData']+'.\x20网格\x20noData\x20存在时必须是有限数值。');};const validateColorStops=_0x38778b=>{const _0x194be7=_0x1ca320;if(_0x38778b['length']===0x0)throw new Error(_0x194be7(0x116));let _0x980bbb=Number[_0x194be7(0x130)];_0x38778b[_0x194be7(0x124)]((_0xe100ea,_0x1934a3)=>{const _0x3946d4=_0x194be7;if(Number[_0x3946d4(0x13c)](_0xe100ea[_0x3946d4(0x13e)])||Number[_0x3946d4(0x13c)](_0xe100ea[_0x3946d4(0x11c)])||_0xe100ea[_0x3946d4(0x13e)]>_0xe100ea[_0x3946d4(0x11c)])throw new Error(_0x3946d4(0x112)+_0x1934a3+_0x3946d4(0x12e)+_0x1934a3+_0x3946d4(0x12f));if(_0xe100ea[_0x3946d4(0x13e)]<_0x980bbb)throw new Error(_0x3946d4(0x11b));for(const _0x56e64f of _0xe100ea['color']){if(!Number['isFinite'](_0x56e64f)||_0x56e64f<0x0||_0x56e64f>0x1)throw new Error(_0x3946d4(0x112)+_0x1934a3+'\x20contains\x20an\x20invalid\x20color\x20channel:\x20'+_0x56e64f+'.\x20色标\x20'+_0x1934a3+_0x3946d4(0x126));}_0x980bbb=_0xe100ea[_0x3946d4(0x13e)];});},cloneColorStops=_0x197af2=>{const _0x11a38f=_0x1ca320;return _0x197af2['map'](_0x2d373b=>({'min':_0x2d373b[_0x11a38f(0x13e)],'max':_0x2d373b[_0x11a38f(0x11c)],'color':[_0x2d373b['color'][0x0],_0x2d373b[_0x11a38f(0x139)][0x1],_0x2d373b[_0x11a38f(0x139)][0x2],_0x2d373b[_0x11a38f(0x139)][0x3]]}));},validateColorStopCapacity=(_0x34385a,_0x5b8038)=>{const _0x50d56e=_0x1ca320;if(!Number[_0x50d56e(0x117)](_0x5b8038)||_0x5b8038<_0x34385a)throw new Error(_0x50d56e(0x12d)+_0x34385a+':\x20'+_0x5b8038+_0x50d56e(0x138));},createColorStopArraysFromValidated=(_0x11b0fd,_0x46f883)=>{const _0x22d29f=_0x1ca320,_0x1ba64b=new Float32Array(_0x46f883),_0x2a78ed=new Float32Array(_0x46f883),_0x253a7c=new Float32Array(_0x46f883*0x4);return _0x11b0fd[_0x22d29f(0x124)]((_0x30db5c,_0x4b58d3)=>{const _0x38c6cf=_0x22d29f;_0x1ba64b[_0x4b58d3]=toShaderFloat(_0x30db5c[_0x38c6cf(0x13e)]),_0x2a78ed[_0x4b58d3]=toShaderFloat(_0x30db5c[_0x38c6cf(0x11c)]);const _0x31bf3e=_0x4b58d3*0x4;_0x253a7c[_0x31bf3e]=_0x30db5c['color'][0x0],_0x253a7c[_0x31bf3e+0x1]=_0x30db5c[_0x38c6cf(0x139)][0x1],_0x253a7c[_0x31bf3e+0x2]=_0x30db5c[_0x38c6cf(0x139)][0x2],_0x253a7c[_0x31bf3e+0x3]=_0x30db5c['color'][0x3];}),{'mins':_0x1ba64b,'maxs':_0x2a78ed,'colors':_0x253a7c};};
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let module$1=require("module");var VolumeDataError=class extends Error{code;constructor(code,message,options){super(message,options),this.name=`VolumeDataError`,this.code=code}};const concatenateChunks=(chunks,byteLength)=>{let bytes=new Uint8Array(byteLength),offset=0;for(let chunk of chunks)bytes.set(chunk,offset),offset+=chunk.byteLength;return bytes},readResponseBytes=async(response,maximumBytes,signal)=>{let contentLength=Number(response.headers.get(`content-length`));if(Number.isFinite(contentLength)&&contentLength>maximumBytes)throw new VolumeDataError(`INPUT_TOO_LARGE`,`Volume archive content length ${contentLength} exceeds the ${maximumBytes} byte limit. 体数据压缩包长度 ${contentLength} 超过 ${maximumBytes} 字节限制。`);if(!response.body){let buffer=await response.arrayBuffer();if(buffer.byteLength>maximumBytes)throw new VolumeDataError(`INPUT_TOO_LARGE`,`Volume archive length ${buffer.byteLength} exceeds the ${maximumBytes} byte limit. 体数据压缩包长度 ${buffer.byteLength} 超过 ${maximumBytes} 字节限制。`);return new Uint8Array(buffer)}let reader=response.body.getReader(),chunks=[],byteLength=0;try{for(;;){signal?.throwIfAborted();let result=await reader.read();if(result.done)break;if(byteLength+=result.value.byteLength,byteLength>maximumBytes)throw await reader.cancel(),new VolumeDataError(`INPUT_TOO_LARGE`,`Volume archive stream exceeds the ${maximumBytes} byte limit. 体数据压缩包流超过 ${maximumBytes} 字节限制。`);chunks.push(result.value)}}finally{reader.releaseLock()}return concatenateChunks(chunks,byteLength)},normalizeVolumeDataInput=async(input,maximumBytes,signal)=>{if(signal?.throwIfAborted(),input instanceof Uint8Array){if(input.byteLength>maximumBytes)throw new VolumeDataError(`INPUT_TOO_LARGE`,`Volume archive length ${input.byteLength} exceeds the ${maximumBytes} byte limit. 体数据压缩包长度 ${input.byteLength} 超过 ${maximumBytes} 字节限制。`);return input}if(input instanceof ArrayBuffer){if(input.byteLength>maximumBytes)throw new VolumeDataError(`INPUT_TOO_LARGE`,`Volume archive length ${input.byteLength} exceeds the ${maximumBytes} byte limit. 体数据压缩包长度 ${input.byteLength} 超过 ${maximumBytes} 字节限制。`);return new Uint8Array(input)}if(typeof input!=`string`&&!(input instanceof URL))throw TypeError(`Volume data input must be a URL, string, ArrayBuffer, or Uint8Array. 体数据输入必须是 URL、字符串、ArrayBuffer 或 Uint8Array。`);let response;try{response=await fetch(input,{signal})}catch(error){throw signal?.aborted&&signal.throwIfAborted(),new VolumeDataError(`FETCH_FAILED`,`Failed to fetch volume archive: ${String(error)}. 获取体数据压缩包失败。`,{cause:error})}if(!response.ok)throw new VolumeDataError(`FETCH_FAILED`,`Failed to fetch volume archive: HTTP ${response.status}. 获取体数据压缩包失败:HTTP ${response.status}。`);return readResponseBytes(response,maximumBytes,signal)},isRecord=value=>typeof value==`object`&&!!value&&!Array.isArray(value),invalidMetadata=field=>{throw new VolumeDataError(`INVALID_METADATA`,`Radar grid volume metadata field "${field}" is missing or invalid. 雷达栅格体元数据字段 "${field}" 缺失或无效。`)},readFiniteNumber=(record,field)=>{let value=record[field];return typeof value==`number`&&Number.isFinite(value)?value:invalidMetadata(field)},readString=(record,field)=>{let value=record[field];return typeof value==`string`?value:invalidMetadata(field)},readBoolean=(record,field)=>{let value=record[field];return typeof value==`boolean`?value:invalidMetadata(field)},readNumberArray=(record,field)=>{let value=record[field];return!Array.isArray(value)||value.some(item=>typeof item!=`number`||!Number.isFinite(item))?invalidMetadata(field):value.map(item=>item)},readStringArray=(record,field)=>{let value=record[field];return!Array.isArray(value)||value.some(item=>typeof item!=`string`)?invalidMetadata(field):value.map(item=>item)},readProperties=record=>{let value=record.properties;return isRecord(value)?{...value}:invalidMetadata(`properties`)},validatePositiveInteger=(value,field)=>{(!Number.isSafeInteger(value)||value<=0)&&invalidMetadata(field)},resolveAxisDelta=(start,end,delta,size,name)=>{if(validatePositiveInteger(size,`${name}Size`),size===1){if(start!==end)throw new VolumeDataError(`INVALID_AXIS`,`Single-cell ${name} axis must have equal endpoints. 单格点 ${name} 轴的起终点必须相等。`);return 0}let magnitude=Math.abs(delta);if(magnitude===0||start===end)throw new VolumeDataError(`INVALID_AXIS`,`${name} axis step and extent must not be zero. ${name} 轴步长和范围不能为零。`);let signedDelta=end>start?magnitude:-magnitude,expectedEnd=start+signedDelta*(size-1),tolerance=Math.max(1e-9,magnitude*1e-6);if(Math.abs(expectedEnd-end)>tolerance)throw new VolumeDataError(`INVALID_AXIS`,`${name} axis endpoint does not match its start, step, and size. ${name} 轴终点与起点、步长和尺寸不匹配。`);return signedDelta},validateLevelAxis=levels=>{if(levels.length===1)return;let step=levels[1]-levels[0],tolerance=Math.max(1e-9,Math.abs(step)*1e-6);if(step===0)throw new VolumeDataError(`INVALID_AXIS`,`Radar grid volume heights must be strictly monotonic. 雷达栅格体高度必须严格单调。`);for(let index=2;index<levels.length;index+=1)if(Math.abs(levels[index]-levels[index-1]-step)>tolerance)throw new VolumeDataError(`INVALID_AXIS`,`Radar grid volume heights must be regularly spaced. 雷达栅格体高度必须等间距。`)},parseRadarGridVolumeMetadata=(value,sourceName,productTime)=>{if(!isRecord(value))return invalidMetadata(`root`);let record=value,metadata={xStart:readFiniteNumber(record,`xStart`),yStart:readFiniteNumber(record,`yStart`),xDelta:readFiniteNumber(record,`xDelta`),yDelta:readFiniteNumber(record,`yDelta`),xSize:readFiniteNumber(record,`xSize`),ySize:readFiniteNumber(record,`ySize`),xEnd:readFiniteNumber(record,`xEnd`),yEnd:readFiniteNumber(record,`yEnd`),times:readFiniteNumber(record,`times`),levels:readFiniteNumber(record,`levels`),timestamp:readFiniteNumber(record,`timestamp`),levelList:readNumberArray(record,`levelList`),timeList:readStringArray(record,`timeList`),dataType:readString(record,`dataType`),undef:readFiniteNumber(record,`undef`),dataScale:readFiniteNumber(record,`dataScale`),dataOffset:readFiniteNumber(record,`dataOffset`),units:readFiniteNumber(record,`units`),littleEndian:readBoolean(record,`littleEndian`),unsigned:readBoolean(record,`unsigned`),properties:readProperties(record)};if(validatePositiveInteger(metadata.times,`times`),validatePositiveInteger(metadata.levels,`levels`),metadata.levelList.length!==metadata.levels&&invalidMetadata(`levelList`),metadata.timeList.length!==metadata.times&&invalidMetadata(`timeList`),metadata.dataType!==`Float32`)throw new VolumeDataError(`UNSUPPORTED_DATA_TYPE`,`Unsupported radar grid volume data type: ${metadata.dataType}. 不支持的雷达栅格体数据类型:${metadata.dataType}。`);return validateLevelAxis(metadata.levelList),{...metadata,sourceName,productTime,longitudeDelta:resolveAxisDelta(metadata.xStart,metadata.xEnd,metadata.xDelta,metadata.xSize,`longitude`),latitudeDelta:resolveAxisDelta(metadata.yStart,metadata.yEnd,metadata.yDelta,metadata.ySize,`latitude`)}},FLOAT32_BYTES$1=Float32Array.BYTES_PER_ELEMENT,validateRange=(start,count,size,name)=>{if(!Number.isSafeInteger(start)||!Number.isSafeInteger(count)||start<0||count<=0||start+count>size)throw RangeError(`Radar grid volume ${name} chunk range is invalid. 雷达栅格体 ${name} 分块范围无效。`)},createRadarGridVolumeSource=(dataBytes,payloadOffset,metadata,revision)=>{let dataView=new DataView(dataBytes.buffer,dataBytes.byteOffset,dataBytes.byteLength),levelStart=metadata.levelList[0],levelEnd=metadata.levelList[metadata.levelList.length-1];return{metadata:{xAxis:{start:metadata.xStart,end:metadata.xEnd,count:metadata.xSize},yAxis:{start:levelStart,end:levelEnd,count:metadata.levels},zAxis:{start:metadata.yStart,end:metadata.yEnd,count:metadata.ySize},timeCount:metadata.times,noData:NaN,valueScale:1,revision},async readChunk(timeIndex,range,signal){if(signal?.throwIfAborted(),!Number.isSafeInteger(timeIndex)||timeIndex<0||timeIndex>=metadata.times)throw RangeError(`Radar grid volume time index is out of range: ${timeIndex}. 雷达栅格体时间索引越界:${timeIndex}。`);validateRange(range.xStart,range.xCount,metadata.xSize,`X`),validateRange(range.levelStart,range.levelCount,metadata.levels,`level`),validateRange(range.sourceYStart,range.sourceYCount,metadata.ySize,`source Y`);let values=new Float32Array(range.xCount*range.levelCount*range.sourceYCount),layerValueCount=metadata.xSize*metadata.ySize,timeOffset=timeIndex*metadata.levels*layerValueCount;for(let z=0;z<range.sourceYCount;z+=1){let sourceY=range.sourceYStart+z;for(let level=0;level<range.levelCount;level+=1){let sourceStart=timeOffset+(range.levelStart+level)*layerValueCount+sourceY*metadata.xSize+range.xStart,targetStart=(z*range.levelCount+level)*range.xCount;for(let x=0;x<range.xCount;x+=1){let rawValue=dataView.getFloat32(payloadOffset+(sourceStart+x)*FLOAT32_BYTES$1,metadata.littleEndian);values[targetStart+x]=rawValue===metadata.undef?NaN:rawValue*metadata.dataScale+metadata.dataOffset}}}return signal?.throwIfAborted(),{timeIndex,range:{...range},width:range.xCount,height:range.levelCount,depth:range.sourceYCount,values}}}},RADAR_GRID_VOLUME_ZIP_FORMAT=`radar-grid-volume-zip`;var require$1=(0,module$1.createRequire)(`/`),_a,Worker$1,isMarkedAsUntransferable,workerAdd=`;var __w=require('worker_threads');__w.parentPort.on('message',function(m){onmessage({data:m})}),postMessage=function(m,t){__w.parentPort.postMessage(m,t)},close=process.exit;self=global`;try{_a=require$1(`worker_threads`),Worker$1=_a.Worker,isMarkedAsUntransferable=_a.isMarkedAsUntransferable}catch{}var wk=Worker$1?function(c,_,msg,transfer,cb){var done=!1,w=new Worker$1(c+workerAdd,{eval:!0}).on(`error`,function(e){return cb(e,null)}).on(`message`,function(m){return cb(null,m)}).on(`exit`,function(c){c&&!done&&cb(Error(`exited with code `+c),null)});return isMarkedAsUntransferable&&(transfer=transfer.filter(function(t){return!isMarkedAsUntransferable(t)})),w.postMessage(msg,transfer),w.terminate=function(){return done=!0,Worker$1.prototype.terminate.call(w)},w}:function(_,__,___,____,cb){setImmediate(function(){return cb(Error(`async operations unsupported - update to Node 12+ (or Node 10-11 with the --experimental-worker CLI flag)`),null)});var NOP=function(){};return{terminate:NOP,postMessage:NOP}},u8=Uint8Array,u16=Uint16Array,i32=Int32Array,fleb=new u8([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),fdeb=new u8([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),clim=new u8([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),freb=function(eb,start){for(var b=new u16(31),i=0;i<31;++i)b[i]=start+=1<<eb[i-1];for(var r=new i32(b[30]),i=1;i<30;++i)for(var j=b[i];j<b[i+1];++j)r[j]=j-b[i]<<5|i;return{b,r}},_a=freb(fleb,2),fl=_a.b,revfl=_a.r;fl[28]=258,revfl[258]=28;var _b=freb(fdeb,0),fd=_b.b;_b.r;for(var rev=new u16(32768),i=0;i<32768;++i){var x=(i&43690)>>1|(i&21845)<<1;x=(x&52428)>>2|(x&13107)<<2,x=(x&61680)>>4|(x&3855)<<4,rev[i]=((x&65280)>>8|(x&255)<<8)>>1}for(var hMap=(function(cd,mb,r){for(var s=cd.length,i=0,l=new u16(mb);i<s;++i)cd[i]&&++l[cd[i]-1];var le=new u16(mb);for(i=1;i<mb;++i)le[i]=le[i-1]+l[i-1]<<1;var co;if(r){co=new u16(1<<mb);var rvb=15-mb;for(i=0;i<s;++i)if(cd[i])for(var sv=i<<4|cd[i],r_1=mb-cd[i],v=le[cd[i]-1]++<<r_1,m=v|(1<<r_1)-1;v<=m;++v)co[rev[v]>>rvb]=sv}else for(co=new u16(s),i=0;i<s;++i)cd[i]&&(co[i]=rev[le[cd[i]-1]++]>>15-cd[i]);return co}),flt=new u8(288),i=0;i<144;++i)flt[i]=8;for(var i=144;i<256;++i)flt[i]=9;for(var i=256;i<280;++i)flt[i]=7;for(var i=280;i<288;++i)flt[i]=8;for(var fdt=new u8(32),i=0;i<32;++i)fdt[i]=5;var flrm=hMap(flt,9,1),fdrm=hMap(fdt,5,1),max=function(a){for(var m=a[0],i=1;i<a.length;++i)a[i]>m&&(m=a[i]);return m},bits=function(d,p,m){var o=p/8|0;return(d[o]|d[o+1]<<8)>>(p&7)&m},bits16=function(d,p){var o=p/8|0;return(d[o]|d[o+1]<<8|d[o+2]<<16)>>(p&7)},shft=function(p){return(p+7)/8|0},slc=function(v,s,e){return(s==null||s<0)&&(s=0),(e==null||e>v.length)&&(e=v.length),new u8(v.subarray(s,e))},ec=[`unexpected EOF`,`invalid block type`,`invalid length/literal`,`invalid distance`,`stream finished`,`no stream handler`,,`no callback`,`invalid UTF-8 data`,`extra field too long`,`date not in range 1980-2099`,`filename too long`,`stream finishing`,`invalid zip data`],err=function(ind,msg,nt){var e=Error(msg||ec[ind]);if(e.code=ind,Error.captureStackTrace&&Error.captureStackTrace(e,err),!nt)throw e;return e},inflt=function(dat,st,buf,dict){var sl=dat.length,dl=dict?dict.length:0;if(!sl||st.f&&!st.l)return buf||new u8(0);var noBuf=!buf,resize=noBuf||st.i!=2,noSt=st.i;noBuf&&(buf=new u8(sl*3));var cbuf=function(l){var bl=buf.length;if(l>bl){var nbuf=new u8(Math.max(bl*2,l));nbuf.set(buf),buf=nbuf}},final=st.f||0,pos=st.p||0,bt=st.b||0,lm=st.l,dm=st.d,lbt=st.m,dbt=st.n,tbts=sl*8;do{if(!lm){final=bits(dat,pos,1);var type=bits(dat,pos+1,3);if(pos+=3,!type){var s=shft(pos)+4,l=dat[s-4]|dat[s-3]<<8,t=s+l;if(t>sl){noSt&&err(0);break}resize&&cbuf(bt+l),buf.set(dat.subarray(s,t),bt),st.b=bt+=l,st.p=pos=t*8,st.f=final;continue}else if(type==1)lm=flrm,dm=fdrm,lbt=9,dbt=5;else if(type==2){var hLit=bits(dat,pos,31)+257,hcLen=bits(dat,pos+10,15)+4,tl=hLit+bits(dat,pos+5,31)+1;pos+=14;for(var ldt=new u8(tl),clt=new u8(19),i=0;i<hcLen;++i)clt[clim[i]]=bits(dat,pos+i*3,7);pos+=hcLen*3;for(var clb=max(clt),clbmsk=(1<<clb)-1,clm=hMap(clt,clb,1),i=0;i<tl;){var r=clm[bits(dat,pos,clbmsk)];pos+=r&15;var s=r>>4;if(s<16)ldt[i++]=s;else{var c=0,n=0;for(s==16?(n=3+bits(dat,pos,3),pos+=2,c=ldt[i-1]):s==17?(n=3+bits(dat,pos,7),pos+=3):s==18&&(n=11+bits(dat,pos,127),pos+=7);n--;)ldt[i++]=c}}var lt=ldt.subarray(0,hLit),dt=ldt.subarray(hLit);lbt=max(lt),dbt=max(dt),lm=hMap(lt,lbt,1),dm=hMap(dt,dbt,1)}else err(1);if(pos>tbts){noSt&&err(0);break}}resize&&cbuf(bt+131072);for(var lms=(1<<lbt)-1,dms=(1<<dbt)-1,lpos=pos;;lpos=pos){var c=lm[bits16(dat,pos)&lms],sym=c>>4;if(pos+=c&15,pos>tbts){noSt&&err(0);break}if(c||err(2),sym<256)buf[bt++]=sym;else if(sym==256){lpos=pos,lm=null;break}else{var add=sym-254;if(sym>264){var i=sym-257,b=fleb[i];add=bits(dat,pos,(1<<b)-1)+fl[i],pos+=b}var d=dm[bits16(dat,pos)&dms],dsym=d>>4;d||err(3),pos+=d&15;var dt=fd[dsym];if(dsym>3){var b=fdeb[dsym];dt+=bits16(dat,pos)&(1<<b)-1,pos+=b}if(pos>tbts){noSt&&err(0);break}resize&&cbuf(bt+131072);var end=bt+add;if(bt<dt){var shift=dl-dt,dend=Math.min(dt,end);for(shift+bt<0&&err(3);bt<dend;++bt)buf[bt]=dict[shift+bt]}for(;bt<end;++bt)buf[bt]=buf[bt-dt]}}st.l=lm,st.p=lpos,st.b=bt,st.f=final,lm&&(final=1,st.m=lbt,st.d=dm,st.n=dbt)}while(!final);return bt!=buf.length&&noBuf?slc(buf,0,bt):buf.subarray(0,bt)},et=new u8(0),mrg=function(a,b){var o={};for(var k in a)o[k]=a[k];for(var k in b)o[k]=b[k];return o},wcln=function(fn,fnStr,td){for(var dt=fn(),st=fn.toString(),ks=st.slice(st.indexOf(`[`)+1,st.lastIndexOf(`]`)).replace(/\s+/g,``).split(`,`),i=0;i<dt.length;++i){var v=dt[i],k=ks[i];if(typeof v==`function`){fnStr+=`;`+k+`=`;var st_1=v.toString();if(v.prototype)if(st_1.indexOf(`[native code]`)!=-1){var spInd=st_1.indexOf(` `,8)+1;fnStr+=st_1.slice(spInd,st_1.indexOf(`(`,spInd))}else for(var t in fnStr+=st_1,v.prototype)fnStr+=`;`+k+`.prototype.`+t+`=`+v.prototype[t].toString();else fnStr+=st_1}else td[k]=v}return fnStr},ch=[],cbfs=function(v){var tl=[];for(var k in v)v[k].buffer&&tl.push((v[k]=new v[k].constructor(v[k])).buffer);return tl},wrkr=function(fns,init,id,cb){if(!ch[id]){for(var fnStr=``,td_1={},m=fns.length-1,i=0;i<m;++i)fnStr=wcln(fns[i],fnStr,td_1);ch[id]={c:wcln(fns[m],fnStr,td_1),e:td_1}}var td=mrg({},ch[id].e);return wk(ch[id].c+`;onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=`+init.toString()+`}`,id,td,cbfs(td),cb)},bInflt=function(){return[u8,u16,i32,fleb,fdeb,clim,fl,fd,flrm,fdrm,rev,ec,hMap,max,bits,bits16,shft,slc,err,inflt,inflateSync,pbf,gopt]},pbf=function(msg){return postMessage(msg,[msg.buffer])},gopt=function(o){return o&&{out:o.size&&new u8(o.size),dictionary:o.dictionary}},cbify=function(dat,opts,fns,init,id,cb){var w=wrkr(fns,init,id,function(err,dat){w.terminate(),cb(err,dat)});return w.postMessage([dat,opts],opts.consume?[dat.buffer]:[]),function(){w.terminate()}},b2=function(d,b){return d[b]|d[b+1]<<8},b4=function(d,b){return(d[b]|d[b+1]<<8|d[b+2]<<16|d[b+3]<<24)>>>0},b8=function(d,b){return b4(d,b)+b4(d,b+4)*4294967296};function inflate(data,opts,cb){return cb||(cb=opts,opts={}),typeof cb!=`function`&&err(7),cbify(data,opts,[bInflt],function(ev){return pbf(inflateSync(ev.data[0],gopt(ev.data[1])))},1,cb)}function inflateSync(data,opts){return inflt(data,{i:2},opts&&opts.out,opts&&opts.dictionary)}var td=typeof TextDecoder<`u`&&new TextDecoder;try{td.decode(et,{stream:!0})}catch{}var dutf8=function(d){for(var r=``,i=0;;){var c=d[i++],eb=(c>127)+(c>223)+(c>239);if(i+eb>d.length)return{s:r,r:slc(d,i-1)};eb?eb==3?(c=((c&15)<<18|(d[i++]&63)<<12|(d[i++]&63)<<6|d[i++]&63)-65536,r+=String.fromCharCode(55296|c>>10,56320|c&1023)):eb&1?r+=String.fromCharCode((c&31)<<6|d[i++]&63):r+=String.fromCharCode((c&15)<<12|(d[i++]&63)<<6|d[i++]&63):r+=String.fromCharCode(c)}};function strFromU8(dat,latin1){if(latin1){for(var r=``,i=0;i<dat.length;i+=16384)r+=String.fromCharCode.apply(null,dat.subarray(i,i+16384));return r}else if(td)return td.decode(dat);else{var _a=dutf8(dat),s=_a.s,r=_a.r;return r.length&&err(8),s}}var slzh=function(d,b){return b+30+b2(d,b+26)+b2(d,b+28)},zh=function(d,b,z){var fnl=b2(d,b+28),efl=b2(d,b+30),fn=strFromU8(d.subarray(b+46,b+46+fnl),!(b2(d,b+8)&2048)),es=b+46+fnl,_a=z64hs(d,es,efl,z,b4(d,b+20),b4(d,b+24),b4(d,b+42)),sc=_a[0],su=_a[1],off=_a[2];return[b2(d,b+10),sc,su,fn,es+efl+b2(d,b+32),off]},z64hs=function(d,b,l,z,sc,su,off){var nsc=sc==4294967295,nsu=su==4294967295,noff=off==4294967295,e=b+l,nf=nsc+nsu+noff;if(z&&nf){for(;b+4<e;b+=4+b2(d,b+2))if(b2(d,b)==1)return[nsc?b8(d,b+4+8*nsu):sc,nsu?b8(d,b+4):su,noff?b8(d,b+4+8*(nsu+nsc)):off,1];z<2&&err(13)}return[sc,su,off,0]},mt=typeof queueMicrotask==`function`?queueMicrotask:typeof setTimeout==`function`?setTimeout:function(fn){fn()};function unzip(data,opts,cb){cb||(cb=opts,opts={}),typeof cb!=`function`&&err(7);var term=[],tAll=function(){for(var i=0;i<term.length;++i)term[i]()},files={},cbd=function(a,b){mt(function(){cb(a,b)})};mt(function(){cbd=cb});for(var e=data.length-22;b4(data,e)!=101010256;--e)if(!e||data.length-e>65558)return cbd(err(13,0,1),null),tAll;var lft=b2(data,e+8);if(lft){var c=lft,o=b4(data,e+16),z=b4(data,e-20)==117853008;if(z){var ze=b4(data,e-12);z=b4(data,ze)==101075792,z&&(c=lft=b4(data,ze+32),o=b4(data,ze+48))}for(var fltr=opts&&opts.filter,_loop_3=function(i){var _a=zh(data,o,z),c_1=_a[0],sc=_a[1],su=_a[2],fn=_a[3],no=_a[4],off=_a[5],b=slzh(data,off);o=no;var cbl=function(e,d){e?(tAll(),cbd(e,null)):(d&&(files[fn]=d),--lft||cbd(null,files))};if(!fltr||fltr({name:fn,size:sc,originalSize:su,compression:c_1}))if(!c_1)cbl(null,slc(data,b,b+sc));else if(c_1==8){var infl=data.subarray(b,b+sc);if(su<524288||sc>.8*su)try{cbl(null,inflateSync(infl,{out:new u8(su)}))}catch(e){cbl(e,null)}else term.push(inflate(infl,{size:su},cbl))}else cbl(err(14,`unknown compression type `+c_1,1),null);else cbl(null,null)},i=0;i<c;++i)_loop_3(i)}else cbd(null,{});return tAll}function unzipSync(data,opts){for(var files={},e=data.length-22;b4(data,e)!=101010256;--e)(!e||data.length-e>65558)&&err(13);var c=b2(data,e+8);if(!c)return{};var o=b4(data,e+16),z=b4(data,e-20)==117853008;if(z){var ze=b4(data,e-12);z=b4(data,ze)==101075792,z&&(c=b4(data,ze+32),o=b4(data,ze+48))}for(var fltr=opts&&opts.filter,i=0;i<c;++i){var _a=zh(data,o,z),c_2=_a[0],sc=_a[1],su=_a[2],fn=_a[3],no=_a[4],off=_a[5],b=slzh(data,off);o=no,(!fltr||fltr({name:fn,size:sc,originalSize:su,compression:c_2}))&&(c_2?c_2==8?files[fn]=inflateSync(data.subarray(b,b+sc),{out:new u8(su)}):err(14,`unknown compression type `+c_2):files[fn]=slc(data,b,b+sc))}return files}const createInvalidZipError=message=>new VolumeDataError(`INVALID_ZIP`,`${message} ZIP 结构无效。`),findEndOfCentralDirectory=view=>{let minimumOffset=Math.max(0,view.byteLength-22-65535);for(let offset=view.byteLength-22;offset>=minimumOffset;--offset){if(view.getUint32(offset,!0)!==101010256)continue;let commentLength=view.getUint16(offset+20,!0);if(offset+22+commentLength===view.byteLength)return offset}throw createInvalidZipError(`End of central directory was not found.`)},decodeEntryName=(bytes,offset,length)=>{try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(bytes.subarray(offset,offset+length))}catch(error){throw new VolumeDataError(`INVALID_ZIP`,`ZIP entry name is not valid UTF-8. ZIP 条目名称不是有效 UTF-8。`,{cause:error})}},findDataEntry=(archiveBytes,entryName,limits)=>{if(archiveBytes.byteLength<22)throw createInvalidZipError(`Archive is too short.`);let view=new DataView(archiveBytes.buffer,archiveBytes.byteOffset,archiveBytes.byteLength),endOffset=findEndOfCentralDirectory(view),diskNumber=view.getUint16(endOffset+4,!0),centralDiskNumber=view.getUint16(endOffset+6,!0),diskEntryCount=view.getUint16(endOffset+8,!0),entryCount=view.getUint16(endOffset+10,!0),centralSize=view.getUint32(endOffset+12,!0),centralOffset=view.getUint32(endOffset+16,!0);if(diskNumber!==0||centralDiskNumber!==0||diskEntryCount!==entryCount)throw new VolumeDataError(`INVALID_ZIP`,`Multi-disk ZIP archives are not supported. 不支持多磁盘 ZIP 压缩包。`);if(entryCount===65535||centralSize===4294967295||centralOffset===4294967295)throw new VolumeDataError(`ZIP64_UNSUPPORTED`,`ZIP64 archives are not supported. 不支持 ZIP64 压缩包。`);if(entryCount>limits.maximumEntryCount)throw new VolumeDataError(`TOO_MANY_ENTRIES`,`ZIP entry count ${entryCount} exceeds the ${limits.maximumEntryCount} entry limit. ZIP 条目数 ${entryCount} 超过 ${limits.maximumEntryCount} 条限制。`);if(!Number.isSafeInteger(centralOffset+centralSize)||centralOffset+centralSize>endOffset)throw createInvalidZipError(`Central directory exceeds archive bounds.`);let matches=[],offset=centralOffset;for(let index=0;index<entryCount;index+=1){if(offset+46>endOffset||view.getUint32(offset,!0)!==33639248)throw createInvalidZipError(`Central directory entry is truncated or has an invalid signature.`);let flags=view.getUint16(offset+8,!0),compression=view.getUint16(offset+10,!0),compressedSize=view.getUint32(offset+20,!0),uncompressedSize=view.getUint32(offset+24,!0),nameLength=view.getUint16(offset+28,!0),extraLength=view.getUint16(offset+30,!0),commentLength=view.getUint16(offset+32,!0),nextOffset=offset+46+nameLength+extraLength+commentLength;if(nextOffset>endOffset)throw createInvalidZipError(`Central directory entry exceeds archive bounds.`);if(compressedSize===4294967295||uncompressedSize===4294967295)throw new VolumeDataError(`ZIP64_UNSUPPORTED`,`ZIP64 entries are not supported. 不支持 ZIP64 条目。`);let name=decodeEntryName(archiveBytes,offset+46,nameLength);if(name===entryName||name.endsWith(`/${entryName}`)){if(flags&1)throw new VolumeDataError(`ENCRYPTED_ENTRY`,`ZIP entry "${name}" is encrypted. ZIP 条目 "${name}" 已加密。`);if(compression!==0&&compression!==8)throw new VolumeDataError(`UNSUPPORTED_COMPRESSION`,`ZIP entry "${name}" uses unsupported compression method ${compression}. ZIP 条目 "${name}" 使用不支持的压缩方式 ${compression}。`);if(uncompressedSize>limits.maximumEntryBytes)throw new VolumeDataError(`ENTRY_TOO_LARGE`,`ZIP entry "${name}" expands to ${uncompressedSize} bytes, exceeding the ${limits.maximumEntryBytes} byte limit. ZIP 条目 "${name}" 解压后为 ${uncompressedSize} 字节,超过 ${limits.maximumEntryBytes} 字节限制。`);let ratio=uncompressedSize/Math.max(1,compressedSize);if(ratio>limits.maximumCompressionRatio)throw new VolumeDataError(`SUSPICIOUS_COMPRESSION_RATIO`,`ZIP entry "${name}" compression ratio ${ratio.toFixed(2)} exceeds the ${limits.maximumCompressionRatio} limit. ZIP 条目 "${name}" 压缩比 ${ratio.toFixed(2)} 超过 ${limits.maximumCompressionRatio} 限制。`);matches.push({name,compressedSize,uncompressedSize,compression})}offset=nextOffset}if(matches.length===0)throw new VolumeDataError(`ENTRY_NOT_FOUND`,`ZIP entry "${entryName}" was not found. ZIP 中未找到条目 "${entryName}"。`);if(matches.length>1)throw new VolumeDataError(`AMBIGUOUS_ENTRY`,`ZIP contains multiple entries named "${entryName}". ZIP 中存在多个名为 "${entryName}" 的条目。`);return matches[0]},extractZipEntry=async(archiveBytes,entryName,limits,signal)=>{signal?.throwIfAborted();let selected=findDataEntry(archiveBytes,entryName,limits);if(typeof Worker>`u`)try{let files=unzipSync(archiveBytes,{filter:file=>file.name===selected.name});signal?.throwIfAborted();let bytes=files[selected.name];if(!bytes||bytes.byteLength!==selected.uncompressedSize)throw new VolumeDataError(`INVALID_ZIP`,`ZIP entry "${selected.name}" decompressed length does not match its central directory. ZIP 条目 "${selected.name}" 的解压长度与中央目录不一致。`);return bytes}catch(error){throw error instanceof VolumeDataError?error:new VolumeDataError(`INVALID_ZIP`,`Failed to decompress ZIP archive. ZIP 解压失败。`,{cause:error})}return new Promise((resolve,reject)=>{try{unzip(archiveBytes,{filter:file=>file.name===selected.name},(error,files)=>{if(error){reject(new VolumeDataError(`INVALID_ZIP`,`Failed to decompress ZIP archive: ${error.message}. ZIP 解压失败。`,{cause:error}));return}try{signal?.throwIfAborted();let bytes=files[selected.name];if(!bytes||bytes.byteLength!==selected.uncompressedSize)throw new VolumeDataError(`INVALID_ZIP`,`ZIP entry "${selected.name}" decompressed length does not match its central directory. ZIP 条目 "${selected.name}" 的解压长度与中央目录不一致。`);resolve(bytes)}catch(callbackError){reject(callbackError)}})}catch(error){reject(error instanceof VolumeDataError?error:new VolumeDataError(`INVALID_ZIP`,`Failed to start ZIP decompression. 无法启动 ZIP 解压。`,{cause:error}))}})},HEADER_LENGTH_BYTES=Uint32Array.BYTES_PER_ELEMENT,FLOAT32_BYTES=Float32Array.BYTES_PER_ELEMENT,multiplySafe=(left,right)=>{let result=left*right;if(!Number.isSafeInteger(result))throw new VolumeDataError(`INVALID_DATA_SIZE`,`Radar grid volume dimensions exceed the safe integer range. 雷达栅格体尺寸超过安全整数范围。`);return result},decodeHeader=(bytes,jsonLength)=>{try{let text=new TextDecoder(`utf-8`,{fatal:!0}).decode(bytes.subarray(HEADER_LENGTH_BYTES,HEADER_LENGTH_BYTES+jsonLength));return JSON.parse(text)}catch(error){throw new VolumeDataError(`INVALID_HEADER_JSON`,`Failed to decode radar grid volume metadata JSON. 雷达栅格体元数据 JSON 解码失败。`,{cause:error})}},loadRadarGridVolumeZip=async(archiveBytes,options)=>{let maximumEntryBytes=options.maxEntryBytes??256*1024*1024,maximumHeaderBytes=options.maxHeaderBytes??1024*1024,dataBytes=await extractZipEntry(archiveBytes,`data.bin`,{maximumEntryBytes,maximumEntryCount:options.maxEntryCount??1024,maximumCompressionRatio:options.maxCompressionRatio??200},options.signal);if(dataBytes.byteLength<HEADER_LENGTH_BYTES)throw new VolumeDataError(`FILE_TOO_SHORT`,`Radar grid volume data.bin must contain a four-byte header length. 雷达栅格体 data.bin 必须包含四字节头部长度。`);let jsonLength=new DataView(dataBytes.buffer,dataBytes.byteOffset,dataBytes.byteLength).getUint32(0,!0);if(jsonLength===0||jsonLength>maximumHeaderBytes)throw new VolumeDataError(`INVALID_HEADER_LENGTH`,`Radar grid volume header length ${jsonLength} is outside the allowed range. 雷达栅格体头部长度 ${jsonLength} 超出允许范围。`);let payloadOffset=HEADER_LENGTH_BYTES+jsonLength;if(!Number.isSafeInteger(payloadOffset)||payloadOffset>dataBytes.byteLength)throw new VolumeDataError(`INVALID_HEADER_LENGTH`,`Radar grid volume header exceeds data.bin bounds. 雷达栅格体头部超出 data.bin 边界。`);let metadata=parseRadarGridVolumeMetadata(decodeHeader(dataBytes,jsonLength),options.sourceName,options.productTime),valueCount=multiplySafe(metadata.times,metadata.levels);valueCount=multiplySafe(valueCount,metadata.ySize),valueCount=multiplySafe(valueCount,metadata.xSize);let payloadBytes=multiplySafe(valueCount,FLOAT32_BYTES),actualPayloadBytes=dataBytes.byteLength-payloadOffset;if(actualPayloadBytes!==payloadBytes)throw new VolumeDataError(`INVALID_PAYLOAD_LENGTH`,`Expected ${payloadBytes} radar grid volume payload bytes but received ${actualPayloadBytes}. 雷达栅格体数据区预期 ${payloadBytes} 字节,实际 ${actualPayloadBytes} 字节。`);return{format:RADAR_GRID_VOLUME_ZIP_FORMAT,metadata,source:createRadarGridVolumeSource(dataBytes,payloadOffset,metadata,options.revision)}},PARSERS={[RADAR_GRID_VOLUME_ZIP_FORMAT]:{load:loadRadarGridVolumeZip}},getVolumeDataParser=format=>PARSERS[format],validatePositiveLimit=(value,name)=>{if(!Number.isSafeInteger(value)||value<=0)throw RangeError(`Volume data ${name} must be a positive safe integer. 体数据 ${name} 必须是正安全整数。`)},loadVolumeSource=async(input,options)=>{let format=options?.format;if(typeof format!=`string`)throw new VolumeDataError(`UNSUPPORTED_FORMAT`,`Volume data format must be specified explicitly. 必须显式指定体数据格式。`);let parser=getVolumeDataParser(format);if(!parser)throw new VolumeDataError(`UNSUPPORTED_FORMAT`,`Unsupported volume data format: ${format}. 不支持的体数据格式:${format}。`);let maximumArchiveBytes=options.maxArchiveBytes??64*1024*1024;if(validatePositiveLimit(maximumArchiveBytes,`maxArchiveBytes`),options.maxEntryBytes!==void 0&&validatePositiveLimit(options.maxEntryBytes,`maxEntryBytes`),options.maxEntryCount!==void 0&&validatePositiveLimit(options.maxEntryCount,`maxEntryCount`),options.maxHeaderBytes!==void 0&&validatePositiveLimit(options.maxHeaderBytes,`maxHeaderBytes`),options.maxCompressionRatio!==void 0&&(!Number.isFinite(options.maxCompressionRatio)||options.maxCompressionRatio<=0))throw RangeError(`Volume data maxCompressionRatio must be greater than zero. 体数据 maxCompressionRatio 必须大于零。`);let bytes=await normalizeVolumeDataInput(input,maximumArchiveBytes,options.signal);return parser.load(bytes,options)};exports.RADAR_GRID_VOLUME_ZIP_FORMAT=RADAR_GRID_VOLUME_ZIP_FORMAT,exports.VolumeDataError=VolumeDataError,exports.loadVolumeSource=loadVolumeSource;
@@ -0,0 +1,5 @@
1
+ export { loadVolumeSource } from './loadVolumeSource';
2
+ export { VolumeDataError } from './volumeDataError';
3
+ export { RADAR_GRID_VOLUME_ZIP_FORMAT } from './volumeDataTypes';
4
+ export type { VolumeDataErrorCode } from './volumeDataError';
5
+ export type { ILoadRadarGridVolumeZipOptions, ILoadVolumeSourceOptions, ILoadedRadarGridVolume, IRadarGridVolumeFileMetadata, IRadarGridVolumeMetadata, IVolumeDataLoadLimits, LoadedVolumeSource, VolumeDataFormat, VolumeDataInput } from './volumeDataTypes';
@@ -0,0 +1 @@
1
+ (function(_0x256e22,_0x4b8601){var _0x4f5e9a=_0x5164,_0x6e02ad=_0x256e22();while(!![]){try{var _0x43b11e=parseInt(_0x4f5e9a(0x1ea))/0x1*(-parseInt(_0x4f5e9a(0x1e6))/0x2)+parseInt(_0x4f5e9a(0x1e9))/0x3*(parseInt(_0x4f5e9a(0x1e8))/0x4)+-parseInt(_0x4f5e9a(0x1e1))/0x5*(-parseInt(_0x4f5e9a(0x1ed))/0x6)+parseInt(_0x4f5e9a(0x1e3))/0x7+-parseInt(_0x4f5e9a(0x1e7))/0x8*(-parseInt(_0x4f5e9a(0x1e4))/0x9)+parseInt(_0x4f5e9a(0x1ec))/0xa*(-parseInt(_0x4f5e9a(0x1e5))/0xb)+parseInt(_0x4f5e9a(0x1e2))/0xc*(parseInt(_0x4f5e9a(0x1eb))/0xd);if(_0x43b11e===_0x4b8601)break;else _0x6e02ad['push'](_0x6e02ad['shift']());}catch(_0x378de6){_0x6e02ad['push'](_0x6e02ad['shift']());}}}(_0x2769,0x35ae1));function _0x2769(){var _0x2b11c4=['12824dfKAwg','468hXMXHJ','1719kBvlQf','1pWDqbp','13IQaFXT','30VqcbEu','12yJRKGj','106255JJFSzQ','2370708gLSuVp','2107266YTfyMT','225oBqUKY','524689Coftpb','570490kGvnNR'];_0x2769=function(){return _0x2b11c4;};return _0x2769();}export{loadVolumeSource}from'./loadVolumeSource';function _0x5164(_0x3660a5,_0x31aa91){var _0x276908=_0x2769();return _0x5164=function(_0x516493,_0x12397){_0x516493=_0x516493-0x1e1;var _0x45300a=_0x276908[_0x516493];return _0x45300a;},_0x5164(_0x3660a5,_0x31aa91);}export{VolumeDataError}from'./volumeDataError';export{RADAR_GRID_VOLUME_ZIP_FORMAT}from'./volumeDataTypes';
@@ -0,0 +1 @@
1
+ var VolumeDataError=class extends Error{code;constructor(code,message,options){super(message,options),this.name=`VolumeDataError`,this.code=code}};const concatenateChunks=(chunks,byteLength)=>{let bytes=new Uint8Array(byteLength),offset=0;for(let chunk of chunks)bytes.set(chunk,offset),offset+=chunk.byteLength;return bytes},readResponseBytes=async(response,maximumBytes,signal)=>{let contentLength=Number(response.headers.get(`content-length`));if(Number.isFinite(contentLength)&&contentLength>maximumBytes)throw new VolumeDataError(`INPUT_TOO_LARGE`,`Volume archive content length ${contentLength} exceeds the ${maximumBytes} byte limit. 体数据压缩包长度 ${contentLength} 超过 ${maximumBytes} 字节限制。`);if(!response.body){let buffer=await response.arrayBuffer();if(buffer.byteLength>maximumBytes)throw new VolumeDataError(`INPUT_TOO_LARGE`,`Volume archive length ${buffer.byteLength} exceeds the ${maximumBytes} byte limit. 体数据压缩包长度 ${buffer.byteLength} 超过 ${maximumBytes} 字节限制。`);return new Uint8Array(buffer)}let reader=response.body.getReader(),chunks=[],byteLength=0;try{for(;;){signal?.throwIfAborted();let result=await reader.read();if(result.done)break;if(byteLength+=result.value.byteLength,byteLength>maximumBytes)throw await reader.cancel(),new VolumeDataError(`INPUT_TOO_LARGE`,`Volume archive stream exceeds the ${maximumBytes} byte limit. 体数据压缩包流超过 ${maximumBytes} 字节限制。`);chunks.push(result.value)}}finally{reader.releaseLock()}return concatenateChunks(chunks,byteLength)},normalizeVolumeDataInput=async(input,maximumBytes,signal)=>{if(signal?.throwIfAborted(),input instanceof Uint8Array){if(input.byteLength>maximumBytes)throw new VolumeDataError(`INPUT_TOO_LARGE`,`Volume archive length ${input.byteLength} exceeds the ${maximumBytes} byte limit. 体数据压缩包长度 ${input.byteLength} 超过 ${maximumBytes} 字节限制。`);return input}if(input instanceof ArrayBuffer){if(input.byteLength>maximumBytes)throw new VolumeDataError(`INPUT_TOO_LARGE`,`Volume archive length ${input.byteLength} exceeds the ${maximumBytes} byte limit. 体数据压缩包长度 ${input.byteLength} 超过 ${maximumBytes} 字节限制。`);return new Uint8Array(input)}if(typeof input!=`string`&&!(input instanceof URL))throw TypeError(`Volume data input must be a URL, string, ArrayBuffer, or Uint8Array. 体数据输入必须是 URL、字符串、ArrayBuffer 或 Uint8Array。`);let response;try{response=await fetch(input,{signal})}catch(error){throw signal?.aborted&&signal.throwIfAborted(),new VolumeDataError(`FETCH_FAILED`,`Failed to fetch volume archive: ${String(error)}. 获取体数据压缩包失败。`,{cause:error})}if(!response.ok)throw new VolumeDataError(`FETCH_FAILED`,`Failed to fetch volume archive: HTTP ${response.status}. 获取体数据压缩包失败:HTTP ${response.status}。`);return readResponseBytes(response,maximumBytes,signal)},isRecord=value=>typeof value==`object`&&!!value&&!Array.isArray(value),invalidMetadata=field=>{throw new VolumeDataError(`INVALID_METADATA`,`Radar grid volume metadata field "${field}" is missing or invalid. 雷达栅格体元数据字段 "${field}" 缺失或无效。`)},readFiniteNumber=(record,field)=>{let value=record[field];return typeof value==`number`&&Number.isFinite(value)?value:invalidMetadata(field)},readString=(record,field)=>{let value=record[field];return typeof value==`string`?value:invalidMetadata(field)},readBoolean=(record,field)=>{let value=record[field];return typeof value==`boolean`?value:invalidMetadata(field)},readNumberArray=(record,field)=>{let value=record[field];return!Array.isArray(value)||value.some(item=>typeof item!=`number`||!Number.isFinite(item))?invalidMetadata(field):value.map(item=>item)},readStringArray=(record,field)=>{let value=record[field];return!Array.isArray(value)||value.some(item=>typeof item!=`string`)?invalidMetadata(field):value.map(item=>item)},readProperties=record=>{let value=record.properties;return isRecord(value)?{...value}:invalidMetadata(`properties`)},validatePositiveInteger=(value,field)=>{(!Number.isSafeInteger(value)||value<=0)&&invalidMetadata(field)},resolveAxisDelta=(start,end,delta,size,name)=>{if(validatePositiveInteger(size,`${name}Size`),size===1){if(start!==end)throw new VolumeDataError(`INVALID_AXIS`,`Single-cell ${name} axis must have equal endpoints. 单格点 ${name} 轴的起终点必须相等。`);return 0}let magnitude=Math.abs(delta);if(magnitude===0||start===end)throw new VolumeDataError(`INVALID_AXIS`,`${name} axis step and extent must not be zero. ${name} 轴步长和范围不能为零。`);let signedDelta=end>start?magnitude:-magnitude,expectedEnd=start+signedDelta*(size-1),tolerance=Math.max(1e-9,magnitude*1e-6);if(Math.abs(expectedEnd-end)>tolerance)throw new VolumeDataError(`INVALID_AXIS`,`${name} axis endpoint does not match its start, step, and size. ${name} 轴终点与起点、步长和尺寸不匹配。`);return signedDelta},validateLevelAxis=levels=>{if(levels.length===1)return;let step=levels[1]-levels[0],tolerance=Math.max(1e-9,Math.abs(step)*1e-6);if(step===0)throw new VolumeDataError(`INVALID_AXIS`,`Radar grid volume heights must be strictly monotonic. 雷达栅格体高度必须严格单调。`);for(let index=2;index<levels.length;index+=1)if(Math.abs(levels[index]-levels[index-1]-step)>tolerance)throw new VolumeDataError(`INVALID_AXIS`,`Radar grid volume heights must be regularly spaced. 雷达栅格体高度必须等间距。`)},parseRadarGridVolumeMetadata=(value,sourceName,productTime)=>{if(!isRecord(value))return invalidMetadata(`root`);let record=value,metadata={xStart:readFiniteNumber(record,`xStart`),yStart:readFiniteNumber(record,`yStart`),xDelta:readFiniteNumber(record,`xDelta`),yDelta:readFiniteNumber(record,`yDelta`),xSize:readFiniteNumber(record,`xSize`),ySize:readFiniteNumber(record,`ySize`),xEnd:readFiniteNumber(record,`xEnd`),yEnd:readFiniteNumber(record,`yEnd`),times:readFiniteNumber(record,`times`),levels:readFiniteNumber(record,`levels`),timestamp:readFiniteNumber(record,`timestamp`),levelList:readNumberArray(record,`levelList`),timeList:readStringArray(record,`timeList`),dataType:readString(record,`dataType`),undef:readFiniteNumber(record,`undef`),dataScale:readFiniteNumber(record,`dataScale`),dataOffset:readFiniteNumber(record,`dataOffset`),units:readFiniteNumber(record,`units`),littleEndian:readBoolean(record,`littleEndian`),unsigned:readBoolean(record,`unsigned`),properties:readProperties(record)};if(validatePositiveInteger(metadata.times,`times`),validatePositiveInteger(metadata.levels,`levels`),metadata.levelList.length!==metadata.levels&&invalidMetadata(`levelList`),metadata.timeList.length!==metadata.times&&invalidMetadata(`timeList`),metadata.dataType!==`Float32`)throw new VolumeDataError(`UNSUPPORTED_DATA_TYPE`,`Unsupported radar grid volume data type: ${metadata.dataType}. 不支持的雷达栅格体数据类型:${metadata.dataType}。`);return validateLevelAxis(metadata.levelList),{...metadata,sourceName,productTime,longitudeDelta:resolveAxisDelta(metadata.xStart,metadata.xEnd,metadata.xDelta,metadata.xSize,`longitude`),latitudeDelta:resolveAxisDelta(metadata.yStart,metadata.yEnd,metadata.yDelta,metadata.ySize,`latitude`)}},FLOAT32_BYTES$1=Float32Array.BYTES_PER_ELEMENT,validateRange=(start,count,size,name)=>{if(!Number.isSafeInteger(start)||!Number.isSafeInteger(count)||start<0||count<=0||start+count>size)throw RangeError(`Radar grid volume ${name} chunk range is invalid. 雷达栅格体 ${name} 分块范围无效。`)},createRadarGridVolumeSource=(dataBytes,payloadOffset,metadata,revision)=>{let dataView=new DataView(dataBytes.buffer,dataBytes.byteOffset,dataBytes.byteLength),levelStart=metadata.levelList[0],levelEnd=metadata.levelList[metadata.levelList.length-1];return{metadata:{xAxis:{start:metadata.xStart,end:metadata.xEnd,count:metadata.xSize},yAxis:{start:levelStart,end:levelEnd,count:metadata.levels},zAxis:{start:metadata.yStart,end:metadata.yEnd,count:metadata.ySize},timeCount:metadata.times,noData:NaN,valueScale:1,revision},async readChunk(timeIndex,range,signal){if(signal?.throwIfAborted(),!Number.isSafeInteger(timeIndex)||timeIndex<0||timeIndex>=metadata.times)throw RangeError(`Radar grid volume time index is out of range: ${timeIndex}. 雷达栅格体时间索引越界:${timeIndex}。`);validateRange(range.xStart,range.xCount,metadata.xSize,`X`),validateRange(range.levelStart,range.levelCount,metadata.levels,`level`),validateRange(range.sourceYStart,range.sourceYCount,metadata.ySize,`source Y`);let values=new Float32Array(range.xCount*range.levelCount*range.sourceYCount),layerValueCount=metadata.xSize*metadata.ySize,timeOffset=timeIndex*metadata.levels*layerValueCount;for(let z=0;z<range.sourceYCount;z+=1){let sourceY=range.sourceYStart+z;for(let level=0;level<range.levelCount;level+=1){let sourceStart=timeOffset+(range.levelStart+level)*layerValueCount+sourceY*metadata.xSize+range.xStart,targetStart=(z*range.levelCount+level)*range.xCount;for(let x=0;x<range.xCount;x+=1){let rawValue=dataView.getFloat32(payloadOffset+(sourceStart+x)*FLOAT32_BYTES$1,metadata.littleEndian);values[targetStart+x]=rawValue===metadata.undef?NaN:rawValue*metadata.dataScale+metadata.dataOffset}}}return signal?.throwIfAborted(),{timeIndex,range:{...range},width:range.xCount,height:range.levelCount,depth:range.sourceYCount,values}}}},RADAR_GRID_VOLUME_ZIP_FORMAT=`radar-grid-volume-zip`;var ch2={},wk=(function(c,id,msg,transfer,cb){var w=new Worker(ch2[id]||(ch2[id]=URL.createObjectURL(new Blob([c+`;addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})`],{type:`text/javascript`}))));return w.onmessage=function(e){var d=e.data,ed=d.$e$;if(ed){var err=Error(ed[0]);err.code=ed[1],err.stack=ed[2],cb(err,null)}else cb(null,d)},w.postMessage(msg,transfer),w}),u8=Uint8Array,u16=Uint16Array,i32=Int32Array,fleb=new u8([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),fdeb=new u8([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),clim=new u8([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),freb=function(eb,start){for(var b=new u16(31),i=0;i<31;++i)b[i]=start+=1<<eb[i-1];for(var r=new i32(b[30]),i=1;i<30;++i)for(var j=b[i];j<b[i+1];++j)r[j]=j-b[i]<<5|i;return{b,r}},_a=freb(fleb,2),fl=_a.b,revfl=_a.r;fl[28]=258,revfl[258]=28;var _b=freb(fdeb,0),fd=_b.b;_b.r;for(var rev=new u16(32768),i=0;i<32768;++i){var x=(i&43690)>>1|(i&21845)<<1;x=(x&52428)>>2|(x&13107)<<2,x=(x&61680)>>4|(x&3855)<<4,rev[i]=((x&65280)>>8|(x&255)<<8)>>1}for(var hMap=(function(cd,mb,r){for(var s=cd.length,i=0,l=new u16(mb);i<s;++i)cd[i]&&++l[cd[i]-1];var le=new u16(mb);for(i=1;i<mb;++i)le[i]=le[i-1]+l[i-1]<<1;var co;if(r){co=new u16(1<<mb);var rvb=15-mb;for(i=0;i<s;++i)if(cd[i])for(var sv=i<<4|cd[i],r_1=mb-cd[i],v=le[cd[i]-1]++<<r_1,m=v|(1<<r_1)-1;v<=m;++v)co[rev[v]>>rvb]=sv}else for(co=new u16(s),i=0;i<s;++i)cd[i]&&(co[i]=rev[le[cd[i]-1]++]>>15-cd[i]);return co}),flt=new u8(288),i=0;i<144;++i)flt[i]=8;for(var i=144;i<256;++i)flt[i]=9;for(var i=256;i<280;++i)flt[i]=7;for(var i=280;i<288;++i)flt[i]=8;for(var fdt=new u8(32),i=0;i<32;++i)fdt[i]=5;var flrm=hMap(flt,9,1),fdrm=hMap(fdt,5,1),max=function(a){for(var m=a[0],i=1;i<a.length;++i)a[i]>m&&(m=a[i]);return m},bits=function(d,p,m){var o=p/8|0;return(d[o]|d[o+1]<<8)>>(p&7)&m},bits16=function(d,p){var o=p/8|0;return(d[o]|d[o+1]<<8|d[o+2]<<16)>>(p&7)},shft=function(p){return(p+7)/8|0},slc=function(v,s,e){return(s==null||s<0)&&(s=0),(e==null||e>v.length)&&(e=v.length),new u8(v.subarray(s,e))},ec=[`unexpected EOF`,`invalid block type`,`invalid length/literal`,`invalid distance`,`stream finished`,`no stream handler`,,`no callback`,`invalid UTF-8 data`,`extra field too long`,`date not in range 1980-2099`,`filename too long`,`stream finishing`,`invalid zip data`],err=function(ind,msg,nt){var e=Error(msg||ec[ind]);if(e.code=ind,Error.captureStackTrace&&Error.captureStackTrace(e,err),!nt)throw e;return e},inflt=function(dat,st,buf,dict){var sl=dat.length,dl=dict?dict.length:0;if(!sl||st.f&&!st.l)return buf||new u8(0);var noBuf=!buf,resize=noBuf||st.i!=2,noSt=st.i;noBuf&&(buf=new u8(sl*3));var cbuf=function(l){var bl=buf.length;if(l>bl){var nbuf=new u8(Math.max(bl*2,l));nbuf.set(buf),buf=nbuf}},final=st.f||0,pos=st.p||0,bt=st.b||0,lm=st.l,dm=st.d,lbt=st.m,dbt=st.n,tbts=sl*8;do{if(!lm){final=bits(dat,pos,1);var type=bits(dat,pos+1,3);if(pos+=3,!type){var s=shft(pos)+4,l=dat[s-4]|dat[s-3]<<8,t=s+l;if(t>sl){noSt&&err(0);break}resize&&cbuf(bt+l),buf.set(dat.subarray(s,t),bt),st.b=bt+=l,st.p=pos=t*8,st.f=final;continue}else if(type==1)lm=flrm,dm=fdrm,lbt=9,dbt=5;else if(type==2){var hLit=bits(dat,pos,31)+257,hcLen=bits(dat,pos+10,15)+4,tl=hLit+bits(dat,pos+5,31)+1;pos+=14;for(var ldt=new u8(tl),clt=new u8(19),i=0;i<hcLen;++i)clt[clim[i]]=bits(dat,pos+i*3,7);pos+=hcLen*3;for(var clb=max(clt),clbmsk=(1<<clb)-1,clm=hMap(clt,clb,1),i=0;i<tl;){var r=clm[bits(dat,pos,clbmsk)];pos+=r&15;var s=r>>4;if(s<16)ldt[i++]=s;else{var c=0,n=0;for(s==16?(n=3+bits(dat,pos,3),pos+=2,c=ldt[i-1]):s==17?(n=3+bits(dat,pos,7),pos+=3):s==18&&(n=11+bits(dat,pos,127),pos+=7);n--;)ldt[i++]=c}}var lt=ldt.subarray(0,hLit),dt=ldt.subarray(hLit);lbt=max(lt),dbt=max(dt),lm=hMap(lt,lbt,1),dm=hMap(dt,dbt,1)}else err(1);if(pos>tbts){noSt&&err(0);break}}resize&&cbuf(bt+131072);for(var lms=(1<<lbt)-1,dms=(1<<dbt)-1,lpos=pos;;lpos=pos){var c=lm[bits16(dat,pos)&lms],sym=c>>4;if(pos+=c&15,pos>tbts){noSt&&err(0);break}if(c||err(2),sym<256)buf[bt++]=sym;else if(sym==256){lpos=pos,lm=null;break}else{var add=sym-254;if(sym>264){var i=sym-257,b=fleb[i];add=bits(dat,pos,(1<<b)-1)+fl[i],pos+=b}var d=dm[bits16(dat,pos)&dms],dsym=d>>4;d||err(3),pos+=d&15;var dt=fd[dsym];if(dsym>3){var b=fdeb[dsym];dt+=bits16(dat,pos)&(1<<b)-1,pos+=b}if(pos>tbts){noSt&&err(0);break}resize&&cbuf(bt+131072);var end=bt+add;if(bt<dt){var shift=dl-dt,dend=Math.min(dt,end);for(shift+bt<0&&err(3);bt<dend;++bt)buf[bt]=dict[shift+bt]}for(;bt<end;++bt)buf[bt]=buf[bt-dt]}}st.l=lm,st.p=lpos,st.b=bt,st.f=final,lm&&(final=1,st.m=lbt,st.d=dm,st.n=dbt)}while(!final);return bt!=buf.length&&noBuf?slc(buf,0,bt):buf.subarray(0,bt)},et=new u8(0),mrg=function(a,b){var o={};for(var k in a)o[k]=a[k];for(var k in b)o[k]=b[k];return o},wcln=function(fn,fnStr,td){for(var dt=fn(),st=fn.toString(),ks=st.slice(st.indexOf(`[`)+1,st.lastIndexOf(`]`)).replace(/\s+/g,``).split(`,`),i=0;i<dt.length;++i){var v=dt[i],k=ks[i];if(typeof v==`function`){fnStr+=`;`+k+`=`;var st_1=v.toString();if(v.prototype)if(st_1.indexOf(`[native code]`)!=-1){var spInd=st_1.indexOf(` `,8)+1;fnStr+=st_1.slice(spInd,st_1.indexOf(`(`,spInd))}else for(var t in fnStr+=st_1,v.prototype)fnStr+=`;`+k+`.prototype.`+t+`=`+v.prototype[t].toString();else fnStr+=st_1}else td[k]=v}return fnStr},ch=[],cbfs=function(v){var tl=[];for(var k in v)v[k].buffer&&tl.push((v[k]=new v[k].constructor(v[k])).buffer);return tl},wrkr=function(fns,init,id,cb){if(!ch[id]){for(var fnStr=``,td_1={},m=fns.length-1,i=0;i<m;++i)fnStr=wcln(fns[i],fnStr,td_1);ch[id]={c:wcln(fns[m],fnStr,td_1),e:td_1}}var td=mrg({},ch[id].e);return wk(ch[id].c+`;onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=`+init.toString()+`}`,id,td,cbfs(td),cb)},bInflt=function(){return[u8,u16,i32,fleb,fdeb,clim,fl,fd,flrm,fdrm,rev,ec,hMap,max,bits,bits16,shft,slc,err,inflt,inflateSync,pbf,gopt]},pbf=function(msg){return postMessage(msg,[msg.buffer])},gopt=function(o){return o&&{out:o.size&&new u8(o.size),dictionary:o.dictionary}},cbify=function(dat,opts,fns,init,id,cb){var w=wrkr(fns,init,id,function(err,dat){w.terminate(),cb(err,dat)});return w.postMessage([dat,opts],opts.consume?[dat.buffer]:[]),function(){w.terminate()}},b2=function(d,b){return d[b]|d[b+1]<<8},b4=function(d,b){return(d[b]|d[b+1]<<8|d[b+2]<<16|d[b+3]<<24)>>>0},b8=function(d,b){return b4(d,b)+b4(d,b+4)*4294967296};function inflate(data,opts,cb){return cb||(cb=opts,opts={}),typeof cb!=`function`&&err(7),cbify(data,opts,[bInflt],function(ev){return pbf(inflateSync(ev.data[0],gopt(ev.data[1])))},1,cb)}function inflateSync(data,opts){return inflt(data,{i:2},opts&&opts.out,opts&&opts.dictionary)}var td=typeof TextDecoder<`u`&&new TextDecoder;try{td.decode(et,{stream:!0})}catch{}var dutf8=function(d){for(var r=``,i=0;;){var c=d[i++],eb=(c>127)+(c>223)+(c>239);if(i+eb>d.length)return{s:r,r:slc(d,i-1)};eb?eb==3?(c=((c&15)<<18|(d[i++]&63)<<12|(d[i++]&63)<<6|d[i++]&63)-65536,r+=String.fromCharCode(55296|c>>10,56320|c&1023)):eb&1?r+=String.fromCharCode((c&31)<<6|d[i++]&63):r+=String.fromCharCode((c&15)<<12|(d[i++]&63)<<6|d[i++]&63):r+=String.fromCharCode(c)}};function strFromU8(dat,latin1){if(latin1){for(var r=``,i=0;i<dat.length;i+=16384)r+=String.fromCharCode.apply(null,dat.subarray(i,i+16384));return r}else if(td)return td.decode(dat);else{var _a=dutf8(dat),s=_a.s,r=_a.r;return r.length&&err(8),s}}var slzh=function(d,b){return b+30+b2(d,b+26)+b2(d,b+28)},zh=function(d,b,z){var fnl=b2(d,b+28),efl=b2(d,b+30),fn=strFromU8(d.subarray(b+46,b+46+fnl),!(b2(d,b+8)&2048)),es=b+46+fnl,_a=z64hs(d,es,efl,z,b4(d,b+20),b4(d,b+24),b4(d,b+42)),sc=_a[0],su=_a[1],off=_a[2];return[b2(d,b+10),sc,su,fn,es+efl+b2(d,b+32),off]},z64hs=function(d,b,l,z,sc,su,off){var nsc=sc==4294967295,nsu=su==4294967295,noff=off==4294967295,e=b+l,nf=nsc+nsu+noff;if(z&&nf){for(;b+4<e;b+=4+b2(d,b+2))if(b2(d,b)==1)return[nsc?b8(d,b+4+8*nsu):sc,nsu?b8(d,b+4):su,noff?b8(d,b+4+8*(nsu+nsc)):off,1];z<2&&err(13)}return[sc,su,off,0]},mt=typeof queueMicrotask==`function`?queueMicrotask:typeof setTimeout==`function`?setTimeout:function(fn){fn()};function unzip(data,opts,cb){cb||(cb=opts,opts={}),typeof cb!=`function`&&err(7);var term=[],tAll=function(){for(var i=0;i<term.length;++i)term[i]()},files={},cbd=function(a,b){mt(function(){cb(a,b)})};mt(function(){cbd=cb});for(var e=data.length-22;b4(data,e)!=101010256;--e)if(!e||data.length-e>65558)return cbd(err(13,0,1),null),tAll;var lft=b2(data,e+8);if(lft){var c=lft,o=b4(data,e+16),z=b4(data,e-20)==117853008;if(z){var ze=b4(data,e-12);z=b4(data,ze)==101075792,z&&(c=lft=b4(data,ze+32),o=b4(data,ze+48))}for(var fltr=opts&&opts.filter,_loop_3=function(i){var _a=zh(data,o,z),c_1=_a[0],sc=_a[1],su=_a[2],fn=_a[3],no=_a[4],off=_a[5],b=slzh(data,off);o=no;var cbl=function(e,d){e?(tAll(),cbd(e,null)):(d&&(files[fn]=d),--lft||cbd(null,files))};if(!fltr||fltr({name:fn,size:sc,originalSize:su,compression:c_1}))if(!c_1)cbl(null,slc(data,b,b+sc));else if(c_1==8){var infl=data.subarray(b,b+sc);if(su<524288||sc>.8*su)try{cbl(null,inflateSync(infl,{out:new u8(su)}))}catch(e){cbl(e,null)}else term.push(inflate(infl,{size:su},cbl))}else cbl(err(14,`unknown compression type `+c_1,1),null);else cbl(null,null)},i=0;i<c;++i)_loop_3(i)}else cbd(null,{});return tAll}function unzipSync(data,opts){for(var files={},e=data.length-22;b4(data,e)!=101010256;--e)(!e||data.length-e>65558)&&err(13);var c=b2(data,e+8);if(!c)return{};var o=b4(data,e+16),z=b4(data,e-20)==117853008;if(z){var ze=b4(data,e-12);z=b4(data,ze)==101075792,z&&(c=b4(data,ze+32),o=b4(data,ze+48))}for(var fltr=opts&&opts.filter,i=0;i<c;++i){var _a=zh(data,o,z),c_2=_a[0],sc=_a[1],su=_a[2],fn=_a[3],no=_a[4],off=_a[5],b=slzh(data,off);o=no,(!fltr||fltr({name:fn,size:sc,originalSize:su,compression:c_2}))&&(c_2?c_2==8?files[fn]=inflateSync(data.subarray(b,b+sc),{out:new u8(su)}):err(14,`unknown compression type `+c_2):files[fn]=slc(data,b,b+sc))}return files}const createInvalidZipError=message=>new VolumeDataError(`INVALID_ZIP`,`${message} ZIP 结构无效。`),findEndOfCentralDirectory=view=>{let minimumOffset=Math.max(0,view.byteLength-22-65535);for(let offset=view.byteLength-22;offset>=minimumOffset;--offset){if(view.getUint32(offset,!0)!==101010256)continue;let commentLength=view.getUint16(offset+20,!0);if(offset+22+commentLength===view.byteLength)return offset}throw createInvalidZipError(`End of central directory was not found.`)},decodeEntryName=(bytes,offset,length)=>{try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(bytes.subarray(offset,offset+length))}catch(error){throw new VolumeDataError(`INVALID_ZIP`,`ZIP entry name is not valid UTF-8. ZIP 条目名称不是有效 UTF-8。`,{cause:error})}},findDataEntry=(archiveBytes,entryName,limits)=>{if(archiveBytes.byteLength<22)throw createInvalidZipError(`Archive is too short.`);let view=new DataView(archiveBytes.buffer,archiveBytes.byteOffset,archiveBytes.byteLength),endOffset=findEndOfCentralDirectory(view),diskNumber=view.getUint16(endOffset+4,!0),centralDiskNumber=view.getUint16(endOffset+6,!0),diskEntryCount=view.getUint16(endOffset+8,!0),entryCount=view.getUint16(endOffset+10,!0),centralSize=view.getUint32(endOffset+12,!0),centralOffset=view.getUint32(endOffset+16,!0);if(diskNumber!==0||centralDiskNumber!==0||diskEntryCount!==entryCount)throw new VolumeDataError(`INVALID_ZIP`,`Multi-disk ZIP archives are not supported. 不支持多磁盘 ZIP 压缩包。`);if(entryCount===65535||centralSize===4294967295||centralOffset===4294967295)throw new VolumeDataError(`ZIP64_UNSUPPORTED`,`ZIP64 archives are not supported. 不支持 ZIP64 压缩包。`);if(entryCount>limits.maximumEntryCount)throw new VolumeDataError(`TOO_MANY_ENTRIES`,`ZIP entry count ${entryCount} exceeds the ${limits.maximumEntryCount} entry limit. ZIP 条目数 ${entryCount} 超过 ${limits.maximumEntryCount} 条限制。`);if(!Number.isSafeInteger(centralOffset+centralSize)||centralOffset+centralSize>endOffset)throw createInvalidZipError(`Central directory exceeds archive bounds.`);let matches=[],offset=centralOffset;for(let index=0;index<entryCount;index+=1){if(offset+46>endOffset||view.getUint32(offset,!0)!==33639248)throw createInvalidZipError(`Central directory entry is truncated or has an invalid signature.`);let flags=view.getUint16(offset+8,!0),compression=view.getUint16(offset+10,!0),compressedSize=view.getUint32(offset+20,!0),uncompressedSize=view.getUint32(offset+24,!0),nameLength=view.getUint16(offset+28,!0),extraLength=view.getUint16(offset+30,!0),commentLength=view.getUint16(offset+32,!0),nextOffset=offset+46+nameLength+extraLength+commentLength;if(nextOffset>endOffset)throw createInvalidZipError(`Central directory entry exceeds archive bounds.`);if(compressedSize===4294967295||uncompressedSize===4294967295)throw new VolumeDataError(`ZIP64_UNSUPPORTED`,`ZIP64 entries are not supported. 不支持 ZIP64 条目。`);let name=decodeEntryName(archiveBytes,offset+46,nameLength);if(name===entryName||name.endsWith(`/${entryName}`)){if(flags&1)throw new VolumeDataError(`ENCRYPTED_ENTRY`,`ZIP entry "${name}" is encrypted. ZIP 条目 "${name}" 已加密。`);if(compression!==0&&compression!==8)throw new VolumeDataError(`UNSUPPORTED_COMPRESSION`,`ZIP entry "${name}" uses unsupported compression method ${compression}. ZIP 条目 "${name}" 使用不支持的压缩方式 ${compression}。`);if(uncompressedSize>limits.maximumEntryBytes)throw new VolumeDataError(`ENTRY_TOO_LARGE`,`ZIP entry "${name}" expands to ${uncompressedSize} bytes, exceeding the ${limits.maximumEntryBytes} byte limit. ZIP 条目 "${name}" 解压后为 ${uncompressedSize} 字节,超过 ${limits.maximumEntryBytes} 字节限制。`);let ratio=uncompressedSize/Math.max(1,compressedSize);if(ratio>limits.maximumCompressionRatio)throw new VolumeDataError(`SUSPICIOUS_COMPRESSION_RATIO`,`ZIP entry "${name}" compression ratio ${ratio.toFixed(2)} exceeds the ${limits.maximumCompressionRatio} limit. ZIP 条目 "${name}" 压缩比 ${ratio.toFixed(2)} 超过 ${limits.maximumCompressionRatio} 限制。`);matches.push({name,compressedSize,uncompressedSize,compression})}offset=nextOffset}if(matches.length===0)throw new VolumeDataError(`ENTRY_NOT_FOUND`,`ZIP entry "${entryName}" was not found. ZIP 中未找到条目 "${entryName}"。`);if(matches.length>1)throw new VolumeDataError(`AMBIGUOUS_ENTRY`,`ZIP contains multiple entries named "${entryName}". ZIP 中存在多个名为 "${entryName}" 的条目。`);return matches[0]},extractZipEntry=async(archiveBytes,entryName,limits,signal)=>{signal?.throwIfAborted();let selected=findDataEntry(archiveBytes,entryName,limits);if(typeof Worker>`u`)try{let files=unzipSync(archiveBytes,{filter:file=>file.name===selected.name});signal?.throwIfAborted();let bytes=files[selected.name];if(!bytes||bytes.byteLength!==selected.uncompressedSize)throw new VolumeDataError(`INVALID_ZIP`,`ZIP entry "${selected.name}" decompressed length does not match its central directory. ZIP 条目 "${selected.name}" 的解压长度与中央目录不一致。`);return bytes}catch(error){throw error instanceof VolumeDataError?error:new VolumeDataError(`INVALID_ZIP`,`Failed to decompress ZIP archive. ZIP 解压失败。`,{cause:error})}return new Promise((resolve,reject)=>{try{unzip(archiveBytes,{filter:file=>file.name===selected.name},(error,files)=>{if(error){reject(new VolumeDataError(`INVALID_ZIP`,`Failed to decompress ZIP archive: ${error.message}. ZIP 解压失败。`,{cause:error}));return}try{signal?.throwIfAborted();let bytes=files[selected.name];if(!bytes||bytes.byteLength!==selected.uncompressedSize)throw new VolumeDataError(`INVALID_ZIP`,`ZIP entry "${selected.name}" decompressed length does not match its central directory. ZIP 条目 "${selected.name}" 的解压长度与中央目录不一致。`);resolve(bytes)}catch(callbackError){reject(callbackError)}})}catch(error){reject(error instanceof VolumeDataError?error:new VolumeDataError(`INVALID_ZIP`,`Failed to start ZIP decompression. 无法启动 ZIP 解压。`,{cause:error}))}})},HEADER_LENGTH_BYTES=Uint32Array.BYTES_PER_ELEMENT,FLOAT32_BYTES=Float32Array.BYTES_PER_ELEMENT,multiplySafe=(left,right)=>{let result=left*right;if(!Number.isSafeInteger(result))throw new VolumeDataError(`INVALID_DATA_SIZE`,`Radar grid volume dimensions exceed the safe integer range. 雷达栅格体尺寸超过安全整数范围。`);return result},decodeHeader=(bytes,jsonLength)=>{try{let text=new TextDecoder(`utf-8`,{fatal:!0}).decode(bytes.subarray(HEADER_LENGTH_BYTES,HEADER_LENGTH_BYTES+jsonLength));return JSON.parse(text)}catch(error){throw new VolumeDataError(`INVALID_HEADER_JSON`,`Failed to decode radar grid volume metadata JSON. 雷达栅格体元数据 JSON 解码失败。`,{cause:error})}},loadRadarGridVolumeZip=async(archiveBytes,options)=>{let maximumEntryBytes=options.maxEntryBytes??256*1024*1024,maximumHeaderBytes=options.maxHeaderBytes??1024*1024,dataBytes=await extractZipEntry(archiveBytes,`data.bin`,{maximumEntryBytes,maximumEntryCount:options.maxEntryCount??1024,maximumCompressionRatio:options.maxCompressionRatio??200},options.signal);if(dataBytes.byteLength<HEADER_LENGTH_BYTES)throw new VolumeDataError(`FILE_TOO_SHORT`,`Radar grid volume data.bin must contain a four-byte header length. 雷达栅格体 data.bin 必须包含四字节头部长度。`);let jsonLength=new DataView(dataBytes.buffer,dataBytes.byteOffset,dataBytes.byteLength).getUint32(0,!0);if(jsonLength===0||jsonLength>maximumHeaderBytes)throw new VolumeDataError(`INVALID_HEADER_LENGTH`,`Radar grid volume header length ${jsonLength} is outside the allowed range. 雷达栅格体头部长度 ${jsonLength} 超出允许范围。`);let payloadOffset=HEADER_LENGTH_BYTES+jsonLength;if(!Number.isSafeInteger(payloadOffset)||payloadOffset>dataBytes.byteLength)throw new VolumeDataError(`INVALID_HEADER_LENGTH`,`Radar grid volume header exceeds data.bin bounds. 雷达栅格体头部超出 data.bin 边界。`);let metadata=parseRadarGridVolumeMetadata(decodeHeader(dataBytes,jsonLength),options.sourceName,options.productTime),valueCount=multiplySafe(metadata.times,metadata.levels);valueCount=multiplySafe(valueCount,metadata.ySize),valueCount=multiplySafe(valueCount,metadata.xSize);let payloadBytes=multiplySafe(valueCount,FLOAT32_BYTES),actualPayloadBytes=dataBytes.byteLength-payloadOffset;if(actualPayloadBytes!==payloadBytes)throw new VolumeDataError(`INVALID_PAYLOAD_LENGTH`,`Expected ${payloadBytes} radar grid volume payload bytes but received ${actualPayloadBytes}. 雷达栅格体数据区预期 ${payloadBytes} 字节,实际 ${actualPayloadBytes} 字节。`);return{format:RADAR_GRID_VOLUME_ZIP_FORMAT,metadata,source:createRadarGridVolumeSource(dataBytes,payloadOffset,metadata,options.revision)}},PARSERS={[RADAR_GRID_VOLUME_ZIP_FORMAT]:{load:loadRadarGridVolumeZip}},getVolumeDataParser=format=>PARSERS[format],validatePositiveLimit=(value,name)=>{if(!Number.isSafeInteger(value)||value<=0)throw RangeError(`Volume data ${name} must be a positive safe integer. 体数据 ${name} 必须是正安全整数。`)},loadVolumeSource=async(input,options)=>{let format=options?.format;if(typeof format!=`string`)throw new VolumeDataError(`UNSUPPORTED_FORMAT`,`Volume data format must be specified explicitly. 必须显式指定体数据格式。`);let parser=getVolumeDataParser(format);if(!parser)throw new VolumeDataError(`UNSUPPORTED_FORMAT`,`Unsupported volume data format: ${format}. 不支持的体数据格式:${format}。`);let maximumArchiveBytes=options.maxArchiveBytes??64*1024*1024;if(validatePositiveLimit(maximumArchiveBytes,`maxArchiveBytes`),options.maxEntryBytes!==void 0&&validatePositiveLimit(options.maxEntryBytes,`maxEntryBytes`),options.maxEntryCount!==void 0&&validatePositiveLimit(options.maxEntryCount,`maxEntryCount`),options.maxHeaderBytes!==void 0&&validatePositiveLimit(options.maxHeaderBytes,`maxHeaderBytes`),options.maxCompressionRatio!==void 0&&(!Number.isFinite(options.maxCompressionRatio)||options.maxCompressionRatio<=0))throw RangeError(`Volume data maxCompressionRatio must be greater than zero. 体数据 maxCompressionRatio 必须大于零。`);let bytes=await normalizeVolumeDataInput(input,maximumArchiveBytes,options.signal);return parser.load(bytes,options)};export{RADAR_GRID_VOLUME_ZIP_FORMAT,VolumeDataError,loadVolumeSource};
@@ -0,0 +1,2 @@
1
+ import type { VolumeDataInput } from './volumeDataTypes';
2
+ export declare const normalizeVolumeDataInput: (input: VolumeDataInput, maximumBytes: number, signal?: AbortSignal) => Promise<Uint8Array>;
@@ -0,0 +1 @@
1
+ (function(_0x534045,_0x44af02){const _0x1a5a0e=_0xe0c9,_0x3d3bb9=_0x534045();while(!![]){try{const _0x3166ec=-parseInt(_0x1a5a0e(0xf9))/0x1+parseInt(_0x1a5a0e(0xe8))/0x2*(-parseInt(_0x1a5a0e(0xee))/0x3)+-parseInt(_0x1a5a0e(0xe3))/0x4+parseInt(_0x1a5a0e(0x107))/0x5+parseInt(_0x1a5a0e(0xea))/0x6+parseInt(_0x1a5a0e(0xeb))/0x7*(parseInt(_0x1a5a0e(0xf7))/0x8)+parseInt(_0x1a5a0e(0xec))/0x9;if(_0x3166ec===_0x44af02)break;else _0x3d3bb9['push'](_0x3d3bb9['shift']());}catch(_0x5541f9){_0x3d3bb9['push'](_0x3d3bb9['shift']());}}}(_0x10eb,0xbf508));import{VolumeDataError}from'./volumeDataError';function _0xe0c9(_0x10409c,_0x435829){const _0x10eb26=_0x10eb();return _0xe0c9=function(_0xe0c9c1,_0x1277f0){_0xe0c9c1=_0xe0c9c1-0xe1;let _0x1284a2=_0x10eb26[_0xe0c9c1];return _0x1284a2;},_0xe0c9(_0x10409c,_0x435829);}function _0x10eb(){const _0x3d6d68=['arrayBuffer','read','Volume\x20archive\x20stream\x20exceeds\x20the\x20','value','2IhNlMb','.\x20获取体数据压缩包失败:HTTP\x20','3958062JPzEYd','771134OfFGLP','14656302xzviYy','.\x20获取体数据压缩包失败。','3352431xRmFwo','set','\x20超过\x20','push','Failed\x20to\x20fetch\x20volume\x20archive:\x20','string','body','\x20字节限制。','cancel','104GKMmFP','Volume\x20archive\x20length\x20','867705ZoXDkc','headers','getReader','get','INPUT_TOO_LARGE','releaseLock','aborted','Volume\x20data\x20input\x20must\x20be\x20a\x20URL,\x20string,\x20ArrayBuffer,\x20or\x20Uint8Array.\x20体数据输入必须是\x20URL、字符串、ArrayBuffer\x20或\x20Uint8Array。','byteLength','\x20exceeds\x20the\x20','content-length','status','FETCH_FAILED','\x20byte\x20limit.\x20体数据压缩包流超过\x20','1008930nDMVSI','Volume\x20archive\x20content\x20length\x20','isFinite','\x20byte\x20limit.\x20体数据压缩包长度\x20','done','throwIfAborted','4612964XEULla'];_0x10eb=function(){return _0x3d6d68;};return _0x10eb();}const concatenateChunks=(_0x4797d6,_0x4b74ca)=>{const _0x410ad8=_0xe0c9,_0x94cfaa=new Uint8Array(_0x4b74ca);let _0x54bf5e=0x0;for(const _0x37a9cd of _0x4797d6){_0x94cfaa[_0x410ad8(0xef)](_0x37a9cd,_0x54bf5e),_0x54bf5e+=_0x37a9cd[_0x410ad8(0x101)];}return _0x94cfaa;},readResponseBytes=async(_0xd39169,_0x534a97,_0x1f031d)=>{const _0x1e1cbb=_0xe0c9,_0xe9e866=Number(_0xd39169[_0x1e1cbb(0xfa)][_0x1e1cbb(0xfc)](_0x1e1cbb(0x103)));if(Number[_0x1e1cbb(0x109)](_0xe9e866)&&_0xe9e866>_0x534a97)throw new VolumeDataError(_0x1e1cbb(0xfd),_0x1e1cbb(0x108)+_0xe9e866+_0x1e1cbb(0x102)+_0x534a97+_0x1e1cbb(0x10a)+_0xe9e866+_0x1e1cbb(0xf0)+_0x534a97+_0x1e1cbb(0xf5));if(!_0xd39169[_0x1e1cbb(0xf4)]){const _0x313949=await _0xd39169[_0x1e1cbb(0xe4)]();if(_0x313949[_0x1e1cbb(0x101)]>_0x534a97)throw new VolumeDataError(_0x1e1cbb(0xfd),_0x1e1cbb(0xf8)+_0x313949[_0x1e1cbb(0x101)]+_0x1e1cbb(0x102)+_0x534a97+'\x20byte\x20limit.\x20体数据压缩包长度\x20'+_0x313949[_0x1e1cbb(0x101)]+_0x1e1cbb(0xf0)+_0x534a97+_0x1e1cbb(0xf5));return new Uint8Array(_0x313949);}const _0x956a5e=_0xd39169[_0x1e1cbb(0xf4)][_0x1e1cbb(0xfb)](),_0x1e316a=[];let _0x966b05=0x0;try{while(!![]){_0x1f031d?.[_0x1e1cbb(0xe2)]();const _0x579033=await _0x956a5e[_0x1e1cbb(0xe5)]();if(_0x579033[_0x1e1cbb(0xe1)])break;_0x966b05+=_0x579033[_0x1e1cbb(0xe7)][_0x1e1cbb(0x101)];if(_0x966b05>_0x534a97){await _0x956a5e[_0x1e1cbb(0xf6)]();throw new VolumeDataError('INPUT_TOO_LARGE',_0x1e1cbb(0xe6)+_0x534a97+_0x1e1cbb(0x106)+_0x534a97+_0x1e1cbb(0xf5));}_0x1e316a[_0x1e1cbb(0xf1)](_0x579033[_0x1e1cbb(0xe7)]);}}finally{_0x956a5e[_0x1e1cbb(0xfe)]();}return concatenateChunks(_0x1e316a,_0x966b05);};export const normalizeVolumeDataInput=async(_0x2a2191,_0x182026,_0x403a57)=>{const _0x43655c=_0xe0c9;_0x403a57?.[_0x43655c(0xe2)]();if(_0x2a2191 instanceof Uint8Array){if(_0x2a2191[_0x43655c(0x101)]>_0x182026)throw new VolumeDataError(_0x43655c(0xfd),_0x43655c(0xf8)+_0x2a2191[_0x43655c(0x101)]+_0x43655c(0x102)+_0x182026+_0x43655c(0x10a)+_0x2a2191[_0x43655c(0x101)]+_0x43655c(0xf0)+_0x182026+'\x20字节限制。');return _0x2a2191;}if(_0x2a2191 instanceof ArrayBuffer){if(_0x2a2191[_0x43655c(0x101)]>_0x182026)throw new VolumeDataError('INPUT_TOO_LARGE','Volume\x20archive\x20length\x20'+_0x2a2191[_0x43655c(0x101)]+_0x43655c(0x102)+_0x182026+_0x43655c(0x10a)+_0x2a2191[_0x43655c(0x101)]+_0x43655c(0xf0)+_0x182026+_0x43655c(0xf5));return new Uint8Array(_0x2a2191);}if(typeof _0x2a2191!==_0x43655c(0xf3)&&!(_0x2a2191 instanceof URL))throw new TypeError(_0x43655c(0x100));let _0x4a38fb;try{_0x4a38fb=await fetch(_0x2a2191,{'signal':_0x403a57});}catch(_0x28bae2){if(_0x403a57?.[_0x43655c(0xff)])_0x403a57[_0x43655c(0xe2)]();throw new VolumeDataError(_0x43655c(0x105),_0x43655c(0xf2)+String(_0x28bae2)+_0x43655c(0xed),{'cause':_0x28bae2});}if(!_0x4a38fb['ok'])throw new VolumeDataError(_0x43655c(0x105),'Failed\x20to\x20fetch\x20volume\x20archive:\x20HTTP\x20'+_0x4a38fb[_0x43655c(0x104)]+_0x43655c(0xe9)+_0x4a38fb[_0x43655c(0x104)]+'。');return readResponseBytes(_0x4a38fb,_0x182026,_0x403a57);};
@@ -0,0 +1,2 @@
1
+ import type { ILoadVolumeSourceOptions, LoadedVolumeSource, VolumeDataInput } from './volumeDataTypes';
2
+ export declare const loadVolumeSource: (input: VolumeDataInput, options: ILoadVolumeSourceOptions) => Promise<LoadedVolumeSource>;
@@ -0,0 +1 @@
1
+ function _0x494f(_0x154c1a,_0x4e09e9){const _0x5765f1=_0x5765();return _0x494f=function(_0x494fae,_0x396020){_0x494fae=_0x494fae-0x1f2;let _0x3f1d26=_0x5765f1[_0x494fae];return _0x3f1d26;},_0x494f(_0x154c1a,_0x4e09e9);}(function(_0x1bc560,_0x1e9494){const _0x165a1f=_0x494f,_0x30b0bd=_0x1bc560();while(!![]){try{const _0x3c3fc0=parseInt(_0x165a1f(0x1fa))/0x1+parseInt(_0x165a1f(0x1f4))/0x2+-parseInt(_0x165a1f(0x207))/0x3*(-parseInt(_0x165a1f(0x200))/0x4)+-parseInt(_0x165a1f(0x1f6))/0x5+-parseInt(_0x165a1f(0x201))/0x6*(parseInt(_0x165a1f(0x1f3))/0x7)+parseInt(_0x165a1f(0x208))/0x8+-parseInt(_0x165a1f(0x202))/0x9;if(_0x3c3fc0===_0x1e9494)break;else _0x30b0bd['push'](_0x30b0bd['shift']());}catch(_0xce28ba){_0x30b0bd['push'](_0x30b0bd['shift']());}}}(_0x5765,0xbe8de));import{normalizeVolumeDataInput}from'./input';import{getVolumeDataParser}from'./parserRegistry';import{VolumeDataError}from'./volumeDataError';function _0x5765(){const _0x4946e4=['2992620Pqvqpb','maxCompressionRatio','\x20必须是正安全整数。','Volume\x20data\x20maxCompressionRatio\x20must\x20be\x20greater\x20than\x20zero.\x20体数据\x20maxCompressionRatio\x20必须大于零。','954919UkBKDy','maxHeaderBytes','maxArchiveBytes','Volume\x20data\x20','UNSUPPORTED_FORMAT','signal','156UoUZcy','17574bZtQyX','10542096YArClx','format','isSafeInteger','Volume\x20data\x20format\x20must\x20be\x20specified\x20explicitly.\x20必须显式指定体数据格式。','.\x20不支持的体数据格式:','92979QpeygB','4830928MdNBKg','isFinite','load','Unsupported\x20volume\x20data\x20format:\x20','string','maxEntryCount','2562WtZGEJ','1709760EoYBhc','maxEntryBytes'];_0x5765=function(){return _0x4946e4;};return _0x5765();}const validatePositiveLimit=(_0x4b6d8e,_0x1a4494)=>{const _0x3c1ae3=_0x494f;if(!Number[_0x3c1ae3(0x204)](_0x4b6d8e)||_0x4b6d8e<=0x0)throw new RangeError(_0x3c1ae3(0x1fd)+_0x1a4494+'\x20must\x20be\x20a\x20positive\x20safe\x20integer.\x20体数据\x20'+_0x1a4494+_0x3c1ae3(0x1f8));};export const loadVolumeSource=async(_0x548372,_0x274482)=>{const _0x27ddff=_0x494f,_0x16cba2=_0x274482?.[_0x27ddff(0x203)];if(typeof _0x16cba2!==_0x27ddff(0x20c))throw new VolumeDataError(_0x27ddff(0x1fe),_0x27ddff(0x205));const _0x262b90=getVolumeDataParser(_0x16cba2);if(!_0x262b90)throw new VolumeDataError(_0x27ddff(0x1fe),_0x27ddff(0x20b)+_0x16cba2+_0x27ddff(0x206)+_0x16cba2+'。');const _0x2a01d2=_0x274482[_0x27ddff(0x1fc)]??0x40*0x400*0x400;validatePositiveLimit(_0x2a01d2,_0x27ddff(0x1fc));if(_0x274482[_0x27ddff(0x1f5)]!==undefined)validatePositiveLimit(_0x274482[_0x27ddff(0x1f5)],_0x27ddff(0x1f5));if(_0x274482[_0x27ddff(0x1f2)]!==undefined)validatePositiveLimit(_0x274482[_0x27ddff(0x1f2)],_0x27ddff(0x1f2));if(_0x274482[_0x27ddff(0x1fb)]!==undefined)validatePositiveLimit(_0x274482[_0x27ddff(0x1fb)],_0x27ddff(0x1fb));if(_0x274482[_0x27ddff(0x1f7)]!==undefined&&(!Number[_0x27ddff(0x209)](_0x274482['maxCompressionRatio'])||_0x274482['maxCompressionRatio']<=0x0))throw new RangeError(_0x27ddff(0x1f9));const _0x880870=await normalizeVolumeDataInput(_0x548372,_0x2a01d2,_0x274482[_0x27ddff(0x1ff)]);return _0x262b90[_0x27ddff(0x20a)](_0x880870,_0x274482);};
@@ -0,0 +1 @@
1
+ (function(global,factory){typeof exports==`object`&&typeof module<`u`?factory(exports):typeof define==`function`&&define.amd?define([`exports`],factory):(global=typeof globalThis<`u`?globalThis:global||self,factory(global.M4WVolumeData={}))})(this,function(exports){Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var VolumeDataError=class extends Error{code;constructor(code,message,options){super(message,options),this.name=`VolumeDataError`,this.code=code}};let concatenateChunks=(chunks,byteLength)=>{let bytes=new Uint8Array(byteLength),offset=0;for(let chunk of chunks)bytes.set(chunk,offset),offset+=chunk.byteLength;return bytes},readResponseBytes=async(response,maximumBytes,signal)=>{let contentLength=Number(response.headers.get(`content-length`));if(Number.isFinite(contentLength)&&contentLength>maximumBytes)throw new VolumeDataError(`INPUT_TOO_LARGE`,`Volume archive content length ${contentLength} exceeds the ${maximumBytes} byte limit. 体数据压缩包长度 ${contentLength} 超过 ${maximumBytes} 字节限制。`);if(!response.body){let buffer=await response.arrayBuffer();if(buffer.byteLength>maximumBytes)throw new VolumeDataError(`INPUT_TOO_LARGE`,`Volume archive length ${buffer.byteLength} exceeds the ${maximumBytes} byte limit. 体数据压缩包长度 ${buffer.byteLength} 超过 ${maximumBytes} 字节限制。`);return new Uint8Array(buffer)}let reader=response.body.getReader(),chunks=[],byteLength=0;try{for(;;){signal?.throwIfAborted();let result=await reader.read();if(result.done)break;if(byteLength+=result.value.byteLength,byteLength>maximumBytes)throw await reader.cancel(),new VolumeDataError(`INPUT_TOO_LARGE`,`Volume archive stream exceeds the ${maximumBytes} byte limit. 体数据压缩包流超过 ${maximumBytes} 字节限制。`);chunks.push(result.value)}}finally{reader.releaseLock()}return concatenateChunks(chunks,byteLength)},normalizeVolumeDataInput=async(input,maximumBytes,signal)=>{if(signal?.throwIfAborted(),input instanceof Uint8Array){if(input.byteLength>maximumBytes)throw new VolumeDataError(`INPUT_TOO_LARGE`,`Volume archive length ${input.byteLength} exceeds the ${maximumBytes} byte limit. 体数据压缩包长度 ${input.byteLength} 超过 ${maximumBytes} 字节限制。`);return input}if(input instanceof ArrayBuffer){if(input.byteLength>maximumBytes)throw new VolumeDataError(`INPUT_TOO_LARGE`,`Volume archive length ${input.byteLength} exceeds the ${maximumBytes} byte limit. 体数据压缩包长度 ${input.byteLength} 超过 ${maximumBytes} 字节限制。`);return new Uint8Array(input)}if(typeof input!=`string`&&!(input instanceof URL))throw TypeError(`Volume data input must be a URL, string, ArrayBuffer, or Uint8Array. 体数据输入必须是 URL、字符串、ArrayBuffer 或 Uint8Array。`);let response;try{response=await fetch(input,{signal})}catch(error){throw signal?.aborted&&signal.throwIfAborted(),new VolumeDataError(`FETCH_FAILED`,`Failed to fetch volume archive: ${String(error)}. 获取体数据压缩包失败。`,{cause:error})}if(!response.ok)throw new VolumeDataError(`FETCH_FAILED`,`Failed to fetch volume archive: HTTP ${response.status}. 获取体数据压缩包失败:HTTP ${response.status}。`);return readResponseBytes(response,maximumBytes,signal)},isRecord=value=>typeof value==`object`&&!!value&&!Array.isArray(value),invalidMetadata=field=>{throw new VolumeDataError(`INVALID_METADATA`,`Radar grid volume metadata field "${field}" is missing or invalid. 雷达栅格体元数据字段 "${field}" 缺失或无效。`)},readFiniteNumber=(record,field)=>{let value=record[field];return typeof value==`number`&&Number.isFinite(value)?value:invalidMetadata(field)},readString=(record,field)=>{let value=record[field];return typeof value==`string`?value:invalidMetadata(field)},readBoolean=(record,field)=>{let value=record[field];return typeof value==`boolean`?value:invalidMetadata(field)},readNumberArray=(record,field)=>{let value=record[field];return!Array.isArray(value)||value.some(item=>typeof item!=`number`||!Number.isFinite(item))?invalidMetadata(field):value.map(item=>item)},readStringArray=(record,field)=>{let value=record[field];return!Array.isArray(value)||value.some(item=>typeof item!=`string`)?invalidMetadata(field):value.map(item=>item)},readProperties=record=>{let value=record.properties;return isRecord(value)?{...value}:invalidMetadata(`properties`)},validatePositiveInteger=(value,field)=>{(!Number.isSafeInteger(value)||value<=0)&&invalidMetadata(field)},resolveAxisDelta=(start,end,delta,size,name)=>{if(validatePositiveInteger(size,`${name}Size`),size===1){if(start!==end)throw new VolumeDataError(`INVALID_AXIS`,`Single-cell ${name} axis must have equal endpoints. 单格点 ${name} 轴的起终点必须相等。`);return 0}let magnitude=Math.abs(delta);if(magnitude===0||start===end)throw new VolumeDataError(`INVALID_AXIS`,`${name} axis step and extent must not be zero. ${name} 轴步长和范围不能为零。`);let signedDelta=end>start?magnitude:-magnitude,expectedEnd=start+signedDelta*(size-1),tolerance=Math.max(1e-9,magnitude*1e-6);if(Math.abs(expectedEnd-end)>tolerance)throw new VolumeDataError(`INVALID_AXIS`,`${name} axis endpoint does not match its start, step, and size. ${name} 轴终点与起点、步长和尺寸不匹配。`);return signedDelta},validateLevelAxis=levels=>{if(levels.length===1)return;let step=levels[1]-levels[0],tolerance=Math.max(1e-9,Math.abs(step)*1e-6);if(step===0)throw new VolumeDataError(`INVALID_AXIS`,`Radar grid volume heights must be strictly monotonic. 雷达栅格体高度必须严格单调。`);for(let index=2;index<levels.length;index+=1)if(Math.abs(levels[index]-levels[index-1]-step)>tolerance)throw new VolumeDataError(`INVALID_AXIS`,`Radar grid volume heights must be regularly spaced. 雷达栅格体高度必须等间距。`)},parseRadarGridVolumeMetadata=(value,sourceName,productTime)=>{if(!isRecord(value))return invalidMetadata(`root`);let record=value,metadata={xStart:readFiniteNumber(record,`xStart`),yStart:readFiniteNumber(record,`yStart`),xDelta:readFiniteNumber(record,`xDelta`),yDelta:readFiniteNumber(record,`yDelta`),xSize:readFiniteNumber(record,`xSize`),ySize:readFiniteNumber(record,`ySize`),xEnd:readFiniteNumber(record,`xEnd`),yEnd:readFiniteNumber(record,`yEnd`),times:readFiniteNumber(record,`times`),levels:readFiniteNumber(record,`levels`),timestamp:readFiniteNumber(record,`timestamp`),levelList:readNumberArray(record,`levelList`),timeList:readStringArray(record,`timeList`),dataType:readString(record,`dataType`),undef:readFiniteNumber(record,`undef`),dataScale:readFiniteNumber(record,`dataScale`),dataOffset:readFiniteNumber(record,`dataOffset`),units:readFiniteNumber(record,`units`),littleEndian:readBoolean(record,`littleEndian`),unsigned:readBoolean(record,`unsigned`),properties:readProperties(record)};if(validatePositiveInteger(metadata.times,`times`),validatePositiveInteger(metadata.levels,`levels`),metadata.levelList.length!==metadata.levels&&invalidMetadata(`levelList`),metadata.timeList.length!==metadata.times&&invalidMetadata(`timeList`),metadata.dataType!==`Float32`)throw new VolumeDataError(`UNSUPPORTED_DATA_TYPE`,`Unsupported radar grid volume data type: ${metadata.dataType}. 不支持的雷达栅格体数据类型:${metadata.dataType}。`);return validateLevelAxis(metadata.levelList),{...metadata,sourceName,productTime,longitudeDelta:resolveAxisDelta(metadata.xStart,metadata.xEnd,metadata.xDelta,metadata.xSize,`longitude`),latitudeDelta:resolveAxisDelta(metadata.yStart,metadata.yEnd,metadata.yDelta,metadata.ySize,`latitude`)}},FLOAT32_BYTES$1=Float32Array.BYTES_PER_ELEMENT,validateRange=(start,count,size,name)=>{if(!Number.isSafeInteger(start)||!Number.isSafeInteger(count)||start<0||count<=0||start+count>size)throw RangeError(`Radar grid volume ${name} chunk range is invalid. 雷达栅格体 ${name} 分块范围无效。`)},createRadarGridVolumeSource=(dataBytes,payloadOffset,metadata,revision)=>{let dataView=new DataView(dataBytes.buffer,dataBytes.byteOffset,dataBytes.byteLength),levelStart=metadata.levelList[0],levelEnd=metadata.levelList[metadata.levelList.length-1];return{metadata:{xAxis:{start:metadata.xStart,end:metadata.xEnd,count:metadata.xSize},yAxis:{start:levelStart,end:levelEnd,count:metadata.levels},zAxis:{start:metadata.yStart,end:metadata.yEnd,count:metadata.ySize},timeCount:metadata.times,noData:NaN,valueScale:1,revision},async readChunk(timeIndex,range,signal){if(signal?.throwIfAborted(),!Number.isSafeInteger(timeIndex)||timeIndex<0||timeIndex>=metadata.times)throw RangeError(`Radar grid volume time index is out of range: ${timeIndex}. 雷达栅格体时间索引越界:${timeIndex}。`);validateRange(range.xStart,range.xCount,metadata.xSize,`X`),validateRange(range.levelStart,range.levelCount,metadata.levels,`level`),validateRange(range.sourceYStart,range.sourceYCount,metadata.ySize,`source Y`);let values=new Float32Array(range.xCount*range.levelCount*range.sourceYCount),layerValueCount=metadata.xSize*metadata.ySize,timeOffset=timeIndex*metadata.levels*layerValueCount;for(let z=0;z<range.sourceYCount;z+=1){let sourceY=range.sourceYStart+z;for(let level=0;level<range.levelCount;level+=1){let sourceStart=timeOffset+(range.levelStart+level)*layerValueCount+sourceY*metadata.xSize+range.xStart,targetStart=(z*range.levelCount+level)*range.xCount;for(let x=0;x<range.xCount;x+=1){let rawValue=dataView.getFloat32(payloadOffset+(sourceStart+x)*FLOAT32_BYTES$1,metadata.littleEndian);values[targetStart+x]=rawValue===metadata.undef?NaN:rawValue*metadata.dataScale+metadata.dataOffset}}}return signal?.throwIfAborted(),{timeIndex,range:{...range},width:range.xCount,height:range.levelCount,depth:range.sourceYCount,values}}}},RADAR_GRID_VOLUME_ZIP_FORMAT=`radar-grid-volume-zip`;var ch2={},wk=(function(c,id,msg,transfer,cb){var w=new Worker(ch2[id]||(ch2[id]=URL.createObjectURL(new Blob([c+`;addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})`],{type:`text/javascript`}))));return w.onmessage=function(e){var d=e.data,ed=d.$e$;if(ed){var err=Error(ed[0]);err.code=ed[1],err.stack=ed[2],cb(err,null)}else cb(null,d)},w.postMessage(msg,transfer),w}),u8=Uint8Array,u16=Uint16Array,i32=Int32Array,fleb=new u8([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),fdeb=new u8([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),clim=new u8([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),freb=function(eb,start){for(var b=new u16(31),i=0;i<31;++i)b[i]=start+=1<<eb[i-1];for(var r=new i32(b[30]),i=1;i<30;++i)for(var j=b[i];j<b[i+1];++j)r[j]=j-b[i]<<5|i;return{b,r}},_a=freb(fleb,2),fl=_a.b,revfl=_a.r;fl[28]=258,revfl[258]=28;var _b=freb(fdeb,0),fd=_b.b;_b.r;for(var rev=new u16(32768),i=0;i<32768;++i){var x=(i&43690)>>1|(i&21845)<<1;x=(x&52428)>>2|(x&13107)<<2,x=(x&61680)>>4|(x&3855)<<4,rev[i]=((x&65280)>>8|(x&255)<<8)>>1}for(var hMap=(function(cd,mb,r){for(var s=cd.length,i=0,l=new u16(mb);i<s;++i)cd[i]&&++l[cd[i]-1];var le=new u16(mb);for(i=1;i<mb;++i)le[i]=le[i-1]+l[i-1]<<1;var co;if(r){co=new u16(1<<mb);var rvb=15-mb;for(i=0;i<s;++i)if(cd[i])for(var sv=i<<4|cd[i],r_1=mb-cd[i],v=le[cd[i]-1]++<<r_1,m=v|(1<<r_1)-1;v<=m;++v)co[rev[v]>>rvb]=sv}else for(co=new u16(s),i=0;i<s;++i)cd[i]&&(co[i]=rev[le[cd[i]-1]++]>>15-cd[i]);return co}),flt=new u8(288),i=0;i<144;++i)flt[i]=8;for(var i=144;i<256;++i)flt[i]=9;for(var i=256;i<280;++i)flt[i]=7;for(var i=280;i<288;++i)flt[i]=8;for(var fdt=new u8(32),i=0;i<32;++i)fdt[i]=5;var flrm=hMap(flt,9,1),fdrm=hMap(fdt,5,1),max=function(a){for(var m=a[0],i=1;i<a.length;++i)a[i]>m&&(m=a[i]);return m},bits=function(d,p,m){var o=p/8|0;return(d[o]|d[o+1]<<8)>>(p&7)&m},bits16=function(d,p){var o=p/8|0;return(d[o]|d[o+1]<<8|d[o+2]<<16)>>(p&7)},shft=function(p){return(p+7)/8|0},slc=function(v,s,e){return(s==null||s<0)&&(s=0),(e==null||e>v.length)&&(e=v.length),new u8(v.subarray(s,e))},ec=[`unexpected EOF`,`invalid block type`,`invalid length/literal`,`invalid distance`,`stream finished`,`no stream handler`,,`no callback`,`invalid UTF-8 data`,`extra field too long`,`date not in range 1980-2099`,`filename too long`,`stream finishing`,`invalid zip data`],err=function(ind,msg,nt){var e=Error(msg||ec[ind]);if(e.code=ind,Error.captureStackTrace&&Error.captureStackTrace(e,err),!nt)throw e;return e},inflt=function(dat,st,buf,dict){var sl=dat.length,dl=dict?dict.length:0;if(!sl||st.f&&!st.l)return buf||new u8(0);var noBuf=!buf,resize=noBuf||st.i!=2,noSt=st.i;noBuf&&(buf=new u8(sl*3));var cbuf=function(l){var bl=buf.length;if(l>bl){var nbuf=new u8(Math.max(bl*2,l));nbuf.set(buf),buf=nbuf}},final=st.f||0,pos=st.p||0,bt=st.b||0,lm=st.l,dm=st.d,lbt=st.m,dbt=st.n,tbts=sl*8;do{if(!lm){final=bits(dat,pos,1);var type=bits(dat,pos+1,3);if(pos+=3,!type){var s=shft(pos)+4,l=dat[s-4]|dat[s-3]<<8,t=s+l;if(t>sl){noSt&&err(0);break}resize&&cbuf(bt+l),buf.set(dat.subarray(s,t),bt),st.b=bt+=l,st.p=pos=t*8,st.f=final;continue}else if(type==1)lm=flrm,dm=fdrm,lbt=9,dbt=5;else if(type==2){var hLit=bits(dat,pos,31)+257,hcLen=bits(dat,pos+10,15)+4,tl=hLit+bits(dat,pos+5,31)+1;pos+=14;for(var ldt=new u8(tl),clt=new u8(19),i=0;i<hcLen;++i)clt[clim[i]]=bits(dat,pos+i*3,7);pos+=hcLen*3;for(var clb=max(clt),clbmsk=(1<<clb)-1,clm=hMap(clt,clb,1),i=0;i<tl;){var r=clm[bits(dat,pos,clbmsk)];pos+=r&15;var s=r>>4;if(s<16)ldt[i++]=s;else{var c=0,n=0;for(s==16?(n=3+bits(dat,pos,3),pos+=2,c=ldt[i-1]):s==17?(n=3+bits(dat,pos,7),pos+=3):s==18&&(n=11+bits(dat,pos,127),pos+=7);n--;)ldt[i++]=c}}var lt=ldt.subarray(0,hLit),dt=ldt.subarray(hLit);lbt=max(lt),dbt=max(dt),lm=hMap(lt,lbt,1),dm=hMap(dt,dbt,1)}else err(1);if(pos>tbts){noSt&&err(0);break}}resize&&cbuf(bt+131072);for(var lms=(1<<lbt)-1,dms=(1<<dbt)-1,lpos=pos;;lpos=pos){var c=lm[bits16(dat,pos)&lms],sym=c>>4;if(pos+=c&15,pos>tbts){noSt&&err(0);break}if(c||err(2),sym<256)buf[bt++]=sym;else if(sym==256){lpos=pos,lm=null;break}else{var add=sym-254;if(sym>264){var i=sym-257,b=fleb[i];add=bits(dat,pos,(1<<b)-1)+fl[i],pos+=b}var d=dm[bits16(dat,pos)&dms],dsym=d>>4;d||err(3),pos+=d&15;var dt=fd[dsym];if(dsym>3){var b=fdeb[dsym];dt+=bits16(dat,pos)&(1<<b)-1,pos+=b}if(pos>tbts){noSt&&err(0);break}resize&&cbuf(bt+131072);var end=bt+add;if(bt<dt){var shift=dl-dt,dend=Math.min(dt,end);for(shift+bt<0&&err(3);bt<dend;++bt)buf[bt]=dict[shift+bt]}for(;bt<end;++bt)buf[bt]=buf[bt-dt]}}st.l=lm,st.p=lpos,st.b=bt,st.f=final,lm&&(final=1,st.m=lbt,st.d=dm,st.n=dbt)}while(!final);return bt!=buf.length&&noBuf?slc(buf,0,bt):buf.subarray(0,bt)},et=new u8(0),mrg=function(a,b){var o={};for(var k in a)o[k]=a[k];for(var k in b)o[k]=b[k];return o},wcln=function(fn,fnStr,td){for(var dt=fn(),st=fn.toString(),ks=st.slice(st.indexOf(`[`)+1,st.lastIndexOf(`]`)).replace(/\s+/g,``).split(`,`),i=0;i<dt.length;++i){var v=dt[i],k=ks[i];if(typeof v==`function`){fnStr+=`;`+k+`=`;var st_1=v.toString();if(v.prototype)if(st_1.indexOf(`[native code]`)!=-1){var spInd=st_1.indexOf(` `,8)+1;fnStr+=st_1.slice(spInd,st_1.indexOf(`(`,spInd))}else for(var t in fnStr+=st_1,v.prototype)fnStr+=`;`+k+`.prototype.`+t+`=`+v.prototype[t].toString();else fnStr+=st_1}else td[k]=v}return fnStr},ch=[],cbfs=function(v){var tl=[];for(var k in v)v[k].buffer&&tl.push((v[k]=new v[k].constructor(v[k])).buffer);return tl},wrkr=function(fns,init,id,cb){if(!ch[id]){for(var fnStr=``,td_1={},m=fns.length-1,i=0;i<m;++i)fnStr=wcln(fns[i],fnStr,td_1);ch[id]={c:wcln(fns[m],fnStr,td_1),e:td_1}}var td=mrg({},ch[id].e);return wk(ch[id].c+`;onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=`+init.toString()+`}`,id,td,cbfs(td),cb)},bInflt=function(){return[u8,u16,i32,fleb,fdeb,clim,fl,fd,flrm,fdrm,rev,ec,hMap,max,bits,bits16,shft,slc,err,inflt,inflateSync,pbf,gopt]},pbf=function(msg){return postMessage(msg,[msg.buffer])},gopt=function(o){return o&&{out:o.size&&new u8(o.size),dictionary:o.dictionary}},cbify=function(dat,opts,fns,init,id,cb){var w=wrkr(fns,init,id,function(err,dat){w.terminate(),cb(err,dat)});return w.postMessage([dat,opts],opts.consume?[dat.buffer]:[]),function(){w.terminate()}},b2=function(d,b){return d[b]|d[b+1]<<8},b4=function(d,b){return(d[b]|d[b+1]<<8|d[b+2]<<16|d[b+3]<<24)>>>0},b8=function(d,b){return b4(d,b)+b4(d,b+4)*4294967296};function inflate(data,opts,cb){return cb||(cb=opts,opts={}),typeof cb!=`function`&&err(7),cbify(data,opts,[bInflt],function(ev){return pbf(inflateSync(ev.data[0],gopt(ev.data[1])))},1,cb)}function inflateSync(data,opts){return inflt(data,{i:2},opts&&opts.out,opts&&opts.dictionary)}var td=typeof TextDecoder<`u`&&new TextDecoder;try{td.decode(et,{stream:!0})}catch{}var dutf8=function(d){for(var r=``,i=0;;){var c=d[i++],eb=(c>127)+(c>223)+(c>239);if(i+eb>d.length)return{s:r,r:slc(d,i-1)};eb?eb==3?(c=((c&15)<<18|(d[i++]&63)<<12|(d[i++]&63)<<6|d[i++]&63)-65536,r+=String.fromCharCode(55296|c>>10,56320|c&1023)):eb&1?r+=String.fromCharCode((c&31)<<6|d[i++]&63):r+=String.fromCharCode((c&15)<<12|(d[i++]&63)<<6|d[i++]&63):r+=String.fromCharCode(c)}};function strFromU8(dat,latin1){if(latin1){for(var r=``,i=0;i<dat.length;i+=16384)r+=String.fromCharCode.apply(null,dat.subarray(i,i+16384));return r}else if(td)return td.decode(dat);else{var _a=dutf8(dat),s=_a.s,r=_a.r;return r.length&&err(8),s}}var slzh=function(d,b){return b+30+b2(d,b+26)+b2(d,b+28)},zh=function(d,b,z){var fnl=b2(d,b+28),efl=b2(d,b+30),fn=strFromU8(d.subarray(b+46,b+46+fnl),!(b2(d,b+8)&2048)),es=b+46+fnl,_a=z64hs(d,es,efl,z,b4(d,b+20),b4(d,b+24),b4(d,b+42)),sc=_a[0],su=_a[1],off=_a[2];return[b2(d,b+10),sc,su,fn,es+efl+b2(d,b+32),off]},z64hs=function(d,b,l,z,sc,su,off){var nsc=sc==4294967295,nsu=su==4294967295,noff=off==4294967295,e=b+l,nf=nsc+nsu+noff;if(z&&nf){for(;b+4<e;b+=4+b2(d,b+2))if(b2(d,b)==1)return[nsc?b8(d,b+4+8*nsu):sc,nsu?b8(d,b+4):su,noff?b8(d,b+4+8*(nsu+nsc)):off,1];z<2&&err(13)}return[sc,su,off,0]},mt=typeof queueMicrotask==`function`?queueMicrotask:typeof setTimeout==`function`?setTimeout:function(fn){fn()};function unzip(data,opts,cb){cb||(cb=opts,opts={}),typeof cb!=`function`&&err(7);var term=[],tAll=function(){for(var i=0;i<term.length;++i)term[i]()},files={},cbd=function(a,b){mt(function(){cb(a,b)})};mt(function(){cbd=cb});for(var e=data.length-22;b4(data,e)!=101010256;--e)if(!e||data.length-e>65558)return cbd(err(13,0,1),null),tAll;var lft=b2(data,e+8);if(lft){var c=lft,o=b4(data,e+16),z=b4(data,e-20)==117853008;if(z){var ze=b4(data,e-12);z=b4(data,ze)==101075792,z&&(c=lft=b4(data,ze+32),o=b4(data,ze+48))}for(var fltr=opts&&opts.filter,_loop_3=function(i){var _a=zh(data,o,z),c_1=_a[0],sc=_a[1],su=_a[2],fn=_a[3],no=_a[4],off=_a[5],b=slzh(data,off);o=no;var cbl=function(e,d){e?(tAll(),cbd(e,null)):(d&&(files[fn]=d),--lft||cbd(null,files))};if(!fltr||fltr({name:fn,size:sc,originalSize:su,compression:c_1}))if(!c_1)cbl(null,slc(data,b,b+sc));else if(c_1==8){var infl=data.subarray(b,b+sc);if(su<524288||sc>.8*su)try{cbl(null,inflateSync(infl,{out:new u8(su)}))}catch(e){cbl(e,null)}else term.push(inflate(infl,{size:su},cbl))}else cbl(err(14,`unknown compression type `+c_1,1),null);else cbl(null,null)},i=0;i<c;++i)_loop_3(i)}else cbd(null,{});return tAll}function unzipSync(data,opts){for(var files={},e=data.length-22;b4(data,e)!=101010256;--e)(!e||data.length-e>65558)&&err(13);var c=b2(data,e+8);if(!c)return{};var o=b4(data,e+16),z=b4(data,e-20)==117853008;if(z){var ze=b4(data,e-12);z=b4(data,ze)==101075792,z&&(c=b4(data,ze+32),o=b4(data,ze+48))}for(var fltr=opts&&opts.filter,i=0;i<c;++i){var _a=zh(data,o,z),c_2=_a[0],sc=_a[1],su=_a[2],fn=_a[3],no=_a[4],off=_a[5],b=slzh(data,off);o=no,(!fltr||fltr({name:fn,size:sc,originalSize:su,compression:c_2}))&&(c_2?c_2==8?files[fn]=inflateSync(data.subarray(b,b+sc),{out:new u8(su)}):err(14,`unknown compression type `+c_2):files[fn]=slc(data,b,b+sc))}return files}let createInvalidZipError=message=>new VolumeDataError(`INVALID_ZIP`,`${message} ZIP 结构无效。`),findEndOfCentralDirectory=view=>{let minimumOffset=Math.max(0,view.byteLength-22-65535);for(let offset=view.byteLength-22;offset>=minimumOffset;--offset){if(view.getUint32(offset,!0)!==101010256)continue;let commentLength=view.getUint16(offset+20,!0);if(offset+22+commentLength===view.byteLength)return offset}throw createInvalidZipError(`End of central directory was not found.`)},decodeEntryName=(bytes,offset,length)=>{try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(bytes.subarray(offset,offset+length))}catch(error){throw new VolumeDataError(`INVALID_ZIP`,`ZIP entry name is not valid UTF-8. ZIP 条目名称不是有效 UTF-8。`,{cause:error})}},findDataEntry=(archiveBytes,entryName,limits)=>{if(archiveBytes.byteLength<22)throw createInvalidZipError(`Archive is too short.`);let view=new DataView(archiveBytes.buffer,archiveBytes.byteOffset,archiveBytes.byteLength),endOffset=findEndOfCentralDirectory(view),diskNumber=view.getUint16(endOffset+4,!0),centralDiskNumber=view.getUint16(endOffset+6,!0),diskEntryCount=view.getUint16(endOffset+8,!0),entryCount=view.getUint16(endOffset+10,!0),centralSize=view.getUint32(endOffset+12,!0),centralOffset=view.getUint32(endOffset+16,!0);if(diskNumber!==0||centralDiskNumber!==0||diskEntryCount!==entryCount)throw new VolumeDataError(`INVALID_ZIP`,`Multi-disk ZIP archives are not supported. 不支持多磁盘 ZIP 压缩包。`);if(entryCount===65535||centralSize===4294967295||centralOffset===4294967295)throw new VolumeDataError(`ZIP64_UNSUPPORTED`,`ZIP64 archives are not supported. 不支持 ZIP64 压缩包。`);if(entryCount>limits.maximumEntryCount)throw new VolumeDataError(`TOO_MANY_ENTRIES`,`ZIP entry count ${entryCount} exceeds the ${limits.maximumEntryCount} entry limit. ZIP 条目数 ${entryCount} 超过 ${limits.maximumEntryCount} 条限制。`);if(!Number.isSafeInteger(centralOffset+centralSize)||centralOffset+centralSize>endOffset)throw createInvalidZipError(`Central directory exceeds archive bounds.`);let matches=[],offset=centralOffset;for(let index=0;index<entryCount;index+=1){if(offset+46>endOffset||view.getUint32(offset,!0)!==33639248)throw createInvalidZipError(`Central directory entry is truncated or has an invalid signature.`);let flags=view.getUint16(offset+8,!0),compression=view.getUint16(offset+10,!0),compressedSize=view.getUint32(offset+20,!0),uncompressedSize=view.getUint32(offset+24,!0),nameLength=view.getUint16(offset+28,!0),extraLength=view.getUint16(offset+30,!0),commentLength=view.getUint16(offset+32,!0),nextOffset=offset+46+nameLength+extraLength+commentLength;if(nextOffset>endOffset)throw createInvalidZipError(`Central directory entry exceeds archive bounds.`);if(compressedSize===4294967295||uncompressedSize===4294967295)throw new VolumeDataError(`ZIP64_UNSUPPORTED`,`ZIP64 entries are not supported. 不支持 ZIP64 条目。`);let name=decodeEntryName(archiveBytes,offset+46,nameLength);if(name===entryName||name.endsWith(`/${entryName}`)){if(flags&1)throw new VolumeDataError(`ENCRYPTED_ENTRY`,`ZIP entry "${name}" is encrypted. ZIP 条目 "${name}" 已加密。`);if(compression!==0&&compression!==8)throw new VolumeDataError(`UNSUPPORTED_COMPRESSION`,`ZIP entry "${name}" uses unsupported compression method ${compression}. ZIP 条目 "${name}" 使用不支持的压缩方式 ${compression}。`);if(uncompressedSize>limits.maximumEntryBytes)throw new VolumeDataError(`ENTRY_TOO_LARGE`,`ZIP entry "${name}" expands to ${uncompressedSize} bytes, exceeding the ${limits.maximumEntryBytes} byte limit. ZIP 条目 "${name}" 解压后为 ${uncompressedSize} 字节,超过 ${limits.maximumEntryBytes} 字节限制。`);let ratio=uncompressedSize/Math.max(1,compressedSize);if(ratio>limits.maximumCompressionRatio)throw new VolumeDataError(`SUSPICIOUS_COMPRESSION_RATIO`,`ZIP entry "${name}" compression ratio ${ratio.toFixed(2)} exceeds the ${limits.maximumCompressionRatio} limit. ZIP 条目 "${name}" 压缩比 ${ratio.toFixed(2)} 超过 ${limits.maximumCompressionRatio} 限制。`);matches.push({name,compressedSize,uncompressedSize,compression})}offset=nextOffset}if(matches.length===0)throw new VolumeDataError(`ENTRY_NOT_FOUND`,`ZIP entry "${entryName}" was not found. ZIP 中未找到条目 "${entryName}"。`);if(matches.length>1)throw new VolumeDataError(`AMBIGUOUS_ENTRY`,`ZIP contains multiple entries named "${entryName}". ZIP 中存在多个名为 "${entryName}" 的条目。`);return matches[0]},extractZipEntry=async(archiveBytes,entryName,limits,signal)=>{signal?.throwIfAborted();let selected=findDataEntry(archiveBytes,entryName,limits);if(typeof Worker>`u`)try{let files=unzipSync(archiveBytes,{filter:file=>file.name===selected.name});signal?.throwIfAborted();let bytes=files[selected.name];if(!bytes||bytes.byteLength!==selected.uncompressedSize)throw new VolumeDataError(`INVALID_ZIP`,`ZIP entry "${selected.name}" decompressed length does not match its central directory. ZIP 条目 "${selected.name}" 的解压长度与中央目录不一致。`);return bytes}catch(error){throw error instanceof VolumeDataError?error:new VolumeDataError(`INVALID_ZIP`,`Failed to decompress ZIP archive. ZIP 解压失败。`,{cause:error})}return new Promise((resolve,reject)=>{try{unzip(archiveBytes,{filter:file=>file.name===selected.name},(error,files)=>{if(error){reject(new VolumeDataError(`INVALID_ZIP`,`Failed to decompress ZIP archive: ${error.message}. ZIP 解压失败。`,{cause:error}));return}try{signal?.throwIfAborted();let bytes=files[selected.name];if(!bytes||bytes.byteLength!==selected.uncompressedSize)throw new VolumeDataError(`INVALID_ZIP`,`ZIP entry "${selected.name}" decompressed length does not match its central directory. ZIP 条目 "${selected.name}" 的解压长度与中央目录不一致。`);resolve(bytes)}catch(callbackError){reject(callbackError)}})}catch(error){reject(error instanceof VolumeDataError?error:new VolumeDataError(`INVALID_ZIP`,`Failed to start ZIP decompression. 无法启动 ZIP 解压。`,{cause:error}))}})},HEADER_LENGTH_BYTES=Uint32Array.BYTES_PER_ELEMENT,FLOAT32_BYTES=Float32Array.BYTES_PER_ELEMENT,multiplySafe=(left,right)=>{let result=left*right;if(!Number.isSafeInteger(result))throw new VolumeDataError(`INVALID_DATA_SIZE`,`Radar grid volume dimensions exceed the safe integer range. 雷达栅格体尺寸超过安全整数范围。`);return result},decodeHeader=(bytes,jsonLength)=>{try{let text=new TextDecoder(`utf-8`,{fatal:!0}).decode(bytes.subarray(HEADER_LENGTH_BYTES,HEADER_LENGTH_BYTES+jsonLength));return JSON.parse(text)}catch(error){throw new VolumeDataError(`INVALID_HEADER_JSON`,`Failed to decode radar grid volume metadata JSON. 雷达栅格体元数据 JSON 解码失败。`,{cause:error})}},loadRadarGridVolumeZip=async(archiveBytes,options)=>{let maximumEntryBytes=options.maxEntryBytes??256*1024*1024,maximumHeaderBytes=options.maxHeaderBytes??1024*1024,dataBytes=await extractZipEntry(archiveBytes,`data.bin`,{maximumEntryBytes,maximumEntryCount:options.maxEntryCount??1024,maximumCompressionRatio:options.maxCompressionRatio??200},options.signal);if(dataBytes.byteLength<HEADER_LENGTH_BYTES)throw new VolumeDataError(`FILE_TOO_SHORT`,`Radar grid volume data.bin must contain a four-byte header length. 雷达栅格体 data.bin 必须包含四字节头部长度。`);let jsonLength=new DataView(dataBytes.buffer,dataBytes.byteOffset,dataBytes.byteLength).getUint32(0,!0);if(jsonLength===0||jsonLength>maximumHeaderBytes)throw new VolumeDataError(`INVALID_HEADER_LENGTH`,`Radar grid volume header length ${jsonLength} is outside the allowed range. 雷达栅格体头部长度 ${jsonLength} 超出允许范围。`);let payloadOffset=HEADER_LENGTH_BYTES+jsonLength;if(!Number.isSafeInteger(payloadOffset)||payloadOffset>dataBytes.byteLength)throw new VolumeDataError(`INVALID_HEADER_LENGTH`,`Radar grid volume header exceeds data.bin bounds. 雷达栅格体头部超出 data.bin 边界。`);let metadata=parseRadarGridVolumeMetadata(decodeHeader(dataBytes,jsonLength),options.sourceName,options.productTime),valueCount=multiplySafe(metadata.times,metadata.levels);valueCount=multiplySafe(valueCount,metadata.ySize),valueCount=multiplySafe(valueCount,metadata.xSize);let payloadBytes=multiplySafe(valueCount,FLOAT32_BYTES),actualPayloadBytes=dataBytes.byteLength-payloadOffset;if(actualPayloadBytes!==payloadBytes)throw new VolumeDataError(`INVALID_PAYLOAD_LENGTH`,`Expected ${payloadBytes} radar grid volume payload bytes but received ${actualPayloadBytes}. 雷达栅格体数据区预期 ${payloadBytes} 字节,实际 ${actualPayloadBytes} 字节。`);return{format:RADAR_GRID_VOLUME_ZIP_FORMAT,metadata,source:createRadarGridVolumeSource(dataBytes,payloadOffset,metadata,options.revision)}},PARSERS={[RADAR_GRID_VOLUME_ZIP_FORMAT]:{load:loadRadarGridVolumeZip}},getVolumeDataParser=format=>PARSERS[format],validatePositiveLimit=(value,name)=>{if(!Number.isSafeInteger(value)||value<=0)throw RangeError(`Volume data ${name} must be a positive safe integer. 体数据 ${name} 必须是正安全整数。`)};exports.RADAR_GRID_VOLUME_ZIP_FORMAT=RADAR_GRID_VOLUME_ZIP_FORMAT,exports.VolumeDataError=VolumeDataError,exports.loadVolumeSource=async(input,options)=>{let format=options?.format;if(typeof format!=`string`)throw new VolumeDataError(`UNSUPPORTED_FORMAT`,`Volume data format must be specified explicitly. 必须显式指定体数据格式。`);let parser=getVolumeDataParser(format);if(!parser)throw new VolumeDataError(`UNSUPPORTED_FORMAT`,`Unsupported volume data format: ${format}. 不支持的体数据格式:${format}。`);let maximumArchiveBytes=options.maxArchiveBytes??64*1024*1024;if(validatePositiveLimit(maximumArchiveBytes,`maxArchiveBytes`),options.maxEntryBytes!==void 0&&validatePositiveLimit(options.maxEntryBytes,`maxEntryBytes`),options.maxEntryCount!==void 0&&validatePositiveLimit(options.maxEntryCount,`maxEntryCount`),options.maxHeaderBytes!==void 0&&validatePositiveLimit(options.maxHeaderBytes,`maxHeaderBytes`),options.maxCompressionRatio!==void 0&&(!Number.isFinite(options.maxCompressionRatio)||options.maxCompressionRatio<=0))throw RangeError(`Volume data maxCompressionRatio must be greater than zero. 体数据 maxCompressionRatio 必须大于零。`);let bytes=await normalizeVolumeDataInput(input,maximumArchiveBytes,options.signal);return parser.load(bytes,options)}});
@@ -0,0 +1,5 @@
1
+ import type { ILoadVolumeSourceOptions, LoadedVolumeSource } from './volumeDataTypes';
2
+ export interface IVolumeDataParser {
3
+ load(bytes: Uint8Array, options: ILoadVolumeSourceOptions): Promise<LoadedVolumeSource>;
4
+ }
5
+ export declare const getVolumeDataParser: (format: string) => IVolumeDataParser | undefined;
@@ -0,0 +1 @@
1
+ function _0x6470(_0x18a8cd,_0x3b98dc){const _0x268a25=_0x268a();return _0x6470=function(_0x6470c4,_0x3153e9){_0x6470c4=_0x6470c4-0x178;let _0x4736a6=_0x268a25[_0x6470c4];return _0x4736a6;},_0x6470(_0x18a8cd,_0x3b98dc);}(function(_0xd0ed42,_0x1a922c){const _0x3ae9fa=_0x6470,_0x31006a=_0xd0ed42();while(!![]){try{const _0x4643dd=parseInt(_0x3ae9fa(0x17b))/0x1*(parseInt(_0x3ae9fa(0x181))/0x2)+parseInt(_0x3ae9fa(0x178))/0x3*(-parseInt(_0x3ae9fa(0x17a))/0x4)+-parseInt(_0x3ae9fa(0x180))/0x5*(parseInt(_0x3ae9fa(0x179))/0x6)+parseInt(_0x3ae9fa(0x182))/0x7+-parseInt(_0x3ae9fa(0x17c))/0x8*(parseInt(_0x3ae9fa(0x17d))/0x9)+-parseInt(_0x3ae9fa(0x17e))/0xa*(-parseInt(_0x3ae9fa(0x184))/0xb)+-parseInt(_0x3ae9fa(0x17f))/0xc*(-parseInt(_0x3ae9fa(0x183))/0xd);if(_0x4643dd===_0x1a922c)break;else _0x31006a['push'](_0x31006a['shift']());}catch(_0x38b162){_0x31006a['push'](_0x31006a['shift']());}}}(_0x268a,0x8e7f4));import{loadRadarGridVolumeZip}from'./radarGridVolumeParser';function _0x268a(){const _0x211dae=['876FYNuNo','2077210cEZocL','4WYBkFs','3594920wVJLSe','181090fWNpNT','33tNwAwT','309TBtuiG','12EZYbnY','6568cxKnbC','86719rknwtt','88gInxJa','330129TshFMB','944270sXbESU'];_0x268a=function(){return _0x211dae;};return _0x268a();}import{RADAR_GRID_VOLUME_ZIP_FORMAT}from'./volumeDataTypes';const PARSERS={[RADAR_GRID_VOLUME_ZIP_FORMAT]:{'load':loadRadarGridVolumeZip}};export const getVolumeDataParser=_0x106609=>{return PARSERS[_0x106609];};
@@ -0,0 +1,2 @@
1
+ import type { IRadarGridVolumeMetadata } from './volumeDataTypes';
2
+ export declare const parseRadarGridVolumeMetadata: (value: unknown, sourceName?: string, productTime?: string) => IRadarGridVolumeMetadata;
@@ -0,0 +1 @@
1
+ const _0x1d368b=_0x16a9;(function(_0x579fdc,_0x5d36e3){const _0x3be809=_0x16a9,_0x5c02f1=_0x579fdc();while(!![]){try{const _0xb643c1=-parseInt(_0x3be809(0xd1))/0x1+-parseInt(_0x3be809(0xd4))/0x2*(parseInt(_0x3be809(0xb7))/0x3)+parseInt(_0x3be809(0xdb))/0x4*(parseInt(_0x3be809(0xcc))/0x5)+-parseInt(_0x3be809(0xbf))/0x6*(-parseInt(_0x3be809(0xd7))/0x7)+parseInt(_0x3be809(0xce))/0x8+parseInt(_0x3be809(0xda))/0x9+-parseInt(_0x3be809(0xd9))/0xa;if(_0xb643c1===_0x5d36e3)break;else _0x5c02f1['push'](_0x5c02f1['shift']());}catch(_0x1da475){_0x5c02f1['push'](_0x5c02f1['shift']());}}}(_0x36fd,0x61ab5));import{VolumeDataError}from'./volumeDataError';function _0x16a9(_0x4f99b0,_0x5c6b37){const _0x36fdc4=_0x36fd();return _0x16a9=function(_0x16a9f9,_0x446345){_0x16a9f9=_0x16a9f9-0xa9;let _0x103d51=_0x36fdc4[_0x16a9f9];return _0x103d51;},_0x16a9(_0x4f99b0,_0x5c6b37);}function _0x36fd(){const _0x5e5f4d=['string','xSize','timeList','times','isFinite','\x20axis\x20must\x20have\x20equal\x20endpoints.\x20单格点\x20','511970YwolaF','yStart','6015984TODORb','\x20轴步长和范围不能为零。','undef','494406dZxeBe','INVALID_AXIS','Float32','58JUhAtR','timestamp','\x22\x20缺失或无效。','7dIZcIA','longitude','12131920KYMDej','3550221RrrnzM','24haRuop','\x20axis\x20step\x20and\x20extent\x20must\x20not\x20be\x20zero.\x20','\x20轴终点与起点、步长和尺寸不匹配。','number','Size','unsigned','xEnd','levels','isArray','dataOffset','max','littleEndian','Radar\x20grid\x20volume\x20heights\x20must\x20be\x20strictly\x20monotonic.\x20雷达栅格体高度必须严格单调。','dataType','properties','levelList','isSafeInteger','Single-cell\x20','yDelta','UNSUPPORTED_DATA_TYPE','dataScale','xDelta','INVALID_METADATA','39evUnHS','\x20轴的起终点必须相等。','map','length','root','Unsupported\x20radar\x20grid\x20volume\x20data\x20type:\x20','yEnd','abs','2083182QOcSmJ','some','xStart','\x22\x20is\x20missing\x20or\x20invalid.\x20雷达栅格体元数据字段\x20\x22','ySize','Radar\x20grid\x20volume\x20metadata\x20field\x20\x22','latitude'];_0x36fd=function(){return _0x5e5f4d;};return _0x36fd();}const isRecord=_0x3e0c31=>typeof _0x3e0c31==='object'&&_0x3e0c31!==null&&!Array[_0x1d368b(0xe3)](_0x3e0c31),invalidMetadata=_0x4e4e85=>{const _0x5100fe=_0x1d368b;throw new VolumeDataError(_0x5100fe(0xb6),_0x5100fe(0xc4)+_0x4e4e85+_0x5100fe(0xc2)+_0x4e4e85+_0x5100fe(0xd6));},readFiniteNumber=(_0x1ae1fd,_0x1be283)=>{const _0x10757a=_0x1d368b,_0x126f24=_0x1ae1fd[_0x1be283];return typeof _0x126f24===_0x10757a(0xde)&&Number['isFinite'](_0x126f24)?_0x126f24:invalidMetadata(_0x1be283);},readString=(_0x6b7da,_0x2fb8be)=>{const _0x31f632=_0x6b7da[_0x2fb8be];return typeof _0x31f632==='string'?_0x31f632:invalidMetadata(_0x2fb8be);},readBoolean=(_0x508406,_0x33af93)=>{const _0x25f41b=_0x508406[_0x33af93];return typeof _0x25f41b==='boolean'?_0x25f41b:invalidMetadata(_0x33af93);},readNumberArray=(_0x4aa918,_0xa13013)=>{const _0x52eadb=_0x1d368b,_0x544b93=_0x4aa918[_0xa13013];if(!Array[_0x52eadb(0xe3)](_0x544b93))return invalidMetadata(_0xa13013);if(_0x544b93['some'](_0x155525=>typeof _0x155525!==_0x52eadb(0xde)||!Number[_0x52eadb(0xca)](_0x155525)))return invalidMetadata(_0xa13013);return _0x544b93[_0x52eadb(0xb9)](_0x34929a=>_0x34929a);},readStringArray=(_0x50c058,_0x1f33ab)=>{const _0x35bdc7=_0x1d368b,_0x12e987=_0x50c058[_0x1f33ab];if(!Array[_0x35bdc7(0xe3)](_0x12e987))return invalidMetadata(_0x1f33ab);if(_0x12e987[_0x35bdc7(0xc0)](_0x1142f0=>typeof _0x1142f0!==_0x35bdc7(0xc6)))return invalidMetadata(_0x1f33ab);return _0x12e987[_0x35bdc7(0xb9)](_0x3df00a=>_0x3df00a);},readProperties=_0x2cc394=>{const _0x1a730b=_0x1d368b,_0xeb44a2=_0x2cc394[_0x1a730b(0xae)];return isRecord(_0xeb44a2)?{..._0xeb44a2}:invalidMetadata(_0x1a730b(0xae));},validatePositiveInteger=(_0x5082eb,_0x4e3415)=>{const _0xaed21b=_0x1d368b;if(!Number[_0xaed21b(0xb0)](_0x5082eb)||_0x5082eb<=0x0)invalidMetadata(_0x4e3415);},resolveAxisDelta=(_0x384d48,_0x405e8f,_0x121aad,_0x2d1431,_0x439ebc)=>{const _0x53fbf1=_0x1d368b;validatePositiveInteger(_0x2d1431,_0x439ebc+_0x53fbf1(0xdf));if(_0x2d1431===0x1){if(_0x384d48!==_0x405e8f)throw new VolumeDataError(_0x53fbf1(0xd2),_0x53fbf1(0xb1)+_0x439ebc+_0x53fbf1(0xcb)+_0x439ebc+_0x53fbf1(0xb8));return 0x0;}const _0xde24c2=Math['abs'](_0x121aad);if(_0xde24c2===0x0||_0x384d48===_0x405e8f)throw new VolumeDataError(_0x53fbf1(0xd2),_0x439ebc+_0x53fbf1(0xdc)+_0x439ebc+_0x53fbf1(0xcf));const _0x38afb0=_0x405e8f>_0x384d48?_0xde24c2:-_0xde24c2,_0x128a49=_0x384d48+_0x38afb0*(_0x2d1431-0x1),_0x5847b2=Math[_0x53fbf1(0xaa)](1e-9,_0xde24c2*0.000001);if(Math[_0x53fbf1(0xbe)](_0x128a49-_0x405e8f)>_0x5847b2)throw new VolumeDataError(_0x53fbf1(0xd2),_0x439ebc+'\x20axis\x20endpoint\x20does\x20not\x20match\x20its\x20start,\x20step,\x20and\x20size.\x20'+_0x439ebc+_0x53fbf1(0xdd));return _0x38afb0;},validateLevelAxis=_0xedb6c4=>{const _0x2597c7=_0x1d368b;if(_0xedb6c4[_0x2597c7(0xba)]===0x1)return;const _0x183350=_0xedb6c4[0x1]-_0xedb6c4[0x0],_0x57c8f7=Math[_0x2597c7(0xaa)](1e-9,Math[_0x2597c7(0xbe)](_0x183350)*0.000001);if(_0x183350===0x0)throw new VolumeDataError(_0x2597c7(0xd2),_0x2597c7(0xac));for(let _0x10d0b9=0x2;_0x10d0b9<_0xedb6c4[_0x2597c7(0xba)];_0x10d0b9+=0x1){if(Math[_0x2597c7(0xbe)](_0xedb6c4[_0x10d0b9]-_0xedb6c4[_0x10d0b9-0x1]-_0x183350)>_0x57c8f7)throw new VolumeDataError(_0x2597c7(0xd2),'Radar\x20grid\x20volume\x20heights\x20must\x20be\x20regularly\x20spaced.\x20雷达栅格体高度必须等间距。');}};export const parseRadarGridVolumeMetadata=(_0x34fa65,_0x2bbe2c,_0x3f116c)=>{const _0x4fa635=_0x1d368b;if(!isRecord(_0x34fa65))return invalidMetadata(_0x4fa635(0xbb));const _0x1a62f2=_0x34fa65,_0x5395ec={'xStart':readFiniteNumber(_0x1a62f2,_0x4fa635(0xc1)),'yStart':readFiniteNumber(_0x1a62f2,_0x4fa635(0xcd)),'xDelta':readFiniteNumber(_0x1a62f2,_0x4fa635(0xb5)),'yDelta':readFiniteNumber(_0x1a62f2,_0x4fa635(0xb2)),'xSize':readFiniteNumber(_0x1a62f2,_0x4fa635(0xc7)),'ySize':readFiniteNumber(_0x1a62f2,_0x4fa635(0xc3)),'xEnd':readFiniteNumber(_0x1a62f2,'xEnd'),'yEnd':readFiniteNumber(_0x1a62f2,_0x4fa635(0xbd)),'times':readFiniteNumber(_0x1a62f2,_0x4fa635(0xc9)),'levels':readFiniteNumber(_0x1a62f2,_0x4fa635(0xe2)),'timestamp':readFiniteNumber(_0x1a62f2,_0x4fa635(0xd5)),'levelList':readNumberArray(_0x1a62f2,_0x4fa635(0xaf)),'timeList':readStringArray(_0x1a62f2,'timeList'),'dataType':readString(_0x1a62f2,_0x4fa635(0xad)),'undef':readFiniteNumber(_0x1a62f2,_0x4fa635(0xd0)),'dataScale':readFiniteNumber(_0x1a62f2,_0x4fa635(0xb4)),'dataOffset':readFiniteNumber(_0x1a62f2,_0x4fa635(0xa9)),'units':readFiniteNumber(_0x1a62f2,'units'),'littleEndian':readBoolean(_0x1a62f2,_0x4fa635(0xab)),'unsigned':readBoolean(_0x1a62f2,_0x4fa635(0xe0)),'properties':readProperties(_0x1a62f2)};validatePositiveInteger(_0x5395ec[_0x4fa635(0xc9)],_0x4fa635(0xc9)),validatePositiveInteger(_0x5395ec[_0x4fa635(0xe2)],'levels');if(_0x5395ec[_0x4fa635(0xaf)][_0x4fa635(0xba)]!==_0x5395ec['levels'])invalidMetadata('levelList');if(_0x5395ec[_0x4fa635(0xc8)]['length']!==_0x5395ec[_0x4fa635(0xc9)])invalidMetadata(_0x4fa635(0xc8));if(_0x5395ec[_0x4fa635(0xad)]!==_0x4fa635(0xd3))throw new VolumeDataError(_0x4fa635(0xb3),_0x4fa635(0xbc)+_0x5395ec['dataType']+'.\x20不支持的雷达栅格体数据类型:'+_0x5395ec[_0x4fa635(0xad)]+'。');return validateLevelAxis(_0x5395ec[_0x4fa635(0xaf)]),{..._0x5395ec,'sourceName':_0x2bbe2c,'productTime':_0x3f116c,'longitudeDelta':resolveAxisDelta(_0x5395ec['xStart'],_0x5395ec[_0x4fa635(0xe1)],_0x5395ec[_0x4fa635(0xb5)],_0x5395ec[_0x4fa635(0xc7)],_0x4fa635(0xd8)),'latitudeDelta':resolveAxisDelta(_0x5395ec[_0x4fa635(0xcd)],_0x5395ec[_0x4fa635(0xbd)],_0x5395ec[_0x4fa635(0xb2)],_0x5395ec['ySize'],_0x4fa635(0xc5))};};
@@ -0,0 +1,2 @@
1
+ import type { ILoadRadarGridVolumeZipOptions, ILoadedRadarGridVolume } from './volumeDataTypes';
2
+ export declare const loadRadarGridVolumeZip: (archiveBytes: Uint8Array, options: ILoadRadarGridVolumeZipOptions) => Promise<ILoadedRadarGridVolume>;
@@ -0,0 +1 @@
1
+ const _0x2fe3ab=_0x310d;(function(_0x240ec3,_0x5a8914){const _0x10406a=_0x310d,_0x380981=_0x240ec3();while(!![]){try{const _0x386b08=-parseInt(_0x10406a(0xe5))/0x1*(parseInt(_0x10406a(0xd3))/0x2)+-parseInt(_0x10406a(0xea))/0x3*(parseInt(_0x10406a(0xc2))/0x4)+-parseInt(_0x10406a(0xc3))/0x5*(parseInt(_0x10406a(0xc6))/0x6)+parseInt(_0x10406a(0xd9))/0x7*(-parseInt(_0x10406a(0xdd))/0x8)+-parseInt(_0x10406a(0xe7))/0x9*(-parseInt(_0x10406a(0xbf))/0xa)+parseInt(_0x10406a(0xdb))/0xb*(-parseInt(_0x10406a(0xc4))/0xc)+-parseInt(_0x10406a(0xe1))/0xd*(-parseInt(_0x10406a(0xe6))/0xe);if(_0x386b08===_0x5a8914)break;else _0x380981['push'](_0x380981['shift']());}catch(_0x432518){_0x380981['push'](_0x380981['shift']());}}}(_0x22d2,0x9e147));import{VolumeDataError}from'./volumeDataError';import{parseRadarGridVolumeMetadata}from'./radarGridVolumeMetadata';import{createRadarGridVolumeSource}from'./radarGridVolumeSource';function _0x310d(_0x23d5ab,_0x4819c3){const _0x22d202=_0x22d2();return _0x310d=function(_0x310dd1,_0x3bc0e1){_0x310dd1=_0x310dd1-0xbc;let _0x47820b=_0x22d202[_0x310dd1];return _0x47820b;},_0x310d(_0x23d5ab,_0x4819c3);}import{RADAR_GRID_VOLUME_ZIP_FORMAT}from'./volumeDataTypes';function _0x22d2(){const _0x2099e6=['\x20is\x20outside\x20the\x20allowed\x20range.\x20雷达栅格体头部长度\x20','data.bin','maxHeaderBytes','ySize','BYTES_PER_ELEMENT','parse','\x20字节。','94026jkfHRk','maxCompressionRatio','times','productTime','Expected\x20','byteLength','287xrpiQX','INVALID_HEADER_JSON','11alyZJq','xSize','119264vVBEWS','Radar\x20grid\x20volume\x20header\x20length\x20','sourceName','subarray','1209WRReSh','isSafeInteger','maxEntryCount','Radar\x20grid\x20volume\x20header\x20exceeds\x20data.bin\x20bounds.\x20雷达栅格体头部超出\x20data.bin\x20边界。','13SKdbDh','658924qfOIal','1775529qOyMlB','.\x20雷达栅格体数据区预期\x20','INVALID_PAYLOAD_LENGTH','819336iRXIFz','revision','byteOffset','INVALID_HEADER_LENGTH','10AbaXlZ','maxEntryBytes','getUint32','4ADlXdx','5yMUHUv','15416292lBCcrV','utf-8','6880344ZkhpKy','levels','\x20超出允许范围。','FILE_TOO_SHORT','Failed\x20to\x20decode\x20radar\x20grid\x20volume\x20metadata\x20JSON.\x20雷达栅格体元数据\x20JSON\x20解码失败。','\x20字节,实际\x20'];_0x22d2=function(){return _0x2099e6;};return _0x22d2();}import{extractZipEntry}from'./zipArchive';const DATA_ENTRY_NAME=_0x2fe3ab(0xcd),HEADER_LENGTH_BYTES=Uint32Array[_0x2fe3ab(0xd0)],FLOAT32_BYTES=Float32Array[_0x2fe3ab(0xd0)],multiplySafe=(_0x22627a,_0x15bbd5)=>{const _0x587012=_0x2fe3ab,_0x72cb70=_0x22627a*_0x15bbd5;if(!Number[_0x587012(0xe2)](_0x72cb70))throw new VolumeDataError('INVALID_DATA_SIZE','Radar\x20grid\x20volume\x20dimensions\x20exceed\x20the\x20safe\x20integer\x20range.\x20雷达栅格体尺寸超过安全整数范围。');return _0x72cb70;},decodeHeader=(_0xae37a0,_0x5ee9af)=>{const _0xb336e5=_0x2fe3ab;try{const _0x3d84ea=new TextDecoder(_0xb336e5(0xc5),{'fatal':!![]})['decode'](_0xae37a0[_0xb336e5(0xe0)](HEADER_LENGTH_BYTES,HEADER_LENGTH_BYTES+_0x5ee9af));return JSON[_0xb336e5(0xd1)](_0x3d84ea);}catch(_0x5e2ec0){throw new VolumeDataError(_0xb336e5(0xda),_0xb336e5(0xca),{'cause':_0x5e2ec0});}};export const loadRadarGridVolumeZip=async(_0x2cc15d,_0x38dd51)=>{const _0x2a6ba5=_0x2fe3ab,_0x379121=_0x38dd51[_0x2a6ba5(0xc0)]??0x100*0x400*0x400,_0x510d6c=_0x38dd51[_0x2a6ba5(0xce)]??0x400*0x400,_0x5a85e0=await extractZipEntry(_0x2cc15d,DATA_ENTRY_NAME,{'maximumEntryBytes':_0x379121,'maximumEntryCount':_0x38dd51[_0x2a6ba5(0xe3)]??0x400,'maximumCompressionRatio':_0x38dd51[_0x2a6ba5(0xd4)]??0xc8},_0x38dd51['signal']);if(_0x5a85e0[_0x2a6ba5(0xd8)]<HEADER_LENGTH_BYTES)throw new VolumeDataError(_0x2a6ba5(0xc9),'Radar\x20grid\x20volume\x20data.bin\x20must\x20contain\x20a\x20four-byte\x20header\x20length.\x20雷达栅格体\x20data.bin\x20必须包含四字节头部长度。');const _0x29f2a6=new DataView(_0x5a85e0['buffer'],_0x5a85e0[_0x2a6ba5(0xbd)],_0x5a85e0[_0x2a6ba5(0xd8)])[_0x2a6ba5(0xc1)](0x0,!![]);if(_0x29f2a6===0x0||_0x29f2a6>_0x510d6c)throw new VolumeDataError(_0x2a6ba5(0xbe),_0x2a6ba5(0xde)+_0x29f2a6+_0x2a6ba5(0xcc)+_0x29f2a6+_0x2a6ba5(0xc8));const _0x528e9d=HEADER_LENGTH_BYTES+_0x29f2a6;if(!Number[_0x2a6ba5(0xe2)](_0x528e9d)||_0x528e9d>_0x5a85e0[_0x2a6ba5(0xd8)])throw new VolumeDataError(_0x2a6ba5(0xbe),_0x2a6ba5(0xe4));const _0x190de8=parseRadarGridVolumeMetadata(decodeHeader(_0x5a85e0,_0x29f2a6),_0x38dd51[_0x2a6ba5(0xdf)],_0x38dd51[_0x2a6ba5(0xd6)]);let _0x1b352e=multiplySafe(_0x190de8[_0x2a6ba5(0xd5)],_0x190de8[_0x2a6ba5(0xc7)]);_0x1b352e=multiplySafe(_0x1b352e,_0x190de8[_0x2a6ba5(0xcf)]),_0x1b352e=multiplySafe(_0x1b352e,_0x190de8[_0x2a6ba5(0xdc)]);const _0x5a5300=multiplySafe(_0x1b352e,FLOAT32_BYTES),_0x264f3a=_0x5a85e0[_0x2a6ba5(0xd8)]-_0x528e9d;if(_0x264f3a!==_0x5a5300)throw new VolumeDataError(_0x2a6ba5(0xe9),_0x2a6ba5(0xd7)+_0x5a5300+'\x20radar\x20grid\x20volume\x20payload\x20bytes\x20but\x20received\x20'+_0x264f3a+_0x2a6ba5(0xe8)+_0x5a5300+_0x2a6ba5(0xcb)+_0x264f3a+_0x2a6ba5(0xd2));return{'format':RADAR_GRID_VOLUME_ZIP_FORMAT,'metadata':_0x190de8,'source':createRadarGridVolumeSource(_0x5a85e0,_0x528e9d,_0x190de8,_0x38dd51[_0x2a6ba5(0xbc)])};};
@@ -0,0 +1,3 @@
1
+ import type { IVolumeSource } from '../volume-scene/sourceTypes';
2
+ import type { IRadarGridVolumeMetadata } from './volumeDataTypes';
3
+ export declare const createRadarGridVolumeSource: (dataBytes: Uint8Array, payloadOffset: number, metadata: IRadarGridVolumeMetadata, revision?: number) => IVolumeSource;
@@ -0,0 +1 @@
1
+ const _0x4b5a43=_0x2e1f;function _0x185c(){const _0xf427ae=['BYTES_PER_ELEMENT','sourceYCount','360681GXXTXI','6WNUWcH','isSafeInteger','xSize','getFloat32','Radar\x20grid\x20volume\x20time\x20index\x20is\x20out\x20of\x20range:\x20','13168521LlkIpa','littleEndian','273400gvUMwu','xStart','buffer','dataScale','sourceYStart','9037YallRm','levels','level','xCount','yEnd','throwIfAborted','times','levelStart','source\x20Y','xEnd','2998824WhZLUP','1134066hYyswF','undef','levelCount','264flmnXx','.\x20雷达栅格体时间索引越界:','\x20分块范围无效。','levelList','dataOffset','NaN','yStart','\x20chunk\x20range\x20is\x20invalid.\x20雷达栅格体\x20','522140myzscK','ySize'];_0x185c=function(){return _0xf427ae;};return _0x185c();}(function(_0x1ed9ed,_0x506f37){const _0xd7187b=_0x2e1f,_0x5a3400=_0x1ed9ed();while(!![]){try{const _0x226c63=-parseInt(_0xd7187b(0x126))/0x1+-parseInt(_0xd7187b(0x12b))/0x2*(-parseInt(_0xd7187b(0x12a))/0x3)+-parseInt(_0xd7187b(0x141))/0x4+parseInt(_0xd7187b(0x132))/0x5+-parseInt(_0xd7187b(0x142))/0x6+parseInt(_0xd7187b(0x137))/0x7*(parseInt(_0xd7187b(0x11e))/0x8)+parseInt(_0xd7187b(0x130))/0x9;if(_0x226c63===_0x506f37)break;else _0x5a3400['push'](_0x5a3400['shift']());}catch(_0x5c753c){_0x5a3400['push'](_0x5a3400['shift']());}}}(_0x185c,0x705f4));const FLOAT32_BYTES=Float32Array[_0x4b5a43(0x128)],validateRange=(_0x2c5b79,_0x88133c,_0x43b03b,_0x32c37e)=>{const _0xbc5eb2=_0x4b5a43;if(!Number['isSafeInteger'](_0x2c5b79)||!Number[_0xbc5eb2(0x12c)](_0x88133c)||_0x2c5b79<0x0||_0x88133c<=0x0||_0x2c5b79+_0x88133c>_0x43b03b)throw new RangeError('Radar\x20grid\x20volume\x20'+_0x32c37e+_0xbc5eb2(0x125)+_0x32c37e+_0xbc5eb2(0x120));};function _0x2e1f(_0x212c3c,_0x1da472){const _0x185cb4=_0x185c();return _0x2e1f=function(_0x2e1fba,_0x161798){_0x2e1fba=_0x2e1fba-0x11c;let _0x1996d6=_0x185cb4[_0x2e1fba];return _0x1996d6;},_0x2e1f(_0x212c3c,_0x1da472);}export const createRadarGridVolumeSource=(_0x1a1b08,_0x5b3dc6,_0x4a1489,_0x1b2457)=>{const _0x458a90=_0x4b5a43,_0x3d4709=new DataView(_0x1a1b08[_0x458a90(0x134)],_0x1a1b08['byteOffset'],_0x1a1b08['byteLength']),_0x567a39=_0x4a1489[_0x458a90(0x121)][0x0],_0x3e59b1=_0x4a1489['levelList'][_0x4a1489[_0x458a90(0x121)]['length']-0x1];return{'metadata':{'xAxis':{'start':_0x4a1489['xStart'],'end':_0x4a1489[_0x458a90(0x140)],'count':_0x4a1489[_0x458a90(0x12d)]},'yAxis':{'start':_0x567a39,'end':_0x3e59b1,'count':_0x4a1489[_0x458a90(0x138)]},'zAxis':{'start':_0x4a1489[_0x458a90(0x124)],'end':_0x4a1489[_0x458a90(0x13b)],'count':_0x4a1489[_0x458a90(0x127)]},'timeCount':_0x4a1489[_0x458a90(0x13d)],'noData':Number[_0x458a90(0x123)],'valueScale':0x1,'revision':_0x1b2457},async 'readChunk'(_0x3f3a23,_0x1541fc,_0x31ade0){const _0x1c3200=_0x458a90;_0x31ade0?.['throwIfAborted']();if(!Number['isSafeInteger'](_0x3f3a23)||_0x3f3a23<0x0||_0x3f3a23>=_0x4a1489[_0x1c3200(0x13d)])throw new RangeError(_0x1c3200(0x12f)+_0x3f3a23+_0x1c3200(0x11f)+_0x3f3a23+'。');validateRange(_0x1541fc[_0x1c3200(0x133)],_0x1541fc['xCount'],_0x4a1489[_0x1c3200(0x12d)],'X'),validateRange(_0x1541fc[_0x1c3200(0x13e)],_0x1541fc['levelCount'],_0x4a1489[_0x1c3200(0x138)],_0x1c3200(0x139)),validateRange(_0x1541fc[_0x1c3200(0x136)],_0x1541fc['sourceYCount'],_0x4a1489[_0x1c3200(0x127)],_0x1c3200(0x13f));const _0x5d78c6=new Float32Array(_0x1541fc['xCount']*_0x1541fc[_0x1c3200(0x11d)]*_0x1541fc[_0x1c3200(0x129)]),_0x8c0588=_0x4a1489[_0x1c3200(0x12d)]*_0x4a1489[_0x1c3200(0x127)],_0x296543=_0x3f3a23*_0x4a1489[_0x1c3200(0x138)]*_0x8c0588;for(let _0x1ea21d=0x0;_0x1ea21d<_0x1541fc[_0x1c3200(0x129)];_0x1ea21d+=0x1){const _0x50919c=_0x1541fc[_0x1c3200(0x136)]+_0x1ea21d;for(let _0x34a848=0x0;_0x34a848<_0x1541fc[_0x1c3200(0x11d)];_0x34a848+=0x1){const _0x408871=_0x1541fc[_0x1c3200(0x13e)]+_0x34a848,_0x3ac8f1=_0x296543+_0x408871*_0x8c0588+_0x50919c*_0x4a1489[_0x1c3200(0x12d)]+_0x1541fc[_0x1c3200(0x133)],_0x5bd954=(_0x1ea21d*_0x1541fc[_0x1c3200(0x11d)]+_0x34a848)*_0x1541fc[_0x1c3200(0x13a)];for(let _0x25d5b6=0x0;_0x25d5b6<_0x1541fc[_0x1c3200(0x13a)];_0x25d5b6+=0x1){const _0x13706e=_0x3d4709[_0x1c3200(0x12e)](_0x5b3dc6+(_0x3ac8f1+_0x25d5b6)*FLOAT32_BYTES,_0x4a1489[_0x1c3200(0x131)]);_0x5d78c6[_0x5bd954+_0x25d5b6]=_0x13706e===_0x4a1489[_0x1c3200(0x11c)]?Number[_0x1c3200(0x123)]:_0x13706e*_0x4a1489[_0x1c3200(0x135)]+_0x4a1489[_0x1c3200(0x122)];}}}return _0x31ade0?.[_0x1c3200(0x13c)](),{'timeIndex':_0x3f3a23,'range':{..._0x1541fc},'width':_0x1541fc[_0x1c3200(0x13a)],'height':_0x1541fc[_0x1c3200(0x11d)],'depth':_0x1541fc['sourceYCount'],'values':_0x5d78c6};}};};
@@ -0,0 +1,5 @@
1
+ export type VolumeDataErrorCode = 'UNSUPPORTED_FORMAT' | 'FETCH_FAILED' | 'INPUT_TOO_LARGE' | 'INVALID_ZIP' | 'ZIP64_UNSUPPORTED' | 'TOO_MANY_ENTRIES' | 'ENTRY_NOT_FOUND' | 'AMBIGUOUS_ENTRY' | 'ENTRY_TOO_LARGE' | 'SUSPICIOUS_COMPRESSION_RATIO' | 'ENCRYPTED_ENTRY' | 'UNSUPPORTED_COMPRESSION' | 'FILE_TOO_SHORT' | 'INVALID_HEADER_LENGTH' | 'INVALID_HEADER_JSON' | 'INVALID_METADATA' | 'UNSUPPORTED_DATA_TYPE' | 'INVALID_AXIS' | 'INVALID_DATA_SIZE' | 'INVALID_PAYLOAD_LENGTH';
2
+ export declare class VolumeDataError extends Error {
3
+ readonly code: VolumeDataErrorCode;
4
+ constructor(code: VolumeDataErrorCode, message: string, options?: ErrorOptions);
5
+ }
@@ -0,0 +1 @@
1
+ (function(_0x3a3d36,_0x17bd0e){var _0x294cd7=_0x5a1f,_0x17987d=_0x3a3d36();while(!![]){try{var _0x519e63=-parseInt(_0x294cd7(0x89))/0x1+parseInt(_0x294cd7(0x8a))/0x2*(parseInt(_0x294cd7(0x80))/0x3)+parseInt(_0x294cd7(0x8c))/0x4*(-parseInt(_0x294cd7(0x81))/0x5)+parseInt(_0x294cd7(0x85))/0x6+parseInt(_0x294cd7(0x83))/0x7*(-parseInt(_0x294cd7(0x82))/0x8)+parseInt(_0x294cd7(0x87))/0x9*(parseInt(_0x294cd7(0x88))/0xa)+parseInt(_0x294cd7(0x8b))/0xb*(parseInt(_0x294cd7(0x8d))/0xc);if(_0x519e63===_0x17bd0e)break;else _0x17987d['push'](_0x17987d['shift']());}catch(_0x2ea0da){_0x17987d['push'](_0x17987d['shift']());}}}(_0x5683,0xb832a));function _0x5a1f(_0x44e79f,_0x5e116f){var _0x56831b=_0x5683();return _0x5a1f=function(_0x5a1fd7,_0x194ca7){_0x5a1fd7=_0x5a1fd7-0x80;var _0xd9d1cd=_0x56831b[_0x5a1fd7];return _0xd9d1cd;},_0x5a1f(_0x44e79f,_0x5e116f);}export class VolumeDataError extends Error{['code'];constructor(_0x98ccf1,_0x44e8ce,_0x4a8482){var _0x462037=_0x5a1f;super(_0x44e8ce,_0x4a8482),this[_0x462037(0x84)]=_0x462037(0x86),this['code']=_0x98ccf1;}}function _0x5683(){var _0x1aaff7=['344460ZUjzif','3nLpyMb','5mdspAe','8FVDPke','5724495Zoazph','name','3943296fLTerH','VolumeDataError','3261987PesgwZ','40eWxuZJ','1170128XlDBBC','1193138CmhFHv','451QfNBeE','4552300HgztPL'];_0x5683=function(){return _0x1aaff7;};return _0x5683();}
@@ -0,0 +1,54 @@
1
+ import type { IVolumeSource } from '../volume-scene/sourceTypes';
2
+ export declare const RADAR_GRID_VOLUME_ZIP_FORMAT: "radar-grid-volume-zip";
3
+ export type VolumeDataFormat = typeof RADAR_GRID_VOLUME_ZIP_FORMAT;
4
+ export type VolumeDataInput = string | URL | ArrayBuffer | Uint8Array;
5
+ export interface IVolumeDataLoadLimits {
6
+ maxArchiveBytes?: number;
7
+ maxEntryBytes?: number;
8
+ maxEntryCount?: number;
9
+ maxHeaderBytes?: number;
10
+ maxCompressionRatio?: number;
11
+ }
12
+ export interface ILoadRadarGridVolumeZipOptions extends IVolumeDataLoadLimits {
13
+ format: typeof RADAR_GRID_VOLUME_ZIP_FORMAT;
14
+ signal?: AbortSignal;
15
+ sourceName?: string;
16
+ productTime?: string;
17
+ revision?: number;
18
+ }
19
+ export type ILoadVolumeSourceOptions = ILoadRadarGridVolumeZipOptions;
20
+ export interface IRadarGridVolumeFileMetadata {
21
+ xStart: number;
22
+ yStart: number;
23
+ xDelta: number;
24
+ yDelta: number;
25
+ xSize: number;
26
+ ySize: number;
27
+ xEnd: number;
28
+ yEnd: number;
29
+ times: number;
30
+ levels: number;
31
+ timestamp: number;
32
+ levelList: readonly number[];
33
+ timeList: readonly string[];
34
+ dataType: string;
35
+ undef: number;
36
+ dataScale: number;
37
+ dataOffset: number;
38
+ units: number;
39
+ littleEndian: boolean;
40
+ unsigned: boolean;
41
+ properties: Readonly<Record<string, unknown>>;
42
+ }
43
+ export interface IRadarGridVolumeMetadata extends IRadarGridVolumeFileMetadata {
44
+ longitudeDelta: number;
45
+ latitudeDelta: number;
46
+ sourceName?: string;
47
+ productTime?: string;
48
+ }
49
+ export interface ILoadedRadarGridVolume {
50
+ format: typeof RADAR_GRID_VOLUME_ZIP_FORMAT;
51
+ source: IVolumeSource;
52
+ metadata: IRadarGridVolumeMetadata;
53
+ }
54
+ export type LoadedVolumeSource = ILoadedRadarGridVolume;
@@ -0,0 +1 @@
1
+ const _0x5916d2=_0x4866;function _0x204b(){const _0x1bec7f=['72gnofiE','133VcRdwQ','1494NfotDz','3640440TjkXKd','1468IGMUep','radar-grid-volume-zip','3402948gitzfJ','2889615mBvjRZ','655124KXoTVO','156696YPpVzb','708822mthSaf'];_0x204b=function(){return _0x1bec7f;};return _0x204b();}function _0x4866(_0x1c6f04,_0x440376){const _0x204b00=_0x204b();return _0x4866=function(_0x48665a,_0x4aeae8){_0x48665a=_0x48665a-0x170;let _0x42a66d=_0x204b00[_0x48665a];return _0x42a66d;},_0x4866(_0x1c6f04,_0x440376);}(function(_0xe09288,_0x3ea170){const _0xf61e3e=_0x4866,_0x3b368c=_0xe09288();while(!![]){try{const _0x40cde0=-parseInt(_0xf61e3e(0x170))/0x1*(parseInt(_0xf61e3e(0x179))/0x2)+parseInt(_0xf61e3e(0x172))/0x3+-parseInt(_0xf61e3e(0x174))/0x4+parseInt(_0xf61e3e(0x173))/0x5+parseInt(_0xf61e3e(0x175))/0x6*(parseInt(_0xf61e3e(0x178))/0x7)+-parseInt(_0xf61e3e(0x177))/0x8*(parseInt(_0xf61e3e(0x176))/0x9)+parseInt(_0xf61e3e(0x17a))/0xa;if(_0x40cde0===_0x3ea170)break;else _0x3b368c['push'](_0x3b368c['shift']());}catch(_0x29e407){_0x3b368c['push'](_0x3b368c['shift']());}}}(_0x204b,0x93498));export const RADAR_GRID_VOLUME_ZIP_FORMAT=_0x5916d2(0x171);
@@ -0,0 +1,6 @@
1
+ export interface IZipExtractionLimits {
2
+ maximumEntryBytes: number;
3
+ maximumEntryCount: number;
4
+ maximumCompressionRatio: number;
5
+ }
6
+ export declare const extractZipEntry: (archiveBytes: Uint8Array, entryName: string, limits: IZipExtractionLimits, signal?: AbortSignal) => Promise<Uint8Array>;
@@ -0,0 +1 @@
1
+ const _0x4de5f6=_0x455d;function _0x42af(){const _0x3eff36=['\x22\x20was\x20not\x20found.\x20ZIP\x20中未找到条目\x20\x22','\x22\x20is\x20encrypted.\x20ZIP\x20条目\x20\x22','1024818NQkeeG','1594veAwke','\x20限制。','8YEMyeO','Central\x20directory\x20exceeds\x20archive\x20bounds.','name','.\x20ZIP\x20解压失败。','throwIfAborted','undefined','ZIP\x20entry\x20name\x20is\x20not\x20valid\x20UTF-8.\x20ZIP\x20条目名称不是有效\x20UTF-8。','maximumCompressionRatio','UNSUPPORTED_COMPRESSION','\x20bytes,\x20exceeding\x20the\x20','5gDxGOc','TOO_MANY_ENTRIES','1470770QhXkfD','\x20ZIP\x20结构无效。','ZIP64\x20archives\x20are\x20not\x20supported.\x20不支持\x20ZIP64\x20压缩包。','\x22\x20压缩比\x20','Failed\x20to\x20start\x20ZIP\x20decompression.\x20无法启动\x20ZIP\x20解压。','getUint16','subarray','Multi-disk\x20ZIP\x20archives\x20are\x20not\x20supported.\x20不支持多磁盘\x20ZIP\x20压缩包。','message','ZIP64_UNSUPPORTED','2505MPyKAU','\x22.\x20ZIP\x20中存在多个名为\x20\x22','\x20字节限制。','byteLength','ENTRY_TOO_LARGE','\x22\x20的解压长度与中央目录不一致。','.\x20ZIP\x20条目\x20\x22','uncompressedSize','INVALID_ZIP','\x22\x20的条目。','maximumEntryBytes','buffer','Failed\x20to\x20decompress\x20ZIP\x20archive:\x20','Archive\x20is\x20too\x20short.','\x20超过\x20','\x20exceeds\x20the\x20','Failed\x20to\x20decompress\x20ZIP\x20archive.\x20ZIP\x20解压失败。','SUSPICIOUS_COMPRESSION_RATIO','End\x20of\x20central\x20directory\x20was\x20not\x20found.','push','ENCRYPTED_ENTRY','toFixed','99753CirhOt','maximumEntryCount','2326480mZnfXA','AMBIGUOUS_ENTRY','max','getUint32','ZIP\x20entry\x20\x22','\x22\x20uses\x20unsupported\x20compression\x20method\x20','byteOffset','decode','\x22\x20解压后为\x20','ZIP64\x20entries\x20are\x20not\x20supported.\x20不支持\x20ZIP64\x20条目。','ZIP\x20contains\x20multiple\x20entries\x20named\x20\x22','length','utf-8','\x22\x20decompressed\x20length\x20does\x20not\x20match\x20its\x20central\x20directory.\x20ZIP\x20条目\x20\x22','6841791CJwGCA','ZIP\x20entry\x20count\x20','8042293VIrqKu','\x20limit.\x20ZIP\x20条目\x20\x22'];_0x42af=function(){return _0x3eff36;};return _0x42af();}(function(_0x150224,_0x22d497){const _0x3dd949=_0x455d,_0x10d399=_0x150224();while(!![]){try{const _0x1dbd69=parseInt(_0x3dd949(0x104))/0x1+-parseInt(_0x3dd949(0x11b))/0x2*(-parseInt(_0x3dd949(0x133))/0x3)+-parseInt(_0x3dd949(0x106))/0x4+-parseInt(_0x3dd949(0x127))/0x5*(-parseInt(_0x3dd949(0x11a))/0x6)+parseInt(_0x3dd949(0x116))/0x7+parseInt(_0x3dd949(0x11d))/0x8*(-parseInt(_0x3dd949(0x114))/0x9)+-parseInt(_0x3dd949(0x129))/0xa;if(_0x1dbd69===_0x22d497)break;else _0x10d399['push'](_0x10d399['shift']());}catch(_0x202747){_0x10d399['push'](_0x10d399['shift']());}}}(_0x42af,0x91856));import{unzip,unzipSync}from'fflate';import{VolumeDataError}from'./volumeDataError';const END_OF_CENTRAL_DIRECTORY_SIGNATURE=0x6054b50,CENTRAL_DIRECTORY_SIGNATURE=0x2014b50,MINIMUM_END_RECORD_BYTES=0x16,MAXIMUM_ZIP_COMMENT_BYTES=0xffff,createInvalidZipError=_0x52e8bc=>new VolumeDataError(_0x4de5f6(0x13b),_0x52e8bc+_0x4de5f6(0x12a)),findEndOfCentralDirectory=_0x5e45e6=>{const _0x487a33=_0x4de5f6,_0x55dfbe=Math['max'](0x0,_0x5e45e6[_0x487a33(0x136)]-MINIMUM_END_RECORD_BYTES-MAXIMUM_ZIP_COMMENT_BYTES);for(let _0x6fbd37=_0x5e45e6[_0x487a33(0x136)]-MINIMUM_END_RECORD_BYTES;_0x6fbd37>=_0x55dfbe;_0x6fbd37-=0x1){if(_0x5e45e6[_0x487a33(0x109)](_0x6fbd37,!![])!==END_OF_CENTRAL_DIRECTORY_SIGNATURE)continue;const _0x99e6a9=_0x5e45e6[_0x487a33(0x12e)](_0x6fbd37+0x14,!![]);if(_0x6fbd37+MINIMUM_END_RECORD_BYTES+_0x99e6a9===_0x5e45e6[_0x487a33(0x136)])return _0x6fbd37;}throw createInvalidZipError(_0x487a33(0x100));},decodeEntryName=(_0x2195df,_0x23dbd1,_0x29f1a9)=>{const _0x1c9f97=_0x4de5f6;try{return new TextDecoder(_0x1c9f97(0x112),{'fatal':!![]})[_0x1c9f97(0x10d)](_0x2195df[_0x1c9f97(0x12f)](_0x23dbd1,_0x23dbd1+_0x29f1a9));}catch(_0x18b9bd){throw new VolumeDataError(_0x1c9f97(0x13b),_0x1c9f97(0x123),{'cause':_0x18b9bd});}},findDataEntry=(_0x3dcf99,_0x2591c4,_0x73992c)=>{const _0x522f0d=_0x4de5f6;if(_0x3dcf99[_0x522f0d(0x136)]<MINIMUM_END_RECORD_BYTES)throw createInvalidZipError(_0x522f0d(0xfb));const _0x3b5e1a=new DataView(_0x3dcf99[_0x522f0d(0x13e)],_0x3dcf99[_0x522f0d(0x10c)],_0x3dcf99[_0x522f0d(0x136)]),_0x5a4a50=findEndOfCentralDirectory(_0x3b5e1a),_0x815f91=_0x3b5e1a['getUint16'](_0x5a4a50+0x4,!![]),_0x24104e=_0x3b5e1a[_0x522f0d(0x12e)](_0x5a4a50+0x6,!![]),_0x363f11=_0x3b5e1a[_0x522f0d(0x12e)](_0x5a4a50+0x8,!![]),_0x534bf8=_0x3b5e1a[_0x522f0d(0x12e)](_0x5a4a50+0xa,!![]),_0x32fac6=_0x3b5e1a[_0x522f0d(0x109)](_0x5a4a50+0xc,!![]),_0x5a2e8d=_0x3b5e1a[_0x522f0d(0x109)](_0x5a4a50+0x10,!![]);if(_0x815f91!==0x0||_0x24104e!==0x0||_0x363f11!==_0x534bf8)throw new VolumeDataError(_0x522f0d(0x13b),_0x522f0d(0x130));if(_0x534bf8===0xffff||_0x32fac6===0xffffffff||_0x5a2e8d===0xffffffff)throw new VolumeDataError('ZIP64_UNSUPPORTED',_0x522f0d(0x12b));if(_0x534bf8>_0x73992c['maximumEntryCount'])throw new VolumeDataError(_0x522f0d(0x128),_0x522f0d(0x115)+_0x534bf8+'\x20exceeds\x20the\x20'+_0x73992c[_0x522f0d(0x105)]+'\x20entry\x20limit.\x20ZIP\x20条目数\x20'+_0x534bf8+_0x522f0d(0xfc)+_0x73992c[_0x522f0d(0x105)]+'\x20条限制。');if(!Number['isSafeInteger'](_0x5a2e8d+_0x32fac6)||_0x5a2e8d+_0x32fac6>_0x5a4a50)throw createInvalidZipError(_0x522f0d(0x11e));const _0x210772=[];let _0x2dcda4=_0x5a2e8d;for(let _0x59b155=0x0;_0x59b155<_0x534bf8;_0x59b155+=0x1){if(_0x2dcda4+0x2e>_0x5a4a50||_0x3b5e1a[_0x522f0d(0x109)](_0x2dcda4,!![])!==CENTRAL_DIRECTORY_SIGNATURE)throw createInvalidZipError('Central\x20directory\x20entry\x20is\x20truncated\x20or\x20has\x20an\x20invalid\x20signature.');const _0x3e1340=_0x3b5e1a[_0x522f0d(0x12e)](_0x2dcda4+0x8,!![]),_0x11abe8=_0x3b5e1a[_0x522f0d(0x12e)](_0x2dcda4+0xa,!![]),_0x3001b7=_0x3b5e1a[_0x522f0d(0x109)](_0x2dcda4+0x14,!![]),_0x525807=_0x3b5e1a[_0x522f0d(0x109)](_0x2dcda4+0x18,!![]),_0x3929d2=_0x3b5e1a[_0x522f0d(0x12e)](_0x2dcda4+0x1c,!![]),_0xa9a25f=_0x3b5e1a['getUint16'](_0x2dcda4+0x1e,!![]),_0x1f26fa=_0x3b5e1a[_0x522f0d(0x12e)](_0x2dcda4+0x20,!![]),_0x1a17a2=_0x2dcda4+0x2e+_0x3929d2+_0xa9a25f+_0x1f26fa;if(_0x1a17a2>_0x5a4a50)throw createInvalidZipError('Central\x20directory\x20entry\x20exceeds\x20archive\x20bounds.');if(_0x3001b7===0xffffffff||_0x525807===0xffffffff)throw new VolumeDataError(_0x522f0d(0x132),_0x522f0d(0x10f));const _0x52f8fd=decodeEntryName(_0x3dcf99,_0x2dcda4+0x2e,_0x3929d2);if(_0x52f8fd===_0x2591c4||_0x52f8fd['endsWith']('/'+_0x2591c4)){if((_0x3e1340&0x1)!==0x0)throw new VolumeDataError(_0x522f0d(0x102),'ZIP\x20entry\x20\x22'+_0x52f8fd+_0x522f0d(0x119)+_0x52f8fd+'\x22\x20已加密。');if(_0x11abe8!==0x0&&_0x11abe8!==0x8)throw new VolumeDataError(_0x522f0d(0x125),_0x522f0d(0x10a)+_0x52f8fd+_0x522f0d(0x10b)+_0x11abe8+_0x522f0d(0x139)+_0x52f8fd+'\x22\x20使用不支持的压缩方式\x20'+_0x11abe8+'。');if(_0x525807>_0x73992c[_0x522f0d(0x13d)])throw new VolumeDataError(_0x522f0d(0x137),_0x522f0d(0x10a)+_0x52f8fd+'\x22\x20expands\x20to\x20'+_0x525807+_0x522f0d(0x126)+_0x73992c[_0x522f0d(0x13d)]+'\x20byte\x20limit.\x20ZIP\x20条目\x20\x22'+_0x52f8fd+_0x522f0d(0x10e)+_0x525807+'\x20字节,超过\x20'+_0x73992c['maximumEntryBytes']+_0x522f0d(0x135));const _0xa543d7=_0x525807/Math[_0x522f0d(0x108)](0x1,_0x3001b7);if(_0xa543d7>_0x73992c['maximumCompressionRatio'])throw new VolumeDataError(_0x522f0d(0xff),_0x522f0d(0x10a)+_0x52f8fd+'\x22\x20compression\x20ratio\x20'+_0xa543d7[_0x522f0d(0x103)](0x2)+_0x522f0d(0xfd)+_0x73992c[_0x522f0d(0x124)]+_0x522f0d(0x117)+_0x52f8fd+_0x522f0d(0x12c)+_0xa543d7[_0x522f0d(0x103)](0x2)+_0x522f0d(0xfc)+_0x73992c['maximumCompressionRatio']+_0x522f0d(0x11c));_0x210772[_0x522f0d(0x101)]({'name':_0x52f8fd,'compressedSize':_0x3001b7,'uncompressedSize':_0x525807,'compression':_0x11abe8});}_0x2dcda4=_0x1a17a2;}if(_0x210772[_0x522f0d(0x111)]===0x0)throw new VolumeDataError('ENTRY_NOT_FOUND',_0x522f0d(0x10a)+_0x2591c4+_0x522f0d(0x118)+_0x2591c4+'\x22。');if(_0x210772[_0x522f0d(0x111)]>0x1)throw new VolumeDataError(_0x522f0d(0x107),_0x522f0d(0x110)+_0x2591c4+_0x522f0d(0x134)+_0x2591c4+_0x522f0d(0x13c));return _0x210772[0x0];};function _0x455d(_0x565306,_0x21405c){const _0x42afe5=_0x42af();return _0x455d=function(_0x455d9d,_0x762405){_0x455d9d=_0x455d9d-0xfb;let _0x5cebcf=_0x42afe5[_0x455d9d];return _0x5cebcf;},_0x455d(_0x565306,_0x21405c);}export const extractZipEntry=async(_0x187982,_0x3ce4ed,_0x3b0956,_0x4df6d7)=>{const _0x625c75=_0x4de5f6;_0x4df6d7?.[_0x625c75(0x121)]();const _0xc5fdee=findDataEntry(_0x187982,_0x3ce4ed,_0x3b0956);if(typeof Worker===_0x625c75(0x122))try{const _0x55e290=unzipSync(_0x187982,{'filter':_0xa74076=>_0xa74076[_0x625c75(0x11f)]===_0xc5fdee['name']});_0x4df6d7?.['throwIfAborted']();const _0x2d1e8a=_0x55e290[_0xc5fdee[_0x625c75(0x11f)]];if(!_0x2d1e8a||_0x2d1e8a[_0x625c75(0x136)]!==_0xc5fdee[_0x625c75(0x13a)])throw new VolumeDataError('INVALID_ZIP',_0x625c75(0x10a)+_0xc5fdee[_0x625c75(0x11f)]+'\x22\x20decompressed\x20length\x20does\x20not\x20match\x20its\x20central\x20directory.\x20ZIP\x20条目\x20\x22'+_0xc5fdee['name']+_0x625c75(0x138));return _0x2d1e8a;}catch(_0x2577aa){if(_0x2577aa instanceof VolumeDataError)throw _0x2577aa;throw new VolumeDataError(_0x625c75(0x13b),_0x625c75(0xfe),{'cause':_0x2577aa});}return new Promise((_0x234323,_0x6db21d)=>{const _0x1fdbd5=_0x625c75;try{unzip(_0x187982,{'filter':_0x5319fd=>_0x5319fd['name']===_0xc5fdee['name']},(_0x5c9411,_0x957f08)=>{const _0xae2342=_0x455d;if(_0x5c9411){_0x6db21d(new VolumeDataError(_0xae2342(0x13b),_0xae2342(0x13f)+_0x5c9411[_0xae2342(0x131)]+_0xae2342(0x120),{'cause':_0x5c9411}));return;}try{_0x4df6d7?.[_0xae2342(0x121)]();const _0x28ce53=_0x957f08[_0xc5fdee[_0xae2342(0x11f)]];if(!_0x28ce53||_0x28ce53[_0xae2342(0x136)]!==_0xc5fdee[_0xae2342(0x13a)])throw new VolumeDataError('INVALID_ZIP',_0xae2342(0x10a)+_0xc5fdee[_0xae2342(0x11f)]+_0xae2342(0x113)+_0xc5fdee['name']+_0xae2342(0x138));_0x234323(_0x28ce53);}catch(_0x2cd7a9){_0x6db21d(_0x2cd7a9);}});}catch(_0x198847){_0x6db21d(_0x198847 instanceof VolumeDataError?_0x198847:new VolumeDataError(_0x1fdbd5(0x13b),_0x1fdbd5(0x12d),{'cause':_0x198847}));}});};
@@ -1 +1 @@
1
- const _0x430924=_0x3fd3;(function(_0x1412be,_0x343acf){const _0x3867c2=_0x3fd3,_0x1b93a0=_0x1412be();while(!![]){try{const _0x22bf7d=parseInt(_0x3867c2(0x9d))/0x1+-parseInt(_0x3867c2(0x92))/0x2+parseInt(_0x3867c2(0x9c))/0x3*(parseInt(_0x3867c2(0x82))/0x4)+parseInt(_0x3867c2(0x95))/0x5*(-parseInt(_0x3867c2(0x9e))/0x6)+-parseInt(_0x3867c2(0x97))/0x7+parseInt(_0x3867c2(0x98))/0x8*(parseInt(_0x3867c2(0x9a))/0x9)+parseInt(_0x3867c2(0x8a))/0xa;if(_0x22bf7d===_0x343acf)break;else _0x1b93a0['push'](_0x1b93a0['shift']());}catch(_0x4b8ed7){_0x1b93a0['push'](_0x1b93a0['shift']());}}}(_0x3814,0xed724));import{createVolumeScene}from'../volume-scene/createVolumeScene';import{WebgpuVolumeSceneRenderer}from'../volume-scene/rendering/webgpu/webgpuVolumeSceneRenderer';import{mars3dVolumeRaymarchSource}from'./mars3dRaymarchShader';function _0x3814(){const _0x13621e=['canvas','6843bCjiye','1158889uONObu','14082dlQFvb','add','getVolumeBindGroupLayout','2588FpgVal','has','getFormat','mars3d\x20volume\x20shell\x20raymarch\x20shader','getTransferBindGroupLayout','createPipelines','one-minus-src-alpha','createRenderPipeline','5184210aZORoQ','prototype','destroy','fragmentMain','one','createShaderModule','delete','call','1201084TWEPGA','getDevice','triangle-list','505IkQrJU','vertexMain','11523988qQypoW','27576aNYhSM','createPipelineLayout','792MSeheN'];_0x3814=function(){return _0x13621e;};return _0x3814();}const premultipliedBlend=()=>({'color':{'srcFactor':_0x430924(0x8e),'dstFactor':_0x430924(0x88),'operation':_0x430924(0x9f)},'alpha':{'srcFactor':_0x430924(0x8e),'dstFactor':_0x430924(0x88),'operation':_0x430924(0x9f)}}),rendererPrototype=WebgpuVolumeSceneRenderer[_0x430924(0x8b)],mars3dCanvases=new WeakSet();let pipelineHookInstalled=![];function _0x3fd3(_0xc52698,_0x11cdae){const _0x381439=_0x3814();return _0x3fd3=function(_0x3fd3f0,_0x292e6b){_0x3fd3f0=_0x3fd3f0-0x81;let _0x144ca4=_0x381439[_0x3fd3f0];return _0x144ca4;},_0x3fd3(_0xc52698,_0x11cdae);}const installPipelineHook=()=>{const _0x38a6a5=_0x430924;if(pipelineHookInstalled)return;const _0x263e1d=rendererPrototype['createPipelines'];rendererPrototype[_0x38a6a5(0x87)]=function _0x29845a(){const _0x1bc2ba=_0x38a6a5;_0x263e1d[_0x1bc2ba(0x91)](this);if(!this['canvas']||!mars3dCanvases[_0x1bc2ba(0x83)](this[_0x1bc2ba(0x9b)]))return;const _0x52b193=this[_0x1bc2ba(0x93)](),_0x23a606=_0x52b193[_0x1bc2ba(0x8f)]({'label':_0x1bc2ba(0x85),'code':mars3dVolumeRaymarchSource});this['volumePipeline']=_0x52b193[_0x1bc2ba(0x89)]({'label':'mars3d\x20volume\x20shell\x20raymarch\x20pipeline','layout':_0x52b193[_0x1bc2ba(0x99)]({'bindGroupLayouts':[this['getSceneBindGroupLayout'](),this[_0x1bc2ba(0x81)](),this[_0x1bc2ba(0x86)]()]}),'vertex':{'module':_0x23a606,'entryPoint':_0x1bc2ba(0x96)},'fragment':{'module':_0x23a606,'entryPoint':_0x1bc2ba(0x8d),'targets':[{'format':this[_0x1bc2ba(0x84)](),'blend':premultipliedBlend()}]},'primitive':{'topology':_0x1bc2ba(0x94)}});},pipelineHookInstalled=!![];};export const createMars3dVolumeScene=async _0x237ba3=>{const _0x377988=_0x430924;installPipelineHook(),mars3dCanvases[_0x377988(0x9f)](_0x237ba3[_0x377988(0x9b)]);try{const _0x51fbbc=await createVolumeScene(_0x237ba3),_0x3060a0=_0x51fbbc[_0x377988(0x8c)]['bind'](_0x51fbbc);return _0x51fbbc[_0x377988(0x8c)]=()=>{const _0x567b0e=_0x377988;mars3dCanvases[_0x567b0e(0x90)](_0x237ba3[_0x567b0e(0x9b)]),_0x3060a0();},_0x51fbbc;}catch(_0x49de40){mars3dCanvases[_0x377988(0x90)](_0x237ba3[_0x377988(0x9b)]);throw _0x49de40;}};
1
+ function _0x357e(){const _0x23b8e6=['230586WucLjZ','one-minus-src-alpha','56FCAkPG','createPipelineLayout','11juGYCp','delete','triangle-list','getDevice','call','1615230TTNCMe','add','destroy','1081308WLNoNz','getTransferBindGroupLayout','createRenderPipeline','832377daxiQu','has','188596xErHBK','8KbEVnI','canvas','mars3d\x20volume\x20shell\x20raymarch\x20pipeline','483930rQoWIv','getSceneBindGroupLayout','getVolumeBindGroupLayout','14035310zjUZiX','createPipelines','getFormat','one','prototype','14VFIAmg','volumePipeline'];_0x357e=function(){return _0x23b8e6;};return _0x357e();}const _0x46019c=_0x3ed3;(function(_0x436231,_0x1d185b){const _0x134504=_0x3ed3,_0x4a8d0b=_0x436231();while(!![]){try{const _0x29ef98=parseInt(_0x134504(0xed))/0x1*(parseInt(_0x134504(0xec))/0x2)+parseInt(_0x134504(0xea))/0x3+parseInt(_0x134504(0xe7))/0x4+parseInt(_0x134504(0xe4))/0x5+-parseInt(_0x134504(0xdb))/0x6*(parseInt(_0x134504(0xd9))/0x7)+-parseInt(_0x134504(0xdd))/0x8*(-parseInt(_0x134504(0xf0))/0x9)+-parseInt(_0x134504(0xf3))/0xa*(parseInt(_0x134504(0xdf))/0xb);if(_0x29ef98===_0x1d185b)break;else _0x4a8d0b['push'](_0x4a8d0b['shift']());}catch(_0x22b577){_0x4a8d0b['push'](_0x4a8d0b['shift']());}}}(_0x357e,0x7f3fd));import{createVolumeScene}from'../volume-scene/createVolumeScene';import{WebgpuVolumeSceneRenderer}from'../volume-scene/rendering/webgpu/webgpuVolumeSceneRenderer';import{mars3dVolumeRaymarchSource}from'./mars3dRaymarchShader';function _0x3ed3(_0x2c6852,_0x371a5f){const _0x357e4e=_0x357e();return _0x3ed3=function(_0x3ed3cc,_0x6badf9){_0x3ed3cc=_0x3ed3cc-0xd9;let _0x1796cb=_0x357e4e[_0x3ed3cc];return _0x1796cb;},_0x3ed3(_0x2c6852,_0x371a5f);}const premultipliedBlend=()=>({'color':{'srcFactor':_0x46019c(0xf6),'dstFactor':_0x46019c(0xdc),'operation':_0x46019c(0xe5)},'alpha':{'srcFactor':'one','dstFactor':_0x46019c(0xdc),'operation':_0x46019c(0xe5)}}),rendererPrototype=WebgpuVolumeSceneRenderer[_0x46019c(0xf7)],mars3dCanvases=new WeakSet();let pipelineHookInstalled=![];const installPipelineHook=()=>{const _0x57ebe2=_0x46019c;if(pipelineHookInstalled)return;const _0x4112dd=rendererPrototype[_0x57ebe2(0xf4)];rendererPrototype[_0x57ebe2(0xf4)]=function _0x5eae15(){const _0x3ce5b2=_0x57ebe2;_0x4112dd[_0x3ce5b2(0xe3)](this);if(!this[_0x3ce5b2(0xee)]||!mars3dCanvases[_0x3ce5b2(0xeb)](this[_0x3ce5b2(0xee)]))return;const _0x1b1c75=this[_0x3ce5b2(0xe2)](),_0x48acfb=_0x1b1c75['createShaderModule']({'label':'mars3d\x20volume\x20shell\x20raymarch\x20shader','code':mars3dVolumeRaymarchSource});this[_0x3ce5b2(0xda)]=_0x1b1c75[_0x3ce5b2(0xe9)]({'label':_0x3ce5b2(0xef),'layout':_0x1b1c75[_0x3ce5b2(0xde)]({'bindGroupLayouts':[this[_0x3ce5b2(0xf1)](),this[_0x3ce5b2(0xf2)](),this[_0x3ce5b2(0xe8)]()]}),'vertex':{'module':_0x48acfb,'entryPoint':'vertexMain'},'fragment':{'module':_0x48acfb,'entryPoint':'fragmentMain','targets':[{'format':this[_0x3ce5b2(0xf5)](),'blend':premultipliedBlend()}]},'primitive':{'topology':_0x3ce5b2(0xe1)}});},pipelineHookInstalled=!![];};export const createMars3dVolumeScene=async _0x558b52=>{const _0x37f3e6=_0x46019c;installPipelineHook(),mars3dCanvases[_0x37f3e6(0xe5)](_0x558b52[_0x37f3e6(0xee)]);try{const _0x91beb=await createVolumeScene(_0x558b52),_0x496af6=_0x91beb[_0x37f3e6(0xe6)]['bind'](_0x91beb);return _0x91beb[_0x37f3e6(0xe6)]=()=>{const _0x5e6289=_0x37f3e6;mars3dCanvases[_0x5e6289(0xe0)](_0x558b52[_0x5e6289(0xee)]),_0x496af6();},_0x91beb;}catch(_0x2b82a3){mars3dCanvases[_0x37f3e6(0xe0)](_0x558b52[_0x37f3e6(0xee)]);throw _0x2b82a3;}};