web3dlink 2.1.16 → 2.1.17
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.
- package/dist/createGameSession-Ce1m5HFi.js +4132 -0
- package/dist/createGameSession-Ce1m5HFi.js.map +1 -0
- package/dist/linkFlowLarkSR-fa6gb2wM.js +105 -0
- package/dist/linkFlowLarkSR-fa6gb2wM.js.map +1 -0
- package/dist/linkFlowzsStream-BzZf51cL.js +195 -0
- package/dist/linkFlowzsStream-BzZf51cL.js.map +1 -0
- package/dist/web3dlink-larksr.js +3 -0
- package/dist/web3dlink-zs.js +3 -0
- package/dist/web3dlink.d.ts +91 -0
- package/dist/web3dlink.js +4 -24742
- package/package.json +25 -2
- package/dist/web3dlink.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createGameSession-Ce1m5HFi.js","names":["pkg","NAMED_COLORS","validateOptionalBoolean","generateUniqueId","generateUniqueId","generateUniqueId","generateUniqueId","offset","close","create","close","setOpacity","onMouseClick","offMouseClick","validateUeCoordinates"],"sources":["../package.json","../version.js","../api/createNamespaceApi.js","../baseConfig/color/colorCodeData.json","../baseConfig/color/color.js","../baseConfig/validateHelpers.js","../baseConfig/validators.js","../api/camera/flyTo.js","../api/camera/focusToID.js","../api/camera/focusToPoint.js","../api/camera/lookAtID.js","../api/camera/lookAtPoint.js","../api/camera/config.js","../api/camera/helpers.js","../api/camera/aroundMode.js","../api/camera/dragMode.js","../api/camera/firstPersonMode.js","../api/camera/viewLock.js","../api/camera/cameraApi.js","../api/cesium/helpers.js","../api/cesium/addMultiLine.js","../api/cesium/addMultiPolygon.js","../api/cesium/removeDrawn.js","../api/cesium/removeAllDrawn.js","../api/cesium/addTexturedQuad.js","../api/cesium/startMouseDraw.js","../api/cesium/stopMouseDraw.js","../api/cesium/getDrawnInfoByName.js","../api/cesium/getAllDrawnInfo.js","../api/cesium/measureDistance.js","../api/cesium/measureArea.js","../api/cesium/cesiumApi.js","../api/marker/helpers.js","../api/marker/iconMarker.js","../api/marker/followMarker.js","../api/marker/removeMarker.js","../api/marker/removeAllMarker.js","../api/marker/showMarker.js","../api/marker/showAllMarker.js","../api/marker/hideMarker.js","../api/marker/hideAllMarker.js","../api/marker/iconUrlMarker.js","../api/marker/addClustering.js","../api/marker/removeClustering.js","../api/marker/secondMarker.js","../api/marker/markerApi.js","../api/floodPeak/getList.js","../api/floodPeak/helpers.js","../api/floodPeak/record.js","../api/floodPeak/offset.js","../api/floodPeak/offsetReset.js","../api/floodPeak/setText.js","../api/floodPeak/close.js","../api/floodPeak/cameraFollow.js","../api/floodPeak/floodPeakApi.js","../api/animation/play.js","../api/animation/carryOn.js","../api/animation/pause.js","../api/animation/stop.js","../api/animation/jumpToFrame.js","../api/animation/setPlaybackFrameRate.js","../api/animation/onData.js","../api/animation/animationApi.js","../api/hydrodynamicForce/create.js","../api/hydrodynamicForce/waterFlow.js","../api/hydrodynamicForce/waterDepth.js","../api/hydrodynamicForce/sediment.js","../api/hydrodynamicForce/materialParams.js","../api/hydrodynamicForce/close.js","../api/hydrodynamicForce/hydrodynamicForceApi.js","../api/sceneModel/getById.js","../api/sceneModel/getByTag.js","../api/sceneModel/helpers.js","../api/sceneModel/setTransform.js","../api/sceneModel/clearTransform.js","../api/sceneModel/offset.js","../api/sceneModel/clearOffset.js","../api/sceneModel/show.js","../api/sceneModel/hide.js","../api/sceneModel/showOnly.js","../api/sceneModel/highLight.js","../api/sceneModel/removeHighLight.js","../api/sceneModel/setOpacity.js","../api/sceneModel/outline.js","../api/sceneModel/removeOutline.js","../api/sceneModel/removeAllOutline.js","../api/sceneModel/openSlice.js","../api/sceneModel/closeSlice.js","../api/sceneModel/closeAllSlice.js","../api/sceneModel/sceneModelApi.js","../api/atmosphericEffects/time.js","../api/atmosphericEffects/weather.js","../api/atmosphericEffects/atmosphericEffectsApi.js","../api/tool/onMouseClick.js","../api/tool/offMouseClick.js","../api/tool/onDistance.js","../api/tool/offDistance.js","../api/tool/editConfigFile.js","../api/tool/toolApi.js","../api/line/helpers.js","../api/line/addLine.js","../api/line/clearLine.js","../api/line/clearAllLine.js","../api/line/lineApi.js","../api/level/switch.js","../api/level/levelApi.js","../api/vtk/getInfo.js","../api/vtk/getFieldRange.js","../api/vtk/helpers.js","../api/vtk/create.js","../api/vtk/close.js","../api/vtk/allClose.js","../api/vtk/clearCacheByUrl.js","../api/vtk/clearAllCache.js","../api/vtk/setField.js","../api/vtk/setMode.js","../api/vtk/setCellOpacity.js","../api/vtk/setColorRange.js","../api/vtk/setColorBar.js","../api/vtk/setOpacity.js","../api/vtk/setDisplacementScale.js","../api/vtk/closeDisplacementScale.js","../api/vtk/onMouseClick.js","../api/vtk/offMouseClick.js","../api/vtk/playSequence.js","../api/vtk/pauseSequence.js","../api/vtk/stopSequence.js","../api/vtk/setFrame.js","../api/vtk/setPlaybackSpeed.js","../api/vtk/clearSequence.js","../api/vtk/clearAllSequence.js","../api/vtk/vtkApi.js","../baseConfig/logger.js","../baseConfig/responses.js","../api/other/otherApi.js","../api/index.js","../commFlow.js","../createGameSession.js"],"sourcesContent":["{\n \"name\": \"web3dlink\",\n \"version\": \"2.1.17\",\n \"description\": \"LarkSR / ZS 推流 GameAPI SDK\",\n \"type\": \"module\",\n \"main\": \"./dist/web3dlink.js\",\n \"module\": \"./dist/web3dlink.js\",\n \"types\": \"./dist/web3dlink.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/web3dlink.d.ts\",\n \"import\": \"./dist/web3dlink.js\",\n \"default\": \"./dist/web3dlink.js\"\n },\n \"./larksr\": {\n \"types\": \"./dist/web3dlink.d.ts\",\n \"import\": \"./dist/web3dlink-larksr.js\",\n \"default\": \"./dist/web3dlink-larksr.js\"\n },\n \"./zs\": {\n \"types\": \"./dist/web3dlink.d.ts\",\n \"import\": \"./dist/web3dlink-zs.js\",\n \"default\": \"./dist/web3dlink-zs.js\"\n }\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"build\": \"node ./scripts/build.mjs\",\n \"sync:dts\": \"node ./scripts/sync-dts.mjs\",\n \"prepublishOnly\": \"npm run build\"\n },\n \"keywords\": [\n \"larksr\",\n \"zs-stream\",\n \"game-api\",\n \"streaming\",\n \"web3dlink\"\n ],\n \"license\": \"MIT\",\n \"peerDependencies\": {\n \"larksr_websdk\": \"^3.3.119\"\n },\n \"peerDependenciesMeta\": {\n \"larksr_websdk\": {\n \"optional\": true\n }\n },\n \"sideEffects\": [\n \"./dist/web3dlink.js\",\n \"./dist/web3dlink-larksr.js\",\n \"./dist/web3dlink-zs.js\",\n \"./zs-stream-parent.js\",\n \"./version.js\"\n ]\n}\n","import pkg from './package.json';\r\n\r\n/** 当前 web3dlink 插件版本 */\r\nexport const version = pkg.version;\r\n\r\nconst logStyle = 'background: #22c55e; color: #fff; padding: 2px 6px; border-radius: 4px; font-weight: 600;';\r\n\r\n/**\r\n * 是否静默版本日志:\r\n * - globalThis.WEB3DLINK_SILENT = true\r\n * - 或 URL ?web3dlink_silent=1\r\n * - 生产构建默认不刷屏时也可在业务入口设置 WEB3DLINK_SILENT\r\n */\r\nfunction shouldLogVersion() {\r\n if (typeof globalThis !== 'undefined' && globalThis.WEB3DLINK_SILENT) return false;\r\n try {\r\n if (typeof location !== 'undefined') {\r\n const q = new URLSearchParams(location.search);\r\n if (q.get('web3dlink_silent') === '1') return false;\r\n }\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n return true;\r\n}\r\n\r\nif (shouldLogVersion()) {\r\n console.log(`%c [web3dlink] version: ${version} `, logStyle);\r\n console.log('%c [larksr_websdk] peer: ^3.3.119 ', logStyle);\r\n}\r\n","/**\n * 命名空间 API 工厂:统一 _handleSend(校验 → 下发)\n * @param {string} prefix 命令前缀,如 'camera' / 'VTK'\n * @param {Record<string, Function>} validators 方法名 → 校验函数\n * @param {{ getOptions?: (method: string, params: object) => object }} [options]\n */\nexport function createNamespaceApi(prefix, validators = {}, options = {}) {\n class NamespaceApi {\n constructor(commandManager) {\n this.commandManager = commandManager;\n }\n\n _handleSend(minorMethod, params = {}) {\n const command = `${prefix}.${minorMethod}`;\n const validate = validators[minorMethod];\n const validationResult = validate\n ? validate(params)\n : { errors: [], normalized: params };\n const sendOptions = options.getOptions?.(minorMethod, params) || {};\n return this.commandManager.sendWithDefault(validationResult, command, sendOptions);\n }\n }\n\n return NamespaceApi;\n}\n","{\r\n \"lightpink\": \"#FFB6C1\",\r\n \"pink\": \"#FFC0CB\",\r\n \"crimson\": \"#DC143C\",\r\n \"lavenderblush\": \"#FFF0F5\",\r\n \"palevioletred\": \"#DB7093\",\r\n \"hotpink\": \"#FF69B4\",\r\n \"deeppink\": \"#FF1493\",\r\n \"mediumvioletred\": \"#C71585\",\r\n \"orchid\": \"#DA70D6\",\r\n \"thistle\": \"#D8BFD8\",\r\n \"plum\": \"#DDA0DD\",\r\n \"violet\": \"#EE82EE\",\r\n \"magenta\": \"#FF00FF\",\r\n \"fuchsia\": \"#FF00FF\",\r\n \"darkmagenta\": \"#8B008B\",\r\n \"purple\": \"#800080\",\r\n \"mediumorchid\": \"#BA55D3\",\r\n \"darkvoilet\": \"#9400D3\",\r\n \"darkorchid\": \"#9932CC\",\r\n \"indigo\": \"#4B0082\",\r\n \"blueviolet\": \"#8A2BE2\",\r\n \"mediumpurple\": \"#9370DB\",\r\n \"mediumslateblue\": \"#7B68EE\",\r\n \"slateblue\": \"#6A5ACD\",\r\n \"darkslateblue\": \"#483D8B\",\r\n \"lavender\": \"#E6E6FA\",\r\n \"ghostwhite\": \"#F8F8FF\",\r\n \"blue\": \"#0000FF\",\r\n \"mediumblue\": \"#0000CD\",\r\n \"midnightblue\": \"#191970\",\r\n \"darkblue\": \"#00008B\",\r\n \"navy\": \"#000080\",\r\n \"royalblue\": \"#4169E1\",\r\n \"cornflowerblue\": \"#6495ED\",\r\n \"lightsteelblue\": \"#B0C4DE\",\r\n \"lightslategray\": \"#778899\",\r\n \"slategray\": \"#708090\",\r\n \"doderblue\": \"#1E90FF\",\r\n \"aliceblue\": \"#F0F8FF\",\r\n \"steelblue\": \"#4682B4\",\r\n \"lightskyblue\": \"#87CEFA\",\r\n \"skyblue\": \"#87CEEB\",\r\n \"deepskyblue\": \"#00BFFF\",\r\n \"lightblue\": \"#ADD8E6\",\r\n \"powderblue\": \"#B0E0E6\",\r\n \"cadetblue\": \"#5F9EA0\",\r\n \"azure\": \"#F0FFFF\",\r\n \"lightcyan\": \"#E1FFFF\",\r\n \"paleturquoise\": \"#AFEEEE\",\r\n \"cyan\": \"#00FFFF\",\r\n \"aqua\": \"#D4F2E7\",\r\n \"darkturquoise\": \"#00CED1\",\r\n \"darkslategray\": \"#2F4F4F\",\r\n \"darkcyan\": \"#008B8B\",\r\n \"teal\": \"#008080\",\r\n \"mediumturquoise\": \"#48D1CC\",\r\n \"lightseagreen\": \"#20B2AA\",\r\n \"turquoise\": \"#40E0D0\",\r\n \"auqamarin\": \"#7FFFAA\",\r\n \"mediumaquamarine\": \"#00FA9A\",\r\n \"mediumspringgreen\": \"#00FF7F\",\r\n \"mintcream\": \"#F5FFFA\",\r\n \"springgreen\": \"#3CB371\",\r\n \"seagreen\": \"#2E8B57\",\r\n \"honeydew\": \"#F0FFF0\",\r\n \"lightgreen\": \"#90EE90\",\r\n \"palegreen\": \"#98FB98\",\r\n \"darkseagreen\": \"#8FBC8F\",\r\n \"limegreen\": \"#32CD32\",\r\n \"lime\": \"#00FF00\",\r\n \"forestgreen\": \"#228B22\",\r\n \"green\": \"#008000\",\r\n \"darkgreen\": \"#006400\",\r\n \"chartreuse\": \"#7FFF00\",\r\n \"lawngreen\": \"#7CFC00\",\r\n \"greenyellow\": \"#ADFF2F\",\r\n \"olivedrab\": \"#556B2F\",\r\n \"beige\": \"#F5F5DC\",\r\n \"lightgoldenrodyellow\": \"#FAFAD2\",\r\n \"ivory\": \"#FFFFF0\",\r\n \"lightyellow\": \"#FFFFE0\",\r\n \"yellow\": \"#FFFF00\",\r\n \"olive\": \"#808000\",\r\n \"darkkhaki\": \"#BDB76B\",\r\n \"lemonchiffon\": \"#FFFACD\",\r\n \"palegodenrod\": \"#EEE8AA\",\r\n \"khaki\": \"#F0E68C\",\r\n \"gold\": \"#FFD700\",\r\n \"cornislk\": \"#FFF8DC\",\r\n \"goldenrod\": \"#DAA520\",\r\n \"floralwhite\": \"#FFFAF0\",\r\n \"oldlace\": \"#FDF5E6\",\r\n \"wheat\": \"#F5DEB3\",\r\n \"moccasin\": \"#FFE4B5\",\r\n \"orange\": \"#FFA500\",\r\n \"papayawhip\": \"#FFEFD5\",\r\n \"blanchedalmond\": \"#FFEBCD\",\r\n \"navajowhite\": \"#FFDEAD\",\r\n \"antiquewhite\": \"#FAEBD7\",\r\n \"tan\": \"#D2B48C\",\r\n \"brulywood\": \"#DEB887\",\r\n \"bisque\": \"#FFE4C4\",\r\n \"darkorange\": \"#FF8C00\",\r\n \"linen\": \"#FAF0E6\",\r\n \"peru\": \"#CD853F\",\r\n \"peachpuff\": \"#FFDAB9\",\r\n \"sandybrown\": \"#F4A460\",\r\n \"chocolate\": \"#D2691E\",\r\n \"saddlebrown\": \"#8B4513\",\r\n \"seashell\": \"#FFF5EE\",\r\n \"sienna\": \"#A0522D\",\r\n \"lightsalmon\": \"#FFA07A\",\r\n \"coral\": \"#FF7F50\",\r\n \"orangered\": \"#FF4500\",\r\n \"darksalmon\": \"#E9967A\",\r\n \"tomato\": \"#FF6347\",\r\n \"mistyrose\": \"#FFE4E1\",\r\n \"salmon\": \"#FA8072\",\r\n \"snow\": \"#FFFAFA\",\r\n \"lightcoral\": \"#F08080\",\r\n \"rosybrown\": \"#BC8F8F\",\r\n \"indianred\": \"#CD5C5C\",\r\n \"red\": \"#FF0000\",\r\n \"brown\": \"#A52A2A\",\r\n \"firebrick\": \"#B22222\",\r\n \"darkred\": \"#8B0000\",\r\n \"maroon\": \"#800000\",\r\n \"white\": \"#FFFFFF\",\r\n \"whitesmoke\": \"#F5F5F5\",\r\n \"gainsboro\": \"#DCDCDC\",\r\n \"lightgrey\": \"#D3D3D3\",\r\n \"silver\": \"#C0C0C0\",\r\n \"darkgray\": \"#A9A9A9\",\r\n \"gray\": \"#808080\",\r\n \"dimgray\": \"#696969\",\r\n \"black\": \"#000000\"\r\n}","import NAMED_COLORS from \"./colorCodeData.json\"\r\n\r\n// 颜色校验并转换为八位十六进制格式\r\nfunction analyzeColorValue(inputColor) {\r\n if (!inputColor || typeof inputColor !== 'string') {\r\n return false;\r\n }\r\n\r\n // 忽略大小写\r\n const color = inputColor.trim().toLowerCase();\r\n\r\n // 颜色校验正则表达式\r\n const hexColor3 = /^#?([0-9A-Fa-f]{3})$/; // 3位十六进制 如:'#000', '#fff'\r\n const hexColor6 = /^#?([0-9A-Fa-f]{6})$/; // 6位十六进制 如:'#006e54'\r\n const hexColor8 = /^#?([0-9A-Fa-f]{8})$/; // 8位十六进制 如:'#006e54ff'\r\n const rgbColorRules = /^rgb\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*\\)$/;\r\n const rgbaColorRules = /^rgba\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(0|1|0\\.\\d+)\\s*\\)$/;\r\n const simpleRgbaRules = /^(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)$/; // 简单的R,G,B,A格式\r\n\r\n // 8位十六进制颜色 - 直接返回(已经是目标格式)\r\n if (hexColor8.test(color)) {\r\n const hex = color.replace('#', '').toUpperCase();\r\n return `#${hex}`;\r\n }\r\n\r\n // 6位十六进制颜色 - 添加FF作为alpha值\r\n if (hexColor6.test(color)) {\r\n const hex = color.replace('#', '').toUpperCase();\r\n return `#${hex}FF`;\r\n }\r\n\r\n // 3位十六进制颜色 - 扩展为6位再添加FF\r\n if (hexColor3.test(color)) {\r\n const hex = color.replace('#', '');\r\n const expandedHex = hex.split('').map(char => char + char).join('').toUpperCase();\r\n return `#${expandedHex}FF`;\r\n }\r\n\r\n // 命名颜色转换 如:'red', 'green'\r\n if (NAMED_COLORS[color]) {\r\n const namedColorHex = NAMED_COLORS[color].replace('#', '').toUpperCase();\r\n // 如果命名颜色已经是8位,直接返回;否则添加FF\r\n if (namedColorHex.length === 8) {\r\n return `#${namedColorHex}`;\r\n } else if (namedColorHex.length === 6) {\r\n return `#${namedColorHex}FF`;\r\n }\r\n }\r\n\r\n // rgb转八位十六进制\r\n if (rgbColorRules.test(color)) {\r\n const rgb = color.match(rgbColorRules);\r\n return convertRgbToHex8(rgb);\r\n }\r\n\r\n // rgba转八位十六进制\r\n if (rgbaColorRules.test(color)) {\r\n const rgba = color.match(rgbaColorRules);\r\n return convertRgbaToHex8(rgba);\r\n }\r\n\r\n // 简单的R,G,B,A格式转换 如:'1,0,0,1' 或 '255,0,0,1'\r\n if (simpleRgbaRules.test(color)) {\r\n const rgba = color.match(simpleRgbaRules);\r\n return convertSimpleRgbaToHex8(rgba);\r\n }\r\n\r\n return false;\r\n}\r\n\r\n// RGB转八位十六进制\r\nfunction convertRgbToHex8(rgbMatch) {\r\n if (!rgbMatch || rgbMatch.length < 4) return false;\r\n\r\n const [, r, g, b] = rgbMatch;\r\n const red = parseInt(r);\r\n const green = parseInt(g);\r\n const blue = parseInt(b);\r\n\r\n // 校验RGB值范围\r\n if (red < 0 || red > 255 || green < 0 || green > 255 || blue < 0 || blue > 255) {\r\n return false;\r\n }\r\n\r\n const hex = ((red << 16) | (green << 8) | blue).toString(16).padStart(6, '0').toUpperCase();\r\n return `#${hex}FF`; // 默认alpha为FF(完全不透明)\r\n}\r\n\r\n// RGBA转八位十六进制\r\nfunction convertRgbaToHex8(rgbaMatch) {\r\n if (!rgbaMatch || rgbaMatch.length < 5) return false;\r\n\r\n const [, r, g, b, a] = rgbaMatch;\r\n const red = parseInt(r);\r\n const green = parseInt(g);\r\n const blue = parseInt(b);\r\n const alpha = parseFloat(a);\r\n\r\n // 校验RGBA值范围\r\n if (red < 0 || red > 255 || green < 0 || green > 255 || blue < 0 || blue > 255 || alpha < 0 || alpha > 1) {\r\n return false;\r\n }\r\n\r\n const hex = ((red << 16) | (green << 8) | blue).toString(16).padStart(6, '0').toUpperCase();\r\n const alphaHex = Math.round(alpha * 255).toString(16).padStart(2, '0').toUpperCase();\r\n return `#${hex}${alphaHex}`;\r\n}\r\n\r\n// 简单R,G,B,A格式转八位十六进制 如:'1,0,0,1' 或 '255,0,0,1'\r\nfunction convertSimpleRgbaToHex8(rgbaMatch) {\r\n if (!rgbaMatch || rgbaMatch.length < 5) return false;\r\n\r\n const [, r, g, b, a] = rgbaMatch;\r\n const red = parseFloat(r);\r\n const green = parseFloat(g);\r\n const blue = parseFloat(b);\r\n const alpha = parseFloat(a);\r\n\r\n // 判断是0-1范围还是0-255范围\r\n const isNormalized = red <= 1 && green <= 1 && blue <= 1;\r\n \r\n let finalRed, finalGreen, finalBlue;\r\n \r\n if (isNormalized) {\r\n // 0-1范围,转换为0-255\r\n if (red < 0 || red > 1 || green < 0 || green > 1 || blue < 0 || blue > 1) {\r\n return false;\r\n }\r\n finalRed = Math.round(red * 255);\r\n finalGreen = Math.round(green * 255);\r\n finalBlue = Math.round(blue * 255);\r\n } else {\r\n // 0-255范围\r\n if (red < 0 || red > 255 || green < 0 || green > 255 || blue < 0 || blue > 255) {\r\n return false;\r\n }\r\n finalRed = Math.round(red);\r\n finalGreen = Math.round(green);\r\n finalBlue = Math.round(blue);\r\n }\r\n\r\n // Alpha值始终是0-1范围\r\n if (alpha < 0 || alpha > 1) {\r\n return false;\r\n }\r\n\r\n const hex = ((finalRed << 16) | (finalGreen << 8) | finalBlue).toString(16).padStart(6, '0').toUpperCase();\r\n const alphaHex = Math.round(alpha * 255).toString(16).padStart(2, '0').toUpperCase();\r\n return `#${hex}${alphaHex}`;\r\n}\r\n\r\n// 保留原有的 isValidNumber 函数以保持向后兼容(已弃用,建议使用 analyzeColorValue)\r\nfunction isValidNumber(rgb) {\r\n const flag = rgb && rgb.slice(1).every(value => value >= 0 && value <= 255)\r\n if (flag) {\r\n const [r, g, b, a] = rgb.slice(1).map((x, i) => i < 3 ? parseInt(x) : parseFloat(x));\r\n const hex = ((r << 16) | (g << 8) | b).toString(16).padStart(6, '0');\r\n if (a !== undefined) {\r\n const alphaHex = Math.round(a * 255).toString(16).padStart(2, '0');\r\n return `#${hex}${alphaHex}`.toUpperCase();\r\n } else {\r\n return `#${hex}FF`.toUpperCase(); // 默认添加FF作为alpha值\r\n }\r\n } else {\r\n return false\r\n }\r\n}\r\nexport { analyzeColorValue };","/** 按 a.b.c 路径写入对象 */\nexport function setNestedValue(obj, path, val) {\n if (!obj || typeof obj !== 'object') return;\n const keys = path.split('.');\n const lastKey = keys.pop();\n let current = obj;\n for (const key of keys) {\n if (!(key in current) || typeof current[key] !== 'object' || current[key] === null) {\n current[key] = {};\n }\n current = current[key];\n }\n current[lastKey] = val;\n}\n\n/**\n * 将校验通过的值写回 normalized,或走 assign 回调\n * @param {{ normalized?: object, field?: string, assign?: Function }} ctx\n * @param {*} value\n */\nexport function applyFieldValue(ctx, value) {\n const { normalized, field, assign } = ctx || {};\n if (normalized && field) {\n if (field.includes('.')) setNestedValue(normalized, field, value);\n else normalized[field] = value;\n } else if (typeof assign === 'function') {\n assign(value);\n }\n}\n","import { analyzeColorValue } from './color/color.js';\nimport { applyFieldValue } from './validateHelpers.js';\n\n// 校验数字\nexport function isValidNumber(value, min = null, max = null) {\n if (value === undefined || value === null) return false;\n if (typeof value !== 'number' || isNaN(value)) return false;\n if (min !== null && value < min) return false;\n if (max !== null && value > max) return false;\n return true;\n}\n// 校验坐标\nexport function validateCoordinatesRequired(coordinates) {\n const e = [];\n if (!coordinates || !Array.isArray(coordinates)) {\n e.push('[coordinates] 为必填项,且必须是数组类型');\n } else if (coordinates.length < 3) {\n e.push('[coordinates]包含:[经度, 纬度, 高程]');\n } else {\n const [Longitude, Latitude, Altitude] = coordinates;\n if (!isValidNumber(Longitude, -180, 180)) {\n e.push('[coordinates[0]]经度取值范围:-180~180');\n }\n if (!isValidNumber(Latitude, -90, 90)) {\n e.push('[coordinates[1]]纬度取值范围:-90~90');\n }\n if (!isValidNumber(Altitude)) {\n e.push('[coordinates[2]]高度必须是数字类型');\n }\n }\n return e;\n}\n// 校验必填Number类型\nexport function validateRequiredNumber(...args) {\n let config;\n if (args.length === 1 && typeof args[0] === 'object' && !Array.isArray(args[0])) {\n config = args[0] || {};\n } else {\n const [value, field, thirdArg, fourthArg, fifthArg] = args;\n if (thirdArg && typeof thirdArg === 'object' && !Array.isArray(thirdArg)) {\n config = { value, field, ...thirdArg };\n } else {\n config = { value, field, min: thirdArg, max: fourthArg, normalized: fifthArg };\n }\n }\n\n const {\n value,\n field,\n label,\n required = true,\n min = null,\n max = null,\n normalized,\n defaultValue,\n assign\n } = config;\n\n const resolvedField = field || label || 'field';\n const resolvedLabel = label || resolvedField;\n const e = [];\n \n // 检查值是否存在(undefined、null、空字符串都视为无值)\n const hasValue = !(value === undefined || value === null || value === '');\n\n const applyValue = (numValue) => {\n\n applyFieldValue({ normalized, field: resolvedField, assign }, numValue)\n };\n\n // 如果没有值,进行必填校验\n if (!hasValue) {\n if (required) {\n e.push(`[${resolvedLabel}]为必填项`);\n } else if (defaultValue !== undefined && defaultValue !== null) {\n // 对于数字类型,0 是有效的默认值\n const numDefault = typeof defaultValue === 'number' ? defaultValue : Number(defaultValue);\n if (!Number.isNaN(numDefault)) {\n applyValue(numDefault);\n }\n }\n return e;\n }\n\n // 如果值为 null,也报错(因为 null 不是有效的数字值)\n if (value === null) {\n e.push(`[${resolvedLabel}]不能为null`);\n return e;\n }\n\n // 校验数字类型和范围\n if (!isValidNumber(value, min, max)) {\n if (min !== null && max !== null) {\n e.push(`[${resolvedLabel}]取值范围:${min}~${max}`);\n } else if (min !== null) {\n e.push(`[${resolvedLabel}]必须≥${min}`);\n } else if (max !== null) {\n e.push(`[${resolvedLabel}]必须≤${max}`);\n } else {\n e.push(`[${resolvedLabel}]必须是数字类型`);\n }\n } else {\n // 验证通过,设置值\n applyValue(value);\n }\n return e;\n}\n// 校验可选Number类型\nexport function validateOptionalNumber(...args) {\n let config;\n if (args.length === 1 && typeof args[0] === 'object' && !Array.isArray(args[0])) {\n config = args[0] || {};\n } else {\n const [value, field, min = null, max = null] = args;\n config = { value, field, min, max };\n }\n\n const {\n value,\n field,\n label,\n min = null,\n max = null,\n normalized,\n defaultValue,\n assign\n } = config;\n\n const resolvedField = field || label || 'field';\n const resolvedLabel = label || resolvedField;\n const e = [];\n const hasValue = !(value === undefined || value === null || value === '');\n\n const applyValue = (numValue) => {\n\n applyFieldValue({ normalized, field: resolvedField, assign }, numValue)\n };\n\n if (!hasValue) {\n if (defaultValue !== undefined && defaultValue !== null) {\n // 对于数字类型,0 是有效的默认值,所以不能检查 !== ''\n const numDefault = typeof defaultValue === 'number' ? defaultValue : Number(defaultValue);\n if (!Number.isNaN(numDefault)) {\n const fallback = Array.isArray(defaultValue)\n ? [...defaultValue]\n : (defaultValue && typeof defaultValue === 'object')\n ? { ...defaultValue }\n : defaultValue;\n normalized[resolvedField] = fallback;\n }\n }\n return e;\n }\n\n if (!isValidNumber(value, min, max)) {\n if (min !== null && max !== null) {\n e.push(`[${resolvedLabel}]取值范围:${min}~${max}`);\n } else if (min !== null) {\n e.push(`[${resolvedLabel}]必须≥${min}`);\n } else if (max !== null) {\n e.push(`[${resolvedLabel}]必须≤${max}`);\n } else {\n e.push(`[${resolvedLabel}]必须是数字类型`);\n }\n } else {\n // 验证通过,设置值\n applyValue(value);\n }\n return e;\n}\n\n// 校验必填String类型\nexport function validateRequiredString(...args) {\n let config;\n if (args.length === 1 && typeof args[0] === 'object' && !Array.isArray(args[0])) {\n config = args[0] || {};\n } else {\n const [fieldName, value] = args;\n config = { field: fieldName, value };\n }\n\n const {\n field,\n label,\n value,\n normalized,\n defaultValue,\n assign\n } = config;\n\n const resolvedField = field || label || 'field';\n const resolvedLabel = label || resolvedField;\n const e = [];\n const hasValue = !(value === undefined || value === null || value === '');\n\n const applyValue = (strValue) => {\n\n applyFieldValue({ normalized, field: resolvedField, assign }, strValue)\n };\n\n if (!hasValue) {\n e.push(`[${resolvedLabel}]为必填项`);\n // 即使必填项缺失,如果有默认值也设置\n if (defaultValue !== undefined && defaultValue !== null) {\n if (typeof defaultValue === 'string') {\n applyValue(defaultValue);\n }\n }\n return e;\n }\n\n if (typeof value !== 'string') {\n e.push(`[${resolvedLabel}]必须是字符串类型`);\n } else if (value.trim() === '') {\n e.push(`[${resolvedLabel}]不能为空字符串`);\n } else {\n // 验证通过,设置值\n applyValue(value);\n }\n return e;\n}\n\n// 校验可选String类型\nexport function validateOptionalString(...args) {\n let config;\n if (args.length === 1 && typeof args[0] === 'object' && !Array.isArray(args[0])) {\n config = args[0] || {};\n } else {\n const [fieldName, value] = args;\n config = { field: fieldName, value };\n }\n\n const {\n field,\n label,\n value,\n normalized,\n defaultValue,\n assign\n } = config;\n\n const resolvedField = field || label || 'field';\n const resolvedLabel = label || resolvedField;\n const e = [];\n const hasValue = !(value === undefined || value === null || value === '');\n\n const applyValue = (strValue) => {\n\n applyFieldValue({ normalized, field: resolvedField, assign }, strValue)\n };\n\n if (!hasValue) {\n if (defaultValue !== undefined && defaultValue !== null) {\n // 允许空字符串作为有效的默认值\n if (typeof defaultValue === 'string') {\n applyValue(defaultValue);\n }\n }\n return e;\n }\n\n if (typeof value !== 'string') {\n e.push(`[${resolvedLabel}]必须是字符串类型`);\n } else if (value.trim() === '') {\n e.push(`[${resolvedLabel}]不能为空字符串`);\n } else {\n // 验证通过,设置值\n applyValue(value);\n }\n return e;\n}\n\n// 校验可选Array类型\nexport function validateOptionalArray(...args) {\n let config;\n if (args.length === 1 && typeof args[0] === 'object' && !Array.isArray(args[0])) {\n config = args[0] || {};\n } else {\n const [fieldName, value, thirdArg, fourthArg] = args;\n if (thirdArg && typeof thirdArg === 'object' && !Array.isArray(thirdArg)) {\n config = { label: fieldName, value, ...thirdArg };\n } else {\n config = { label: fieldName, value, length: thirdArg, minLength: fourthArg };\n }\n }\n\n const {\n label,\n field,\n value,\n required = false,\n normalized,\n defaultValue,\n assign,\n length,\n minLength,\n maxLength\n } = config;\n\n const resolvedField = field || label || 'field';\n const resolvedLabel = label || resolvedField;\n const errors = [];\n const hasValue = !(value === undefined || value === null);\n\n const applyValue = (arr) => {\n const cloned = Array.isArray(arr) ? [...arr] : arr;\n \n applyFieldValue({ normalized, field: resolvedField, assign }, cloned)\n };\n\n if (!hasValue) {\n if (required) {\n errors.push(`[${resolvedLabel}]为必填项`);\n } else if (defaultValue !== undefined) {\n if (!Array.isArray(defaultValue)) {\n errors.push(`[${resolvedLabel}] 默认值必须是数组类型`);\n } else {\n applyValue(defaultValue);\n }\n }\n return errors;\n }\n\n if (!Array.isArray(value)) {\n errors.push(`[${resolvedLabel}]必须是数组类型`);\n return errors;\n }\n\n const expectedLength = typeof length === 'number' ? length : undefined;\n if (expectedLength !== undefined && value.length !== expectedLength) {\n errors.push(`[${resolvedLabel}]必须是长度为${expectedLength}的数组`);\n }\n\n if (typeof minLength === 'number' && value.length < minLength) {\n errors.push(`[${resolvedLabel}]长度至少为${minLength}`);\n }\n\n if (typeof maxLength === 'number' && value.length > maxLength) {\n errors.push(`[${resolvedLabel}]长度不能超过${maxLength}`);\n }\n\n if (errors.length === 0) {\n applyValue(value);\n }\n\n return errors;\n}\n\n// 校验可选三维向量数组 [x, y, z]\nexport function validateOptionalVector3Array(...args) {\n let config;\n if (args.length === 1 && typeof args[0] === 'object' && !Array.isArray(args[0])) {\n config = args[0] || {};\n } else {\n const [fieldName, value, defaultValue] = args;\n config = { field: fieldName, value, defaultValue };\n }\n\n const {\n field,\n label,\n value,\n normalized,\n defaultValue = [0, 0, 0],\n assign\n } = config;\n\n const resolvedField = field || label || 'field';\n const resolvedLabel = label || resolvedField;\n const errors = [];\n const hasValue = !(value === undefined || value === null || value === '');\n\n const applyValue = (arr) => {\n const cloned = [...arr];\n\n applyFieldValue({ normalized, field: resolvedField, assign }, cloned)\n };\n\n if (!hasValue) {\n if (Array.isArray(defaultValue)) {\n applyValue(defaultValue.slice(0, 3).map(Number));\n } else {\n errors.push(`[${resolvedLabel}] 默认值必须是数组类型`);\n }\n return errors;\n }\n\n if (!Array.isArray(value)) {\n errors.push(`[${resolvedLabel}]必须是数组类型`);\n return errors;\n }\n\n if (value.length < 3) {\n errors.push(`[${resolvedLabel}]必须包含3个元素 [x, y, z]`);\n return errors;\n }\n\n const nums = value.slice(0, 3).map(Number);\n if (!nums.every((n) => Number.isFinite(n))) {\n errors.push(`[${resolvedLabel}]数组元素必须是数字`);\n return errors;\n }\n\n applyValue(nums);\n return errors;\n}\n\n/**\n * 校验可选颜色字段。字段非必填,传入值时通过 analyzeColorValue 解析。\n * @param {string} fieldName - 错误消息中使用的字段名\n * @param {string} value - 待校验的颜色值\n * @returns {{ errors: string[], value?: string }}\n */\nexport function validateOptionalColor(...args) {\n let config;\n if (args.length === 1 && typeof args[0] === 'object' && !Array.isArray(args[0])) {\n config = args[0] || {};\n } else {\n const [fieldName, value, options = {}] = args;\n config = { label: fieldName, value, ...options };\n }\n\n const {\n label,\n field,\n value,\n required = false,\n normalized,\n defaultValue,\n assign\n } = config;\n\n const resolvedField = field || label || 'field';\n const resolvedLabel = label || resolvedField;\n const errors = [];\n\n const hasValue = !(value === undefined || value === null || value === '');\n \n const applyValue = (colorValue) => {\n applyFieldValue({ normalized, field: resolvedField, assign }, colorValue);\n };\n\n if (!hasValue) {\n if (required) {\n errors.push(`[${resolvedLabel}]为必填项`);\n } else if (defaultValue !== undefined && defaultValue !== null && defaultValue !== '') {\n if (typeof defaultValue !== 'string') {\n errors.push(`[${resolvedLabel}] 默认值必须是字符串类型`);\n return errors;\n }\n const normalizedDefault = analyzeColorValue(defaultValue);\n if (!normalizedDefault) {\n errors.push(`${resolvedLabel} 默认值颜色格式不正确`);\n } else {\n applyValue(normalizedDefault);\n }\n }\n return errors;\n }\n\n if (typeof value !== 'string') {\n errors.push(`[${resolvedLabel}] 必须是字符串类型`);\n return errors;\n }\n\n const normalizedColor = analyzeColorValue(value);\n if (!normalizedColor) {\n errors.push(`${resolvedLabel} 颜色格式不正确`);\n return errors;\n }\n\n applyValue(normalizedColor);\n return errors;\n}\n\n/**\n * 校验枚举值。字段非必填,传入值时必须在指定的列表中。\n * @param {Object} config - 配置对象\n * @param {Object} config.normalized - 归一化参数对象,用于回传默认值后的参数\n * @param {string} config.field - 字段名\n * @param {*} config.value - 待校验的值\n * @param {*} config.defaultValue - 默认值(当value为空时使用)\n * @param {string} config.type - 值的类型(如 'string', 'number')\n * @param {Array} config.list - 允许的值列表\n * @returns {string[]} 错误信息数组\n */\nexport function verifyEnumerationValue(config) {\n const {\n normalized,\n field,\n value,\n defaultValue,\n type = 'string',\n list = []\n } = config;\n\n const errors = [];\n const resolvedField = field || 'field';\n const hasValue = !(value === undefined || value === null || value === '');\n\n // 如果没有值,应用默认值\n if (!hasValue) {\n if (defaultValue !== undefined && defaultValue !== null && normalized && typeof normalized === 'object' && normalized !== null) {\n normalized[resolvedField] = defaultValue;\n }\n return errors;\n }\n\n // 类型校验\n if (type === 'string' && typeof value !== 'string') {\n errors.push(`[${resolvedField}] 必须是字符串类型`);\n return errors;\n } else if (type === 'number' && typeof value !== 'number') {\n errors.push(`[${resolvedField}] 必须是数字类型`);\n return errors;\n }\n\n // 枚举值校验\n if (!Array.isArray(list) || list.length === 0) {\n errors.push(`[${resolvedField}] 枚举列表配置错误`);\n return errors;\n }\n\n if (!list.includes(value)) {\n errors.push(`[${resolvedField}] 必须是有效的值: ${list.join(', ')}`);\n return errors;\n }\n\n // 如果验证通过,将值设置到normalized中\n if (normalized && typeof normalized === 'object' && normalized !== null) {\n normalized[resolvedField] = value;\n }\n\n return errors;\n}\n\n\n// 校验必填Function类型\nexport function validateRequiredFunction(...args) {\n let config;\n if (args.length === 1 && typeof args[0] === 'object' && !Array.isArray(args[0])) {\n config = args[0] || {};\n } else {\n const [fieldName, value] = args;\n config = { field: fieldName, value };\n }\n\n const {\n field,\n label,\n value,\n normalized,\n assign\n } = config;\n\n const resolvedField = field || label || 'field';\n const resolvedLabel = label || resolvedField;\n const e = [];\n const hasValue = !(value === undefined || value === null);\n\n const applyValue = (fnValue) => {\n applyFieldValue({ normalized, field: resolvedField, assign }, fnValue);\n };\n\n if (!hasValue) {\n e.push(`[${resolvedLabel}]为必填项`);\n return e;\n }\n\n if (typeof value !== 'function') {\n e.push(`[${resolvedLabel}]必须是函数类型`);\n } else {\n applyValue(value);\n }\n return e;\n}\n","import {\n validateCoordinatesRequired,\n validateOptionalNumber\n} from '../../baseConfig/validators.js';\n\nexport function flyTo(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n // coordinates 必填\r\n errors.push(...validateCoordinatesRequired(params.coordinates));\r\n \r\n // pitch 可选,默认 0\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'pitch',\r\n value: params.pitch,\r\n defaultValue: 0,\r\n min: -90,\r\n max: 90\r\n }));\r\n\r\n // yaw 可选,默认 0\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'yaw',\r\n value: params.yaw,\r\n defaultValue: 0,\r\n min: -180,\r\n max: 180\r\n }));\r\n\r\n // duration 可选 默认 2\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'duration',\r\n value: params.duration,\r\n defaultValue: 2,\r\n min: 0,\r\n max: null\r\n }));\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n validateRequiredString,\n validateOptionalNumber\n} from '../../baseConfig/validators.js';\n\nexport function focusToID(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n // id: string 必填\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'id',\r\n value: params.id\r\n }));\r\n\r\n // pitch 可选\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'pitch',\r\n value: params.pitch,\r\n min: -90,\r\n max: 90\r\n }));\r\n\r\n // yaw 可选\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'yaw',\r\n value: params.yaw,\r\n min: -180,\r\n max: 180\r\n }));\r\n\r\n // duration 可选 默认2\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'duration',\r\n value: params.duration,\r\n defaultValue: 2,\r\n min: 0,\r\n max: null\r\n }));\r\n\r\n // screenPercent: number 可选,默认30,模型所占屏幕百分比(取值范围: 0-100)\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'screenPercent',\r\n value: params.screenPercent,\r\n defaultValue: 30,\r\n min: 0,\r\n max: 100\r\n }));\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n validateCoordinatesRequired,\n validateOptionalNumber\n} from '../../baseConfig/validators.js';\n\nexport function focusToPoint(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n // coordinates 参数校验\r\n errors.push(...validateCoordinatesRequired(params.coordinates));\r\n\r\n // pitch: number 可选,默认0,当前位置朝向目标点的俯仰角(z轴旋转)\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'pitch',\r\n value: params.pitch,\r\n defaultValue: 0,\r\n min: -90,\r\n max: 90\r\n }));\r\n\r\n // yaw: number 可选,默认0,当前位置朝向目标点的偏航角(y轴旋转)\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'yaw',\r\n value: params.yaw,\r\n defaultValue: 0,\r\n min: -180,\r\n max: 180\r\n }));\r\n\r\n // duration: number 可选,默认2,镜头到目标点的飞行时间(单位: 秒/s)\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'duration',\r\n value: params.duration,\r\n defaultValue: 2,\r\n min: 0\r\n }));\r\n\r\n // distance: number 可选,默认10,相机到点的距离(单位: 米/m)\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'distance',\r\n value: params.distance,\r\n defaultValue: 10,\r\n min: 0\r\n }));\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n validateRequiredString,\n validateOptionalNumber\n} from '../../baseConfig/validators.js';\n\nexport function lookAtID(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n // id: string 必填,模型ID\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'id',\r\n value: params.id\r\n }));\r\n\r\n // duration: number 可选,默认2,镜头转向目标点的持续时间(单位: 秒/s)\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'duration',\r\n value: params.duration,\r\n defaultValue: 2,\r\n min: 0\r\n }));\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n validateCoordinatesRequired,\n validateOptionalNumber\n} from '../../baseConfig/validators.js';\n\nexport function lookAtPoint(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n // coordinates 参数校验\r\n errors.push(...validateCoordinatesRequired(params.coordinates));\r\n\r\n // duration: number 可选,默认2,镜头转向目标点的持续时间(单位: 秒/s)\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'duration',\r\n value: params.duration,\r\n defaultValue: 2,\r\n min: 0\r\n }));\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n validateOptionalNumber\n} from '../../baseConfig/validators.js';\n\nexport function config(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n // isUseDragLerp: boolean, 默认值: true\r\n if (params.isUseDragLerp !== undefined && typeof params.isUseDragLerp !== 'boolean') {\r\n errors.push('[isUseDragLerp]必须是布尔类型');\r\n } else if (params.isUseDragLerp === undefined) {\r\n normalized.isUseDragLerp = true;\r\n }\r\n\r\n // dragLerpSpeed: number, 默认值: 9\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'dragLerpSpeed',\r\n value: params.dragLerpSpeed,\r\n defaultValue: 9,\r\n min: 0\r\n }));\r\n\r\n // dragSpeed: number, 默认值: 5\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'dragSpeed',\r\n value: params.dragSpeed,\r\n defaultValue: 5,\r\n min: 0\r\n }));\r\n\r\n // pitchAngleOnSwitchDragMode: number, 默认值: 3\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'pitchAngleOnSwitchDragMode',\r\n value: params.pitchAngleOnSwitchDragMode,\r\n defaultValue: 3,\r\n min: 0\r\n }));\r\n\r\n // scaleSpeed: number, 默认值: 2\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'scaleSpeed',\r\n value: params.scaleSpeed,\r\n defaultValue: 2,\r\n min: 0\r\n }));\r\n\r\n // isUseMiddleAround: boolean, 默认值: false\r\n if (params.isUseMiddleAround !== undefined && typeof params.isUseMiddleAround !== 'boolean') {\r\n errors.push('[isUseMiddleAround]必须是布尔类型');\r\n } else if (params.isUseMiddleAround === undefined) {\r\n normalized.isUseMiddleAround = false;\r\n }\r\n\r\n // isUseMousePosOnAround: boolean, 默认值: false\r\n if (params.isUseMousePosOnAround !== undefined && typeof params.isUseMousePosOnAround !== 'boolean') {\r\n errors.push('[isUseMousePosOnAround]必须是布尔类型');\r\n } else if (params.isUseMousePosOnAround === undefined) {\r\n normalized.isUseMousePosOnAround = false;\r\n }\r\n\r\n // x_AroundSpeed: number, 默认值: 3\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'x_AroundSpeed',\r\n value: params.x_AroundSpeed,\r\n defaultValue: 3,\r\n min: 0\r\n }));\r\n\r\n // y_AroundSpeed: number, 默认值: 3\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'y_AroundSpeed',\r\n value: params.y_AroundSpeed,\r\n defaultValue: 3,\r\n min: 0\r\n }));\r\n\r\n // fov: number, 默认值: 90(相机视角)\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'fov',\r\n value: params.fov,\r\n defaultValue: 90,\r\n min: 1,\r\n max: 180\r\n }));\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","export function validateOptionalBoolean(normalized, field, value, errors, defaultValue) {\r\n if (value === undefined || value === null || value === '') {\r\n normalized[field] = defaultValue;\r\n return;\r\n }\r\n if (typeof value !== 'boolean') {\r\n errors.push(`[${field}]必须是布尔类型`);\r\n return;\r\n }\r\n normalized[field] = value;\r\n}\n","import {\n validateCoordinatesRequired,\n validateRequiredString,\n validateOptionalNumber\n} from '../../baseConfig/validators.js';\nimport {\n validateOptionalBoolean\n} from './helpers.js';\n\nexport function aroundMode(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n const hasId = !(params.id === undefined || params.id === null || params.id === '');\r\n const hasCoordinates = !(params.coordinates === undefined || params.coordinates === null || params.coordinates === '');\r\n\r\n if (hasId && hasCoordinates) {\r\n errors.push('[id]与[coordinates]只能二选一,不能同时提供');\r\n } else if (!hasId && !hasCoordinates) {\r\n errors.push('[id]与[coordinates]必须二选一,至少提供一个');\r\n } else if (hasId) {\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'id',\r\n value: params.id\r\n }));\r\n delete normalized.coordinates;\r\n } else {\r\n errors.push(...validateCoordinatesRequired(params.coordinates));\r\n delete normalized.id;\r\n }\r\n\r\n // distance: number 可选,默认 10000\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'distance',\r\n value: params.distance,\r\n defaultValue: 10000,\r\n min: 0\r\n }));\r\n\r\n // pitch: number 可选,默认 0(-90~90)\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'pitch',\r\n value: params.pitch,\r\n defaultValue: 0,\r\n min: -90,\r\n max: 90\r\n }));\r\n\r\n // yaw: number 可选,默认 0(-180~180)\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'yaw',\r\n value: params.yaw,\r\n defaultValue: 0,\r\n min: -180,\r\n max: 180\r\n }));\r\n\r\n // duration: number 可选,默认 2,镜头到目标点的飞行时间(单位:s)\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'duration',\r\n value: params.duration,\r\n defaultValue: 2,\r\n min: 0\r\n }));\r\n\r\n // minDistanceToTarget: number 可选,默认 100\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'minDistanceToTarget',\r\n value: params.minDistanceToTarget,\r\n defaultValue: 100,\r\n min: 0\r\n }));\r\n\r\n // maxDistanceToTarget: number 可选,默认 50000\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'maxDistanceToTarget',\r\n value: params.maxDistanceToTarget,\r\n defaultValue: 50000,\r\n min: 0\r\n }));\r\n\r\n // scaleSpeed: number 可选,默认 30\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'scaleSpeed',\r\n value: params.scaleSpeed,\r\n defaultValue: 30,\r\n min: 0\r\n }));\r\n\r\n // x_AroundSpeed: number 可选,默认 20\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'x_AroundSpeed',\r\n value: params.x_AroundSpeed,\r\n defaultValue: 20,\r\n min: 0\r\n }));\r\n\r\n // y_AroundSpeed: number 可选,默认 20\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'y_AroundSpeed',\r\n value: params.y_AroundSpeed,\r\n defaultValue: 20,\r\n min: 0\r\n }));\r\n\r\n // x_AnimSpeed: number 可选,默认 5\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'x_AnimSpeed',\r\n value: params.x_AnimSpeed,\r\n defaultValue: 5,\r\n min: 0\r\n }));\r\n\r\n // y_AnimSpeed: number 可选,默认 5\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'y_AnimSpeed',\r\n value: params.y_AnimSpeed,\r\n defaultValue: 5,\r\n min: 0\r\n }));\r\n\r\n // isCheckCollision: boolean 可选,默认 false\r\n validateOptionalBoolean(normalized, 'isCheckCollision', params.isCheckCollision, errors, false);\r\n\r\n // isIgnoreAttachedActors: boolean 可选,默认 true\r\n validateOptionalBoolean(normalized, 'isIgnoreAttachedActors', params.isIgnoreAttachedActors, errors, true);\r\n\r\n // collisionOffset: number 可选,默认 100\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'collisionOffset',\r\n value: params.collisionOffset,\r\n defaultValue: 100,\r\n min: 0\r\n }));\r\n\r\n return { errors, normalized };\r\n}\n","export function dragMode(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n return { errors, normalized };\r\n}\n","import {\n validateCoordinatesRequired,\n validateOptionalNumber\n} from '../../baseConfig/validators.js';\nimport {\n validateOptionalBoolean\n} from './helpers.js';\n\nexport function firstPersonMode(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateCoordinatesRequired(params.coordinates));\r\n\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'pitch',\r\n value: params.pitch,\r\n defaultValue: 0,\r\n min: -90,\r\n max: 90\r\n }));\r\n\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'yaw',\r\n value: params.yaw,\r\n defaultValue: 0,\r\n min: -180,\r\n max: 180\r\n }));\r\n\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'duration',\r\n value: params.duration,\r\n defaultValue: 2,\r\n min: 0\r\n }));\r\n\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'speed',\r\n value: params.speed,\r\n defaultValue: 2,\r\n min: 0\r\n }));\r\n\r\n validateOptionalBoolean(normalized, 'collision', params.collision, errors, true);\r\n\r\n return { errors, normalized };\r\n}\n","import {\n validateOptionalBoolean\n} from './helpers.js';\n\nexport function viewLock(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n validateOptionalBoolean(normalized, 'state', params.state, errors, false);\r\n\r\n return { errors, normalized };\r\n}\n","import { createNamespaceApi } from '../createNamespaceApi.js';\nimport { flyTo } from './flyTo.js';\nimport { focusToID } from './focusToID.js';\nimport { focusToPoint } from './focusToPoint.js';\nimport { lookAtID } from './lookAtID.js';\nimport { lookAtPoint } from './lookAtPoint.js';\nimport { config } from './config.js';\nimport { aroundMode } from './aroundMode.js';\nimport { dragMode } from './dragMode.js';\nimport { firstPersonMode } from './firstPersonMode.js';\nimport { viewLock } from './viewLock.js';\n\nexport const CameraApi = createNamespaceApi('camera', {\n flyTo,\n focusToID,\n focusToPoint,\n lookAtID,\n lookAtPoint,\n config,\n aroundMode,\n dragMode,\n firstPersonMode,\n viewLock\n});\n","import {\n isValidNumber\n} from '../../baseConfig/validators.js';\n\nexport function validatePointsArray(points, options = {}) {\r\n const {\r\n minLength = 2,\r\n exactLength = null,\r\n field = 'points'\r\n } = options;\r\n const errors = [];\r\n const validPoints = [];\r\n\r\n if (!points || !Array.isArray(points)) {\r\n errors.push(`[${field}] 为必填项,且必须是数组类型`);\r\n return { errors, validPoints };\r\n }\r\n\r\n if (exactLength !== null && points.length !== exactLength) {\r\n errors.push(`[${field}] 长度必须为 ${exactLength}`);\r\n } else if (exactLength === null && points.length < minLength) {\r\n errors.push(`[${field}] 至少需要 ${minLength} 个坐标点`);\r\n }\r\n\r\n points.forEach((coord, index) => {\r\n if (!Array.isArray(coord) || coord.length < 3) {\r\n errors.push(`[${field}[${index}]] 坐标点格式错误,应为 [经度, 纬度, 高度]`);\r\n return;\r\n }\r\n const [longitude, latitude, altitude] = coord;\r\n if (!isValidNumber(longitude, -180, 180)) {\r\n errors.push(`[${field}[${index}][0]] 经度取值范围:-180~180`);\r\n }\r\n if (!isValidNumber(latitude, -90, 90)) {\r\n errors.push(`[${field}[${index}][1]] 纬度取值范围:-90~90`);\r\n }\r\n if (!isValidNumber(altitude)) {\r\n errors.push(`[${field}[${index}][2]] 高度必须是数字类型`);\r\n }\r\n if (\r\n isValidNumber(longitude, -180, 180) &&\r\n isValidNumber(latitude, -90, 90) &&\r\n isValidNumber(altitude)\r\n ) {\r\n validPoints.push([longitude, latitude, altitude]);\r\n }\r\n });\r\n\r\n return { errors, validPoints };\r\n}\n\nexport function applyValidPoints(normalized, validPoints, pointOptions) {\r\n if (\r\n (pointOptions.exactLength != null && validPoints.length === pointOptions.exactLength) ||\r\n (pointOptions.exactLength == null && validPoints.length >= (pointOptions.minLength || 0))\r\n ) {\r\n normalized.points = validPoints;\r\n }\r\n}\n","import {\n validateRequiredString,\n validateOptionalNumber,\n validateOptionalColor\n} from '../../baseConfig/validators.js';\nimport {\n validatePointsArray,\n applyValidPoints\n} from './helpers.js';\n\nexport function addMultiLine(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'name',\r\n value: params.name\r\n }));\r\n\r\n const pointOptions = { minLength: 2, field: 'points' };\r\n const { errors: pointErrors, validPoints } = validatePointsArray(params.points, pointOptions);\r\n errors.push(...pointErrors);\r\n applyValidPoints(normalized, validPoints, pointOptions);\r\n\r\n errors.push(...validateOptionalColor({\r\n normalized,\r\n field: 'color',\r\n value: params.color,\r\n defaultValue: '#FF0000CC'\r\n }));\r\n\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'lineWidth',\r\n value: params.lineWidth,\r\n defaultValue: 1,\r\n min: 0\r\n }));\r\n\r\n return { errors, normalized };\r\n}\n","import {\n validateRequiredString,\n validateOptionalColor,\n verifyEnumerationValue\n} from '../../baseConfig/validators.js';\nimport {\n validatePointsArray,\n applyValidPoints\n} from './helpers.js';\n\nexport function addMultiPolygon(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'name',\r\n value: params.name\r\n }));\r\n\r\n errors.push(...verifyEnumerationValue({\r\n normalized,\r\n field: 'polygonType',\r\n value: params.polygonType,\r\n defaultValue: 'rectangle',\r\n type: 'string',\r\n list: ['rectangle', 'circle', 'polygon']\r\n }));\r\n\r\n const polygonType = normalized.polygonType;\r\n let pointOptions = { minLength: 2, field: 'points' };\r\n if (polygonType === 'rectangle' || polygonType === 'circle') {\r\n pointOptions = { exactLength: 2, field: 'points' };\r\n } else if (polygonType === 'polygon') {\r\n pointOptions = { minLength: 3, field: 'points' };\r\n }\r\n\r\n const { errors: pointErrors, validPoints } = validatePointsArray(params.points, pointOptions);\r\n errors.push(...pointErrors);\r\n applyValidPoints(normalized, validPoints, pointOptions);\r\n\r\n errors.push(...validateOptionalColor({\r\n normalized,\r\n field: 'color',\r\n value: params.color,\r\n defaultValue: '#0099FF99'\r\n }));\r\n\r\n return { errors, normalized };\r\n}\n","import {\n validateRequiredString\n} from '../../baseConfig/validators.js';\n\nexport function removeDrawn(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'name',\r\n value: params.name\r\n }));\r\n\r\n return { errors, normalized };\r\n}\n","export function removeAllDrawn(params = {}) {\r\n return { errors: [], normalized: { ...params } };\r\n}\n","import {\n validateRequiredString\n} from '../../baseConfig/validators.js';\nimport {\n validatePointsArray,\n applyValidPoints\n} from './helpers.js';\n\nexport function addTexturedQuad(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'name',\r\n value: params.name\r\n }));\r\n\r\n const pointOptions = { exactLength: 4, field: 'points' };\r\n const { errors: pointErrors, validPoints } = validatePointsArray(params.points, pointOptions);\r\n errors.push(...pointErrors);\r\n applyValidPoints(normalized, validPoints, pointOptions);\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'texture',\r\n value: params.texture\r\n }));\r\n\r\n return { errors, normalized };\r\n}\n","import {\n validateOptionalString,\n validateOptionalNumber,\n validateOptionalColor,\n verifyEnumerationValue\n} from '../../baseConfig/validators.js';\n\nexport function startMouseDraw(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...verifyEnumerationValue({\r\n normalized,\r\n field: 'drawMode',\r\n value: params.drawMode,\r\n defaultValue: 'polyline',\r\n type: 'string',\r\n list: ['polyline', 'rectangle', 'circle', 'polygon']\r\n }));\r\n\r\n errors.push(...validateOptionalColor({\r\n normalized,\r\n field: 'color',\r\n value: params.color,\r\n defaultValue: '#FF0000CC'\r\n }));\r\n\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'lineWidth',\r\n value: params.lineWidth,\r\n defaultValue: 3,\r\n min: 0\r\n }));\r\n\r\n errors.push(...validateOptionalString({\r\n normalized,\r\n field: 'name',\r\n value: params.name\r\n }));\r\n\r\n return { errors, normalized };\r\n}\n","export function stopMouseDraw(params = {}) {\r\n return { errors: [], normalized: { ...params } };\r\n}\n","import {\n validateRequiredString\n} from '../../baseConfig/validators.js';\n\nexport function getDrawnInfoByName(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'name',\r\n value: params.name\r\n }));\r\n\r\n return { errors, normalized };\r\n}\n","export function getAllDrawnInfo(params = {}) {\r\n return { errors: [], normalized: { ...params } };\r\n}\n","import {\n validateRequiredString\n} from '../../baseConfig/validators.js';\nimport {\n validatePointsArray,\n applyValidPoints\n} from './helpers.js';\n\nexport function measureDistance(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'name',\r\n value: params.name\r\n }));\r\n\r\n const pointOptions = { minLength: 2, field: 'points' };\r\n const { errors: pointErrors, validPoints } = validatePointsArray(params.points, pointOptions);\r\n errors.push(...pointErrors);\r\n applyValidPoints(normalized, validPoints, pointOptions);\r\n\r\n return { errors, normalized };\r\n}\n","import {\n validateRequiredString,\n verifyEnumerationValue\n} from '../../baseConfig/validators.js';\nimport {\n validatePointsArray,\n applyValidPoints\n} from './helpers.js';\n\nexport function measureArea(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'name',\r\n value: params.name\r\n }));\r\n\r\n errors.push(...verifyEnumerationValue({\r\n normalized,\r\n field: 'polyType',\r\n value: params.polyType,\r\n defaultValue: 'rectangle',\r\n type: 'string',\r\n list: ['rectangle', 'circle', 'polygon']\r\n }));\r\n\r\n const polyType = normalized.polyType;\r\n let pointOptions = { minLength: 2, field: 'points' };\r\n if (polyType === 'polygon') {\r\n pointOptions = { minLength: 3, field: 'points' };\r\n }\r\n\r\n const { errors: pointErrors, validPoints } = validatePointsArray(params.points, pointOptions);\r\n errors.push(...pointErrors);\r\n applyValidPoints(normalized, validPoints, pointOptions);\r\n\r\n return { errors, normalized };\r\n}\n","import { createNamespaceApi } from '../createNamespaceApi.js';\nimport { addMultiLine } from './addMultiLine.js';\nimport { addMultiPolygon } from './addMultiPolygon.js';\nimport { removeDrawn } from './removeDrawn.js';\nimport { removeAllDrawn } from './removeAllDrawn.js';\nimport { addTexturedQuad } from './addTexturedQuad.js';\nimport { startMouseDraw } from './startMouseDraw.js';\nimport { stopMouseDraw } from './stopMouseDraw.js';\nimport { getDrawnInfoByName } from './getDrawnInfoByName.js';\nimport { getAllDrawnInfo } from './getAllDrawnInfo.js';\nimport { measureDistance } from './measureDistance.js';\nimport { measureArea } from './measureArea.js';\n\nexport const CesiumApi = createNamespaceApi('cesium', {\n addMultiLine,\n addMultiPolygon,\n removeDrawn,\n removeAllDrawn,\n addTexturedQuad,\n startMouseDraw,\n stopMouseDraw,\n getDrawnInfoByName,\n getAllDrawnInfo,\n measureDistance,\n measureArea\n});\n","import {\n validateOptionalNumber,\n validateRequiredString,\n validateOptionalString,\n validateOptionalArray,\n validateOptionalColor,\n verifyEnumerationValue\n} from '../../baseConfig/validators.js';\n\n// 将空数组视为未提供,避免长度校验报错\nexport function normalizeEmptyArray(value) {\r\n return Array.isArray(value) && value.length === 0 ? undefined : value;\r\n}\n\nexport function isEmptyValue(value) {\r\n if (value === undefined || value === null || value === '') {\r\n return true;\r\n }\r\n if (Array.isArray(value) && value.length === 0) {\r\n return true;\r\n }\r\n return false;\r\n}\n\nexport function generateUniqueId() {\r\n return `marker_${Date.now()}`;\r\n}\n\nexport function ensureIconStyle(target, field, errors) {\r\n const style = target?.[field];\r\n // iconStyle 非必填:没传则不校验、不补默认结构\r\n if (style === undefined || style === null) {\r\n return;\r\n }\r\n if (typeof style !== 'object' || Array.isArray(style)) {\r\n errors.push(`${field} 必须是对象`);\r\n return;\r\n }\r\n\r\n if (style.color !== undefined && !isEmptyValue(style.color)) {\r\n errors.push(...validateOptionalColor({\r\n normalized: style,\r\n field: 'color',\r\n value: style.color\r\n }));\r\n }\r\n if (style.size !== undefined && !isEmptyValue(style.size)) {\r\n errors.push(...validateOptionalArray({\r\n normalized: style,\r\n field: 'size',\r\n value: normalizeEmptyArray(style.size),\r\n length: 2\r\n }));\r\n }\r\n if (style.padding !== undefined && !isEmptyValue(style.padding)) {\r\n errors.push(...validateOptionalArray({\r\n normalized: style,\r\n field: 'padding',\r\n value: normalizeEmptyArray(style.padding),\r\n length: 4\r\n }));\r\n }\r\n if (style.backgroundColor !== undefined && !isEmptyValue(style.backgroundColor)) {\r\n errors.push(...validateOptionalColor({\r\n normalized: style,\r\n field: 'backgroundColor',\r\n value: style.backgroundColor\r\n }));\r\n }\r\n if (style.margin !== undefined && !isEmptyValue(style.margin)) {\r\n errors.push(...validateOptionalArray({\r\n normalized: style,\r\n field: 'margin',\r\n value: normalizeEmptyArray(style.margin),\r\n length: 4\r\n }));\r\n }\r\n if (style.borderColor !== undefined && !isEmptyValue(style.borderColor)) {\r\n errors.push(...validateOptionalColor({\r\n normalized: style,\r\n field: 'borderColor',\r\n value: style.borderColor\r\n }));\r\n }\r\n if (style.borderWidth !== undefined && !isEmptyValue(style.borderWidth)) {\r\n errors.push(...validateOptionalNumber({\r\n normalized: style,\r\n field: 'borderWidth',\r\n value: style.borderWidth,\r\n min: 0\r\n }));\r\n }\r\n if (style.borderRadius !== undefined && !isEmptyValue(style.borderRadius)) {\r\n errors.push(...validateOptionalNumber({\r\n normalized: style,\r\n field: 'borderRadius',\r\n value: style.borderRadius,\r\n min: 0\r\n }));\r\n }\r\n}\n\nexport function ensureTextStyle(target, field, errors) {\r\n const style = target?.[field];\r\n // textStyle 非必填:没传则不校验、不补默认结构\r\n if (style === undefined || style === null) {\r\n return;\r\n }\r\n if (typeof style !== 'object' || Array.isArray(style)) {\r\n errors.push(`${field} 必须是对象`);\r\n return;\r\n }\r\n\r\n if (style.color !== undefined && !isEmptyValue(style.color)) {\r\n errors.push(...validateOptionalColor({\r\n normalized: style,\r\n field: 'color',\r\n value: style.color\r\n }));\r\n }\r\n if (style.fontSize !== undefined && !isEmptyValue(style.fontSize)) {\r\n errors.push(...validateOptionalNumber({\r\n normalized: style,\r\n field: 'fontSize',\r\n value: style.fontSize,\r\n min: 0\r\n }));\r\n }\r\n if (style.typeface !== undefined && !isEmptyValue(style.typeface)) {\r\n errors.push(...verifyEnumerationValue({\r\n normalized: style,\r\n field: 'typeface',\r\n value: style.typeface,\r\n type: 'string',\r\n list: ['Bold', 'Bold Italic', 'Regular', 'Italic', 'Light']\r\n }));\r\n }\r\n if (style.outlineSize !== undefined && !isEmptyValue(style.outlineSize)) {\r\n errors.push(...validateOptionalNumber({\r\n normalized: style,\r\n field: 'outlineSize',\r\n value: style.outlineSize,\r\n min: 0\r\n }));\r\n }\r\n if (style.outlineColor !== undefined && !isEmptyValue(style.outlineColor)) {\r\n errors.push(...validateOptionalColor({\r\n normalized: style,\r\n field: 'outlineColor',\r\n value: style.outlineColor,\r\n }));\r\n }\r\n if (style.shadowOffset !== undefined && !isEmptyValue(style.shadowOffset)) {\r\n errors.push(...validateOptionalArray({\r\n normalized: style,\r\n field: 'shadowOffset',\r\n value: normalizeEmptyArray(style.shadowOffset),\r\n length: 2\r\n }));\r\n }\r\n if (style.shadowColor !== undefined && !isEmptyValue(style.shadowColor)) {\r\n errors.push(...validateOptionalColor({\r\n normalized: style,\r\n field: 'shadowColor',\r\n value: style.shadowColor\r\n }));\r\n }\r\n if (style.padding !== undefined && !isEmptyValue(style.padding)) {\r\n errors.push(...validateOptionalArray({\r\n normalized: style,\r\n field: 'padding',\r\n value: normalizeEmptyArray(style.padding),\r\n length: 4\r\n }));\r\n }\r\n if (style.backgroundColor !== undefined && !isEmptyValue(style.backgroundColor)) {\r\n errors.push(...validateOptionalColor({\r\n normalized: style,\r\n field: 'backgroundColor',\r\n value: style.backgroundColor\r\n }));\r\n }\r\n if (style.margin !== undefined && !isEmptyValue(style.margin)) {\r\n errors.push(...validateOptionalArray({\r\n normalized: style,\r\n field: 'margin',\r\n value: normalizeEmptyArray(style.margin),\r\n length: 4\r\n }));\r\n }\r\n if (style.borderColor !== undefined && !isEmptyValue(style.borderColor)) {\r\n errors.push(...validateOptionalColor({\r\n normalized: style,\r\n field: 'borderColor',\r\n value: style.borderColor\r\n }));\r\n }\r\n if (style.borderWidth !== undefined && !isEmptyValue(style.borderWidth)) {\r\n errors.push(...validateOptionalNumber({\r\n normalized: style,\r\n field: 'borderWidth',\r\n value: style.borderWidth,\r\n min: 0\r\n }));\r\n }\r\n if (style.borderRadius !== undefined && !isEmptyValue(style.borderRadius)) {\r\n errors.push(...validateOptionalNumber({\r\n normalized: style,\r\n field: 'borderRadius',\r\n value: style.borderRadius,\r\n min: 0\r\n }));\r\n }\r\n}\n\nexport function validateConfigByMarkerType(normalized, errors) {\r\n const markerType = normalized.markerType || 'default';\r\n\r\n // 确保 config 对象存在\r\n if (!normalized.config) {\r\n normalized.config = {};\r\n }\r\n const config = normalized.config;\r\n\r\n // 根据 markerType 进行校验\r\n if (markerType === 'flashIcon') {\r\n validateFlashIconConfig(config, errors);\r\n } else if (markerType === 'component') {\r\n validateComponentConfig(config, errors);\r\n } else if (markerType === 'customCom') {\r\n validateCustomComConfig(config, errors);\r\n } else if (markerType === 'menuIcon') {\r\n validateMenuIconConfig(config, errors);\r\n } else if (markerType === 'flood') {\r\n validateFloodConfig(config, errors);\r\n } else if (markerType === 'capture') {\r\n validateCaptureConfig(config, errors);\r\n } else if (['anchor1', 'anchor2', 'anchor3', 'anchor4', 'anchor5', 'anchor6'].includes(markerType)) {\r\n validateAnchorConfig(config, errors);\r\n } else if (markerType === 'html') {\r\n validateHtmlMarkerConfig(config, errors);\r\n } else if (markerType === 'url') {\r\n validateUrlMarkerConfig(config, errors);\r\n } else if (markerType === 'lod') {\r\n validateLodConfig(config, errors);\r\n } else {\r\n validateDefaultConfig(config, errors);\r\n }\r\n}\n\nexport function validateLodConfig(config, errors) {\r\n ensureIconStyle(config, 'iconStyle', errors);\r\n ensureTextStyle(config, 'textStyle', errors);\r\n\r\n if (config.levels === undefined || config.levels === null) {\r\n config.levels = [];\r\n return;\r\n }\r\n if (!Array.isArray(config.levels)) {\r\n errors.push('[config.levels]必须是数组');\r\n return;\r\n }\r\n\r\n config.levels.forEach((level, index) => {\r\n if (!level || typeof level !== 'object' || Array.isArray(level)) {\r\n errors.push(`[config.levels[${index}]]必须是对象`);\r\n return;\r\n }\r\n\r\n errors.push(...validateOptionalArray({\r\n normalized: level,\r\n field: 'distance',\r\n value: normalizeEmptyArray(level.distance),\r\n length: 2\r\n }));\r\n if (!Array.isArray(level.distance) || level.distance.length !== 2) {\r\n errors.push(`[config.levels[${index}].distance]必填,格式为 [min, max]`);\r\n }\r\n\r\n errors.push(...validateOptionalString({\r\n normalized: level,\r\n field: 'text',\r\n value: level.text,\r\n defaultValue: ''\r\n }));\r\n errors.push(...validateOptionalString({\r\n normalized: level,\r\n field: 'iconAddress',\r\n value: level.iconAddress,\r\n defaultValue: ''\r\n }));\r\n\r\n ensureIconStyle(level, 'iconStyle', errors);\r\n ensureTextStyle(level, 'textStyle', errors);\r\n });\r\n}\n\nexport function validateHtmlMarkerConfig(config, errors) {\r\n errors.push(...validateOptionalNumber({\r\n normalized: config,\r\n field: 'scale',\r\n value: config.scale,\r\n defaultValue: 1,\r\n min: 0,\r\n }));\r\n\r\n errors.push(...validateOptionalArray({\r\n normalized: config,\r\n field: 'size',\r\n value: normalizeEmptyArray(config.size),\r\n length: 2\r\n }));\r\n\r\n if (Array.isArray(config.size) && config.size.length === 2) {\r\n const [w, h] = config.size;\r\n if (typeof w !== 'number' || Number.isNaN(w) || w <= 0) {\r\n errors.push('[size[0]]必须是>0的数字');\r\n }\r\n if (typeof h !== 'number' || Number.isNaN(h) || h <= 0) {\r\n errors.push('[size[1]]必须是>0的数字');\r\n }\r\n }\r\n\r\n errors.push(...validateOptionalString({\r\n normalized: config,\r\n field: 'content',\r\n value: config.content,\r\n defaultValue: ''\r\n }));\r\n}\n\nexport function validateUrlMarkerConfig(config, errors) {\r\n errors.push(...validateOptionalArray({\r\n normalized: config,\r\n field: 'size',\r\n value: normalizeEmptyArray(config.size),\r\n length: 2,\r\n defaultValue: [400, 300]\r\n }));\r\n\r\n if (Array.isArray(config.size) && config.size.length === 2) {\r\n const [w, h] = config.size;\r\n if (typeof w !== 'number' || Number.isNaN(w) || w <= 0) {\r\n errors.push('[size[0]]必须是>0的数字');\r\n }\r\n if (typeof h !== 'number' || Number.isNaN(h) || h <= 0) {\r\n errors.push('[size[1]]必须是>0的数字');\r\n }\r\n }\r\n\r\n errors.push(...validateRequiredString({\r\n normalized: config,\r\n field: 'url',\r\n value: config.url\r\n }));\r\n}\n\nexport function validateComponentConfig(config, errors) {\r\n errors.push(...validateOptionalColor({\r\n normalized: config,\r\n field: 'color',\r\n value: config.color,\r\n defaultValue: '#1cfeff'\r\n }));\r\n errors.push(...validateOptionalArray({\r\n normalized: config,\r\n field: 'padding',\r\n value: normalizeEmptyArray(config.padding),\r\n length: 4,\r\n }));\r\n errors.push(...validateOptionalString({\r\n normalized: config,\r\n field: 'title',\r\n value: config.title,\r\n defaultValue: ''\r\n }));\r\n ensureTextStyle(config, 'titleStyle', errors);\r\n\r\n // dataTexts:[{key,value}],缺省给空数组\r\n errors.push(...validateOptionalArray({\r\n normalized: config,\r\n field: 'dataTexts',\r\n value: config.dataTexts,\r\n defaultValue: []\r\n }));\r\n if (!Array.isArray(config.dataTexts)) {\r\n config.dataTexts = [];\r\n } else {\r\n config.dataTexts = config.dataTexts\r\n .filter(item => item && typeof item === 'object')\r\n .map(item => ({\r\n key: item.key ?? '',\r\n value: item.value ?? ''\r\n }));\r\n }\r\n ensureTextStyle(config, 'dataKeyStyle', errors);\r\n ensureTextStyle(config, 'dataValueStyle', errors);\r\n}\n\nexport function validateCustomComConfig(config, errors) {\r\n errors.push(...validateOptionalArray({\r\n normalized: config,\r\n field: 'size',\r\n value: normalizeEmptyArray(config.size),\r\n length: 2,\r\n defaultValue: [400, 300]\r\n }));\r\n errors.push(...validateOptionalString({\r\n normalized: config,\r\n field: 'baseAddress',\r\n value: config.baseAddress,\r\n defaultValue: ''\r\n }));\r\n errors.push(...validateOptionalArray({\r\n normalized: config,\r\n field: 'padding',\r\n value: normalizeEmptyArray(config.padding),\r\n length: 4,\r\n }));\r\n errors.push(...validateOptionalString({\r\n normalized: config,\r\n field: 'title',\r\n value: config.title,\r\n defaultValue: ''\r\n }));\r\n ensureTextStyle(config, 'titleStyle', errors);\r\n\r\n // dataTexts:[{key,value}],缺省给空数组\r\n errors.push(...validateOptionalArray({\r\n normalized: config,\r\n field: 'dataTexts',\r\n value: config.dataTexts,\r\n defaultValue: []\r\n }));\r\n if (!Array.isArray(config.dataTexts)) {\r\n config.dataTexts = [];\r\n } else {\r\n config.dataTexts = config.dataTexts\r\n .filter(item => item && typeof item === 'object')\r\n .map(item => ({\r\n key: item.key ?? '',\r\n value: item.value ?? ''\r\n }));\r\n }\r\n ensureTextStyle(config, 'dataKeyStyle', errors);\r\n ensureTextStyle(config, 'dataValueStyle', errors);\r\n}\n\nexport function validateDefaultConfig(config, errors) {\r\n // scale 整体缩放\r\n errors.push(...validateOptionalNumber({\r\n normalized: config,\r\n field: 'scale',\r\n value: config.scale,\r\n defaultValue: 1,\r\n min: 0\r\n }));\r\n // iconAddress 图标名或url(默认为空)\r\n errors.push(...validateOptionalString({\r\n normalized: config,\r\n field: 'iconAddress',\r\n value: config.iconAddress,\r\n defaultValue: ''\r\n }));\r\n // text 显示文本\r\n errors.push(...validateOptionalString({\r\n normalized: config,\r\n field: 'text',\r\n value: config.text,\r\n defaultValue: ''\r\n }));\r\n // textVisibleRange 文本可视范围\r\n errors.push(...validateOptionalArray({\r\n normalized: config,\r\n field: 'textVisibleRange',\r\n value: config.textVisibleRange,\r\n length: 2,\r\n defaultValue: [0, 2147483647]\r\n }));\r\n\r\n // iconStyle 图标样式\r\n ensureIconStyle(config, 'iconStyle', errors);\r\n\r\n // textStyle 文本样式\r\n ensureTextStyle(config, 'textStyle', errors);\r\n}\n\nexport function validateAnchorConfig(config, errors) {\r\n // scale 整体缩放\r\n errors.push(...validateOptionalNumber({\r\n normalized: config,\r\n field: 'scale',\r\n value: config.scale,\r\n defaultValue: 1,\r\n min: 0\r\n }));\r\n // iconAddress 图标名或url(默认为空)\r\n errors.push(...validateOptionalString({\r\n normalized: config,\r\n field: 'iconAddress',\r\n value: config.iconAddress,\r\n defaultValue: ''\r\n }));\r\n // text 显示文本\r\n errors.push(...validateOptionalString({\r\n normalized: config,\r\n field: 'text',\r\n value: config.text,\r\n defaultValue: ''\r\n }));\r\n // textVisibleRange 文本可视范围\r\n errors.push(...validateOptionalArray({\r\n normalized: config,\r\n field: 'textVisibleRange',\r\n value: config.textVisibleRange,\r\n length: 2,\r\n defaultValue: [0, 2147483647]\r\n }));\r\n\r\n // color 主题色\r\n errors.push(...validateOptionalColor({\r\n normalized: config,\r\n field: 'color',\r\n value: config.color\r\n }));\r\n\r\n // textStyle 文本样式\r\n ensureTextStyle(config, 'textStyle', errors);\r\n}\n\nexport function validateFlashIconConfig(config, errors) {\r\n errors.push(...validateOptionalColor({\r\n normalized: config,\r\n field: 'baseColor',\r\n value: config.baseColor,\r\n defaultValue: '#FF0000'\r\n }));\r\n errors.push(...validateOptionalColor({\r\n normalized: config,\r\n field: 'flashColor',\r\n value: config.flashColor,\r\n defaultValue: '#00FF66'\r\n }));\r\n errors.push(...validateOptionalString({\r\n normalized: config,\r\n field: 'size',\r\n value: config.size,\r\n defaultValue: '32'\r\n }));\r\n errors.push(...validateOptionalNumber({\r\n normalized: config,\r\n field: 'centerScale',\r\n value: config.centerScale,\r\n defaultValue: 0.5,\r\n min: 0,\r\n max: 1\r\n }));\r\n errors.push(...validateOptionalNumber({\r\n normalized: config,\r\n field: 'frequency',\r\n value: config.frequency,\r\n defaultValue: 1,\r\n min: 0\r\n }));\r\n}\n\nexport function validateMenuIconConfig(config, errors) {\r\n errors.push(...validateOptionalColor({\r\n normalized: config,\r\n field: 'color',\r\n value: config.color,\r\n defaultValue: '#1cfeff'\r\n }));\r\n errors.push(...validateOptionalString({\r\n normalized: config,\r\n field: 'title',\r\n value: config.title,\r\n defaultValue: ''\r\n }));\r\n errors.push(...validateOptionalString({\r\n normalized: config,\r\n field: 'iconAddress',\r\n value: config.iconAddress,\r\n defaultValue: ''\r\n }));\r\n // 二级弹窗可视范围\r\n errors.push(...validateOptionalArray({\r\n normalized: config,\r\n field: 'secondVisibleRange',\r\n value: config.secondVisibleRange,\r\n length: 2,\r\n defaultValue: [0, 2147483647]\r\n }));\r\n // 文本可视范围\r\n errors.push(...validateOptionalArray({\r\n normalized: config,\r\n field: 'textVisibleRange',\r\n value: config.textVisibleRange,\r\n length: 2,\r\n defaultValue: [0, 2147483647]\r\n }));\r\n const tagListArrayErrors = validateOptionalArray({\r\n normalized: config,\r\n field: 'tagList',\r\n value: config.tagList,\r\n length: 4,\r\n defaultValue: [\r\n { tagId: 'id1', iconAddress: 1 },\r\n { tagId: 'id2', iconAddress: 2 },\r\n { tagId: 'id3', iconAddress: 3 },\r\n { tagId: 'id4', iconAddress: 4 }\r\n ]\r\n });\r\n errors.push(...tagListArrayErrors);\r\n if (tagListArrayErrors.length === 0 && Array.isArray(config.tagList)) {\r\n config.tagList.forEach((item, index) => {\r\n if (!item) {\r\n errors.push(`tagList[${index}] 必须是对象`);\r\n return;\r\n }\r\n errors.push(...validateRequiredString({\r\n normalized: item,\r\n field: 'tagId',\r\n value: item.tagId\r\n }));\r\n errors.push(...validateOptionalNumber({\r\n normalized: item,\r\n field: 'iconAddress',\r\n value: item.iconAddress,\r\n min: 0\r\n }));\r\n });\r\n }\r\n}\n\nexport function validateFloodConfig(config, errors) {\r\n errors.push(...validateOptionalColor({\r\n normalized: config,\r\n field: 'color',\r\n value: config.color,\r\n defaultValue: '#1cfeff'\r\n }));\r\n errors.push(...validateOptionalString({\r\n normalized: config,\r\n field: 'showName',\r\n value: config.showName,\r\n defaultValue: ''\r\n }));\r\n errors.push(...validateOptionalString({\r\n normalized: config,\r\n field: 'showValue',\r\n value: config.showValue,\r\n defaultValue: ''\r\n }));\r\n errors.push(...validateOptionalString({\r\n normalized: config,\r\n field: 'showTime',\r\n value: config.showTime,\r\n defaultValue: ''\r\n }));\r\n}\n\nexport function validateCaptureConfig(config, errors) {\r\n errors.push(...validateOptionalColor({\r\n normalized: config,\r\n field: 'color',\r\n value: config.color,\r\n defaultValue: '#1cfeff'\r\n }));\r\n errors.push(...validateOptionalArray({\r\n normalized: config,\r\n field: 'margin',\r\n value: normalizeEmptyArray(config.margin),\r\n length: 4,\r\n defaultValue: [0, 0, 0, 0]\r\n }));\r\n errors.push(...validateOptionalString({\r\n normalized: config,\r\n field: 'title',\r\n value: config.title,\r\n defaultValue: ''\r\n }));\r\n // titleStyle 使用通用 TextStyle\r\n ensureTextStyle(config, 'titleStyle', errors);\r\n // dataTexts\r\n errors.push(...validateOptionalArray({\r\n normalized: config,\r\n field: 'dataTexts',\r\n value: config.dataTexts,\r\n defaultValue: []\r\n }));\r\n // 兼容旧结构:dataTexts: string[] + dataTextStyle\r\n if (Array.isArray(config.dataTexts) && config.dataTexts.length > 0 && typeof config.dataTexts[0] === 'string') {\r\n config.dataTexts = config.dataTexts.map(t => ({ key: '', value: t }));\r\n } else if (Array.isArray(config.dataTexts)) {\r\n config.dataTexts = config.dataTexts\r\n .filter(item => item && typeof item === 'object')\r\n .map(item => ({\r\n key: item.key ?? '',\r\n value: item.value ?? ''\r\n }));\r\n }\r\n\r\n // dataKeyStyle / dataValueStyle 使用通用 TextStyle\r\n // 兼容旧字段:dataTextStyle -> dataKeyStyle/dataValueStyle\r\n if (!config.dataKeyStyle && config.dataTextStyle) {\r\n config.dataKeyStyle = config.dataTextStyle;\r\n }\r\n if (!config.dataValueStyle && config.dataTextStyle) {\r\n config.dataValueStyle = config.dataTextStyle;\r\n }\r\n ensureTextStyle(config, 'dataKeyStyle', errors);\r\n ensureTextStyle(config, 'dataValueStyle', errors);\r\n // imageStyle 使用通用 IconStyle\r\n ensureIconStyle(config, 'imageStyle', errors);\r\n // coordinates\r\n errors.push(...validateOptionalArray({\r\n normalized: config,\r\n field: 'coordinates',\r\n value: config.coordinates,\r\n length: 3,\r\n defaultValue: [112.777328, 33.726444, 381.310616]\r\n }));\r\n // pitch\r\n errors.push(...validateOptionalNumber({\r\n normalized: config,\r\n field: 'pitch',\r\n value: config.pitch,\r\n defaultValue: 0,\r\n min: -90,\r\n max: 90\r\n }));\r\n // yaw\r\n errors.push(...validateOptionalNumber({\r\n normalized: config,\r\n field: 'yaw',\r\n value: config.yaw,\r\n defaultValue: 0\r\n }));\r\n // width\r\n errors.push(...validateOptionalNumber({\r\n normalized: config,\r\n field: 'width',\r\n value: config.width,\r\n defaultValue: 800,\r\n min: 0\r\n }));\r\n // height\r\n errors.push(...validateOptionalNumber({\r\n normalized: config,\r\n field: 'height',\r\n value: config.height,\r\n defaultValue: 600,\r\n min: 0\r\n }));\r\n}\n\nexport function validatePopupCustom1Config(config, errors) {\r\n errors.push(...validateOptionalNumber({\r\n normalized: config,\r\n field: 'scale',\r\n value: config.scale,\r\n defaultValue: 1,\r\n min: 0\r\n }));\r\n errors.push(...validateOptionalString({\r\n normalized: config,\r\n field: 'iconAddress',\r\n value: config.iconAddress,\r\n defaultValue: ''\r\n }));\r\n errors.push(...validateOptionalString({\r\n normalized: config,\r\n field: 'text',\r\n value: config.text,\r\n defaultValue: ''\r\n }));\r\n errors.push(...validateOptionalArray({\r\n normalized: config,\r\n field: 'textVisibleRange',\r\n value: config.textVisibleRange,\r\n length: 2,\r\n defaultValue: [0, 2147483647]\r\n }));\r\n errors.push(...validateOptionalArray({\r\n normalized: config,\r\n field: 'secondVisibleRange',\r\n value: config.secondVisibleRange,\r\n length: 2,\r\n defaultValue: [0, 2147483647]\r\n }));\r\n errors.push(...validateOptionalString({\r\n normalized: config,\r\n field: 'title',\r\n value: config.title,\r\n defaultValue: ''\r\n }));\r\n errors.push(...validateOptionalString({\r\n normalized: config,\r\n field: 'detailBtnText',\r\n value: config.detailBtnText,\r\n defaultValue: ''\r\n }));\r\n\r\n ensureTextStyle(config, 'textStyle', errors);\r\n ensureTextStyle(config, 'titleStyle', errors);\r\n ensureTextStyle(config, 'detailStyle', errors);\r\n ensureTextStyle(config, 'dataKeyStyle', errors);\r\n ensureTextStyle(config, 'dataValueStyle', errors);\r\n\r\n if (!Array.isArray(config.dataTexts)) {\r\n config.dataTexts = [];\r\n } else {\r\n config.dataTexts = config.dataTexts\r\n .filter(item => item && typeof item === 'object')\r\n .map(item => ({\r\n key: item.key ?? '',\r\n value: item.value ?? ''\r\n }));\r\n }\r\n}\n\nexport const DEFAULT_VISIBLE_RANGE = [0, 2147483647];\n\nexport function validateVisibleRange(params, normalized, errors, field = 'visibleRange') {\r\n errors.push(...validateOptionalArray({\r\n normalized,\r\n field,\r\n value: params[field],\r\n length: 2,\r\n defaultValue: [...DEFAULT_VISIBLE_RANGE]\r\n }));\r\n\r\n const range = normalized[field];\r\n if (!Array.isArray(range) || range.length !== 2) {\r\n return;\r\n }\r\n\r\n const min = Number(range[0]);\r\n const max = Number(range[1]);\r\n if (!Number.isFinite(min) || !Number.isFinite(max)) {\r\n errors.push(`[${field}]元素必须是数字`);\r\n return;\r\n }\r\n if (min > max) {\r\n errors.push(`[${field}]最小值不能大于最大值`);\r\n return;\r\n }\r\n normalized[field] = [min, max];\r\n}\n\nexport const MARKER_TYPE_LIST = [\r\n 'default',\r\n 'default1',\r\n 'default2',\r\n 'default3',\r\n 'flashIcon',\r\n 'component',\r\n 'customCom',\r\n 'menuIcon',\r\n 'flood',\r\n 'capture',\r\n 'anchor1',\r\n 'anchor2',\r\n 'anchor3',\r\n 'anchor4',\r\n 'anchor5',\r\n 'anchor6',\r\n 'html',\r\n 'url',\r\n 'lod'\r\n];\n","import {\n validateOptionalString,\n verifyEnumerationValue,\n validateCoordinatesRequired\n} from '../../baseConfig/validators.js';\nimport {\n generateUniqueId,\n validateConfigByMarkerType,\n validateLodConfig,\n validateVisibleRange,\n MARKER_TYPE_LIST\n} from './helpers.js';\n\nexport function iconMarker(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n \r\n // id 自动生成(明确检查 undefined、null 或空字符串,避免 0 被误判)\r\n if (params.id === undefined || params.id === null || params.id === '') {\r\n normalized.id = generateUniqueId();\r\n } else {\r\n normalized.id = params.id;\r\n }\r\n \r\n // coordinates 必填\r\n errors.push(...validateCoordinatesRequired(params.coordinates));\r\n \r\n // groupId 可选\r\n errors.push(...validateOptionalString({\r\n normalized,\r\n field: 'groupId',\r\n value: params.groupId\r\n }));\r\n // visibleRange 可选:[min, max]\r\n validateVisibleRange(params, normalized, errors);\r\n // isScreenSpace 可选\r\n errors.push(...verifyEnumerationValue({\r\n normalized,\r\n field: 'isScreenSpace',\r\n value: params.isScreenSpace,\r\n defaultValue: 1,\r\n type: 'number',\r\n list: [0, 1]\r\n }));\r\n\r\n // markerState 可选:true 显示 / false 隐藏,默认 true(2.1.2+)\r\n if (params.markerState === undefined || params.markerState === null) {\r\n normalized.markerState = true;\r\n } else if (typeof params.markerState !== 'boolean') {\r\n errors.push('[markerState]必须是布尔类型');\r\n } else {\r\n normalized.markerState = params.markerState;\r\n }\r\n \r\n // markerType 可选\r\n errors.push(...verifyEnumerationValue({\r\n normalized,\r\n field: 'markerType',\r\n value: params.markerType,\r\n defaultValue: 'default',\r\n type: 'string',\r\n list: MARKER_TYPE_LIST\r\n }));\r\n\r\n // recordData 可选:挂载自定义业务数据的对象容器\r\n // 要求传入对象,但在发送给三维端时统一转成字符串(JSON)\r\n if (params.recordData !== undefined) {\r\n const value = params.recordData;\r\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\r\n errors.push('[recordData] 必须是对象类型');\r\n } else {\r\n try {\r\n normalized.recordData = JSON.stringify(value);\r\n } catch (e) {\r\n errors.push('[recordData] 序列化失败,请检查是否包含循环引用');\r\n }\r\n }\r\n }\r\n\r\n // 根据 markerType 校验并补全 config(公用方法,lod 走 validateLodConfig)\r\n validateConfigByMarkerType(normalized, errors);\r\n\r\n return { errors, normalized };\r\n}\n","import {\n validateRequiredString,\n validateOptionalString,\n verifyEnumerationValue\n} from '../../baseConfig/validators.js';\nimport {\n generateUniqueId,\n validateConfigByMarkerType,\n validateVisibleRange,\n MARKER_TYPE_LIST\n} from './helpers.js';\n\nexport function followMarker(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n // id 自动生成(明确检查 undefined、null 或空字符串,避免 0 被误判)\r\n if (params.id === undefined || params.id === null || params.id === '') {\r\n normalized.id = generateUniqueId();\r\n } else {\r\n normalized.id = params.id;\r\n }\r\n // modelId 必填\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'modelId',\r\n value: params.modelId\r\n }));\r\n // groupId 可选\r\n errors.push(...validateOptionalString({\r\n normalized,\r\n field: 'groupId',\r\n value: params.groupId\r\n }));\r\n // visibleRange 可选:[min, max]\r\n validateVisibleRange(params, normalized, errors);\r\n // isScreenSpace 可选\r\n errors.push(...verifyEnumerationValue({\r\n normalized,\r\n field: 'isScreenSpace',\r\n value: params.isScreenSpace,\r\n defaultValue: 1,\r\n type: 'number',\r\n list: [0, 1]\r\n }));\r\n\r\n // markerState 可选:true 显示 / false 隐藏,默认 true(2.1.2+)\r\n if (params.markerState === undefined || params.markerState === null) {\r\n normalized.markerState = true;\r\n } else if (typeof params.markerState !== 'boolean') {\r\n errors.push('[markerState]必须是布尔类型');\r\n } else {\r\n normalized.markerState = params.markerState;\r\n }\r\n\r\n // markerType 可选\r\n errors.push(...verifyEnumerationValue({\r\n normalized,\r\n field: 'markerType',\r\n value: params.markerType,\r\n defaultValue: 'default',\r\n type: 'string',\r\n list: MARKER_TYPE_LIST\r\n }));\r\n\r\n // recordData 可选:挂载自定义业务数据的对象容器\r\n // 要求传入对象,但在发送给三维端时统一转成字符串(JSON)\r\n if (params.recordData !== undefined) {\r\n const value = params.recordData;\r\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\r\n errors.push('[recordData] 必须是对象类型');\r\n } else {\r\n try {\r\n normalized.recordData = JSON.stringify(value);\r\n } catch (e) {\r\n errors.push('[recordData] 序列化失败,请检查是否包含循环引用');\r\n }\r\n }\r\n }\r\n\r\n // 根据 markerType 校验并补全 config(公用方法)\r\n validateConfigByMarkerType(normalized, errors);\r\n return { errors, normalized };\r\n}\n","import {\n validateOptionalArray\n} from '../../baseConfig/validators.js';\n\nexport function removeMarker(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateOptionalArray({\r\n normalized,\r\n field: 'groupIds',\r\n value: params.groupIds,\r\n minLength: 1\r\n }));\r\n\r\n return { errors, normalized };\r\n}\n","export function removeAllMarker(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n return { errors, normalized };\r\n}\n","import {\n validateOptionalArray\n} from '../../baseConfig/validators.js';\n\nexport function showMarker(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateOptionalArray({\r\n normalized,\r\n field: 'groupIds',\r\n value: params.groupIds,\r\n minLength: 1\r\n }));\r\n\r\n return { errors, normalized };\r\n}\n","export function showAllMarker(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n return { errors, normalized };\r\n}\n","import {\n validateOptionalArray\n} from '../../baseConfig/validators.js';\n\nexport function hideMarker(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateOptionalArray({\r\n normalized,\r\n field: 'groupIds',\r\n value: params.groupIds,\r\n minLength: 1\r\n }));\r\n\r\n return { errors, normalized };\r\n}\n","export function hideAllMarker(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n return { errors, normalized };\r\n}\n","import {\n validateRequiredString\n} from '../../baseConfig/validators.js';\n\nexport function iconUrlMarker(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'url',\r\n value: params.url\r\n }));\r\n\r\n return { errors, normalized };\r\n}\n","import {\n validateOptionalNumber,\n validateOptionalString,\n validateOptionalArray,\n validateOptionalColor,\n verifyEnumerationValue\n} from '../../baseConfig/validators.js';\nimport {\n ensureTextStyle\n} from './helpers.js';\n\nexport function addClustering(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n \r\n // type 必填\r\n errors.push(...verifyEnumerationValue({\r\n normalized,\r\n field: 'type',\r\n value: params.type,\r\n type: 'string',\r\n list: ['all', 'groupId']\r\n }));\r\n \r\n // value 可选\r\n if (normalized.type === 'groupId') {\r\n errors.push(...validateOptionalArray({\r\n normalized,\r\n field: 'value',\r\n value: params.value,\r\n minLength: 1\r\n }));\r\n } else {\r\n errors.push(...validateOptionalArray({\r\n normalized,\r\n field: 'value',\r\n value: params.value\r\n }));\r\n }\r\n \r\n // distance 可选\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'distance',\r\n value: params.distance,\r\n defaultValue: 0,\r\n min: 0\r\n }));\r\n \r\n // clusteringType 可选\r\n errors.push(...verifyEnumerationValue({\r\n normalized,\r\n field: 'clusteringType',\r\n value: params.clusteringType,\r\n type: 'string',\r\n list: ['clusteringDefault']\r\n }));\r\n \r\n // clusteringConfig 可选\r\n if (!normalized.clusteringConfig) {\r\n normalized.clusteringConfig = {};\r\n }\r\n const clusteringConfig = normalized.clusteringConfig;\r\n \r\n errors.push(...validateOptionalColor({\r\n normalized: clusteringConfig,\r\n field: 'color',\r\n value: clusteringConfig.color,\r\n defaultValue: '#1cfeff'\r\n }));\r\n errors.push(...validateOptionalString({\r\n normalized: clusteringConfig,\r\n field: 'text',\r\n value: clusteringConfig.text,\r\n defaultValue: '${number}'\r\n }));\r\n \r\n ensureTextStyle(clusteringConfig, 'textStyle', errors);\r\n \r\n return { errors, normalized };\r\n}\n","import {\n validateOptionalArray,\n verifyEnumerationValue\n} from '../../baseConfig/validators.js';\n\nexport function removeClustering(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n \r\n errors.push(...verifyEnumerationValue({\r\n normalized,\r\n field: 'type',\r\n value: params.type,\r\n type: 'string',\r\n list: ['all', 'groupId']\r\n }));\r\n \r\n if (normalized.type === 'groupId') {\r\n errors.push(...validateOptionalArray({\r\n normalized,\r\n field: 'value',\r\n value: params.value,\r\n minLength: 1\r\n }));\r\n } else {\r\n errors.push(...validateOptionalArray({\r\n normalized,\r\n field: 'value',\r\n value: params.value\r\n }));\r\n }\r\n \r\n return { errors, normalized };\r\n}\n","import {\n validateOptionalString,\n validateOptionalColor,\n verifyEnumerationValue,\n validateCoordinatesRequired\n} from '../../baseConfig/validators.js';\nimport {\n generateUniqueId,\n ensureTextStyle,\n validatePopupCustom1Config,\n validateVisibleRange\n} from './helpers.js';\n\nexport function secondMarker(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n // id:允许不传,缺省自动生成(与 iconMarker / followMarker 一致,明确检查 undefined、null 或空字符串,避免 0 被误判)\r\n if (params.id === undefined || params.id === null || params.id === '') {\r\n normalized.id = generateUniqueId();\r\n } else {\r\n normalized.id = params.id;\r\n }\r\n\r\n // coordinates 必填\r\n errors.push(...validateCoordinatesRequired(params.coordinates));\r\n\r\n // groupId 可选\r\n errors.push(...validateOptionalString({\r\n normalized,\r\n field: 'groupId',\r\n value: params.groupId\r\n }));\r\n\r\n // visibleRange 可选:[min, max]\r\n validateVisibleRange(params, normalized, errors);\r\n\r\n // isScreenSpace 可选\r\n errors.push(...verifyEnumerationValue({\r\n normalized,\r\n field: 'isScreenSpace',\r\n value: params.isScreenSpace,\r\n defaultValue: 1,\r\n type: 'number',\r\n list: [0, 1]\r\n }));\r\n\r\n // isInitSecond 可选\r\n if (typeof params.isInitSecond === 'boolean') {\r\n normalized.isInitSecond = params.isInitSecond;\r\n } else if (params.isInitSecond === undefined) {\r\n normalized.isInitSecond = false;\r\n } else {\r\n errors.push('[isInitSecond]必须是布尔类型');\r\n }\r\n\r\n // triggerType 可选:click | move\r\n errors.push(...verifyEnumerationValue({\r\n normalized,\r\n field: 'triggerType',\r\n value: params.triggerType,\r\n defaultValue: 'click',\r\n type: 'string',\r\n list: ['click', 'move']\r\n }));\r\n\r\n // markerType 可选:menu1 | menuIcon | popupCustom1\r\n errors.push(...verifyEnumerationValue({\r\n normalized,\r\n field: 'markerType',\r\n value: params.markerType,\r\n defaultValue: 'menu1',\r\n type: 'string',\r\n list: ['menu1', 'menuIcon', 'popupCustom1']\r\n }));\r\n\r\n // config:按 markerType 兜底补全(结构参照文档截图)\r\n if (!normalized.config || typeof normalized.config !== 'object') {\r\n normalized.config = {};\r\n }\r\n const cfg = normalized.config;\r\n if (normalized.markerType !== 'popupCustom1') {\r\n errors.push(...validateOptionalColor({\r\n normalized: cfg,\r\n field: 'color',\r\n value: cfg.color,\r\n defaultValue: '#1cfeff'\r\n }));\r\n }\r\n errors.push(...validateOptionalString({\r\n normalized: cfg,\r\n field: 'title',\r\n value: cfg.title,\r\n defaultValue: ''\r\n }));\r\n\r\n if (normalized.markerType === 'popupCustom1') {\r\n validatePopupCustom1Config(cfg, errors);\r\n } else {\r\n // titleStyle / dataKeyStyle / dataValueStyle 使用通用 TextStyle 补全\r\n ensureTextStyle(cfg, 'titleStyle', errors);\r\n ensureTextStyle(cfg, 'dataKeyStyle', errors);\r\n ensureTextStyle(cfg, 'dataValueStyle', errors);\r\n\r\n // dataTexts:[{key,value}],缺省给空数组\r\n if (!Array.isArray(cfg.dataTexts)) {\r\n cfg.dataTexts = [];\r\n } else {\r\n cfg.dataTexts = cfg.dataTexts\r\n .filter(item => item && typeof item === 'object')\r\n .map(item => ({\r\n key: item.key ?? '',\r\n value: item.value ?? ''\r\n }));\r\n }\r\n }\r\n\r\n // recordData 可选:挂载自定义业务数据的对象容器\r\n // 要求传入对象,但在发送给三维端时统一转成字符串(JSON)\r\n if (params.recordData !== undefined) {\r\n const value = params.recordData;\r\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\r\n errors.push('[recordData] 必须是对象类型');\r\n } else {\r\n try {\r\n normalized.recordData = JSON.stringify(value);\r\n } catch (e) {\r\n errors.push('[recordData] 序列化失败,请检查是否包含循环引用');\r\n }\r\n }\r\n }\r\n\r\n return { errors, normalized };\r\n}\n","import { createNamespaceApi } from '../createNamespaceApi.js';\nimport { iconMarker } from './iconMarker.js';\nimport { followMarker } from './followMarker.js';\nimport { removeMarker } from './removeMarker.js';\nimport { removeAllMarker } from './removeAllMarker.js';\nimport { showMarker } from './showMarker.js';\nimport { showAllMarker } from './showAllMarker.js';\nimport { hideMarker } from './hideMarker.js';\nimport { hideAllMarker } from './hideAllMarker.js';\nimport { iconUrlMarker } from './iconUrlMarker.js';\nimport { addClustering } from './addClustering.js';\nimport { removeClustering } from './removeClustering.js';\nimport { secondMarker } from './secondMarker.js';\n\nexport const MarkerApi = createNamespaceApi('marker', {\n iconMarker,\n followMarker,\n removeMarker,\n removeAllMarker,\n showMarker,\n showAllMarker,\n hideMarker,\n hideAllMarker,\n iconUrlMarker,\n addClustering,\n removeClustering,\n secondMarker\n},\n{\n // 批量 json 撒点可能耗时更长\n getOptions: (method) => (method === 'iconUrlMarker' ? { timeout: 120000 } : {})\n});\n","export function getList(params) {\r\n const errors = [];\r\n // 归一化参数对象,用于回传默认值后的参数\r\n const normalized = { ...params };\r\n\r\n // getList 不需要参数校验,直接返回\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n validateOptionalNumber,\n validateOptionalColor\n} from '../../baseConfig/validators.js';\n\nexport const validateConfig = (config, errors, materialType) => {\r\n if (!config) return;\r\n \r\n // default/default1/default2/default3/flashIcon 使用相同的配置结构\r\n if (materialType === 'default' || materialType === 'default1' || materialType === 'default2' || materialType === 'default3' || materialType === 'default4' || materialType === 'flashIcon') {\r\n // 校验 color\r\n errors.push(...validateOptionalColor({\r\n normalized: config,\r\n field: 'color',\r\n value: config.color\r\n }));\r\n // 校验 flowVelocity\r\n errors.push(...validateOptionalNumber({\r\n normalized: config,\r\n field: 'flowVelocity',\r\n value: config.flowVelocity,\r\n min: 0\r\n }));\r\n // 校验 peakLength:浪头拖尾长度,范围 0-1,默认 0.5\r\n errors.push(...validateOptionalNumber({\r\n normalized: config,\r\n field: 'peakLength',\r\n value: config.peakLength,\r\n defaultValue: 0.5,\r\n min: 0,\r\n max: 1\r\n }));\r\n // 校验 foam:泡沫,范围 0-1,默认 1\r\n errors.push(...validateOptionalNumber({\r\n normalized: config,\r\n field: 'foam',\r\n value: config.foam,\r\n defaultValue: 1,\r\n min: 0,\r\n max: 1\r\n }));\r\n }\r\n};\n","import {\n validateRequiredString,\n validateOptionalNumber,\n verifyEnumerationValue\n} from '../../baseConfig/validators.js';\nimport {\n validateConfig\n} from './helpers.js';\n\nexport function record(params) {\r\n const errors = [];\r\n // 归一化参数对象,用于回传默认值后的参数\r\n const normalized = { ...params };\r\n\r\n // 必填项 floodPeakName\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'floodPeakName',\r\n value: params.floodPeakName\r\n }));\r\n\r\n // 可选项 materialType\r\n errors.push(...verifyEnumerationValue({\r\n normalized,\r\n field: 'materialType',\r\n value: params.materialType,\r\n defaultValue: 'default',\r\n type: 'string',\r\n list: ['default','default1','default2','default3','default4','flashIcon'] // 根据实际需求添加更多类型\r\n }));\r\n\r\n // 可选项 duration:总时长(秒)\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'duration',\r\n value: params.duration,\r\n min: 0\r\n }));\r\n\r\n // 获取 materialType 值(使用 normalized 中的值,因为 verifyEnumerationValue 可能设置了默认值)\r\n const materialType = normalized.materialType || params.materialType || 'default';\r\n \r\n // 校验 config(基于 materialType)\r\n validateConfig(normalized.config, errors, materialType);\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n validateRequiredNumber,\n validateRequiredString\n} from '../../baseConfig/validators.js';\n\nexport function offset(params) {\r\n const errors = [];\r\n // 归一化参数对象,用于回传默认值后的参数\r\n const normalized = { ...params };\r\n\r\n // 必填项 floodPeakName\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'floodPeakName',\r\n value: params.floodPeakName\r\n }));\r\n\r\n // 必填项 height(数字类型)\r\n errors.push(...validateRequiredNumber({\r\n normalized,\r\n field: 'height',\r\n value: params.height\r\n }));\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n validateRequiredString\n} from '../../baseConfig/validators.js';\n\nexport function offsetReset(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'floodPeakName',\r\n value: params.floodPeakName\r\n }));\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n validateRequiredString,\n validateOptionalArray\n} from '../../baseConfig/validators.js';\n\nexport function setText(params) {\r\n const errors = [];\r\n // 归一化参数对象,用于回传默认值后的参数\r\n const normalized = { ...params };\r\n\r\n // 必填项 floodPeakName\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'floodPeakName',\r\n value: params.floodPeakName\r\n }));\r\n\r\n // 必填项 textList\r\n const textListErrors = validateOptionalArray({\r\n normalized,\r\n field: 'textList',\r\n value: params.textList,\r\n required: true,\r\n minLength: 1\r\n });\r\n errors.push(...textListErrors);\r\n\r\n // 如果 textList 是数组,校验每个元素都是字符串\r\n if (Array.isArray(params.textList)) {\r\n params.textList.forEach((text, index) => {\r\n if (text !== undefined && text !== null && typeof text !== 'string') {\r\n errors.push(`[textList[${index}]]必须是字符串类型`);\r\n }\r\n });\r\n }\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n validateRequiredString\n} from '../../baseConfig/validators.js';\n\nexport function close(params) {\r\n const errors = [];\r\n // 归一化参数对象,用于回传默认值后的参数\r\n const normalized = { ...params };\r\n\r\n // 必填项 floodPeakName\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'floodPeakName',\r\n value: params.floodPeakName\r\n }));\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n validateRequiredString,\n validateOptionalNumber\n} from '../../baseConfig/validators.js';\n\nexport function cameraFollow(params) {\r\n const errors = [];\r\n // 归一化参数对象,用于回传默认值后的参数\r\n const normalized = { ...params };\r\n\r\n // 必填项 floodPeakName\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'floodPeakName',\r\n value: params.floodPeakName\r\n }));\r\n\r\n // 可选项 state(布尔类型,默认值 true)\r\n const state = params.state;\r\n if (state === undefined || state === null) {\r\n normalized.state = true; // 设置默认值\r\n } else if (typeof state !== 'boolean') {\r\n errors.push('[state]必须是布尔类型');\r\n } else {\r\n normalized.state = state;\r\n }\r\n\r\n for (const field of ['x', 'y', 'z', 'yaw']) {\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field,\r\n value: params[field],\r\n defaultValue: 0\r\n }));\r\n }\r\n\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'pitch',\r\n value: params.pitch,\r\n defaultValue: 0,\r\n min: -90,\r\n max: 90\r\n }));\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import { createNamespaceApi } from '../createNamespaceApi.js';\nimport { getList } from './getList.js';\nimport { record } from './record.js';\nimport { offset } from './offset.js';\nimport { offsetReset } from './offsetReset.js';\nimport { setText } from './setText.js';\nimport { close } from './close.js';\nimport { cameraFollow } from './cameraFollow.js';\n\nexport const FloodPeakApi = createNamespaceApi('floodPeak', {\n getList,\n record,\n offset,\n offsetReset,\n setText,\n close,\n cameraFollow\n},\n{\n getOptions: () => ({ timeout: 0 })\n});\n","import {\n validateRequiredString,\n validateOptionalNumber\n} from '../../baseConfig/validators.js';\n\n/** 播放动画 */\nexport function play(params = {}) {\n const normalized = { ...params };\n const errors = [];\n errors.push(...validateRequiredString({\n normalized,\n field: 'animName',\n value: params.animName\n }));\n errors.push(...validateOptionalNumber({\n normalized,\n field: 'frameRate',\n value: params.frameRate,\n defaultValue: 1,\n min: 0\n }));\n errors.push(...validateOptionalNumber({\n normalized,\n field: 'frameIndex',\n value: params.frameIndex,\n defaultValue: 0,\n min: 0\n }));\n if (params.isSyncview === undefined || params.isSyncview === null || params.isSyncview === '') {\n normalized.isSyncview = true;\n } else if (typeof params.isSyncview !== 'boolean') {\n errors.push('[isSyncview]必须是布尔类型');\n } else {\n normalized.isSyncview = params.isSyncview;\n }\n return { errors, normalized };\n}\n","import { validateRequiredString } from '../../baseConfig/validators.js';\n\n/** 继续播放 */\nexport function carryOn(params = {}) {\n const normalized = { ...params };\n const errors = [\n ...validateRequiredString({ normalized, field: 'animName', value: params.animName })\n ];\n return { errors, normalized };\n}\n","import { validateRequiredString } from '../../baseConfig/validators.js';\n\n/** 暂停动画 */\nexport function pause(params = {}) {\n const normalized = { ...params };\n const errors = [\n ...validateRequiredString({ normalized, field: 'animName', value: params.animName })\n ];\n return { errors, normalized };\n}\n","import { validateRequiredString } from '../../baseConfig/validators.js';\n\n/** 停止动画 */\nexport function stop(params = {}) {\n const normalized = { ...params };\n const errors = [\n ...validateRequiredString({ normalized, field: 'animName', value: params.animName })\n ];\n return { errors, normalized };\n}\n","import {\n validateRequiredString,\n validateRequiredNumber\n} from '../../baseConfig/validators.js';\n\n/** 跳转到指定帧 */\nexport function jumpToFrame(params = {}) {\n const normalized = { ...params };\n const errors = [];\n errors.push(...validateRequiredString({\n normalized,\n field: 'animName',\n value: params.animName\n }));\n errors.push(...validateRequiredNumber({\n normalized,\n field: 'frameIndex',\n value: params.frameIndex,\n required: true,\n min: 0\n }));\n return { errors, normalized };\n}\n","import {\n validateRequiredString,\n validateRequiredNumber\n} from '../../baseConfig/validators.js';\n\n/** 设置全局播放帧率 */\nexport function setPlaybackFrameRate(params = {}) {\n const normalized = { ...params };\n const errors = [];\n errors.push(...validateRequiredString({\n normalized,\n field: 'animName',\n value: params.animName\n }));\n errors.push(...validateRequiredNumber({\n normalized,\n field: 'frameRate',\n value: params.frameRate,\n required: true,\n min: 0\n }));\n return { errors, normalized };\n}\n","/** 监听动画数据 */\nexport function onData(params = {}) {\n const errors = [];\n if (params.onChange && typeof params.onChange !== 'function') {\n errors.push('onChange 必须为函数');\n }\n return { errors, normalized: { ...params } };\n}\n","import { createNamespaceApi } from '../createNamespaceApi.js';\nimport { play } from './play.js';\nimport { carryOn } from './carryOn.js';\nimport { pause } from './pause.js';\nimport { stop } from './stop.js';\nimport { jumpToFrame } from './jumpToFrame.js';\nimport { setPlaybackFrameRate } from './setPlaybackFrameRate.js';\nimport { onData } from './onData.js';\n\nexport const AnimationApi = createNamespaceApi('animation', {\n play,\n carryOn,\n pause,\n stop,\n jumpToFrame,\n setPlaybackFrameRate,\n onData\n});\n","import {\n validateRequiredNumber,\n validateRequiredString\n} from '../../baseConfig/validators.js';\n\nexport function create(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredNumber({\r\n normalized,\r\n field: 'xMin',\r\n value: params.xMin,\r\n required: true,\r\n min: -180,\r\n max: 180\r\n }));\r\n errors.push(...validateRequiredNumber({\r\n normalized,\r\n field: 'xMax',\r\n value: params.xMax,\r\n required: true,\r\n min: params.xMin,\r\n max: 180\r\n }));\r\n errors.push(...validateRequiredNumber({\r\n normalized,\r\n field: 'yMin',\r\n value: params.yMin,\r\n required: true,\r\n min: -90,\r\n max: 90\r\n }));\r\n errors.push(...validateRequiredNumber({\r\n normalized,\r\n field: 'yMax',\r\n value: params.yMax,\r\n required: true,\r\n min: params.yMin,\r\n max: 90\r\n }));\r\n errors.push(...validateRequiredNumber({\r\n normalized,\r\n field: 'minTerrain',\r\n value: params.minTerrain,\r\n required: true\r\n }));\r\n errors.push(...validateRequiredNumber({\r\n normalized,\r\n field: 'maxTerrain',\r\n value: params.maxTerrain,\r\n required: true,\r\n min: params.minTerrain\r\n }));\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'mapUrl',\r\n value: params.mapUrl\r\n }));\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'key',\r\n value: params.key\r\n }));\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n validateRequiredNumber,\n validateRequiredString\n} from '../../baseConfig/validators.js';\n\nexport function waterFlow(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredNumber({\r\n normalized,\r\n field: 'minWater',\r\n value: params.minWater,\r\n required: true\r\n }));\r\n errors.push(...validateRequiredNumber({\r\n normalized,\r\n field: 'maxWater',\r\n value: params.maxWater,\r\n required: true,\r\n min: params.minWater\r\n }));\r\n errors.push(...validateRequiredNumber({\r\n normalized,\r\n field: 'minU',\r\n value: params.minU,\r\n required: true\r\n }));\r\n errors.push(...validateRequiredNumber({\r\n normalized,\r\n field: 'maxU',\r\n value: params.maxU,\r\n required: true,\r\n min: params.minU\r\n }));\r\n errors.push(...validateRequiredNumber({\r\n normalized,\r\n field: 'minV',\r\n value: params.minV,\r\n required: true\r\n }));\r\n errors.push(...validateRequiredNumber({\r\n normalized,\r\n field: 'maxV',\r\n value: params.maxV,\r\n required: true,\r\n min: params.minV\r\n }));\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'waterFlowUrl',\r\n value: params.waterFlowUrl\r\n }));\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'key',\r\n value: params.key\r\n }));\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n validateRequiredNumber,\n validateRequiredString\n} from '../../baseConfig/validators.js';\n\nexport function waterDepth(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredNumber({\r\n normalized,\r\n field: 'minWater',\r\n value: params.minWater,\r\n required: true\r\n }));\r\n errors.push(...validateRequiredNumber({\r\n normalized,\r\n field: 'maxWater',\r\n value: params.maxWater,\r\n required: true,\r\n min: params.minWater\r\n }));\r\n\r\n if (params.rangeList === undefined || params.rangeList === null) {\r\n errors.push('[rangeList]为必填项');\r\n } else if (!Array.isArray(params.rangeList)) {\r\n errors.push('[rangeList]必须是数组类型');\r\n } else if (params.rangeList.length === 0) {\r\n errors.push('[rangeList]不能为空数组');\r\n } else {\r\n params.rangeList.forEach((item, index) => {\r\n if (typeof item !== 'object' || item === null) {\r\n errors.push(`[rangeList[${index}]]必须是对象类型`);\r\n return;\r\n }\r\n errors.push(...validateRequiredNumber({\r\n normalized: item,\r\n field: 'rangeDepth',\r\n value: item.rangeDepth,\r\n required: true\r\n }));\r\n errors.push(...validateRequiredString({\r\n normalized: item,\r\n field: 'color',\r\n value: item.color\r\n }));\r\n });\r\n }\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'waterDepthUrl',\r\n value: params.waterDepthUrl\r\n }));\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'key',\r\n value: params.key\r\n }));\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\r\n validateRequiredNumber,\r\n validateRequiredString\r\n} from '../../baseConfig/validators.js';\r\n\r\nexport function sediment(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'key',\r\n value: params.key\r\n }));\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'sedimentTexUrl',\r\n value: params.sedimentTexUrl\r\n }));\r\n errors.push(...validateRequiredNumber({\r\n normalized,\r\n field: 'minWater',\r\n value: params.minWater,\r\n required: true\r\n }));\r\n errors.push(...validateRequiredNumber({\r\n normalized,\r\n field: 'maxWater',\r\n value: params.maxWater,\r\n required: true,\r\n min: params.minWater\r\n }));\r\n errors.push(...validateRequiredNumber({\r\n normalized,\r\n field: 'minDoD',\r\n value: params.minDoD,\r\n required: true\r\n }));\r\n errors.push(...validateRequiredNumber({\r\n normalized,\r\n field: 'maxDoD',\r\n value: params.maxDoD,\r\n required: true,\r\n min: params.minDoD\r\n }));\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\r\n","import {\n validateRequiredString,\n validateOptionalNumber\n} from '../../baseConfig/validators.js';\n\nexport function materialParams(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n // key: string 必填,唯一标识\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'key',\r\n value: params.key\r\n }));\r\n\r\n // heightOffset: number 可选,默认 0,整体网格高度偏移\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'heightOffset',\r\n value: params.heightOffset,\r\n defaultValue: 0\r\n }));\r\n\r\n // resolutionScale: number 可选,默认 0.2,法线的分辨率缩放\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'resolutionScale',\r\n value: params.resolutionScale,\r\n defaultValue: 0.2,\r\n min: 0\r\n }));\r\n\r\n // cameraLODDistance: number 可选,默认 40000,相机每层 LOD 距离\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'cameraLODDistance',\r\n value: params.cameraLODDistance,\r\n defaultValue: 40000,\r\n min: 0\r\n }));\r\n\r\n // cameraLODNum: number 可选,默认 4,相机几层 LOD 数\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'cameraLODNum',\r\n value: params.cameraLODNum,\r\n defaultValue: 4,\r\n min: 0\r\n }));\r\n\r\n // cameraRemapMaxOffest: number 可选,默认 40(文档字段名)\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'cameraRemapMaxOffest',\r\n value: params.cameraRemapMaxOffest,\r\n defaultValue: 40,\r\n min: 0\r\n }));\r\n\r\n // flowAmplitude: number 可选,默认 0.5,法线流动幅度\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'flowAmplitude',\r\n value: params.flowAmplitude,\r\n defaultValue: 0.5,\r\n min: 0\r\n }));\r\n\r\n // flowFrequency: number 可选,默认 0.5,法线流动频率\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'flowFrequency',\r\n value: params.flowFrequency,\r\n defaultValue: 0.5,\r\n min: 0\r\n }));\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n validateRequiredString\n} from '../../baseConfig/validators.js';\n\nexport function close(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'key',\r\n value: params.key\r\n }));\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import { createNamespaceApi } from '../createNamespaceApi.js';\nimport { create } from './create.js';\nimport { waterFlow } from './waterFlow.js';\nimport { waterDepth } from './waterDepth.js';\nimport { sediment } from './sediment.js';\nimport { materialParams } from './materialParams.js';\nimport { close } from './close.js';\n\nexport const HydrodynamicForceApi = createNamespaceApi('hydrodynamicForce', {\n create,\n waterFlow,\n waterDepth,\n sediment,\n materialParams,\n close\n});\n","import {\n validateRequiredString\n} from '../../baseConfig/validators.js';\n\n// id获取\nexport function getById(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'id',\r\n value: params.id\r\n }));\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n validateRequiredString\n} from '../../baseConfig/validators.js';\n\n// tag获取\nexport function getByTag(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'tag',\r\n value: params.tag\r\n }));\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n validateOptionalString,\n validateOptionalNumber\n} from '../../baseConfig/validators.js';\n\nexport const hasValue = (value) => !(value === undefined || value === null || value === '');\n\nexport function ensureSingleIdentifier(errors, { id, tag }) {\r\n const hasId = hasValue(id);\r\n const hasTag = hasValue(tag);\r\n\r\n if (!hasId && !hasTag) {\r\n errors.push('[id]和[tag]必须提供其中一个');\r\n return;\r\n }\r\n if (hasId && hasTag) {\r\n errors.push('[id]和[tag]不能同时提供');\r\n return;\r\n }\r\n if (hasId) {\r\n errors.push(...validateOptionalString({\r\n field: 'id',\r\n value: id\r\n }));\r\n } else if (hasTag) {\r\n errors.push(...validateOptionalString({\r\n field: 'tag',\r\n value: tag\r\n }));\r\n }\r\n}\n\nexport function validateVector3(value, fieldName, errors) {\r\n if (value === undefined || value === null) return;\r\n if (typeof value !== 'object') {\r\n errors.push(`[${fieldName}]必须是对象类型`);\r\n return;\r\n }\r\n const { x, y, z } = value;\r\n if (x !== undefined && x !== null) {\r\n const normalizedX = x === '' ? Number.NaN : x;\r\n errors.push(...validateOptionalNumber({\r\n field: `${fieldName}.x`,\r\n value: normalizedX\r\n }));\r\n }\r\n if (y !== undefined && y !== null) {\r\n const normalizedY = y === '' ? Number.NaN : y;\r\n errors.push(...validateOptionalNumber({\r\n field: `${fieldName}.y`,\r\n value: normalizedY\r\n }));\r\n }\r\n if (z !== undefined && z !== null) {\r\n const normalizedZ = z === '' ? Number.NaN : z;\r\n errors.push(...validateOptionalNumber({\r\n field: `${fieldName}.z`,\r\n value: normalizedZ\r\n }));\r\n }\r\n}\n\nexport function validateIdsOrTagsArrays(errors, ids, tags) {\r\n const validateCollection = (field, value) => {\r\n if (!hasValue(value)) return false;\r\n if (!Array.isArray(value)) {\r\n errors.push(`[${field}]必须是数组类型`);\r\n return false;\r\n }\r\n if (value.length === 0) {\r\n errors.push(`[${field}]不能为空数组`);\r\n return false;\r\n }\r\n return true;\r\n };\r\n\r\n const idsValid = validateCollection('ids', ids);\r\n const tagsValid = validateCollection('tags', tags);\r\n\r\n if (!idsValid && !tagsValid) {\r\n errors.push('[ids]和[tags]必须提供其中一个');\r\n } else if (idsValid && tagsValid) {\r\n errors.push('[ids]和[tags]不能同时提供');\r\n }\r\n}\n\nexport const SLICE_MODE_LIST = ['None', 'Color', 'Texture', 'Material'];\n\nexport function validateBooleanField(errors, normalized, field, value, defaultValue) {\r\n if (value === undefined || value === null) {\r\n normalized[field] = defaultValue;\r\n return;\r\n }\r\n if (typeof value !== 'boolean') {\r\n errors.push(`[${field}]必须是布尔类型`);\r\n return;\r\n }\r\n normalized[field] = value;\r\n}\n","import {\n validateOptionalNumber\n} from '../../baseConfig/validators.js';\nimport {\n ensureSingleIdentifier,\n validateVector3\n} from './helpers.js';\n\nexport function setTransform(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n ensureSingleIdentifier(errors, params);\r\n\r\n validateVector3(params.rotation, 'rotation', errors);\r\n validateVector3(params.scale, 'scale', errors);\r\n validateVector3(params.translation, 'translation', errors);\r\n\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'duration',\r\n value: params.duration,\r\n defaultValue: 0,\r\n min: 0\r\n }));\r\n\r\n if (params.list !== undefined && params.list !== null) {\r\n if (!Array.isArray(params.list)) {\r\n errors.push('[list]必须是数组类型');\r\n } else {\r\n params.list.forEach((item, index) => {\r\n if (typeof item !== 'object' || item === null) {\r\n errors.push(`[list[${index}]]必须是对象类型`);\r\n return;\r\n }\r\n validateVector3(item.rotation, `list[${index}].rotation`, errors);\r\n validateVector3(item.scale, `list[${index}].scale`, errors);\r\n validateVector3(item.translation, `list[${index}].translation`, errors);\r\n errors.push(...validateOptionalNumber({\r\n normalized: item,\r\n field: 'duration',\r\n value: item.duration,\r\n min: 0\r\n }));\r\n });\r\n }\r\n }\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n ensureSingleIdentifier\n} from './helpers.js';\n\n// 清除模型变换\nexport function clearTransform(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n ensureSingleIdentifier(errors, params);\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n validateOptionalNumber\n} from '../../baseConfig/validators.js';\nimport {\n ensureSingleIdentifier,\n validateVector3\n} from './helpers.js';\n\n// 基于初始位置的模型偏移(offset)\nexport function offset(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n ensureSingleIdentifier(errors, params);\r\n\r\n validateVector3(params.rotation, 'rotation', errors);\r\n validateVector3(params.scale, 'scale', errors);\r\n validateVector3(params.translation, 'translation', errors);\r\n\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'duration',\r\n value: params.duration,\r\n defaultValue: 0,\r\n min: 0\r\n }));\r\n\r\n if (params.list !== undefined && params.list !== null) {\r\n if (!Array.isArray(params.list)) {\r\n errors.push('[list]必须是数组类型');\r\n } else {\r\n params.list.forEach((item, index) => {\r\n if (typeof item !== 'object' || item === null) {\r\n errors.push(`[list[${index}]]必须是对象类型`);\r\n return;\r\n }\r\n validateVector3(item.rotation, `list[${index}].rotation`, errors);\r\n validateVector3(item.scale, `list[${index}].scale`, errors);\r\n validateVector3(item.translation, `list[${index}].translation`, errors);\r\n errors.push(...validateOptionalNumber({\r\n normalized: item,\r\n field: 'duration',\r\n value: item.duration,\r\n min: 0\r\n }));\r\n });\r\n }\r\n }\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n ensureSingleIdentifier\n} from './helpers.js';\n\n// 清空模型偏移(clearOffset)\nexport function clearOffset(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n ensureSingleIdentifier(errors, params);\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n validateIdsOrTagsArrays\n} from './helpers.js';\n\n// 模型显示校验\nexport function show(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n validateIdsOrTagsArrays(errors, params.ids, params.tags);\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n validateIdsOrTagsArrays\n} from './helpers.js';\n\n// 模型隐藏校验\nexport function hide(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n validateIdsOrTagsArrays(errors, params.ids, params.tags);\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n validateIdsOrTagsArrays\n} from './helpers.js';\n\n// 独显模式校验\nexport function showOnly(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n validateIdsOrTagsArrays(errors, params.ids, params.tags);\r\n\r\n if (params.isIgnoreMarker !== undefined && typeof params.isIgnoreMarker !== 'boolean') {\r\n errors.push('[isIgnoreMarker]必须是布尔类型');\r\n } else if (params.isIgnoreMarker === undefined) {\r\n normalized.isIgnoreMarker = true;\r\n } else {\r\n normalized.isIgnoreMarker = params.isIgnoreMarker;\r\n }\r\n\r\n if (params.isIgnoreSky !== undefined && typeof params.isIgnoreSky !== 'boolean') {\r\n errors.push('[isIgnoreSky]必须是布尔类型');\r\n } else if (params.isIgnoreSky === undefined) {\r\n normalized.isIgnoreSky = false;\r\n } else {\r\n normalized.isIgnoreSky = params.isIgnoreSky;\r\n }\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n validateOptionalNumber,\n validateOptionalColor\n} from '../../baseConfig/validators.js';\nimport {\n validateIdsOrTagsArrays\n} from './helpers.js';\n\n// 模型高亮\nexport function highLight(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n validateIdsOrTagsArrays(errors, params.ids, params.tags);\r\n\r\n // 确保 config 对象存在\r\n if (!normalized.config) {\r\n normalized.config = {};\r\n }\r\n\r\n // 校验 config 配置\r\n errors.push(...validateOptionalColor({\r\n normalized: normalized.config,\r\n field: 'color',\r\n value: normalized.config.color,\r\n defaultValue: '#003748'\r\n }));\r\n errors.push(...validateOptionalNumber({\r\n normalized: normalized.config,\r\n field: 'opacity',\r\n value: normalized.config.opacity,\r\n min: 0,\r\n max: 1\r\n }));\r\n errors.push(...validateOptionalNumber({\r\n normalized: normalized.config,\r\n field: 'minBrightness',\r\n value: normalized.config.minBrightness,\r\n min: 0\r\n }));\r\n errors.push(...validateOptionalNumber({\r\n normalized: normalized.config,\r\n field: 'maxBrightness',\r\n value: normalized.config.maxBrightness,\r\n min: normalized.config.minBrightness\r\n }));\r\n errors.push(...validateOptionalNumber({\r\n normalized: normalized.config,\r\n field: 'frequency',\r\n value: normalized.config.frequency,\r\n defaultValue: 2,\r\n min: 0\r\n }));\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n validateIdsOrTagsArrays\n} from './helpers.js';\n\n// 移除模型高亮校验\nexport function removeHighLight(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n validateIdsOrTagsArrays(errors, params.ids, params.tags);\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n validateOptionalNumber,\n validateOptionalColor\n} from '../../baseConfig/validators.js';\nimport {\n validateIdsOrTagsArrays\n} from './helpers.js';\n\n// 模型透明度\nexport function setOpacity(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n validateIdsOrTagsArrays(errors, params.ids, params.tags);\r\n \r\n // 确保 config 对象存在\r\n if (!normalized.config) {\r\n normalized.config = {};\r\n }\r\n\r\n // 校验 config 配置\r\n errors.push(...validateOptionalNumber({\r\n normalized: normalized.config,\r\n field: 'opacity',\r\n value: params.config?.opacity,\r\n defaultValue: 0.5,\r\n min: 0,\r\n max: 1\r\n }));\r\n errors.push(...validateOptionalNumber({\r\n normalized: normalized.config,\r\n field: 'selfLuminous',\r\n value: params.config?.selfLuminous,\r\n defaultValue: 0,\r\n min: 0\r\n }));\r\n\r\n errors.push(...validateOptionalColor({\r\n normalized: normalized.config,\r\n field: 'color',\r\n value: params.config?.color,\r\n defaultValue: '#ffffff'\r\n }));\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n validateOptionalNumber,\n validateOptionalColor\n} from '../../baseConfig/validators.js';\nimport {\n validateIdsOrTagsArrays\n} from './helpers.js';\n\n// 模型描边\nexport function outline(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n validateIdsOrTagsArrays(errors, params.ids, params.tags);\r\n\r\n // 确保 config 对象存在\r\n if (!normalized.config) {\r\n normalized.config = {};\r\n }\r\n\r\n // 校验 config 配置\r\n errors.push(...validateOptionalColor({\r\n normalized: normalized.config,\r\n field: 'color',\r\n value: normalized.config.color,\r\n defaultValue: '#1A80CCFF'\r\n }));\r\n errors.push(...validateOptionalNumber({\r\n normalized: normalized.config,\r\n field: 'brightness',\r\n value: normalized.config.brightness,\r\n defaultValue: 1,\r\n min: 0\r\n }));\r\n errors.push(...validateOptionalNumber({\r\n normalized: normalized.config,\r\n field: 'width',\r\n value: normalized.config.width,\r\n defaultValue: 1,\r\n min: 0\r\n }));\r\n // IsSolidMesh 布尔值校验\r\n if (normalized.config.IsSolidMesh !== undefined) {\r\n if (typeof normalized.config.IsSolidMesh !== 'boolean') {\r\n errors.push('[config.IsSolidMesh] 必须是布尔类型');\r\n }\r\n } else {\r\n normalized.config.IsSolidMesh = false;\r\n }\r\n errors.push(...validateOptionalColor({\r\n normalized: normalized.config,\r\n field: 'meshColor',\r\n value: normalized.config.meshColor,\r\n defaultValue: '#000305FF'\r\n }));\r\n errors.push(...validateOptionalNumber({\r\n normalized: normalized.config,\r\n field: 'meshBrightness',\r\n value: normalized.config.meshBrightness,\r\n defaultValue: 1,\r\n min: 0\r\n }));\r\n errors.push(...validateOptionalNumber({\r\n normalized: normalized.config,\r\n field: 'meshOpacity',\r\n value: normalized.config.meshOpacity,\r\n defaultValue: 0.02,\r\n min: 0,\r\n max: 1\r\n }));\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n validateIdsOrTagsArrays\n} from './helpers.js';\n\n// 移除模型描边\nexport function removeOutline(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n validateIdsOrTagsArrays(errors, params.ids, params.tags);\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","// 移除全部模型描边\nexport function removeAllOutline(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n // 此方法不需要任何参数,直接返回\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n validateOptionalString,\n validateRequiredString,\n validateOptionalNumber,\n validateOptionalColor,\n validateOptionalArray,\n verifyEnumerationValue\n} from '../../baseConfig/validators.js';\nimport {\n SLICE_MODE_LIST,\n validateBooleanField\n} from './helpers.js';\n\nexport function openSlice(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'id',\r\n value: params.id\r\n }));\r\n\r\n errors.push(...verifyEnumerationValue({\r\n normalized,\r\n field: 'mode',\r\n value: params.mode,\r\n defaultValue: 'None',\r\n type: 'string',\r\n list: SLICE_MODE_LIST\r\n }));\r\n\r\n errors.push(...validateOptionalColor({\r\n normalized,\r\n field: 'color',\r\n value: params.color,\r\n defaultValue: '#FFFFFF00'\r\n }));\r\n\r\n errors.push(...validateOptionalString({\r\n normalized,\r\n field: 'texturePath',\r\n value: params.texturePath,\r\n defaultValue: ''\r\n }));\r\n\r\n errors.push(...validateOptionalString({\r\n normalized,\r\n field: 'materialName',\r\n value: params.materialName,\r\n defaultValue: ''\r\n }));\r\n\r\n errors.push(...validateOptionalArray({\r\n normalized,\r\n field: 'uvOffset',\r\n value: params.uvOffset,\r\n length: 2,\r\n defaultValue: [0, 0]\r\n }));\r\n\r\n errors.push(...validateOptionalArray({\r\n normalized,\r\n field: 'uvScale',\r\n value: params.uvScale,\r\n length: 2,\r\n defaultValue: [1, 1]\r\n }));\r\n\r\n validateBooleanField(errors, normalized, 'isWorldUV', params.isWorldUV, false);\r\n\r\n errors.push(...validateOptionalArray({\r\n normalized,\r\n field: 'direction',\r\n value: params.direction,\r\n length: 3,\r\n defaultValue: [0, 0, -1]\r\n }));\r\n\r\n validateBooleanField(errors, normalized, 'isWorldDirection', params.isWorldDirection, false);\r\n\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'ratio',\r\n value: params.ratio,\r\n defaultValue: 0.5,\r\n min: 0,\r\n max: 1\r\n }));\r\n\r\n return { errors, normalized };\r\n}\n","import {\n validateRequiredString\n} from '../../baseConfig/validators.js';\n\nexport function closeSlice(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'id',\r\n value: params.id\r\n }));\r\n\r\n return { errors, normalized };\r\n}\n","export function closeAllSlice(params = {}) {\r\n return {\r\n errors: [],\r\n normalized: { ...params }\r\n };\r\n}\n","import { createNamespaceApi } from '../createNamespaceApi.js';\nimport { getById } from './getById.js';\nimport { getByTag } from './getByTag.js';\nimport { setTransform } from './setTransform.js';\nimport { clearTransform } from './clearTransform.js';\nimport { offset } from './offset.js';\nimport { clearOffset } from './clearOffset.js';\nimport { show } from './show.js';\nimport { hide } from './hide.js';\nimport { showOnly } from './showOnly.js';\nimport { highLight } from './highLight.js';\nimport { removeHighLight } from './removeHighLight.js';\nimport { setOpacity } from './setOpacity.js';\nimport { outline } from './outline.js';\nimport { removeOutline } from './removeOutline.js';\nimport { removeAllOutline } from './removeAllOutline.js';\nimport { openSlice } from './openSlice.js';\nimport { closeSlice } from './closeSlice.js';\nimport { closeAllSlice } from './closeAllSlice.js';\n\nexport const SceneModelApi = createNamespaceApi('sceneModel', {\n getById,\n getByTag,\n setTransform,\n clearTransform,\n offset,\n clearOffset,\n show,\n hide,\n showOnly,\n highLight,\n removeHighLight,\n setOpacity,\n outline,\n removeOutline,\n removeAllOutline,\n openSlice,\n closeSlice,\n closeAllSlice\n});\n","import {\n validateRequiredNumber\n} from '../../baseConfig/validators.js';\n\nexport function time(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n // 必填项 hour\r\n errors.push(...validateRequiredNumber({\r\n normalized,\r\n field: 'hour',\r\n value: params.hour,\r\n min: 1,\r\n max: 24\r\n }));\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","export function weather(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n // 必填项 type,必须是字符串类型\r\n if (!params.type || typeof params.type !== 'string') {\r\n errors.push('[type]为必填项,且必须是字符串类型');\r\n } else {\r\n normalized.type = params.type;\r\n }\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import { createNamespaceApi } from '../createNamespaceApi.js';\nimport { time } from './time.js';\nimport { weather } from './weather.js';\n\nexport const AtmosphericEffectsApi = createNamespaceApi('atmosphericEffects', {\n time,\n weather\n});\n","import {\n verifyEnumerationValue\n} from '../../baseConfig/validators.js';\n\nexport function onMouseClick(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n errors.push(...verifyEnumerationValue({\r\n normalized,\r\n field: 'pressKey',\r\n value: params.pressKey,\r\n defaultValue: 'LeftMouseButton',\r\n type: 'string',\r\n list: ['LeftMouseButton', 'RightMouseButton', 'MiddleMouseButton']\r\n }));\r\n\r\n // 回调函数在前端本地执行,这里仅校验如果传入则必须为函数\r\n if (normalized.onMouseClick && typeof normalized.onMouseClick !== 'function') {\r\n errors.push('onMouseClick 参数 onMouseClick 必须为函数');\r\n }\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import {\n verifyEnumerationValue\n} from '../../baseConfig/validators.js';\n\nexport function offMouseClick(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...verifyEnumerationValue({\r\n normalized,\r\n field: 'pressKey',\r\n value: params.pressKey,\r\n defaultValue: '',\r\n type: 'string',\r\n list: ['LeftMouseButton', 'RightMouseButton', 'MiddleMouseButton']\r\n }));\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","export function onDistance(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n \r\n // onDistance 不需要参数\r\n \r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","export function offDistance(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n \r\n // offDistance 不需要参数\r\n \r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","export function editConfigFile(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n \r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import { createNamespaceApi } from '../createNamespaceApi.js';\nimport { onMouseClick } from './onMouseClick.js';\nimport { offMouseClick } from './offMouseClick.js';\nimport { onDistance } from './onDistance.js';\nimport { offDistance } from './offDistance.js';\nimport { editConfigFile } from './editConfigFile.js';\n\nexport const ToolApi = createNamespaceApi('tool', {\n onMouseClick,\n offMouseClick,\n onDistance,\n offDistance,\n editConfigFile\n});\n","export function generateUniqueId() {\r\n return 'line_' + Date.now() + '_' + Math.random().toString(36).substring(2, 9);\r\n}\n","import {\n validateOptionalString,\n validateOptionalNumber,\n validateOptionalColor,\n verifyEnumerationValue\n} from '../../baseConfig/validators.js';\nimport {\n generateUniqueId\n} from './helpers.js';\n\nexport function addLine(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n // coordinates 必填 - 坐标点数组\r\n if (!params.coordinates || !Array.isArray(params.coordinates)) {\r\n errors.push('[coordinates] 为必填项,且必须是数组类型');\r\n } else if (params.coordinates.length < 2) {\r\n errors.push('[coordinates] 至少需要2个坐标点才能绘制线条');\r\n } else {\r\n // 校验每个坐标点\r\n const validCoordinates = [];\r\n params.coordinates.forEach((coord, index) => {\r\n if (!Array.isArray(coord) || coord.length < 3) {\r\n errors.push(`[coordinates[${index}]] 坐标点格式错误,应为 [经度, 纬度, 高度]`);\r\n } else {\r\n const [longitude, latitude, altitude] = coord;\r\n const coordErrors = [];\r\n \r\n if (typeof longitude !== 'number' || longitude < -180 || longitude > 180) {\r\n coordErrors.push(`[coordinates[${index}][0]] 经度取值范围:-180~180`);\r\n }\r\n if (typeof latitude !== 'number' || latitude < -90 || latitude > 90) {\r\n coordErrors.push(`[coordinates[${index}][1]] 纬度取值范围:-90~90`);\r\n }\r\n if (typeof altitude !== 'number') {\r\n coordErrors.push(`[coordinates[${index}][2]] 高度必须是数字类型`);\r\n }\r\n \r\n if (coordErrors.length === 0) {\r\n validCoordinates.push([longitude, latitude, altitude]);\r\n } else {\r\n errors.push(...coordErrors);\r\n }\r\n }\r\n });\r\n \r\n if (validCoordinates.length >= 2) {\r\n normalized.coordinates = validCoordinates;\r\n }\r\n }\r\n\r\n // type 可选 - 空间类型:0(世界空间) | 1(屏幕空间)\r\n errors.push(...verifyEnumerationValue({\r\n normalized,\r\n field: 'type',\r\n value: params.type,\r\n defaultValue: 0,\r\n type: 'number',\r\n list: [0, 1]\r\n }));\r\n\r\n // width 可选 - 线段宽度(米)\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'width',\r\n value: params.width,\r\n defaultValue: 1,\r\n min: 0.1\r\n }));\r\n\r\n // key 可选 - 唯一标识\r\n if (params.key === undefined || params.key === null || params.key === '') {\r\n normalized.key = generateUniqueId();\r\n } else {\r\n errors.push(...validateOptionalString({\r\n normalized,\r\n field: 'key',\r\n value: params.key\r\n }));\r\n }\r\n\r\n // color 可选 - 颜色参数\r\n errors.push(...validateOptionalColor({\r\n normalized,\r\n field: 'color',\r\n value: params.color,\r\n defaultValue: '#1cfeff'\r\n }));\r\n\r\n // spacing 可选 - 线段间距\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'spacing',\r\n value: params.spacing,\r\n min: 0\r\n }));\r\n\r\n // interpolate 可选 - smooth(平滑曲线) | linear(线性折线)\r\n errors.push(...verifyEnumerationValue({\r\n normalized,\r\n field: 'interpolate',\r\n value: params.interpolate,\r\n defaultValue: 'smooth',\r\n type: 'string',\r\n list: ['smooth', 'linear']\r\n }));\r\n\r\n // startImg 可选 - 起点图片URL\r\n errors.push(...validateOptionalString({\r\n normalized,\r\n field: 'startImg',\r\n value: params.startImg\r\n }));\r\n\r\n // endImg 可选 - 终点图片URL\r\n errors.push(...validateOptionalString({\r\n normalized,\r\n field: 'endImg',\r\n value: params.endImg\r\n }));\r\n\r\n // midImg 可选 - 中间点图片URL\r\n errors.push(...validateOptionalString({\r\n normalized,\r\n field: 'midImg',\r\n value: params.midImg\r\n }));\r\n\r\n return { errors, normalized };\r\n}\n","export function clearLine(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n // key 必填 - 要移除的线条标识数组\r\n if (!params.key || !Array.isArray(params.key)) {\r\n errors.push('[key] 为必填项,且必须是数组类型');\r\n } else if (params.key.length === 0) {\r\n errors.push('[key] 至少需要一个线条标识');\r\n } else {\r\n // 校验数组中的每个key\r\n const validKeys = [];\r\n params.key.forEach((keyItem, index) => {\r\n if (typeof keyItem !== 'string' || keyItem.trim() === '') {\r\n errors.push(`[key[${index}]] 必须是非空字符串`);\r\n } else {\r\n validKeys.push(keyItem.trim());\r\n }\r\n });\r\n \r\n if (validKeys.length > 0) {\r\n normalized.key = validKeys;\r\n }\r\n }\r\n\r\n return { errors, normalized };\r\n}\n","export function clearAllLine(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n // 此方法不需要任何参数,直接返回\r\n return { errors, normalized };\r\n}\n","import { createNamespaceApi } from '../createNamespaceApi.js';\nimport { addLine } from './addLine.js';\nimport { clearLine } from './clearLine.js';\nimport { clearAllLine } from './clearAllLine.js';\n\nexport const LineApi = createNamespaceApi('line', {\n addLine,\n clearLine,\n clearAllLine\n});\n","import {\n validateRequiredString\n} from '../../baseConfig/validators.js';\n\nexport function switchLevel(params) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n // levelName 必填\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'levelName',\r\n value: params.levelName\r\n }));\r\n\r\n return {\r\n errors,\r\n normalized\r\n };\r\n}\n","import { createNamespaceApi } from '../createNamespaceApi.js';\nimport { switchLevel } from './switch.js';\n\nexport const LevelApi = createNamespaceApi('level', {\n switch: switchLevel\n});\n","import {\n validateRequiredString\n} from '../../baseConfig/validators.js';\n\nexport function getInfo(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'id',\r\n value: params.id\r\n }));\r\n\r\n return { errors, normalized };\r\n}\n","import {\n validateOptionalArray,\n validateRequiredString\n} from '../../baseConfig/validators.js';\n\nexport function getFieldRange(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'id',\r\n value: params.id\r\n }));\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'fieldName',\r\n value: params.fieldName\r\n }));\r\n\r\n errors.push(...validateOptionalArray({\r\n normalized,\r\n field: 'indexList',\r\n value: params.indexList,\r\n defaultValue: []\r\n }));\r\n if (Array.isArray(normalized.indexList)) {\r\n normalized.indexList.forEach((item, index) => {\r\n if (!Number.isFinite(Number(item))) {\r\n errors.push(`[indexList[${index}]]必须是数字`);\r\n }\r\n });\r\n normalized.indexList = normalized.indexList.map(Number);\r\n }\r\n\r\n return { errors, normalized };\r\n}\n","import {\r\n validateCoordinatesRequired,\r\n isValidNumber\r\n} from '../../baseConfig/validators.js';\r\n\r\nexport function validateOptionalBoolean(params, field, defaultValue, errors, normalized) {\r\n const value = params[field];\r\n if (value === undefined || value === null || value === '') {\r\n normalized[field] = defaultValue;\r\n return;\r\n }\r\n if (typeof value !== 'boolean') {\r\n errors.push(`[${field}]必须是布尔类型`);\r\n return;\r\n }\r\n normalized[field] = value;\r\n}\r\n\r\n/** UE 场景坐标:仅校验为长度 3 的数字数组,不做经纬度范围限制 */\r\nexport function validateUeCoordinates(coordinates) {\r\n const e = [];\r\n if (!coordinates || !Array.isArray(coordinates)) {\r\n e.push('[coordinates] 为必填项,且必须是数组类型');\r\n return e;\r\n }\r\n if (coordinates.length < 3) {\r\n e.push('[coordinates]包含:[x, y, z]');\r\n return e;\r\n }\r\n const [x, y, z] = coordinates;\r\n if (!isValidNumber(x)) e.push('[coordinates[0]]必须是数字类型');\r\n if (!isValidNumber(y)) e.push('[coordinates[1]]必须是数字类型');\r\n if (!isValidNumber(z)) e.push('[coordinates[2]]必须是数字类型');\r\n return e;\r\n}\r\n\r\nexport function validateOptionalCoordinates(params, errors, normalized) {\r\n const value = params.coordinates;\r\n if (value === undefined || value === null || value === '' || (Array.isArray(value) && value.length === 0)) {\r\n normalized.coordinates = [];\r\n return;\r\n }\r\n errors.push(...validateCoordinatesRequired(value));\r\n if (Array.isArray(value) && value.length >= 3) {\r\n normalized.coordinates = value.slice(0, 3).map(Number);\r\n }\r\n}\r\n\r\n/** 可选坐标:按 isUseUePos 选择经纬度 / UE 坐标校验 */\r\nexport function validateOptionalCoordinatesByPosType(params, errors, normalized) {\r\n const value = params.coordinates;\r\n if (value === undefined || value === null || value === '' || (Array.isArray(value) && value.length === 0)) {\r\n normalized.coordinates = [];\r\n return;\r\n }\r\n if (normalized.isUseUePos) {\r\n errors.push(...validateUeCoordinates(value));\r\n } else {\r\n errors.push(...validateCoordinatesRequired(value));\r\n }\r\n if (Array.isArray(value) && value.length >= 3) {\r\n normalized.coordinates = value.slice(0, 3).map(Number);\r\n }\r\n}\r\n","import {\n validateCoordinatesRequired,\n validateOptionalVector3Array,\n validateRequiredString,\n isValidNumber\n} from '../../baseConfig/validators.js';\nimport { validateOptionalBoolean } from './helpers.js';\n\n/** UE 场景坐标:仅校验为长度 3 的数字数组,不做经纬度范围限制 */\nfunction validateUeCoordinates(coordinates) {\n const e = [];\n if (!coordinates || !Array.isArray(coordinates)) {\n e.push('[coordinates] 为必填项,且必须是数组类型');\n } else if (coordinates.length < 3) {\n e.push('[coordinates]包含:[x, y, z]');\n } else {\n const [x, y, z] = coordinates;\n if (!isValidNumber(x)) e.push('[coordinates[0]]必须是数字类型');\n if (!isValidNumber(y)) e.push('[coordinates[1]]必须是数字类型');\n if (!isValidNumber(z)) e.push('[coordinates[2]]必须是数字类型');\n }\n return e;\n}\n\nexport function create(params = {}) {\n const errors = [];\n const normalized = { ...params };\n\n errors.push(...validateRequiredString({\n normalized,\n field: 'id',\n value: params.id\n }));\n errors.push(...validateRequiredString({\n normalized,\n field: 'url',\n value: params.url\n }));\n\n validateOptionalBoolean(params, 'isUseUePos', false, errors, normalized);\n\n if (normalized.isUseUePos) {\n errors.push(...validateUeCoordinates(params.coordinates));\n if (Array.isArray(params.coordinates) && params.coordinates.length >= 3) {\n normalized.coordinates = params.coordinates.slice(0, 3).map(Number);\n }\n } else {\n errors.push(...validateCoordinatesRequired(params.coordinates));\n }\n\n errors.push(...validateOptionalVector3Array({\n normalized,\n field: 'rotation',\n value: params.rotation,\n defaultValue: [0, 0, 0]\n }));\n errors.push(...validateOptionalVector3Array({\n normalized,\n field: 'scale',\n value: params.scale,\n defaultValue: [1, 1, 1]\n }));\n\n return { errors, normalized };\n}\n","import {\n validateRequiredString\n} from '../../baseConfig/validators.js';\n\nexport function close(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'id',\r\n value: params.id\r\n }));\r\n\r\n return { errors, normalized };\r\n}\n","export function allClose(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n return { errors, normalized };\r\n}\n","import { validateRequiredString } from '../../baseConfig/validators.js';\n\nexport function clearCacheByUrl(params = {}) {\n const errors = [];\n const normalized = { ...params };\n\n errors.push(...validateRequiredString({\n normalized,\n field: 'url',\n value: params.url\n }));\n\n return { errors, normalized };\n}\n","export function clearAllCache(params = {}) {\n return {\n errors: [],\n normalized: { ...params }\n };\n}\n","import {\n validateOptionalArray,\n validateRequiredString\n} from '../../baseConfig/validators.js';\n\nexport function setField(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'id',\r\n value: params.id\r\n }));\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'fieldName',\r\n value: params.fieldName\r\n }));\r\n\r\n errors.push(...validateOptionalArray({\r\n normalized,\r\n field: 'indexList',\r\n value: params.indexList,\r\n defaultValue: []\r\n }));\r\n if (Array.isArray(normalized.indexList)) {\r\n normalized.indexList.forEach((item, index) => {\r\n if (!Number.isFinite(Number(item))) {\r\n errors.push(`[indexList[${index}]]必须是数字`);\r\n }\r\n });\r\n normalized.indexList = normalized.indexList.map(Number);\r\n }\r\n\r\n return { errors, normalized };\r\n}\n","import {\n validateRequiredString,\n verifyEnumerationValue\n} from '../../baseConfig/validators.js';\n\nexport function setMode(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'id',\r\n value: params.id\r\n }));\r\n errors.push(...verifyEnumerationValue({\r\n normalized,\r\n field: 'mode',\r\n value: params.mode,\r\n defaultValue: 'Heatmap',\r\n type: 'string',\r\n list: ['Heatmap', 'Wireframe', 'Mixed']\r\n }));\r\n\r\n return { errors, normalized };\r\n}\n","import {\n validateOptionalArray,\n validateOptionalNumber,\n validateRequiredString\n} from '../../baseConfig/validators.js';\n\nexport function setCellOpacity(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'id',\r\n value: params.id\r\n }));\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'fieldName',\r\n value: params.fieldName\r\n }));\r\n errors.push(...validateOptionalArray({\r\n normalized,\r\n field: 'cellTypes',\r\n value: params.cellTypes,\r\n required: true,\r\n minLength: 1\r\n }));\r\n if (Array.isArray(normalized.cellTypes)) {\r\n normalized.cellTypes.forEach((item, index) => {\r\n if (!Number.isFinite(Number(item))) {\r\n errors.push(`[cellTypes[${index}]]必须是数字`);\r\n }\r\n });\r\n normalized.cellTypes = normalized.cellTypes.map(Number);\r\n }\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'value',\r\n value: params.value,\r\n defaultValue: 0,\r\n min: 0,\r\n max: 1\r\n }));\r\n\r\n return { errors, normalized };\r\n}\n","import {\n validateRequiredString\n} from '../../baseConfig/validators.js';\n\nexport function setColorRange(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'id',\r\n value: params.id\r\n }));\r\n\r\n if (params.list === undefined || params.list === null || params.list === '') {\r\n normalized.list = [0, 1];\r\n } else if (!Array.isArray(params.list) || params.list.length < 2) {\r\n errors.push('[list]必须是包含2个元素的数组');\r\n } else {\r\n const list = params.list.slice(0, 2).map(Number);\r\n if (!list.every((n) => Number.isFinite(n))) {\r\n errors.push('[list]数组元素必须是数字');\r\n } else {\r\n let listValid = true;\r\n if (list[0] < 0) {\r\n errors.push('[list[0]]取值不能小于0');\r\n listValid = false;\r\n }\r\n if (list[1] > 1) {\r\n errors.push('[list[1]]取值不能大于1');\r\n listValid = false;\r\n }\r\n if (listValid) {\r\n normalized.list = list;\r\n }\r\n }\r\n }\r\n\r\n return { errors, normalized };\r\n}\n","import { validateRequiredString } from '../../baseConfig/validators.js';\nimport { analyzeColorValue } from '../../baseConfig/color/color.js';\n\nconst DEFAULT_COLOR_BAR = {\n '0': '#0000FFFF',\n '0.25': '#00FFFFFF',\n '0.5': '#00FF00FF',\n '0.75': '#FFFF00FF',\n '1': '#FF0000FF'\n};\n\nexport function setColorBar(params = {}) {\n const errors = [];\n const normalized = { ...params };\n\n errors.push(...validateRequiredString({\n normalized,\n field: 'id',\n value: params.id\n }));\n\n const colorBar = params.colorBar;\n if (colorBar === undefined || colorBar === null || colorBar === '') {\n normalized.colorBar = { ...DEFAULT_COLOR_BAR };\n } else if (typeof colorBar !== 'object' || Array.isArray(colorBar)) {\n errors.push('[colorBar]必须是对象类型');\n } else {\n const keys = Object.keys(colorBar);\n if (keys.length === 0) {\n errors.push('[colorBar]不能为空对象');\n } else {\n const next = {};\n keys.forEach((key) => {\n const stop = Number(key);\n if (!Number.isFinite(stop) || stop < 0 || stop > 1) {\n errors.push(`[colorBar.${key}]键必须是 0~1 之间的数字`);\n return;\n }\n const value = colorBar[key];\n if (value === undefined || value === null || value === '') {\n errors.push(`[colorBar.${key}]为必填项`);\n return;\n }\n if (typeof value !== 'string') {\n errors.push(`[colorBar.${key}]必须是字符串类型`);\n return;\n }\n const color = analyzeColorValue(value);\n if (!color) {\n errors.push(`[colorBar.${key}]颜色格式不正确`);\n return;\n }\n // 按字面键写入,避免 \"0.25\" 被当成嵌套路径 0 -> 25\n next[key] = color;\n });\n if (errors.length === 0) {\n normalized.colorBar = next;\n }\n }\n }\n\n return { errors, normalized };\n}\n","import {\n validateRequiredString,\n validateRequiredNumber\n} from '../../baseConfig/validators.js';\n\nexport function setOpacity(params = {}) {\n const errors = [];\n const normalized = { ...params };\n\n errors.push(...validateRequiredString({\n normalized,\n field: 'id',\n value: params.id\n }));\n errors.push(...validateRequiredNumber({\n normalized,\n field: 'value',\n value: params.value,\n required: true,\n min: 0,\n max: 1\n }));\n\n return { errors, normalized };\n}\n","import {\n validateOptionalArray,\n validateOptionalNumber,\n validateRequiredString\n} from '../../baseConfig/validators.js';\n\nexport function setDisplacementScale(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'id',\r\n value: params.id\r\n }));\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'fieldName',\r\n value: params.fieldName\r\n }));\r\n\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'scale',\r\n value: params.scale,\r\n defaultValue: 1,\r\n min: 1\r\n }));\r\n if (typeof normalized.scale === 'number' && normalized.scale <= 0) {\r\n errors.push('[scale]取值必须大于0');\r\n }\r\n\r\n errors.push(...validateOptionalArray({\r\n normalized,\r\n field: 'indexList',\r\n value: params.indexList,\r\n defaultValue: []\r\n }));\r\n if (Array.isArray(normalized.indexList)) {\r\n normalized.indexList.forEach((item, index) => {\r\n if (!Number.isFinite(Number(item))) {\r\n errors.push(`[indexList[${index}]]必须是数字`);\r\n }\r\n });\r\n normalized.indexList = normalized.indexList.map(Number);\r\n }\r\n\r\n return { errors, normalized };\r\n}\n","import {\n validateRequiredString\n} from '../../baseConfig/validators.js';\n\nexport function closeDisplacementScale(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'id',\r\n value: params.id\r\n }));\r\n\r\n return { errors, normalized };\r\n}\n","import {\n validateRequiredString\n} from '../../baseConfig/validators.js';\n\nexport function onMouseClick(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'id',\r\n value: params.id\r\n }));\r\n\r\n return { errors, normalized };\r\n}\n","import {\n validateRequiredString\n} from '../../baseConfig/validators.js';\n\nexport function offMouseClick(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'id',\r\n value: params.id\r\n }));\r\n\r\n return { errors, normalized };\r\n}\n","import {\r\n validateOptionalArray,\r\n validateOptionalNumber,\r\n validateOptionalString,\r\n validateOptionalVector3Array,\r\n validateRequiredString\r\n} from '../../baseConfig/validators.js';\r\nimport {\r\n validateOptionalBoolean,\r\n validateOptionalCoordinatesByPosType\r\n} from './helpers.js';\r\n\r\nexport function playSequence(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'id',\r\n value: params.id\r\n }));\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'fieldName',\r\n value: params.fieldName\r\n }));\r\n\r\n errors.push(...validateOptionalString({\r\n normalized,\r\n field: 'sequenceDirectory',\r\n value: params.sequenceDirectory,\r\n defaultValue: ''\r\n }));\r\n\r\n errors.push(...validateOptionalArray({\r\n normalized,\r\n field: 'sequenceFiles',\r\n value: params.sequenceFiles,\r\n defaultValue: []\r\n }));\r\n if (Array.isArray(normalized.sequenceFiles)) {\r\n normalized.sequenceFiles = normalized.sequenceFiles\r\n .map((item) => String(item ?? '').trim())\r\n .filter(Boolean);\r\n }\r\n\r\n // sequenceFiles 与 sequenceDirectory 二选一;仅当 sequenceFiles 为空时 sequenceDirectory 才生效\r\n const hasDirectory = typeof normalized.sequenceDirectory === 'string' && normalized.sequenceDirectory.trim() !== '';\r\n const hasFiles = Array.isArray(normalized.sequenceFiles) && normalized.sequenceFiles.length > 0;\r\n if (hasFiles && hasDirectory) {\r\n errors.push('[sequenceFiles]与[sequenceDirectory]二选一,不能同时填写(设置 sequenceDirectory 时 sequenceFiles 必须为空)');\r\n } else if (hasFiles) {\r\n normalized.sequenceDirectory = '';\r\n } else if (hasDirectory) {\r\n normalized.sequenceDirectory = normalized.sequenceDirectory.trim();\r\n normalized.sequenceFiles = [];\r\n } else {\r\n errors.push('[sequenceFiles]与[sequenceDirectory]二选一,必须填写其中一个(设置 sequenceDirectory 时 sequenceFiles 必须为空)');\r\n }\r\n\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'frameIndex',\r\n value: params.frameIndex,\r\n defaultValue: 0,\r\n min: 0\r\n }));\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'playbackSpeed',\r\n value: params.playbackSpeed,\r\n defaultValue: 1,\r\n min: 0\r\n }));\r\n if (typeof normalized.playbackSpeed === 'number' && normalized.playbackSpeed <= 0) {\r\n errors.push('[playbackSpeed]取值必须大于0');\r\n }\r\n\r\n validateOptionalBoolean(params, 'isUseUePos', false, errors, normalized);\r\n validateOptionalCoordinatesByPosType(params, errors, normalized);\r\n\r\n errors.push(...validateOptionalVector3Array({\r\n normalized,\r\n field: 'rotation',\r\n value: params.rotation,\r\n defaultValue: [0, 0, 0]\r\n }));\r\n errors.push(...validateOptionalVector3Array({\r\n normalized,\r\n field: 'scale',\r\n value: params.scale,\r\n defaultValue: [1, 1, 1]\r\n }));\r\n\r\n return { errors, normalized };\r\n}\r\n","import {\n validateRequiredString\n} from '../../baseConfig/validators.js';\n\nexport function pauseSequence(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'id',\r\n value: params.id\r\n }));\r\n\r\n return { errors, normalized };\r\n}\n","import {\n validateRequiredString\n} from '../../baseConfig/validators.js';\n\nexport function stopSequence(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'id',\r\n value: params.id\r\n }));\r\n\r\n return { errors, normalized };\r\n}\n","import {\n validateOptionalNumber,\n validateRequiredString\n} from '../../baseConfig/validators.js';\n\nexport function setFrame(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'id',\r\n value: params.id\r\n }));\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'frameIndex',\r\n value: params.frameIndex,\r\n defaultValue: 0,\r\n min: 0\r\n }));\r\n\r\n return { errors, normalized };\r\n}\n","import {\n validateOptionalNumber,\n validateRequiredString\n} from '../../baseConfig/validators.js';\n\nexport function setPlaybackSpeed(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'id',\r\n value: params.id\r\n }));\r\n errors.push(...validateOptionalNumber({\r\n normalized,\r\n field: 'playbackSpeed',\r\n value: params.playbackSpeed,\r\n defaultValue: 4,\r\n min: 0\r\n }));\r\n if (typeof normalized.playbackSpeed === 'number' && normalized.playbackSpeed <= 0) {\r\n errors.push('[playbackSpeed]取值必须大于0');\r\n }\r\n\r\n return { errors, normalized };\r\n}\n","import {\n validateRequiredString\n} from '../../baseConfig/validators.js';\nimport {\n validateOptionalBoolean\n} from './helpers.js';\n\nexport function clearSequence(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n errors.push(...validateRequiredString({\r\n normalized,\r\n field: 'id',\r\n value: params.id\r\n }));\r\n validateOptionalBoolean(params, 'isClearCache', true, errors, normalized);\r\n\r\n return { errors, normalized };\r\n}\n","import {\n validateOptionalBoolean\n} from './helpers.js';\n\nexport function clearAllSequence(params = {}) {\r\n const errors = [];\r\n const normalized = { ...params };\r\n\r\n validateOptionalBoolean(params, 'isClearCache', true, errors, normalized);\r\n\r\n return { errors, normalized };\r\n}\n","import { createNamespaceApi } from '../createNamespaceApi.js';\nimport { getInfo } from './getInfo.js';\nimport { getFieldRange } from './getFieldRange.js';\nimport { create } from './create.js';\nimport { close } from './close.js';\nimport { allClose } from './allClose.js';\nimport { clearCacheByUrl } from './clearCacheByUrl.js';\nimport { clearAllCache } from './clearAllCache.js';\nimport { setField } from './setField.js';\nimport { setMode } from './setMode.js';\nimport { setCellOpacity } from './setCellOpacity.js';\nimport { setColorRange } from './setColorRange.js';\nimport { setColorBar } from './setColorBar.js';\nimport { setOpacity } from './setOpacity.js';\nimport { setDisplacementScale } from './setDisplacementScale.js';\nimport { closeDisplacementScale } from './closeDisplacementScale.js';\nimport { onMouseClick } from './onMouseClick.js';\nimport { offMouseClick } from './offMouseClick.js';\nimport { playSequence } from './playSequence.js';\nimport { pauseSequence } from './pauseSequence.js';\nimport { stopSequence } from './stopSequence.js';\nimport { setFrame } from './setFrame.js';\nimport { setPlaybackSpeed } from './setPlaybackSpeed.js';\nimport { clearSequence } from './clearSequence.js';\nimport { clearAllSequence } from './clearAllSequence.js';\n\nexport const VtkApi = createNamespaceApi('VTK', {\n getInfo,\n getFieldRange,\n create,\n close,\n allClose,\n clearCacheByUrl,\n clearAllCache,\n setField,\n setMode,\n setCellOpacity,\n setColorRange,\n setColorBar,\n setOpacity,\n setDisplacementScale,\n closeDisplacementScale,\n onMouseClick,\n offMouseClick,\n playSequence,\n pauseSequence,\n stopSequence,\n setFrame,\n setPlaybackSpeed,\n clearSequence,\n clearAllSequence\n}, {\n getOptions: () => ({ timeout: 0 })\n});\n","let ueLogEnabled = true;\r\n\r\nexport function setUELogEnabled(enabled) {\r\n ueLogEnabled = !!enabled;\r\n}\r\n\r\nexport function log(...args) {\r\n if (ueLogEnabled) {\r\n console.log(...args);\r\n }\r\n}\r\n\r\nexport function logWarn(...args) {\r\n if (ueLogEnabled) {\r\n console.warn(...args);\r\n }\r\n}\r\n\r\nexport function logError(...args) {\r\n if (ueLogEnabled) {\r\n console.error(...args);\r\n }\r\n}\r\n","import { logError, logWarn } from './logger.js';\n\nfunction normalizeMessageList(message) {\n const list = Array.isArray(message) ? message : [message];\n return list\n .map((item) => {\n if (typeof item === 'string') {\n return item;\n }\n if (item && typeof item === 'object') {\n if (typeof item.message === 'string' && item.message) {\n return item.message;\n }\n try {\n return JSON.stringify(item);\n } catch (_) {\n return String(item);\n }\n }\n if (item === undefined || item === null) {\n return '';\n }\n return String(item);\n })\n .filter((item) => item !== '');\n}\n\n// 成功:\nfunction createSuccessResponse(message, data, command) {\n const value = { success: true, message, data, command };\n return value;\n}\n// 失败:\nfunction createErrorResponse(message, params, command) {\n const value = {\n success: false,\n message: normalizeMessageList(message),\n params,\n command\n };\n logError('三维场景报错:', value);\n return value;\n}\n// 警告:\nfunction createWarnResponse(message, params, command) {\n const value = {\n success: false,\n message: normalizeMessageList(message),\n params,\n command\n };\n logWarn('三维场景警告:', value);\n return value;\n}\n\nexport { createSuccessResponse, createErrorResponse, createWarnResponse };\n","import { createErrorResponse } from '../../baseConfig/responses.js';\r\nimport { log } from '../../baseConfig/logger.js';\r\n\r\n/**\r\n * 无内置校验的自定义域 API(一维水动力 / 自定义 / 箭头 / NC / 闸门等)\r\n * 命令格式为完整 command,如 `customDomain.xxx`\r\n */\r\nclass OtherApi {\r\n constructor(commandManager) {\r\n this.commandManager = commandManager;\r\n }\r\n\r\n _handleSend(command, params = {}, options = {}) {\r\n if (!command || typeof command !== 'string') {\r\n return createErrorResponse('命令不能为空', params, command || 'unknown');\r\n }\r\n log('自定义域命令下发:', command);\r\n return this.commandManager.sendWithDefault(\r\n { errors: [], normalized: params },\r\n command,\r\n options\r\n );\r\n }\r\n}\r\n\r\nexport { OtherApi };\r\n","import { CameraApi } from './camera/cameraApi.js';\nimport { CesiumApi } from './cesium/cesiumApi.js';\nimport { MarkerApi } from './marker/markerApi.js';\nimport { FloodPeakApi } from './floodPeak/floodPeakApi.js';\nimport { AnimationApi } from './animation/animationApi.js';\nimport { HydrodynamicForceApi } from './hydrodynamicForce/hydrodynamicForceApi.js';\nimport { SceneModelApi } from './sceneModel/sceneModelApi.js';\nimport { AtmosphericEffectsApi } from './atmosphericEffects/atmosphericEffectsApi.js';\nimport { ToolApi } from './tool/toolApi.js';\nimport { LineApi } from './line/lineApi.js';\nimport { LevelApi } from './level/levelApi.js';\nimport { VtkApi } from './vtk/vtkApi.js';\nimport { OtherApi } from './other/otherApi.js';\n\n/** 标准命名空间 → API 类(命令前缀与方法名一致) */\nconst NAMESPACE_APIS = {\n camera: CameraApi,\n cesium: CesiumApi,\n marker: MarkerApi,\n floodPeak: FloodPeakApi,\n animation: AnimationApi,\n hydrodynamicForce: HydrodynamicForceApi,\n sceneModel: SceneModelApi,\n atmosphericEffects: AtmosphericEffectsApi,\n tool: ToolApi,\n line: LineApi,\n level: LevelApi,\n VTK: VtkApi\n};\n\n/** 走 OtherApi 的自定义域(完整命令 = `${domain}.${api}`) */\nconst OTHER_DOMAINS = [\n 'oneDimensionalHydrodynamics',\n 'customDomain',\n 'arrow',\n 'NC',\n 'gateOperation'\n];\n\nclass GameAPI {\n constructor(commandManager) {\n this._apis = {};\n for (const [name, ApiClass] of Object.entries(NAMESPACE_APIS)) {\n this._apis[name] = new ApiClass(commandManager);\n }\n this._otherApi = new OtherApi(commandManager);\n\n // 绑定对外方法,保持 gameAPI.camera(api, params) 调用方式\n for (const name of Object.keys(NAMESPACE_APIS)) {\n this[name] = (api, params) => this._apis[name]._handleSend(api, params);\n }\n for (const domain of OTHER_DOMAINS) {\n this[domain] = (api, params, options) =>\n this._otherApi._handleSend(`${domain}.${api}`, params, options);\n }\n }\n}\n\nexport { GameAPI, NAMESPACE_APIS, OTHER_DOMAINS };\n","import { createErrorResponse, createSuccessResponse, createWarnResponse } from './baseConfig/responses.js';\r\nimport { log, logWarn, logError } from './baseConfig/logger.js';\r\n\r\nfunction createEmptyMarkerCallbacks() {\r\n return { Hovered: {}, Click: {}, DoubleClick: {}, Unhovered: {} };\r\n}\r\n\r\nfunction pushUnique(list, fn) {\r\n if (typeof fn !== 'function') return;\r\n if (!list.includes(fn)) list.push(fn);\r\n}\r\n\r\nfunction createMarkerHandlers(storeKey) {\r\n return {\r\n prepare(cm, payload) {\r\n return cm._registerMarkerCallbacks(cm[storeKey], payload);\r\n },\r\n dispatch(cm, command, eventData) {\r\n return cm._dispatchMarkerEvent(cm[storeKey], command, eventData);\r\n }\r\n };\r\n}\r\n\r\n/** 命令 → 下发前剥离/注册回调 + 入站事件派发 */\r\nconst EVENT_HANDLERS = {\r\n 'marker.iconMarker': createMarkerHandlers('markerEventCallbacks'),\r\n 'marker.iconUrlMarker': createMarkerHandlers('markerEventCallbacks'),\r\n 'marker.secondMarker': createMarkerHandlers('secondMarkerEventCallbacks'),\r\n 'marker.followMarker': createMarkerHandlers('followMarkerEventCallbacks'),\r\n\r\n 'tool.onMouseClick': {\r\n prepare(cm, payload) {\r\n const { onMouseClick, ...sanitizedPayload } = payload || {};\r\n pushUnique(cm.mouseClickCallback.MouseClick, onMouseClick);\r\n return sanitizedPayload;\r\n },\r\n dispatch(cm, command, eventData) {\r\n if (!eventData.coordinates) return false;\r\n return cm._executeCallbacks(cm.mouseClickCallback.MouseClick, command, eventData);\r\n }\r\n },\r\n 'tool.offMouseClick': {\r\n prepare(cm, payload) {\r\n cm.mouseClickCallback.MouseClick = [];\r\n return payload;\r\n }\r\n },\r\n\r\n 'VTK.onMouseClick': {\r\n prepare(cm, payload) {\r\n const { onMouseClick, ...sanitizedPayload } = payload || {};\r\n const vtkId = sanitizedPayload?.id;\r\n if (vtkId !== undefined && vtkId !== null && vtkId !== '' && typeof onMouseClick === 'function') {\r\n cm.vtkMouseClickCallback[vtkId] = onMouseClick;\r\n }\r\n return sanitizedPayload;\r\n },\r\n dispatch(cm, command, eventData) {\r\n const store = cm.vtkMouseClickCallback;\r\n if (!store || !Object.keys(store).length) return false;\r\n const vtkId = eventData?.id;\r\n const callback = vtkId ? store[vtkId] : null;\r\n if (callback) {\r\n return cm._executeCallback(callback, command, eventData);\r\n }\r\n return cm._executeCallbacks(Object.values(store), command, eventData);\r\n }\r\n },\r\n 'VTK.offMouseClick': {\r\n prepare(cm, payload) {\r\n const vtkId = payload?.id;\r\n if (vtkId !== undefined && vtkId !== null && vtkId !== '') {\r\n delete cm.vtkMouseClickCallback[vtkId];\r\n }\r\n return payload;\r\n }\r\n },\r\n\r\n 'animation.onData': {\r\n prepare(cm, payload) {\r\n const { onChange, ...sanitizedPayload } = payload || {};\r\n pushUnique(cm.animationOnDataCallback.Change, onChange);\r\n return sanitizedPayload;\r\n },\r\n dispatch(cm, command, eventData) {\r\n if (!eventData.type) return false;\r\n return cm._executeCallbacks(cm.animationOnDataCallback.Change, command, eventData);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * CommandManager 负责命令派发、响应回调以及特殊事件(marker / animation)的转发。\r\n */\r\nclass CommandManager {\r\n constructor(transport, options = {}) {\r\n this.transport = transport;\r\n this.callbacks = {};\r\n this.requestId = 0;\r\n this.timeout = options.timeout ?? 3000;\r\n this._destroyed = false;\r\n\r\n this._resetEventCallbacks();\r\n\r\n transport.bindMessageHandler((raw) => {\r\n this._handleRawResponse(raw);\r\n });\r\n }\r\n\r\n _resetEventCallbacks() {\r\n this.markerEventCallbacks = createEmptyMarkerCallbacks();\r\n this.secondMarkerEventCallbacks = createEmptyMarkerCallbacks();\r\n this.followMarkerEventCallbacks = createEmptyMarkerCallbacks();\r\n this.animationOnDataCallback = { Change: [] };\r\n this.mouseClickCallback = { MouseClick: [] };\r\n this.vtkMouseClickCallback = {};\r\n }\r\n\r\n /** 销毁:清挂起请求、事件回调,避免重连泄漏 */\r\n destroy() {\r\n if (this._destroyed) return;\r\n this._destroyed = true;\r\n\r\n for (const requestId of Object.keys(this.callbacks)) {\r\n const entry = this.callbacks[requestId];\r\n if (entry?.timeoutId) clearTimeout(entry.timeoutId);\r\n entry?.reject?.(new Error('CommandManager destroyed'));\r\n }\r\n this.callbacks = {};\r\n this._resetEventCallbacks();\r\n this.transport = null;\r\n }\r\n\r\n sendWithDefault(result, command, options = {}) {\r\n const payload = this._sendPreparePayload(command, result.normalized || {});\r\n if (result.errors.length > 0) {\r\n return createErrorResponse(result.errors, payload, command);\r\n }\r\n if (this._destroyed || !this.transport) {\r\n return createErrorResponse('连接已关闭,无法发送命令', payload, command);\r\n }\r\n\r\n const requestId = (++this.requestId).toString();\r\n const cmdTimeout = options?.timeout === 0\r\n ? 0\r\n : (options?.timeout ?? this.timeout);\r\n const promise = new Promise((resolve, reject) => {\r\n let timeoutId = null;\r\n if (cmdTimeout !== 0) {\r\n timeoutId = setTimeout(() => {\r\n delete this.callbacks[requestId];\r\n reject(new Error('Command timeout with no results'));\r\n }, cmdTimeout);\r\n }\r\n this.callbacks[requestId] = { resolve, reject, timeoutId };\r\n });\r\n\r\n const msg = { command, requestId, params: payload };\r\n log('消息下发成功:', msg);\r\n this.transport.sendTextToDataChannel(JSON.stringify(msg));\r\n\r\n return promise.then((res) => {\r\n if (res && res.command && res.command === command) {\r\n switch (res.status) {\r\n case 'info':\r\n return createSuccessResponse('操作执行成功', res.data, command);\r\n case 'warn':\r\n return createWarnResponse(res.message, res.data, command);\r\n default:\r\n return createErrorResponse(res.message, res.data, command);\r\n }\r\n }\r\n return createErrorResponse('返回数据格式错乱【请注意command参数】', res?.command, command);\r\n }).catch((err) => {\r\n if (err && err.message) {\r\n if (err.message === 'Command timeout with no results') {\r\n return createWarnResponse(err.message, payload, command);\r\n }\r\n return createErrorResponse(err.message, payload, command);\r\n }\r\n return createErrorResponse('数据返回发生错误', payload, command);\r\n });\r\n }\r\n\r\n _handleRawResponse(raw) {\r\n if (this._destroyed) return null;\r\n if (!raw) {\r\n logError('数据第一步解析失败:', raw);\r\n return null;\r\n }\r\n\r\n let response;\r\n try {\r\n const parsed = JSON.parse(String(raw).trim());\r\n response = {\r\n command: parsed.command || '',\r\n message: parsed.message || '',\r\n data: parsed.data || {},\r\n status: parsed.status || 'error',\r\n requestId: parsed.requestId || ''\r\n };\r\n if (response.message === 'The data channel has been connected.') {\r\n return null;\r\n }\r\n if (response.message === 'The level has been initialized') {\r\n return null;\r\n }\r\n } catch (error) {\r\n logError('数据第二步解析失败:', raw);\r\n return null;\r\n }\r\n\r\n if (this._processEventResponse(response)) {\r\n return;\r\n }\r\n\r\n const { command, message, data, status, requestId } = response;\r\n if (requestId && this.callbacks[requestId]) {\r\n const { resolve, timeoutId } = this.callbacks[requestId];\r\n clearTimeout(timeoutId);\r\n delete this.callbacks[requestId];\r\n resolve({ command, message, data, status });\r\n return;\r\n }\r\n logWarn('注意:非常规响应', response);\r\n }\r\n\r\n /** 注册三类 marker 的交互回调,并从下发 payload 中剥离函数字段 */\r\n _registerMarkerCallbacks(store, payload) {\r\n const {\r\n onMarkerClick,\r\n onMarkerDoubleClick,\r\n onMarkerDblClick,\r\n onMouseHover,\r\n onMouseLeave,\r\n ...sanitizedPayload\r\n } = payload || {};\r\n const dblClickCb = onMarkerDoubleClick || onMarkerDblClick;\r\n const pointKey = sanitizedPayload?.id;\r\n const key = (pointKey !== undefined && pointKey !== null && pointKey !== '')\r\n ? pointKey\r\n : '__default';\r\n\r\n if (typeof onMouseHover === 'function') store.Hovered[key] = onMouseHover;\r\n if (typeof onMarkerClick === 'function') store.Click[key] = onMarkerClick;\r\n if (typeof dblClickCb === 'function') store.DoubleClick[key] = dblClickCb;\r\n if (typeof onMouseLeave === 'function') store.Unhovered[key] = onMouseLeave;\r\n\r\n return sanitizedPayload;\r\n }\r\n\r\n _dispatchMarkerEvent(store, command, eventData) {\r\n if (typeof eventData.recordData === 'string') {\r\n try {\r\n eventData.recordData = JSON.parse(eventData.recordData);\r\n } catch (_) {\r\n // keep original string\r\n }\r\n }\r\n const { pointId, eventType } = eventData;\r\n if (!(eventType && store)) return false;\r\n const callbacksByType = store[eventType];\r\n const callback = callbacksByType?.[pointId] || callbacksByType?.__default;\r\n return this._executeCallback(callback, command, eventData);\r\n }\r\n\r\n _sendPreparePayload(command, payload) {\r\n const handler = EVENT_HANDLERS[command];\r\n return handler?.prepare ? handler.prepare(this, payload) : payload;\r\n }\r\n\r\n _processEventResponse(response) {\r\n if (!response) return false;\r\n const { command, data: eventData = {} } = response;\r\n const handler = EVENT_HANDLERS[command];\r\n return handler?.dispatch ? handler.dispatch(this, command, eventData) : false;\r\n }\r\n\r\n _executeCallback(callback, command, eventData) {\r\n if (typeof callback !== 'function') {\r\n log(`${command}未监听:${eventData.eventType}`);\r\n return true;\r\n }\r\n try {\r\n callback(eventData);\r\n return true;\r\n } catch (err) {\r\n logError(`执行${command}回调出错:`, err, eventData);\r\n return true;\r\n }\r\n }\r\n\r\n _executeCallbacks(callbacks, command, eventData) {\r\n if (!callbacks) return false;\r\n if (Array.isArray(callbacks)) {\r\n callbacks.forEach((cb) => this._executeCallback(cb, command, eventData));\r\n return true;\r\n }\r\n return this._executeCallback(callbacks, command, eventData);\r\n }\r\n}\r\n\r\nexport { CommandManager };\r\n","import { CommandManager } from './commFlow.js';\nimport { GameAPI } from './api/index.js';\nimport { log } from './baseConfig/logger.js';\nimport { version } from './version.js';\n\nexport const SCENE_INIT_MESSAGE = 'The level has been initialized';\n\nexport function parseMessageField(raw) {\n if (!raw) return '';\n try {\n const parsed = JSON.parse(String(raw).trim());\n return parsed?.message || '';\n } catch (_) {\n return '';\n }\n}\n\n/**\n * 创建 GameAPI 会话:transport + CommandManager + 入站消息分发(回包 / 场景初始化)\n * @param {{\n * sendText: (text: string) => void,\n * commandTimeout?: number,\n * onSceneInit?: (payload: unknown) => void,\n * }} options\n * @returns {{\n * gameAPI: import('./api/index.js').GameAPI,\n * commandManager: import('./commFlow.js').CommandManager,\n * handleIncoming: (raw: string|null, payload?: unknown) => void,\n * destroy: () => void\n * }}\n */\nexport function createGameSession(options = {}) {\n const {\n sendText,\n commandTimeout = 3000,\n onSceneInit\n } = options;\n\n if (typeof sendText !== 'function') {\n throw new Error('createGameSession: sendText 必须是函数');\n }\n\n let messageHandler = null;\n let hasTriggeredSceneInit = false;\n\n const transport = {\n sendTextToDataChannel(text) {\n sendText(text);\n },\n bindMessageHandler(handler) {\n messageHandler = handler;\n }\n };\n\n const commandManager = new CommandManager(transport, {\n timeout: commandTimeout\n });\n const gameAPI = new GameAPI(commandManager);\n\n function handleIncoming(raw, payload) {\n if (raw && messageHandler) {\n messageHandler(raw);\n }\n\n if (!hasTriggeredSceneInit && parseMessageField(raw) === SCENE_INIT_MESSAGE) {\n hasTriggeredSceneInit = true;\n if (onSceneInit) {\n onSceneInit(payload !== undefined ? payload : raw);\n } else {\n log('场景初始化加载成功', payload !== undefined ? payload : raw);\n }\n }\n }\n\n log(`插件初始化成功 [web3dlink@${version}]`);\n\n return {\n gameAPI,\n commandManager,\n handleIncoming,\n destroy() {\n commandManager.destroy();\n }\n };\n}\n\n/** 尽量解绑事件(兼容 on/off、on/removeListener) */\nexport function unbindListener(target, event, handler) {\n if (!target || !handler) return;\n if (typeof target.off === 'function') {\n target.off(event, handler);\n return;\n }\n if (typeof target.removeListener === 'function') {\n target.removeListener(event, handler);\n }\n}\n\nexport function unbindAll(bindings = []) {\n for (const { target, event, handler } of bindings) {\n unbindListener(target, event, handler);\n }\n}\n"],"mappings":"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"}
|