ly-utils-lib 1.0.11 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +889 -686
  3. package/dist/array.cjs +237 -0
  4. package/dist/array.cjs.map +1 -0
  5. package/dist/array.d.cts +2 -0
  6. package/dist/array.d.ts +2 -0
  7. package/dist/array.js +150 -0
  8. package/dist/array.js.map +1 -0
  9. package/dist/crypto.cjs +193 -0
  10. package/dist/crypto.cjs.map +1 -0
  11. package/dist/crypto.d.cts +3 -0
  12. package/dist/crypto.d.ts +3 -0
  13. package/dist/crypto.js +144 -0
  14. package/dist/crypto.js.map +1 -0
  15. package/dist/date.cjs +563 -0
  16. package/dist/date.cjs.map +1 -0
  17. package/dist/date.d.cts +2 -0
  18. package/dist/date.d.ts +2 -0
  19. package/dist/date.js +451 -0
  20. package/dist/date.js.map +1 -0
  21. package/dist/excel.cjs +227 -0
  22. package/dist/excel.cjs.map +1 -0
  23. package/dist/excel.d.cts +2 -0
  24. package/dist/excel.d.ts +2 -0
  25. package/dist/excel.js +196 -0
  26. package/dist/excel.js.map +1 -0
  27. package/dist/index-B80SEVzM.d.cts +382 -0
  28. package/dist/index-B80SEVzM.d.ts +382 -0
  29. package/dist/index-Ba1rjTzj.d.cts +299 -0
  30. package/dist/index-Ba1rjTzj.d.ts +299 -0
  31. package/dist/index-Bg1ise7y.d.cts +253 -0
  32. package/dist/index-Bg1ise7y.d.ts +253 -0
  33. package/dist/index-BoqNpwNa.d.cts +203 -0
  34. package/dist/index-BoqNpwNa.d.ts +203 -0
  35. package/dist/index-C0qUnb9Y.d.cts +533 -0
  36. package/dist/index-C0qUnb9Y.d.ts +533 -0
  37. package/dist/index-Cy-mb5v_.d.cts +262 -0
  38. package/dist/index-Cy-mb5v_.d.ts +262 -0
  39. package/dist/index-D1f9Sym2.d.cts +148 -0
  40. package/dist/index-D1f9Sym2.d.ts +148 -0
  41. package/dist/index-Dan5oF-5.d.cts +213 -0
  42. package/dist/index-Dan5oF-5.d.ts +213 -0
  43. package/dist/index-XABfrs7z.d.cts +596 -0
  44. package/dist/index-XABfrs7z.d.ts +596 -0
  45. package/dist/index-YXWfKCK7.d.cts +109 -0
  46. package/dist/index-YXWfKCK7.d.ts +109 -0
  47. package/dist/index.cjs +3355 -0
  48. package/dist/index.cjs.map +1 -0
  49. package/dist/index.d.cts +21 -0
  50. package/dist/index.d.ts +21 -0
  51. package/dist/index.js +3294 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/map.cjs +839 -0
  54. package/dist/map.cjs.map +1 -0
  55. package/dist/map.d.cts +6 -0
  56. package/dist/map.d.ts +6 -0
  57. package/dist/map.js +811 -0
  58. package/dist/map.js.map +1 -0
  59. package/dist/object.cjs +316 -0
  60. package/dist/object.cjs.map +1 -0
  61. package/dist/object.d.cts +2 -0
  62. package/dist/object.d.ts +2 -0
  63. package/dist/object.js +247 -0
  64. package/dist/object.js.map +1 -0
  65. package/dist/pdf.cjs +197 -0
  66. package/dist/pdf.cjs.map +1 -0
  67. package/dist/pdf.d.cts +3 -0
  68. package/dist/pdf.d.ts +3 -0
  69. package/dist/pdf.js +173 -0
  70. package/dist/pdf.js.map +1 -0
  71. package/dist/storage.cjs +255 -0
  72. package/dist/storage.cjs.map +1 -0
  73. package/dist/storage.d.cts +1 -0
  74. package/dist/storage.d.ts +1 -0
  75. package/dist/storage.js +226 -0
  76. package/dist/storage.js.map +1 -0
  77. package/dist/string.cjs +232 -0
  78. package/dist/string.cjs.map +1 -0
  79. package/dist/string.d.cts +2 -0
  80. package/dist/string.d.ts +2 -0
  81. package/dist/string.js +170 -0
  82. package/dist/string.js.map +1 -0
  83. package/dist/utils.cjs +429 -0
  84. package/dist/utils.cjs.map +1 -0
  85. package/dist/utils.d.cts +2 -0
  86. package/dist/utils.d.ts +2 -0
  87. package/dist/utils.js +371 -0
  88. package/dist/utils.js.map +1 -0
  89. package/package.json +159 -33
  90. package/dist/ly-utils-lib.cjs.js +0 -52929
  91. package/dist/ly-utils-lib.cjs.js.map +0 -1
  92. package/dist/ly-utils-lib.es.js +0 -69623
  93. package/dist/ly-utils-lib.es.js.map +0 -1
  94. package/dist/ly-utils-lib.umd.js +0 -53314
  95. package/dist/ly-utils-lib.umd.js.map +0 -1
  96. package/dist/types/index.d.ts +0 -15
  97. package/dist/types/utils/esToolkit.d.ts +0 -12
  98. package/dist/types/utils/ol.d.ts +0 -181
  99. package/dist/types/utils/router.d.ts +0 -15
  100. package/dist/types/utils/storage.d.ts +0 -42
  101. package/dist/types/utils/time.d.ts +0 -76
  102. package/dist/types/utils/tool.d.ts +0 -86
  103. package/dist/vite.svg +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/modules/map/index.ts"],"names":["defaultControls","OlMap"],"mappings":"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","file":"map.js","sourcesContent":["/**\n * Map Module - OpenLayers 高级封装\n *\n * 提供简化的地图操作 API,支持:\n * - 自定义图标样式\n * - GeoJSON 支持\n * - 主题切换(亮/暗)\n * - Overlay 管理\n * - 动态缩放\n */\n\nimport { Feature } from 'ol'\nimport { defaults as defaultControls } from 'ol/control'\nimport { FullScreen } from 'ol/control'\nimport { ScaleLine } from 'ol/control'\nimport { Point, LineString, Polygon } from 'ol/geom'\nimport { Draw, Modify, Snap } from 'ol/interaction'\nimport { Select } from 'ol/interaction'\nimport Overlay from 'ol/Overlay'\nimport TileLayer from 'ol/layer/Tile'\nimport VectorLayer from 'ol/layer/Vector'\nimport { Map as OlMap } from 'ol'\nimport { fromLonLat, toLonLat, transform } from 'ol/proj'\nimport OSM from 'ol/source/OSM'\nimport VectorSource from 'ol/source/Vector'\nimport XYZ from 'ol/source/XYZ'\nimport GeoJSON from 'ol/format/GeoJSON'\nimport { Style, Circle, Fill, Stroke, Icon } from 'ol/style'\nimport { View } from 'ol'\nimport { boundingExtent } from 'ol/extent'\n\n// ==================== 类型定义 ====================\n\n/**\n * 主题类型\n */\nexport type MapTheme = 'light' | 'dark'\n\n/**\n * 地图配置选项\n */\nexport interface MapOptions {\n /** 地图容器 ID */\n container: string\n /** 中心点 [经度, 纬度] */\n center?: [number, number]\n /** 缩放级别 */\n zoom?: number\n /** 最小缩放级别 */\n minZoom?: number\n /** 最大缩放级别 */\n maxZoom?: number\n /** 是否显示比例尺 */\n showScaleLine?: boolean\n /** 是否显示全屏按钮 */\n showFullScreen?: boolean\n /** 默认图层 */\n layers?: Layer[]\n /** 主题 */\n theme?: MapTheme\n /** 主题配置 */\n themeConfig?: ThemeConfig\n /** 自定义图标配置 */\n icons?: Record<string, IconConfig>\n /** 是否启用动态缩放 */\n enableDynamicScale?: boolean\n /** 投影坐标系,默认 EPSG:4326 */\n projection?: string\n}\n\n/**\n * 图层类型\n */\nexport interface Layer {\n /** 图层名称 */\n name: string\n /** 图层实例 */\n layer: import('ol/layer/Base').default\n}\n\n/**\n * 主题配置\n */\nexport interface ThemeConfig {\n /** 亮色地图 URL */\n lightUrl?: string\n /** 暗色地图 URL */\n darkUrl?: string\n}\n\n/**\n * 图标配置\n */\nexport interface IconConfig {\n /** 图标 URL 或 base64 */\n src: string\n /** 锚点位置 [x, y],默认 [0.5, 0.5] */\n anchor?: [number, number]\n /** 缩放比例,默认 1 */\n scale?: number\n}\n\n/**\n * 标记选项\n */\nexport interface MarkerOptions {\n /** 坐标 [经度, 纬度] */\n coordinate: [number, number]\n /** 颜色 */\n color?: string\n /** 半径 */\n radius?: number\n /** 边框颜色 */\n strokeColor?: string\n /** 边框宽度 */\n strokeWidth?: number\n /** 自定义图标名称 */\n icon?: string\n /** 自定义图标配置 */\n iconConfig?: IconConfig\n /** 自定义样式 */\n style?: Style\n}\n\n/**\n * 要素样式选项\n */\nexport interface FeatureStyleOptions {\n /** 图标名称(来自 icons 配置) */\n icon?: string\n /** 自定义图标配置 */\n iconConfig?: IconConfig\n /** 填充颜色(Polygon) */\n fillColor?: string\n /** 边框颜色 */\n strokeColor?: string\n /** 边框宽度 */\n strokeWidth?: number\n /** 自定义样式 */\n style?: Style\n}\n\n/**\n * 绘制类型\n */\nexport type DrawType = 'Point' | 'LineString' | 'Polygon' | 'Circle'\n\n/**\n * 绘制选项\n */\nexport interface DrawOptions {\n /** 绘制类型 */\n type: DrawType\n /** 绘制完成回调 */\n onDrawEnd?: (feature: Feature) => void\n /** 绘制样式 */\n style?: Style\n /** 绘制图层名称 */\n layerName?: string\n}\n\n/**\n * GeoJSON 要素选项\n */\nexport interface GeoJSONFeature {\n type: 'FeatureCollection'\n features: GeoJSONFeatureItem[]\n}\n\n/**\n * GeoJSON 要素项\n */\nexport interface GeoJSONFeatureItem {\n type: 'Feature'\n geometry: {\n type: 'Point' | 'LineString' | 'Polygon'\n coordinates: number[] | number[][] | number[][][]\n }\n properties?: Record<string, any>\n}\n\n/**\n * Overlay 配置\n */\nexport interface OverlayOptions {\n /** Overlay 名称 */\n name: string\n /** DOM 元素 */\n element: HTMLElement\n /** 是否自动平移 */\n autoPan?: boolean\n /** 偏移量 */\n offset?: number[]\n /** 定位方式 */\n positioning?: 'bottom-center' | 'bottom-left' | 'bottom-right' | 'center-center' | 'center-left' | 'center-right' | 'top-center' | 'top-left' | 'top-right'\n}\n\n/**\n * 矢量图层配置\n */\nexport interface VectorLayerConfig {\n /** 图层名称 */\n name: string\n /** 最小缩放级别 */\n minZoom?: number\n /** 最大缩放级别 */\n maxZoom?: number\n /** 图层层级 */\n zIndex?: number\n /** 默认样式 */\n style?: Style\n /** 是否可见 */\n visible?: boolean\n}\n\n// ==================== Map 类 ====================\n\n/**\n * 地图类 - 封装 OpenLayers Map\n */\nexport class MapInstance {\n private map: OlMap\n private vectorSources: Map<string, VectorSource> = new Map()\n private vectorLayers: Map<string, VectorLayer<VectorSource>> = new Map()\n private overlays: Map<string, Overlay> = new Map()\n private themeLayers: Map<MapTheme, TileLayer<XYZ>> = new Map()\n private drawInteraction: Draw | null = null\n private modifyInteraction: Modify | null = null\n private snapInteraction: Snap | null = null\n private selectInteraction: Select | null = null\n private currentTheme: MapTheme = 'light'\n private icons: Map<string, IconConfig> = new Map()\n private enableDynamicScale: boolean = false\n private projection: string = 'EPSG:4326'\n\n constructor(options: MapOptions) {\n this.enableDynamicScale = options.enableDynamicScale || false\n this.projection = options.projection || 'EPSG:4326'\n this.currentTheme = options.theme || 'light'\n\n // 初始化图标\n if (options.icons) {\n Object.entries(options.icons).forEach(([name, config]) => {\n this.icons.set(name, config)\n })\n }\n\n // 创建控件\n const controls = defaultControls({\n zoom: false,\n rotate: false,\n attribution: false\n })\n if (options.showScaleLine !== false) {\n controls.push(new ScaleLine())\n }\n if (options.showFullScreen !== false) {\n controls.push(new FullScreen())\n }\n\n // 创建地图\n this.map = new OlMap({\n target: options.container,\n layers: [],\n view: new View({\n center: fromLonLat(options.center || [116.3974, 39.9093]), // 默认北京\n zoom: options.zoom || 10,\n minZoom: options.minZoom || 1,\n maxZoom: options.maxZoom || 20,\n projection: this.projection,\n constrainResolution: true,\n smoothResolutionConstraint: false\n }),\n controls,\n })\n\n // 添加主题图层\n if (options.themeConfig) {\n this.setupThemeLayers(options.themeConfig)\n }\n\n // 添加默认图层\n if (options.layers) {\n options.layers.forEach(layer => this.map.addLayer(layer.layer))\n }\n\n // 监听缩放事件(用于动态缩放)\n if (this.enableDynamicScale) {\n this.map.on('moveend', () => this.handleZoomChange())\n }\n }\n\n // ==================== 主题管理 ====================\n\n /**\n * 设置主题图层\n */\n private setupThemeLayers(config: ThemeConfig): void {\n const lightUrl = config.lightUrl || 'https://webrd0{s}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}'\n const darkUrl = config.darkUrl || 'https://webrd0{s}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=9&x={x}&y={y}&z={z}'\n\n const lightLayer = new TileLayer({\n preload: Infinity,\n source: new XYZ({ url: lightUrl }),\n })\n\n const darkLayer = new TileLayer({\n preload: Infinity,\n source: new XYZ({ url: darkUrl }),\n })\n\n this.themeLayers.set('light', lightLayer)\n this.themeLayers.set('dark', darkLayer)\n\n this.map.addLayer(lightLayer)\n this.map.addLayer(darkLayer)\n\n // 设置当前主题\n this.setTheme(this.currentTheme)\n }\n\n /**\n * 切换主题\n */\n setTheme(theme: MapTheme): void {\n this.currentTheme = theme\n\n this.themeLayers.forEach((layer: TileLayer<XYZ>, key: MapTheme) => {\n layer.setVisible(key === theme)\n })\n }\n\n /**\n * 获取当前主题\n */\n getTheme(): MapTheme {\n return this.currentTheme\n }\n\n // ==================== 图层管理 ====================\n\n /**\n * 创建矢量图层\n */\n createVectorLayer(config: VectorLayerConfig): void {\n if (this.vectorLayers.has(config.name)) {\n console.warn(`图层 \"${config.name}\" 已存在`)\n return\n }\n\n const source = new VectorSource({\n format: new GeoJSON()\n })\n\n const layer = new VectorLayer({\n source,\n style: config.style,\n minZoom: config.minZoom,\n maxZoom: config.maxZoom,\n zIndex: config.zIndex,\n visible: config.visible !== false\n })\n\n this.vectorSources.set(config.name, source)\n this.vectorLayers.set(config.name, layer)\n this.map.addLayer(layer)\n }\n\n /**\n * 获取矢量图层\n */\n getVectorLayer(name: string): VectorLayer<VectorSource> | undefined {\n return this.vectorLayers.get(name)\n }\n\n /**\n * 获取矢量数据源\n */\n getVectorSource(name: string): VectorSource | undefined {\n return this.vectorSources.get(name)\n }\n\n /**\n * 显示/隐藏矢量图层\n */\n setLayerVisible(name: string, visible: boolean): void {\n const layer = this.vectorLayers.get(name)\n if (layer) {\n layer.setVisible(visible)\n }\n }\n\n /**\n * 设置矢量图层样式\n */\n setLayerStyle(name: string, style: Style): void {\n const layer = this.vectorLayers.get(name)\n if (layer) {\n layer.setStyle(style)\n }\n }\n\n /**\n * 清除矢量图层\n */\n clearLayer(name: string): void {\n const source = this.vectorSources.get(name)\n if (source) {\n source.clear()\n }\n }\n\n /**\n * 删除矢量图层\n */\n removeLayer(name: string): void {\n const layer = this.vectorLayers.get(name)\n if (layer) {\n this.map.removeLayer(layer)\n this.vectorLayers.delete(name)\n this.vectorSources.delete(name)\n }\n }\n\n // ==================== 要素管理 ====================\n\n /**\n * 添加标记\n */\n addMarker(options: MarkerOptions, layerName = 'default'): Feature {\n // 如果图层不存在,创建默认图层\n if (!this.vectorLayers.has(layerName)) {\n this.createVectorLayer({ name: layerName })\n }\n\n const source = this.vectorSources.get(layerName)!\n const feature = new Feature({\n geometry: new Point(fromLonLat(options.coordinate)),\n })\n\n const style = options.style || this.createMarkerStyle(options)\n feature.setStyle(style)\n source.addFeature(feature)\n\n return feature\n }\n\n /**\n * 创建标记样式\n */\n private createMarkerStyle(options: MarkerOptions): Style {\n // 如果指定了图标\n if (options.icon && this.icons.has(options.icon)) {\n const iconConfig = this.icons.get(options.icon)!\n return new Style({\n image: new Icon({\n anchor: iconConfig.anchor || [0.5, 0.5],\n src: iconConfig.src,\n scale: iconConfig.scale || 1\n })\n })\n }\n\n // 如果指定了自定义图标配置\n if (options.iconConfig) {\n return new Style({\n image: new Icon({\n anchor: options.iconConfig.anchor || [0.5, 0.5],\n src: options.iconConfig.src,\n scale: options.iconConfig.scale || 1\n })\n })\n }\n\n // 默认圆形样式\n return new Style({\n image: new Circle({\n radius: options.radius || 7,\n fill: new Fill({ color: options.color || '#ff3333' }),\n stroke: new Stroke({\n color: options.strokeColor || '#ffffff',\n width: options.strokeWidth || 2,\n }),\n }),\n })\n }\n\n /**\n * 移除标记\n */\n removeMarker(feature: Feature, layerName = 'default'): void {\n const source = this.vectorSources.get(layerName)\n if (source) {\n source.removeFeature(feature)\n }\n }\n\n /**\n * 从 GeoJSON 添加要素\n */\n addFeaturesFromGeoJSON(geoJson: GeoJSONFeature | string, layerName = 'default'): Feature[] {\n // 如果图层不存在,创建默认图层\n if (!this.vectorLayers.has(layerName)) {\n this.createVectorLayer({ name: layerName })\n }\n\n const source = this.vectorSources.get(layerName)!\n const format = new GeoJSON()\n const features = format.readFeatures(typeof geoJson === 'string' ? geoJson : JSON.stringify(geoJson))\n\n source.addFeatures(features)\n\n return features\n }\n\n /**\n * 添加要素\n */\n addFeature(feature: Feature, layerName = 'default'): void {\n // 如果图层不存在,创建默认图层\n if (!this.vectorLayers.has(layerName)) {\n this.createVectorLayer({ name: layerName })\n }\n\n const source = this.vectorSources.get(layerName)!\n source.addFeature(feature)\n }\n\n /**\n * 批量添加要素\n */\n addFeatures(features: Feature[], layerName = 'default'): void {\n // 如果图层不存在,创建默认图层\n if (!this.vectorLayers.has(layerName)) {\n this.createVectorLayer({ name: layerName })\n }\n\n const source = this.vectorSources.get(layerName)!\n source.addFeatures(features)\n }\n\n /**\n * 移除要素\n */\n removeFeature(feature: Feature, layerName = 'default'): void {\n const source = this.vectorSources.get(layerName)\n if (source) {\n source.removeFeature(feature)\n }\n }\n\n /**\n * 清除所有矢量要素\n */\n clearFeatures(layerName = 'default'): void {\n const source = this.vectorSources.get(layerName)\n if (source) {\n source.clear()\n }\n }\n\n /**\n * 获取图层中的所有要素\n */\n getFeatures(layerName = 'default'): Feature[] {\n const source = this.vectorSources.get(layerName)\n return source ? source.getFeatures() : []\n }\n\n /**\n * 创建 GeoJSON\n */\n createGeoJSON(type: 'Point' | 'LineString' | 'Polygon', data: any): GeoJSONFeature {\n const coordinates: any = this.getCoordinates(type, data)\n const id = this.generateUUID()\n\n return {\n type: 'FeatureCollection',\n features: [{\n type: 'Feature',\n geometry: {\n type,\n coordinates\n },\n properties: {\n id,\n value: data\n }\n }]\n }\n }\n\n /**\n * 获取坐标\n */\n private getCoordinates(type: string, data: any): any {\n if (type === 'Point') {\n return fromLonLat(transform(data.points, 'EPSG:3857', 'EPSG:4326'))\n } else if (type === 'LineString') {\n return this.setPointArray(data.points)\n } else if (type === 'Polygon') {\n return [this.setPointArray(data.points)]\n }\n return []\n }\n\n /**\n * 设置点数组\n */\n private setPointArray(points: any[]): number[][] {\n return points.map(item => fromLonLat(transform(item, 'EPSG:3857', 'EPSG:4326')))\n }\n\n /**\n * 生成 UUID\n */\n private generateUUID(): string {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = Math.random() * 16 | 0\n const v = c === 'x' ? r : (r & 0x3 | 0x8)\n return v.toString(16)\n })\n }\n\n /**\n * 设置要素样式\n */\n setFeatureStyle(feature: Feature, options: FeatureStyleOptions): void {\n const style = this.createFeatureStyle(options)\n feature.setStyle(style)\n }\n\n /**\n * 创建要素样式\n */\n private createFeatureStyle(options: FeatureStyleOptions): Style {\n // 自定义样式\n if (options.style) {\n return options.style\n }\n\n // 自定义图标\n if (options.icon && this.icons.has(options.icon)) {\n const iconConfig = this.icons.get(options.icon)!\n return new Style({\n image: new Icon({\n anchor: iconConfig.anchor || [0.5, 0.5],\n src: iconConfig.src,\n scale: iconConfig.scale || 1\n })\n })\n }\n\n // 自定义图标配置\n if (options.iconConfig) {\n return new Style({\n image: new Icon({\n anchor: options.iconConfig.anchor || [0.5, 0.5],\n src: options.iconConfig.src,\n scale: options.iconConfig.scale || 1\n })\n })\n }\n\n // 默认样式\n return new Style({\n stroke: new Stroke({\n color: options.strokeColor || '#3388ff',\n width: options.strokeWidth || 2,\n }),\n fill: new Fill({\n color: options.fillColor || 'rgba(51, 136, 255, 0.2)',\n }),\n image: new Circle({\n radius: 7,\n fill: new Fill({ color: options.strokeColor || '#3388ff' }),\n stroke: new Stroke({\n color: '#ffffff',\n width: 2,\n }),\n }),\n })\n }\n\n // ==================== 动态缩放 ====================\n\n /**\n * 处理缩放变化\n */\n private handleZoomChange(): void {\n const zoom = this.getZoom()\n if (zoom !== undefined) {\n this.updateIconScale(zoom)\n }\n }\n\n /**\n * 更新图标缩放比例\n */\n private updateIconScale(zoom: number): void {\n let scale = 1\n\n if (zoom >= 14) {\n scale = 0.5\n } else if (zoom < 14 && zoom >= 12) {\n scale = 0.4\n } else if (zoom < 12) {\n scale = 0.3\n }\n\n // 更新所有图层的图标样式\n this.vectorLayers.forEach((layer: VectorLayer<VectorSource>) => {\n const features = layer.getSource()?.getFeatures()\n if (features) {\n features.forEach((feature: Feature) => {\n const style = feature.getStyle() as Style\n if (style) {\n const image = style.getImage()\n if (image instanceof Icon) {\n image.setScale(scale)\n }\n }\n })\n }\n })\n }\n\n // ==================== Overlay 管理 ====================\n\n /**\n * 创建 Overlay\n */\n createOverlay(options: OverlayOptions): void {\n const overlay = new Overlay({\n element: options.element,\n autoPan: options.autoPan !== false,\n offset: options.offset,\n positioning: options.positioning || 'bottom-center'\n })\n\n this.overlays.set(options.name, overlay)\n this.map.addOverlay(overlay)\n }\n\n /**\n * 显示 Overlay\n */\n showOverlay(name: string, coordinate: [number, number]): void {\n const overlay = this.overlays.get(name)\n if (overlay) {\n overlay.setPosition(fromLonLat(coordinate))\n }\n }\n\n /**\n * 隐藏 Overlay\n */\n hideOverlay(name: string): void {\n const overlay = this.overlays.get(name)\n if (overlay) {\n overlay.setPosition(undefined)\n }\n }\n\n /**\n * 移除 Overlay\n */\n removeOverlay(name: string): void {\n const overlay = this.overlays.get(name)\n if (overlay) {\n this.map.removeOverlay(overlay)\n this.overlays.delete(name)\n }\n }\n\n // ==================== 交互管理 ====================\n\n /**\n * 开始绘制\n */\n startDraw(options: DrawOptions): void {\n this.stopDraw()\n\n const source = options.layerName && this.vectorSources.has(options.layerName)\n ? this.vectorSources.get(options.layerName)!\n : new VectorSource()\n\n this.drawInteraction = new Draw({\n source,\n type: options.type,\n style: options.style,\n })\n\n this.map.addInteraction(this.drawInteraction)\n\n if (options.onDrawEnd) {\n this.drawInteraction.on('drawend', evt => {\n options.onDrawEnd?.(evt.feature)\n })\n }\n\n // 添加吸附交互\n this.snapInteraction = new Snap({ source })\n this.map.addInteraction(this.snapInteraction)\n }\n\n /**\n * 停止绘制\n */\n stopDraw(): void {\n if (this.drawInteraction) {\n this.map.removeInteraction(this.drawInteraction)\n this.drawInteraction = null\n }\n if (this.snapInteraction) {\n this.map.removeInteraction(this.snapInteraction)\n this.snapInteraction = null\n }\n }\n\n /**\n * 开始编辑\n */\n startModify(layerName = 'default'): void {\n this.stopModify()\n\n const source = this.vectorSources.get(layerName)\n if (!source) {\n console.warn(`图层 \"${layerName}\" 不存在`)\n return\n }\n\n this.modifyInteraction = new Modify({\n source,\n })\n\n this.map.addInteraction(this.modifyInteraction)\n\n // 添加吸附交互\n this.snapInteraction = new Snap({ source })\n this.map.addInteraction(this.snapInteraction)\n }\n\n /**\n * 停止编辑\n */\n stopModify(): void {\n if (this.modifyInteraction) {\n this.map.removeInteraction(this.modifyInteraction)\n this.modifyInteraction = null\n }\n if (this.snapInteraction) {\n this.map.removeInteraction(this.snapInteraction)\n this.snapInteraction = null\n }\n }\n\n /**\n * 开始选择\n */\n startSelect(layerName = 'default', onSelect?: (features: Feature[]) => void): void {\n this.stopSelect()\n\n this.selectInteraction = new Select({\n layers: this.vectorLayers.get(layerName) ? [this.vectorLayers.get(layerName)!] : undefined\n })\n\n this.map.addInteraction(this.selectInteraction)\n\n if (onSelect) {\n this.selectInteraction.on('select', evt => {\n onSelect(evt.selected)\n })\n }\n }\n\n /**\n * 停止选择\n */\n stopSelect(): void {\n if (this.selectInteraction) {\n this.map.removeInteraction(this.selectInteraction)\n this.selectInteraction = null\n }\n }\n\n /**\n * 获取选中的要素\n */\n getSelectedFeatures(): Feature[] {\n return this.selectInteraction?.getFeatures().getArray() || []\n }\n\n // ==================== 地图控制 ====================\n\n /**\n * 获取原始地图实例\n */\n getOlMap(): OlMap {\n return this.map\n }\n\n /**\n * 获取视图\n */\n getView(): View | undefined {\n return this.map.getView()\n }\n\n /**\n * 设置中心点\n */\n setCenter(coord: [number, number]): void {\n const view = this.getView()\n if (view) {\n view.setCenter(fromLonLat(coord))\n this.map.render()\n }\n }\n\n /**\n * 获取中心点\n */\n getCenter(): [number, number] | undefined {\n const view = this.getView()\n if (view) {\n const center = view.getCenter()\n return center ? (toLonLat(center) as [number, number]) : undefined\n }\n return undefined\n }\n\n /**\n * 设置缩放级别\n */\n setZoom(zoom: number): void {\n const view = this.getView()\n if (view) {\n view.setZoom(zoom)\n this.map.render()\n }\n }\n\n /**\n * 获取缩放级别\n */\n getZoom(): number | undefined {\n return this.getView()?.getZoom()\n }\n\n /**\n * 缩放到指定范围\n */\n fit(extent: number[] | null, options?: { padding?: number[]; duration?: number }): void {\n if (!extent) return\n\n const view = this.getView()\n if (view) {\n view.fit(extent, options)\n this.map.render()\n }\n }\n\n /**\n * 缩放到图层\n */\n fitLayer(layerName: string, options?: { padding?: number[]; duration?: number }): void {\n const source = this.vectorSources.get(layerName)\n if (source) {\n const extent = source.getExtent()\n if (extent && extent[0] !== Infinity) {\n this.fit(extent, options)\n }\n }\n }\n\n /**\n * 缩放到坐标数组\n */\n fitCoordinates(coordinates: [number, number][], options?: { padding?: number[]; duration?: number }): void {\n const extent = boundingExtent(coordinates)\n this.fit(extent, options)\n }\n\n /**\n * 添加图层\n */\n addLayer(layer: Layer): void {\n this.map.addLayer(layer.layer)\n }\n\n /**\n * 移除图层\n */\n removeMapLayer(layer: Layer): void {\n this.map.removeLayer(layer.layer)\n }\n\n /**\n * 更新地图大小\n */\n updateSize(): void {\n this.map.updateSize()\n }\n\n /**\n * 地图事件监听\n */\n on(event: string | string[], callback: (...args: unknown[]) => void): void {\n this.map.on(event as never, callback)\n }\n\n /**\n * 移除事件监听\n */\n off(event: string | string[], callback: (...args: unknown[]) => void): void {\n this.map.un(event as never, callback)\n }\n\n /**\n * 销毁地图\n */\n destroy(): void {\n this.stopDraw()\n this.stopModify()\n this.stopSelect()\n\n this.overlays.forEach((overlay: Overlay) => this.map.removeOverlay(overlay))\n this.overlays.clear()\n\n this.vectorLayers.forEach((layer: VectorLayer<VectorSource>) => this.map.removeLayer(layer))\n this.vectorLayers.clear()\n this.vectorSources.clear()\n\n this.map.setTarget(undefined)\n }\n}\n\n// ==================== 图层工厂函数 ====================\n\n/**\n * 创建 OSM 图层\n */\nexport function createOSMLayer(name = 'OSM'): Layer {\n return {\n name,\n layer: new TileLayer({\n source: new OSM(),\n }),\n }\n}\n\n/**\n * 创建 XYZ 图层(适用于高德、百度等)\n */\nexport function createXYZLayer(url: string, name = 'XYZ'): Layer {\n return {\n name,\n layer: new TileLayer({\n source: new XYZ({\n url,\n }),\n }),\n }\n}\n\n/**\n * 创建高德地图图层\n */\nexport function createGaodeLayer(name = '高德地图'): Layer {\n return createXYZLayer(\n 'https://webrd0{s}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',\n name\n )\n}\n\n/**\n * 创建天地图图层\n */\nexport function createTiandituLayer(token: string, type = 'vec', name = '天地图'): Layer {\n const url = `https://t{s}.tianditu.gov.cn/DataServer?T=${type}_w&x={x}&y={y}&l={z}&tk=${token}`\n return createXYZLayer(url, name)\n}\n\n// ==================== 工具函数 ====================\n\n/**\n * 经纬度转投影坐标\n */\nexport function lonLatToXY(lon: number, lat: number): number[] {\n return fromLonLat([lon, lat])\n}\n\n/**\n * 投影坐标转经纬度\n */\nexport function xyToLonLat(x: number, y: number): [number, number] {\n return toLonLat([x, y]) as [number, number]\n}\n\n/**\n * 创建点要素\n */\nexport function createPointFeature(coordinate: [number, number]): Feature {\n return new Feature({\n geometry: new Point(fromLonLat(coordinate)),\n })\n}\n\n/**\n * 创建线要素\n */\nexport function createLineFeature(coordinates: [number, number][]): Feature {\n return new Feature({\n geometry: new LineString(coordinates.map(coord => fromLonLat(coord))),\n })\n}\n\n/**\n * 创建面要素\n */\nexport function createPolygonFeature(coordinates: [number, number][][]): Feature {\n return new Feature({\n geometry: new Polygon(coordinates.map(ring => ring.map(coord => fromLonLat(coord)))),\n })\n}\n\n/**\n * 创建带样式的点要素\n */\nexport function createStyledPointFeature(coordinate: [number, number], style: Style): Feature {\n const feature = createPointFeature(coordinate)\n feature.setStyle(style)\n return feature\n}\n\n/**\n * 创建带样式的线要素\n */\nexport function createStyledLineFeature(coordinates: [number, number][], style: Style): Feature {\n const feature = createLineFeature(coordinates)\n feature.setStyle(style)\n return feature\n}\n\n/**\n * 创建带样式的面要素\n */\nexport function createStyledPolygonFeature(coordinates: [number, number][][], style: Style): Feature {\n const feature = createPolygonFeature(coordinates)\n feature.setStyle(style)\n return feature\n}\n\n/**\n * 创建图标样式\n */\nexport function createIconStyle(iconUrl: string, options?: {\n anchor?: [number, number]\n scale?: number\n color?: string\n}): Style {\n return new Style({\n image: new Icon({\n anchor: options?.anchor || [0.5, 0.5],\n src: iconUrl,\n scale: options?.scale || 1,\n color: options?.color\n })\n })\n}\n\n/**\n * 创建圆形样式\n */\nexport function createCircleStyle(options?: {\n radius?: number\n fillColor?: string\n strokeColor?: string\n strokeWidth?: number\n}): Style {\n return new Style({\n image: new Circle({\n radius: options?.radius || 7,\n fill: new Fill({ color: options?.fillColor || '#3388ff' }),\n stroke: new Stroke({\n color: options?.strokeColor || '#ffffff',\n width: options?.strokeWidth || 2,\n }),\n }),\n })\n}\n\n/**\n * 创建线样式\n */\nexport function createStrokeStyle(options?: {\n color?: string\n width?: number\n lineDash?: number[]\n}): Style {\n return new Style({\n stroke: new Stroke({\n color: options?.color || '#3388ff',\n width: options?.width || 2,\n lineDash: options?.lineDash\n }),\n })\n}\n\n/**\n * 创建面样式\n */\nexport function createFillStyle(options?: {\n fillColor?: string\n strokeColor?: string\n strokeWidth?: number\n}): Style {\n return new Style({\n stroke: new Stroke({\n color: options?.strokeColor || '#3388ff',\n width: options?.strokeWidth || 2,\n }),\n fill: new Fill({\n color: options?.fillColor || 'rgba(51, 136, 255, 0.2)',\n }),\n })\n}\n"]}
