vue-cesium
Version:
Vue 3.x components for CesiumJS.
1 lines • 14.5 kB
Source Map (JSON)
{"version":3,"file":"util.mjs","sources":["../../../../packages/utils/util.ts"],"sourcesContent":["// eslint-disable-next-line vue/prefer-import-from-vue\nimport { camelize, capitalize, extend, hasOwn, hyphenate, isArray, isObject, isString, looseEqual, isFunction, isPlainObject } from '@vue/shared'\nimport { isUndefined, isNull, camelCase } from 'lodash-unified'\nimport { AnyFunction, AnyObject } from './types'\n\nexport function getFileNameByPath(path: string): string {\n const posStart = path.lastIndexOf('/')\n const posEnd = path.lastIndexOf('.')\n return path.substring(posStart + 1, posEnd)\n}\n\nexport function dirname(path: string): string {\n if (typeof path !== 'string') path = path + ''\n if (path.length === 0) return '.'\n let code = path.charCodeAt(0)\n const hasRoot = code === 47 /* / */\n let end = -1\n let matchedSlash = true\n for (let i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i)\n if (code === 47 /* / */) {\n if (!matchedSlash) {\n end = i\n break\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.'\n if (hasRoot && end === 1) {\n // return '//';\n // Backwards-compat fix:\n return '/'\n }\n return path.slice(0, end)\n}\n\nexport function removeEmpty(obj: any): AnyObject {\n const proto = Object.getPrototypeOf(obj)\n const finalObj: AnyObject = {}\n Object.setPrototypeOf(finalObj, proto)\n Object.keys(obj).forEach(key => {\n const className = getObjClassName(obj[key], true)\n if ((obj[key] && isArray(obj[key])) || obj[key] instanceof Element) {\n finalObj[key] = obj[key]\n } else if (obj[key] && typeof obj[key] === 'object' && !Cesium[className]) {\n // Do not process cesium objects\n const nestedObj = removeEmpty(obj[key])\n if (Object.keys(nestedObj).length) {\n finalObj[key] = nestedObj\n }\n } else if (obj[key] !== '' && obj[key] !== undefined && obj[key] !== null) {\n finalObj[key] = obj[key]\n }\n })\n return finalObj\n}\n\nexport function isEmptyObj(obj: unknown): boolean {\n if (isUndefined(obj) || isNull(obj)) {\n return true\n }\n\n if (obj instanceof Element) {\n return false\n }\n\n const arr = Object.keys(obj as any)\n return arr.length === 0\n}\n\nexport const kebabCase = hyphenate\n\nfunction myInstanceof(left, right) {\n //基本数据类型直接返回false\n if (typeof left !== 'object' || left === null) return false\n //getProtypeOf是Object对象自带的一个方法,能够拿到参数的原型对象\n let proto = Object.getPrototypeOf(left)\n // eslint-disable-next-line no-constant-condition\n while (true) {\n //查找到尽头,还没找到\n if (proto === null) return false\n //找到相同的原型对象\n if (proto === right?.prototype) return true\n proto = Object.getPrototypeOf(proto)\n }\n}\n\nexport function getCesiumClassName(obj) {\n let result = undefined\n const constructorNames = Object.keys(Cesium)\n for (let i = 0; i < constructorNames.length; i++) {\n const className = constructorNames[i]\n\n if (myInstanceof(obj, Cesium[className])) {\n result = className\n break\n }\n }\n return result\n}\n\nexport function getObjClassName(obj: AnyObject, findCesiumClass = false): string {\n if (obj && obj.constructor) {\n if (findCesiumClass) {\n const cesiumClassName = getCesiumClassName(obj)\n\n if (cesiumClassName) {\n return cesiumClassName\n }\n }\n\n return obj.constructor.name\n }\n return typeof obj\n}\n\n/**\n * 验证是否是经纬度。\n * @param {Number} longitude\n * @param {Number} latitude\n * @returns {Boolean}\n */\nexport function lnglatValidator(longitude: number, latitude: number) {\n // 经度,整数部分为0-180小数部分为0到6位\n const longreg = /^(-|\\+)?(((\\d|[1-9]\\d|1[0-7]\\d|0{1,3})\\.\\d{0,15})|(\\d|[1-9]\\d|1[0-7]\\d|0{1,3})|180\\.0{0,15}|180)$/\n if (!longreg.test(longitude.toString())) {\n return false\n } // 纬度,整数部分为0-90小数部分为0到6位\n const latreg = /^(-|\\+)?([0-8]?\\d{1}\\.\\d{0,15}|90\\.0{0,15}|[0-8]?\\d{1}|90)$/\n if (!latreg.test(latitude.toString())) {\n return false\n }\n return true\n}\n\nexport function defaultValue(a, b) {\n if (a !== undefined && a !== null) {\n return a\n }\n return b\n}\n\nexport function inherit(base, derived) {\n function F() {\n //\n }\n F.prototype = base.prototype\n derived.prototype = new F()\n derived.prototype.constructor = derived\n}\n\nexport function getDefaultOptionByProps<T>(props, ignores: Array<string> = []) {\n const defaultOptions: T = {} as T\n Object.keys(props).forEach(key => {\n if (ignores.indexOf(key) === -1) {\n const value: {\n default?: AnyFunction<any> | AnyObject\n } = props[key]\n defaultOptions[key] = isFunction(value)\n ? undefined\n : isPlainObject(value)\n ? isFunction(value.default)\n ? value.default()\n : value.default\n : value\n }\n })\n\n return defaultOptions\n}\n\nconst addCustomProperty = (obj, options, ignores: Array<string> = []) => {\n for (const prop in options) {\n if (!obj[prop] && ignores.indexOf(prop) === -1) {\n obj[prop] = options[prop]\n }\n }\n}\n\nexport const merge = <T extends Record<string, any>>(a: T, b: T) => {\n const keys = [...new Set([...Object.keys(a), ...Object.keys(b)])] as (keyof T)[]\n const obj = {} as T\n for (const key of keys) {\n obj[key] = b[key] ?? a[key]\n }\n return obj\n}\n\nexport function isArrayLike(obj) {\n if (Array.isArray(obj)) return true\n if (typeof obj !== 'object' || !obj) return false\n const length = obj.length\n return typeof length === 'number' && length >= 0\n}\n\nexport function isNumber(v) {\n return typeof v === 'number' && isFinite(v)\n}\n\n// reexport from lodash & vue shared\nexport {\n hasOwn,\n // isEmpty,\n // isEqual,\n isObject,\n isPlainObject,\n isArray,\n isString,\n capitalize,\n camelize,\n looseEqual,\n extend,\n isUndefined,\n isFunction,\n camelCase,\n addCustomProperty\n}\n\nexport function getCesiumColor(inputColor, fallbackColor, timestamp?) {\n const { JulianDate, Color } = Cesium\n const now = JulianDate.now()\n if (inputColor) {\n if (typeof inputColor.getValue === 'function') {\n inputColor = inputColor.getValue(timestamp || now)\n }\n if (typeof inputColor === 'string') {\n return Color.fromCssColorString(inputColor)\n } else if (typeof inputColor === 'function') {\n return getCesiumColor(inputColor(timestamp), fallbackColor)\n } else {\n return inputColor\n }\n } else {\n return fallbackColor\n }\n}\n\nexport function getCesiumValue(value, valueType, timestamp) {\n const { JulianDate, Property } = Cesium\n const now = JulianDate.now()\n if (!value) return value\n if (valueType) {\n if (value instanceof valueType) return value\n else {\n if (value instanceof Property && (value as any)._value instanceof valueType) return (value as any)._value\n }\n }\n if (isFunction(value.getValue)) return value.getValue(timestamp || now)\n return value\n}\n"],"names":[],"mappings":"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"}