@@ -0,0 +1,316 @@
1
+ 'use strict';
2
+
3
+ var esToolkit = require('es-toolkit');
4
+
5
+ // src/modules/object/index.ts
6
+ var keys = (obj) => {
7
+ return Object.keys(obj);
8
+ };
9
+ var values = (obj) => {
10
+ return Object.values(obj);
11
+ };
12
+ var entries = (obj) => {
13
+ return Object.entries(obj);
14
+ };
15
+ var fromPairs = (pairs) => {
16
+ const result = {};
17
+ for (const [key, value] of pairs) {
18
+ result[key] = value;
19
+ }
20
+ return result;
21
+ };
22
+ var get = (obj, path, defaultValue) => {
23
+ const keys2 = path.split(".");
24
+ let result = obj;
25
+ for (const key of keys2) {
26
+ if (result === null || result === void 0) {
27
+ return defaultValue;
28
+ }
29
+ result = result[key];
30
+ }
31
+ return result === void 0 ? defaultValue : result;
32
+ };
33
+ var set = (obj, path, value) => {
34
+ const keys2 = path.split(".");
35
+ let result = obj;
36
+ for (let i = 0; i < keys2.length - 1; i++) {
37
+ const key = keys2[i];
38
+ if (!(key in result) || typeof result[key] !== "object") {
39
+ result[key] = {};
40
+ }
41
+ result = result[key];
42
+ }
43
+ result[keys2[keys2.length - 1]] = value;
44
+ };
45
+ var has = (obj, path) => {
46
+ const keys2 = path.split(".");
47
+ let result = obj;
48
+ for (const key of keys2) {
49
+ if (result === null || result === void 0 || !(key in result)) {
50
+ return false;
51
+ }
52
+ result = result[key];
53
+ }
54
+ return true;
55
+ };
56
+ var isEmpty = (obj) => {
57
+ if (obj === null || obj === void 0) return true;
58
+ if (Array.isArray(obj)) return obj.length === 0;
59
+ if (typeof obj === "object") return esToolkit.isEmptyObject(obj);
60
+ return false;
61
+ };
62
+ var deepMerge = (target, ...sources) => {
63
+ if (!sources.length) return target;
64
+ const source = sources.shift();
65
+ if (isObject(target) && isObject(source)) {
66
+ for (const key in source) {
67
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
68
+ const sourceValue = source[key];
69
+ const targetValue = target[key];
70
+ if (isObject(sourceValue)) {
71
+ if (!isObject(targetValue)) {
72
+ target[key] = {};
73
+ }
74
+ deepMerge(target[key], sourceValue);
75
+ } else {
76
+ target[key] = sourceValue;
77
+ }
78
+ }
79
+ }
80
+ }
81
+ return deepMerge(target, ...sources);
82
+ };
83
+ var isObject = (obj) => {
84
+ return obj !== null && typeof obj === "object" && !Array.isArray(obj);
85
+ };
86
+ var isArray = (obj) => {
87
+ return Array.isArray(obj);
88
+ };
89
+ var isFunction = (obj) => {
90
+ return typeof obj === "function";
91
+ };
92
+ var isNumber = (obj) => {
93
+ return typeof obj === "number" && !isNaN(obj);
94
+ };
95
+ var isString = (obj) => {
96
+ return typeof obj === "string";
97
+ };
98
+ var isBoolean = (obj) => {
99
+ return typeof obj === "boolean";
100
+ };
101
+ var isNil = (obj) => {
102
+ return obj === null || obj === void 0;
103
+ };
104
+ var isNull = (obj) => {
105
+ return obj === null;
106
+ };
107
+ var isUndefined = (obj) => {
108
+ return obj === void 0;
109
+ };
110
+ var size = (obj) => {
111
+ return Object.keys(obj).length;
112
+ };
113
+ var clear = (obj) => {
114
+ Object.keys(obj).forEach((key) => {
115
+ delete obj[key];
116
+ });
117
+ return obj;
118
+ };
119
+ var toQueryString = (obj) => {
120
+ return Object.entries(obj).filter(([, value]) => value !== void 0 && value !== null).map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`).join("&");
121
+ };
122
+ var fromQueryString = (queryString) => {
123
+ const params = {};
124
+ const pairs = queryString.slice(1).split("&");
125
+ for (const pair of pairs) {
126
+ const [key, value] = pair.split("=");
127
+ if (key) {
128
+ params[decodeURIComponent(key)] = value ? decodeURIComponent(value) : "";
129
+ }
130
+ }
131
+ return params;
132
+ };
133
+ var sortKeys = (obj, compareFn) => {
134
+ const sortedKeys = Object.keys(obj).sort(compareFn);
135
+ const result = {};
136
+ for (const key of sortedKeys) {
137
+ result[key] = obj[key];
138
+ }
139
+ return result;
140
+ };
141
+ var renameKeys = (obj, renameMap) => {
142
+ const result = {};
143
+ for (const key in obj) {
144
+ const newKey = renameMap[key] || key;
145
+ result[newKey] = obj[key];
146
+ }
147
+ return result;
148
+ };
149
+ var filter = (obj, predicate) => {
150
+ const result = {};
151
+ for (const key in obj) {
152
+ if (predicate(obj[key], key)) {
153
+ result[key] = obj[key];
154
+ }
155
+ }
156
+ return result;
157
+ };
158
+ var mapValues = (obj, mapper) => {
159
+ const result = {};
160
+ for (const key in obj) {
161
+ result[key] = mapper(obj[key], key);
162
+ }
163
+ return result;
164
+ };
165
+ var mapKeys = (obj, mapper) => {
166
+ const result = {};
167
+ for (const key in obj) {
168
+ const newKey = mapper(key, obj[key]);
169
+ result[newKey] = obj[key];
170
+ }
171
+ return result;
172
+ };
173
+ var getDeep = (obj, path, defaultValue) => {
174
+ return get(obj, path, defaultValue);
175
+ };
176
+ var setDeep = (obj, path, value) => {
177
+ set(obj, path, value);
178
+ };
179
+ var hasDeep = (obj, path) => {
180
+ return has(obj, path);
181
+ };
182
+ var deleteDeep = (obj, path) => {
183
+ const keys2 = path.split(".");
184
+ let current = obj;
185
+ for (let i = 0; i < keys2.length - 1; i++) {
186
+ if (!current[keys2[i]]) {
187
+ return false;
188
+ }
189
+ current = current[keys2[i]];
190
+ }
191
+ const lastKey = keys2[keys2.length - 1];
192
+ if (lastKey in current) {
193
+ delete current[lastKey];
194
+ return true;
195
+ }
196
+ return false;
197
+ };
198
+ var toFormData = (obj) => {
199
+ const formData = new FormData();
200
+ for (const key in obj) {
201
+ const value = obj[key];
202
+ if (value !== void 0 && value !== null) {
203
+ if (value instanceof File) {
204
+ formData.append(key, value);
205
+ } else if (Array.isArray(value)) {
206
+ formData.append(key, JSON.stringify(value));
207
+ } else if (typeof value === "object") {
208
+ formData.append(key, JSON.stringify(value));
209
+ } else {
210
+ formData.append(key, String(value));
211
+ }
212
+ }
213
+ }
214
+ return formData;
215
+ };
216
+ var diff = (obj, base) => {
217
+ const result = {};
218
+ for (const key in obj) {
219
+ if (!esToolkit.isEqual(obj[key], base[key])) {
220
+ result[key] = obj[key];
221
+ }
222
+ }
223
+ return result;
224
+ };
225
+ var deepFreeze = (obj) => {
226
+ if (isObject(obj) || isArray(obj)) {
227
+ Object.freeze(obj);
228
+ for (const key in obj) {
229
+ deepFreeze(obj[key]);
230
+ }
231
+ }
232
+ return obj;
233
+ };
234
+ var first = (obj) => {
235
+ const values2 = Object.values(obj);
236
+ return values2[0];
237
+ };
238
+ var last = (obj) => {
239
+ const values2 = Object.values(obj);
240
+ return values2[values2.length - 1];
241
+ };
242
+ var groupByPath = (arr, keyPath) => {
243
+ return esToolkit.groupBy(arr, (item) => get(item, keyPath));
244
+ };
245
+
246
+ Object.defineProperty(exports, "cloneDeep", {
247
+ enumerable: true,
248
+ get: function () { return esToolkit.cloneDeep; }
249
+ });
250
+ Object.defineProperty(exports, "groupBy", {
251
+ enumerable: true,
252
+ get: function () { return esToolkit.groupBy; }
253
+ });
254
+ Object.defineProperty(exports, "invert", {
255
+ enumerable: true,
256
+ get: function () { return esToolkit.invert; }
257
+ });
258
+ Object.defineProperty(exports, "isEmptyObject", {
259
+ enumerable: true,
260
+ get: function () { return esToolkit.isEmptyObject; }
261
+ });
262
+ Object.defineProperty(exports, "isEqual", {
263
+ enumerable: true,
264
+ get: function () { return esToolkit.isEqual; }
265
+ });
266
+ Object.defineProperty(exports, "merge", {
267
+ enumerable: true,
268
+ get: function () { return esToolkit.merge; }
269
+ });
270
+ Object.defineProperty(exports, "omit", {
271
+ enumerable: true,
272
+ get: function () { return esToolkit.omit; }
273
+ });
274
+ Object.defineProperty(exports, "pick", {
275
+ enumerable: true,
276
+ get: function () { return esToolkit.pick; }
277
+ });
278
+ exports.clear = clear;
279
+ exports.deepFreeze = deepFreeze;
280
+ exports.deepMerge = deepMerge;
281
+ exports.deleteDeep = deleteDeep;
282
+ exports.diff = diff;
283
+ exports.entries = entries;
284
+ exports.filter = filter;
285
+ exports.first = first;
286
+ exports.fromPairs = fromPairs;
287
+ exports.fromQueryString = fromQueryString;
288
+ exports.get = get;
289
+ exports.getDeep = getDeep;
290
+ exports.groupByPath = groupByPath;
291
+ exports.has = has;
292
+ exports.hasDeep = hasDeep;
293
+ exports.isArray = isArray;
294
+ exports.isBoolean = isBoolean;
295
+ exports.isEmpty = isEmpty;
296
+ exports.isFunction = isFunction;
297
+ exports.isNil = isNil;
298
+ exports.isNull = isNull;
299
+ exports.isNumber = isNumber;
300
+ exports.isObject = isObject;
301
+ exports.isString = isString;
302
+ exports.isUndefined = isUndefined;
303
+ exports.keys = keys;
304
+ exports.last = last;
305
+ exports.mapKeys = mapKeys;
306
+ exports.mapValues = mapValues;
307
+ exports.renameKeys = renameKeys;
308
+ exports.set = set;
309
+ exports.setDeep = setDeep;
310
+ exports.size = size;
311
+ exports.sortKeys = sortKeys;
312
+ exports.toFormData = toFormData;
313
+ exports.toQueryString = toQueryString;
314
+ exports.values = values;
315
+ //# sourceMappingURL=object.cjs.map
316
+ //# sourceMappingURL=object.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/modules/object/index.ts"],"names":["keys","isEmptyObject","isEqual","values","groupBy"],"mappings":"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","file":"object.cjs","sourcesContent":["/**\n * 对象工具模块\n * 基于 es-toolkit 封装,提供常用的对象处理功能\n */\n\nimport { pick, omit, merge, cloneDeep, isEqual, invert, groupBy, isEmptyObject } from 'es-toolkit'\n\n// 直接导出 es-toolkit 的常用方法\nexport { pick, omit, merge, cloneDeep, isEqual, invert, groupBy, isEmptyObject }\n\n/**\n * 获取对象的所有键\n * @param obj 对象\n */\nexport const keys = <T extends Record<string, any>>(obj: T): (keyof T)[] => {\n return Object.keys(obj) as (keyof T)[]\n}\n\n/**\n * 获取对象的所有值\n * @param obj 对象\n */\nexport const values = <T extends Record<string, any>>(obj: T): T[keyof T][] => {\n return Object.values(obj)\n}\n\n/**\n * 获取对象的所有键值对\n * @param obj 对象\n */\nexport const entries = <T extends Record<string, any>>(obj: T): [keyof T, T[keyof T]][] => {\n return Object.entries(obj) as [keyof T, T[keyof T]][]\n}\n\n/**\n * 从键值对数组创建对象\n * @param pairs 键值对数组\n */\nexport const fromPairs = <K extends string | number | symbol, V>(pairs: [K, V][]): Record<K, V> => {\n const result = {} as Record<K, V>\n for (const [key, value] of pairs) {\n result[key] = value\n }\n return result\n}\n\n/**\n * 获取对象的嵌套属性值\n * @param obj 对象\n * @param path 路径\n * @param defaultValue 默认值\n */\nexport const get = <T>(obj: Record<string, any>, path: string, defaultValue?: T): T => {\n const keys = path.split('.')\n let result = obj\n for (const key of keys) {\n if (result === null || result === undefined) {\n return defaultValue as T\n }\n result = result[key]\n }\n return (result === undefined ? (defaultValue as T) : result) as T\n}\n\n/**\n * 设置对象的嵌套属性值\n * @param obj 对象\n * @param path 路径\n * @param value 值\n */\nexport const set = (obj: Record<string, any>, path: string, value: any): void => {\n const keys = path.split('.')\n let result = obj\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i]\n if (!(key in result) || typeof result[key] !== 'object') {\n result[key] = {}\n }\n result = result[key]\n }\n result[keys[keys.length - 1]] = value\n}\n\n/**\n * 判断对象是否有某个路径\n * @param obj 对象\n * @param path 路径\n */\nexport const has = (obj: Record<string, any>, path: string): boolean => {\n const keys = path.split('.')\n let result = obj\n for (const key of keys) {\n if (result === null || result === undefined || !(key in result)) {\n return false\n }\n result = result[key]\n }\n return true\n}\n\n/**\n * 判断对象是否为空\n * @param obj 对象\n */\nexport const isEmpty = (obj: any): boolean => {\n if (obj === null || obj === undefined) return true\n if (Array.isArray(obj)) return obj.length === 0\n if (typeof obj === 'object') return isEmptyObject(obj)\n return false\n}\n\n/**\n * 深度合并对象\n * @param target 目标对象\n * @param sources 源对象\n */\nexport const deepMerge = <T extends Record<string, any>>(\n target: T,\n ...sources: Partial<T>[]\n): T => {\n if (!sources.length) return target\n const source = sources.shift() as Partial<T>\n\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n const sourceValue = source[key]\n const targetValue = (target as any)[key]\n\n if (isObject(sourceValue)) {\n if (!isObject(targetValue)) {\n ;(target as any)[key] = {}\n }\n deepMerge((target as any)[key], sourceValue)\n } else {\n ;(target as any)[key] = sourceValue\n }\n }\n }\n }\n\n return deepMerge(target, ...sources)\n}\n\n/**\n * 判断是否是对象\n * @param obj 值\n */\nexport const isObject = (obj: any): obj is Record<string, any> => {\n return obj !== null && typeof obj === 'object' && !Array.isArray(obj)\n}\n\n/**\n * 判断是否是数组\n * @param obj 值\n */\nexport const isArray = (obj: any): obj is any[] => {\n return Array.isArray(obj)\n}\n\n/**\n * 判断是否是函数\n * @param obj 值\n */\nexport const isFunction = (obj: any): obj is (...args: unknown[]) => unknown => {\n return typeof obj === 'function'\n}\n\n/**\n * 判断是否是数字\n * @param obj 值\n */\nexport const isNumber = (obj: any): obj is number => {\n return typeof obj === 'number' && !isNaN(obj)\n}\n\n/**\n * 判断是否是字符串\n * @param obj 值\n */\nexport const isString = (obj: any): obj is string => {\n return typeof obj === 'string'\n}\n\n/**\n * 判断是否是布尔值\n * @param obj 值\n */\nexport const isBoolean = (obj: any): obj is boolean => {\n return typeof obj === 'boolean'\n}\n\n/**\n * 判断是否是 null 或 undefined\n * @param obj 值\n */\nexport const isNil = (obj: any): boolean => {\n return obj === null || obj === undefined\n}\n\n/**\n * 判断是否是 null\n * @param obj 值\n */\nexport const isNull = (obj: any): obj is null => {\n return obj === null\n}\n\n/**\n * 判断是否是 undefined\n * @param obj 值\n */\nexport const isUndefined = (obj: any): obj is undefined => {\n return obj === undefined\n}\n\n/**\n * 获取对象的键值对数量\n * @param obj 对象\n */\nexport const size = (obj: Record<string, any>): number => {\n return Object.keys(obj).length\n}\n\n/**\n * 清空对象\n * @param obj 对象\n */\nexport const clear = <T extends Record<string, any>>(obj: T): T => {\n Object.keys(obj).forEach(key => {\n delete obj[key]\n })\n return obj\n}\n\n/**\n * 转换为查询字符串\n * @param obj 对象\n */\nexport const toQueryString = (obj: Record<string, any>): string => {\n return Object.entries(obj)\n .filter(([, value]) => value !== undefined && value !== null)\n .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`)\n .join('&')\n}\n\n/**\n * 查询字符串转对象\n * @param queryString 查询字符串\n */\nexport const fromQueryString = (queryString: string): Record<string, string> => {\n const params: Record<string, string> = {}\n const pairs = queryString.slice(1).split('&')\n for (const pair of pairs) {\n const [key, value] = pair.split('=')\n if (key) {\n params[decodeURIComponent(key)] = value ? decodeURIComponent(value) : ''\n }\n }\n return params\n}\n\n/**\n * 对象排序\n * @param obj 对象\n * @param compareFn 比较函数\n */\nexport const sortKeys = <T extends Record<string, any>>(\n obj: T,\n compareFn?: (a: string, b: string) => number\n): T => {\n const sortedKeys = Object.keys(obj).sort(compareFn)\n const result: Record<string, any> = {}\n for (const key of sortedKeys) {\n result[key] = obj[key]\n }\n return result as T\n}\n\n/**\n * 重命名对象的键\n * @param obj 对象\n * @param renameMap 重命名映射\n */\nexport const renameKeys = <T extends Record<string, any>>(\n obj: T,\n renameMap: Record<string, string>\n): T => {\n const result: Record<string, any> = {}\n for (const key in obj) {\n const newKey = renameMap[key] || key\n result[newKey] = obj[key]\n }\n return result as T\n}\n\n/**\n * 过滤对象的键值对\n * @param obj 对象\n * @param predicate 过滤函数\n */\nexport const filter = <T extends Record<string, any>>(\n obj: T,\n predicate: (value: any, key: string) => boolean\n): Partial<T> => {\n const result: Record<string, any> = {}\n for (const key in obj) {\n if (predicate(obj[key], key)) {\n result[key] = obj[key]\n }\n }\n return result as Partial<T>\n}\n\n/**\n * 映射对象的值\n * @param obj 对象\n * @param mapper 映射函数\n */\nexport const mapValues = <T extends Record<string, any>, R>(\n obj: T,\n mapper: (value: any, key: string) => R\n): Record<string, R> => {\n const result: Record<string, R> = {}\n for (const key in obj) {\n result[key] = mapper(obj[key], key)\n }\n return result\n}\n\n/**\n * 映射对象的键\n * @param obj 对象\n * @param mapper 映射函数\n */\nexport const mapKeys = <T extends Record<string, any>, R extends string>(\n obj: T,\n mapper: (key: string, value: any) => R\n): Record<R, any> => {\n const result: Record<string, any> = {}\n for (const key in obj) {\n const newKey = mapper(key, obj[key])\n result[newKey] = obj[key]\n }\n return result as Record<R, any>\n}\n\n/**\n * 获取嵌套路径的值\n * @param obj 对象\n * @param path 路径\n * @param defaultValue 默认值\n */\nexport const getDeep = <T>(obj: Record<string, any>, path: string, defaultValue?: T): T => {\n return get(obj, path, defaultValue)\n}\n\n/**\n * 设置嵌套路径的值\n * @param obj 对象\n * @param path 路径\n * @param value 值\n */\nexport const setDeep = (obj: Record<string, any>, path: string, value: any): void => {\n set(obj, path, value)\n}\n\n/**\n * 判断对象是否有某个路径\n * @param obj 对象\n * @param path 路径\n */\nexport const hasDeep = (obj: Record<string, any>, path: string): boolean => {\n return has(obj, path)\n}\n\n/**\n * 删除嵌套路径的值\n * @param obj 对象\n * @param path 路径\n */\nexport const deleteDeep = (obj: Record<string, any>, path: string): boolean => {\n const keys = path.split('.')\n let current = obj\n for (let i = 0; i < keys.length - 1; i++) {\n if (!current[keys[i]]) {\n return false\n }\n current = current[keys[i]]\n }\n const lastKey = keys[keys.length - 1]\n if (lastKey in current) {\n delete current[lastKey]\n return true\n }\n return false\n}\n\n/**\n * 转换为 FormData\n * @param obj 对象\n */\nexport const toFormData = (obj: Record<string, any>): FormData => {\n const formData = new FormData()\n for (const key in obj) {\n const value = obj[key]\n if (value !== undefined && value !== null) {\n if (value instanceof File) {\n formData.append(key, value)\n } else if (Array.isArray(value)) {\n formData.append(key, JSON.stringify(value))\n } else if (typeof value === 'object') {\n formData.append(key, JSON.stringify(value))\n } else {\n formData.append(key, String(value))\n }\n }\n }\n return formData\n}\n\n/**\n * 对象差值(返回在 obj 中但不在 base 中的键值对)\n * @param obj 对象\n * @param base 基础对象\n */\nexport const diff = <T extends Record<string, any>>(obj: T, base: T): Partial<T> => {\n const result: Record<string, any> = {}\n for (const key in obj) {\n if (!isEqual(obj[key], base[key])) {\n result[key] = obj[key]\n }\n }\n return result as Partial<T>\n}\n\n/**\n * 深度冻结对象\n * @param obj 对象\n */\nexport const deepFreeze = <T>(obj: T): T => {\n if (isObject(obj) || isArray(obj)) {\n Object.freeze(obj)\n for (const key in obj) {\n deepFreeze((obj as any)[key])\n }\n }\n return obj\n}\n\n/**\n * 获取对象的第一个值\n * @param obj 对象\n */\nexport const first = <T>(obj: Record<string, T>): T | undefined => {\n const values = Object.values(obj)\n return values[0]\n}\n\n/**\n * 获取对象的最后一个值\n * @param obj 对象\n */\nexport const last = <T>(obj: Record<string, T>): T | undefined => {\n const values = Object.values(obj)\n return values[values.length - 1]\n}\n\n/**\n * 按路径分组对象数组\n * @param arr 对象数组\n * @param keyPath 键路径\n */\nexport const groupByPath = <T extends Record<string, any>>(\n arr: T[],\n keyPath: string\n): Record<string, T[]> => {\n return groupBy(arr, item => get(item, keyPath))\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export { cloneDeep, groupBy, invert, isEmptyObject, isEqual, merge, omit, pick } from 'es-toolkit';
2
+ export { c as clear, d as deepFreeze, a as deepMerge, b as deleteDeep, e as diff, f as entries, g as filter, h as first, j as fromPairs, k as fromQueryString, l as get, m as getDeep, n as groupByPath, o as has, p as hasDeep, q as isArray, r as isBoolean, s as isEmpty, t as isFunction, u as isNil, v as isNull, w as isNumber, x as isObject, y as isString, z as isUndefined, A as keys, B as last, C as mapKeys, D as mapValues, E as renameKeys, F as set, G as setDeep, H as size, I as sortKeys, J as toFormData, K as toQueryString, L as values } from './index-Cy-mb5v_.cjs';
@@ -0,0 +1,2 @@
1
+ export { cloneDeep, groupBy, invert, isEmptyObject, isEqual, merge, omit, pick } from 'es-toolkit';
2
+ export { c as clear, d as deepFreeze, a as deepMerge, b as deleteDeep, e as diff, f as entries, g as filter, h as first, j as fromPairs, k as fromQueryString, l as get, m as getDeep, n as groupByPath, o as has, p as hasDeep, q as isArray, r as isBoolean, s as isEmpty, t as isFunction, u as isNil, v as isNull, w as isNumber, x as isObject, y as isString, z as isUndefined, A as keys, B as last, C as mapKeys, D as mapValues, E as renameKeys, F as set, G as setDeep, H as size, I as sortKeys, J as toFormData, K as toQueryString, L as values } from './index-Cy-mb5v_.js';