瀏覽代碼

feat:初始化

mws 4 月之前
當前提交
f9379005b7
共有 100 個文件被更改,包括 20032 次插入0 次删除
  1. 34 0
      App.vue
  2. 33 0
      api/login.js
  3. 106 0
      api/scan.js
  4. 178 0
      components/tabbar.vue
  5. 177 0
      components/tabbar_cjx.vue
  6. 29 0
      config.js
  7. 20 0
      index.html
  8. 26 0
      main.js
  9. 73 0
      manifest.json
  10. 27 0
      mixins/claimMixin.js
  11. 12 0
      node_modules/.bin/fxparser
  12. 17 0
      node_modules/.bin/fxparser.cmd
  13. 28 0
      node_modules/.bin/fxparser.ps1
  14. 12 0
      node_modules/.bin/geo2topo
  15. 17 0
      node_modules/.bin/geo2topo.cmd
  16. 28 0
      node_modules/.bin/geo2topo.ps1
  17. 12 0
      node_modules/.bin/topo2geo
  18. 17 0
      node_modules/.bin/topo2geo.cmd
  19. 28 0
      node_modules/.bin/topo2geo.ps1
  20. 12 0
      node_modules/.bin/topomerge
  21. 17 0
      node_modules/.bin/topomerge.cmd
  22. 28 0
      node_modules/.bin/topomerge.ps1
  23. 12 0
      node_modules/.bin/topoquantize
  24. 17 0
      node_modules/.bin/topoquantize.cmd
  25. 28 0
      node_modules/.bin/topoquantize.ps1
  26. 2289 0
      node_modules/.package-lock.json
  27. 4 0
      node_modules/@amap/amap-jsapi-loader/.vscode/settings.json
  28. 111 0
      node_modules/@amap/amap-jsapi-loader/README.md
  29. 11 0
      node_modules/@amap/amap-jsapi-loader/dist/index.js
  30. 69 0
      node_modules/@amap/amap-jsapi-loader/example/AMapUI.html
  31. 76 0
      node_modules/@amap/amap-jsapi-loader/example/Loca.html
  32. 94 0
      node_modules/@amap/amap-jsapi-loader/example/Multi.html
  33. 36 0
      node_modules/@amap/amap-jsapi-loader/example/example-es6.html
  34. 46 0
      node_modules/@amap/amap-jsapi-loader/example/example.html
  35. 2 0
      node_modules/@amap/amap-jsapi-loader/example/libs/chai.min.js
  36. 1 0
      node_modules/@amap/amap-jsapi-loader/example/libs/mocha.min.css
  37. 2 0
      node_modules/@amap/amap-jsapi-loader/example/libs/mocha.min.js
  38. 287 0
      node_modules/@amap/amap-jsapi-loader/example/test.html
  39. 15 0
      node_modules/@amap/amap-jsapi-loader/index.d.ts
  40. 37 0
      node_modules/@amap/amap-jsapi-loader/package.json
  41. 25 0
      node_modules/@amap/amap-jsapi-loader/rollup.config.js
  42. 5 0
      node_modules/@amap/amap-jsapi-loader/src/global.d.ts
  43. 367 0
      node_modules/@amap/amap-jsapi-loader/src/index.ts
  44. 17 0
      node_modules/@amap/amap-jsapi-loader/test/demo.ts
  45. 7 0
      node_modules/@amap/amap-jsapi-loader/test/test.ts
  46. 7 0
      node_modules/@fingerprintjs/fingerprintjs/LICENSE
  47. 3244 0
      node_modules/@fingerprintjs/fingerprintjs/dist/fp.cjs.js
  48. 634 0
      node_modules/@fingerprintjs/fingerprintjs/dist/fp.d.ts
  49. 3217 0
      node_modules/@fingerprintjs/fingerprintjs/dist/fp.esm.js
  50. 3323 0
      node_modules/@fingerprintjs/fingerprintjs/dist/fp.js
  51. 13 0
      node_modules/@fingerprintjs/fingerprintjs/dist/fp.min.js
  52. 3324 0
      node_modules/@fingerprintjs/fingerprintjs/dist/fp.umd.js
  53. 13 0
      node_modules/@fingerprintjs/fingerprintjs/dist/fp.umd.min.js
  54. 81 0
      node_modules/@fingerprintjs/fingerprintjs/package.json
  55. 124 0
      node_modules/@fingerprintjs/fingerprintjs/readme.md
  56. 20 0
      node_modules/@turf/along/LICENSE
  57. 59 0
      node_modules/@turf/along/README.md
  58. 39 0
      node_modules/@turf/along/dist/cjs/index.cjs
  59. 1 0
      node_modules/@turf/along/dist/cjs/index.cjs.map
  60. 26 0
      node_modules/@turf/along/dist/cjs/index.d.cts
  61. 26 0
      node_modules/@turf/along/dist/esm/index.d.ts
  62. 39 0
      node_modules/@turf/along/dist/esm/index.js
  63. 1 0
      node_modules/@turf/along/dist/esm/index.js.map
  64. 75 0
      node_modules/@turf/along/package.json
  65. 20 0
      node_modules/@turf/angle/LICENSE
  66. 60 0
      node_modules/@turf/angle/README.md
  67. 41 0
      node_modules/@turf/angle/dist/cjs/index.cjs
  68. 1 0
      node_modules/@turf/angle/dist/cjs/index.cjs.map
  69. 24 0
      node_modules/@turf/angle/dist/cjs/index.d.cts
  70. 24 0
      node_modules/@turf/angle/dist/esm/index.d.ts
  71. 41 0
      node_modules/@turf/angle/dist/esm/index.js
  72. 1 0
      node_modules/@turf/angle/dist/esm/index.js.map
  73. 79 0
      node_modules/@turf/angle/package.json
  74. 20 0
      node_modules/@turf/area/LICENSE
  75. 55 0
      node_modules/@turf/area/README.md
  76. 66 0
      node_modules/@turf/area/dist/cjs/index.cjs
  77. 1 0
      node_modules/@turf/area/dist/cjs/index.cjs.map
  78. 20 0
      node_modules/@turf/area/dist/cjs/index.d.cts
  79. 20 0
      node_modules/@turf/area/dist/esm/index.d.ts
  80. 66 0
      node_modules/@turf/area/dist/esm/index.js
  81. 1 0
      node_modules/@turf/area/dist/esm/index.js.map
  82. 72 0
      node_modules/@turf/area/package.json
  83. 20 0
      node_modules/@turf/bbox-clip/LICENSE
  84. 62 0
      node_modules/@turf/bbox-clip/README.md
  85. 133 0
      node_modules/@turf/bbox-clip/dist/cjs/index.cjs
  86. 1 0
      node_modules/@turf/bbox-clip/dist/cjs/index.cjs.map
  87. 23 0
      node_modules/@turf/bbox-clip/dist/cjs/index.d.cts
  88. 23 0
      node_modules/@turf/bbox-clip/dist/esm/index.d.ts
  89. 133 0
      node_modules/@turf/bbox-clip/dist/esm/index.js
  90. 1 0
      node_modules/@turf/bbox-clip/dist/esm/index.js.map
  91. 79 0
      node_modules/@turf/bbox-clip/package.json
  92. 20 0
      node_modules/@turf/bbox-polygon/LICENSE
  93. 60 0
      node_modules/@turf/bbox-polygon/README.md
  94. 28 0
      node_modules/@turf/bbox-polygon/dist/cjs/index.cjs
  95. 1 0
      node_modules/@turf/bbox-polygon/dist/cjs/index.cjs.map
  96. 26 0
      node_modules/@turf/bbox-polygon/dist/cjs/index.d.cts
  97. 26 0
      node_modules/@turf/bbox-polygon/dist/esm/index.d.ts
  98. 28 0
      node_modules/@turf/bbox-polygon/dist/esm/index.js
  99. 1 0
      node_modules/@turf/bbox-polygon/dist/esm/index.js.map
  100. 0 0
      node_modules/@turf/bbox-polygon/package.json

+ 34 - 0
App.vue

@@ -0,0 +1,34 @@
+<script>
+	import config from './config'
+	import { getToken } from '@/utils/auth'
+	export default {
+		onLaunch: function() {
+			console.log('App Launch')
+		},
+		onShow: function() {
+			console.log('App Show')
+		},
+		onHide: function() {
+			console.log('App Hide')
+		}
+	}
+</script>
+
+<style lang="scss">
+	/*每个页面公共css */
+	@import '@/node_modules/uview-ui/index.scss';
+	/* 修复内容区域样式 */
+	.u-tabbar__content  {
+		background-color: transparent !important;
+		box-shadow: none !important;
+		height: 140rpx;
+		border: none;
+	}
+	
+	
+	/* 修复图标尺寸 - 精确选择器路径 */
+	.u-tabbar-item .u-tabbar-item__icon .u-icon__img {
+		width: 80rpx !important;
+		height: 80rpx !important;
+	}
+</style>

+ 33 - 0
api/login.js

@@ -0,0 +1,33 @@
+import request from '@/utils/request'
+
+
+//登陆
+export function login(scanCode,jsCode){
+  return request({
+    url: `/miniapp/`+ scanCode,
+    method: 'post',
+    params: {
+      jsCode:jsCode
+    }
+  })
+}
+
+//登陆
+export function getUserInfo(params){
+  return request({
+    url: `/miniapp/getUserInfo`,
+    method: 'post',
+    params: params
+  })
+}
+
+//验证二维码是否有效
+export function verifyScanCode(scanCode){
+  return request({
+    url: `/miniapp/verify`,
+    method: 'post',
+    params: {
+      qrCode:scanCode
+    }
+  })
+}

+ 106 - 0
api/scan.js

@@ -0,0 +1,106 @@
+import request from '@/utils/request'
+
+//获取扫码内容
+export function getScanData(qrCode){
+  return request({
+    url: `/miniapp/scan`,
+    method: 'post',
+    params: {
+      qrCode:qrCode
+    }
+  })
+}
+
+//翻卡接口
+export function saveCardData(qrcode_id,json){
+  return request({
+    url: `/miniapp/sendHb`,
+    method: 'post',
+    params: {
+      qrcode_id:qrcode_id,
+	  json:json
+    }
+  })
+}
+
+//产品溯源
+export function suyuanData(qrCode){
+  return request({
+    url: `/miniapp/suyuan`,
+    method: 'post',
+    params: {
+      qrCode:qrCode
+    }
+  })
+}
+
+
+//内袋验证码校验接口
+export function confirmCode(qrCode,text){
+  return request({
+    url: `/miniapp/confirmCode`,
+    method: 'post',
+    params: {
+      qrCode:qrCode,
+	  text:text
+    }
+  })
+}
+//查询扫码记录接口
+export function scanQuery(code,state){
+  return request({
+    url: `/miniapp/scanQuery`,
+    method: 'post',
+    params: {
+      code:code,
+      state:state
+    }
+  })
+}
+
+//活动规则
+export function getRule(qrCode){
+  return request({
+    url: `/miniapp/rule`,
+    method: 'post',
+    params: {
+      qrCode:qrCode
+    }
+  })
+}
+
+
+//保存领奖信息
+export function addWinDetail(params){
+  return request({
+    url: `/miniapp/addWinDetail`,
+    method: 'post',
+    params: params
+  })
+}
+
+//意见反馈
+export function feed(params){
+  return request({
+    url: `/miniapp/feed`,
+    method: 'post',
+    params: params
+  })
+}
+
+//收货地址
+export function getMiniAppUserAddress(){
+  return request({
+    url: `/miniapp/getMiniAppUserAddress`,
+    method: 'post',
+  })
+}
+
+//修改收货地址
+export function editMiniAppUserAddress(params){
+  return request({
+    url: `/miniapp/editMiniAppUserAddress`,
+    method: 'post',
+	params: params
+  })
+}

+ 178 - 0
components/tabbar.vue

@@ -0,0 +1,178 @@
+<template>
+	<view class="">
+		<u-tabbar :value="initIndex" @click="handleLogin" @change="onTabChange" :fixed="true" :placeholder="true"
+			:safeAreaInsetBottom="true" class="custom-tabbar" activeColor="#d81e06" inactiveColor="#fff">
+			<u-tabbar-item v-for="(item, index) in items" :key="index" :text="item.text"
+				:icon="require(`@/static/images/tabbar/${item.icon}`)" />
+		</u-tabbar>
+		<u-popup :show="show" mode="bottom" class="popup-view" @close="close" @open="open">
+			<view style="margin: 20px">
+				<view class="login-text">
+					梅山古镇
+				</view>
+				<button class="login-btn" open-type="getPhoneNumber" @getphonenumber="handlePhone">
+					授权登录
+				</button>
+			</view>
+		</u-popup>
+	</view>
+
+
+</template>
+
+<script>
+	import {
+		getUserInfo
+	} from '@/api/login'
+	export default {
+		data() {
+			return {
+				show: false,
+				loginDate: {
+					jsCode: '',
+					encryptedData: '',
+					code: '',
+					iv: ''
+				},
+				// 选中的 tab 索引
+				initIndex:4,
+				selectedIndex: 4,
+				// 自定义 tab 数据
+				items: [
+					{
+						text: '溯源信息',
+						icon: 'traceability.png'
+					},
+					{
+						text: '意见反馈',
+						icon: 'opinion.png'
+					},
+					{
+						text: '公司简介',
+						icon: 'company.png'
+					},
+					{
+						text: '个人中心',
+						icon: 'my.png'
+					},
+				]
+			};
+		},
+		created() {
+			// // 监听事件
+			// uni.$on('updateSelectedIndex', (index) => {
+			// 	this.selectedIndex = index;
+			// });
+		},
+		methods: {
+			open() {
+				// console.log('open');
+			},
+			close() {
+				this.show = false
+				// console.log('close');
+			},
+			onTabChange(index) {
+				//判断是否已经授权
+				if(uni.getStorageSync('Authorization-status')){
+					this.handleTabSwitch(index);
+					return;
+				}
+				this.handleLogin();
+				this.show = true;
+				this.selectedIndex = index;
+				return;
+	
+			},
+			async handleLogin() {
+				
+				const [loginRes,profileRes] = await Promise.all([
+					uni.login({
+						provider: 'weixin'
+					}),
+					uni.getUserProfile({
+						desc: '登录需要'
+					})
+				])
+				this.loginDate.iv = profileRes.iv;
+				this.loginDate.encryptedData = profileRes.encryptedData;
+				this.loginDate.jsCode = loginRes.code;
+
+			},
+			handlePhone(e) {
+				if (e.detail.code) {
+					this.loginDate.code = e.detail.code;
+					// this.loginDate.iv = e.detail.iv;
+					// this.loginDate.encryptedData = e.detail.encryptedData;
+					getUserInfo(this.loginDate).then(res => {
+						if (res.code === 0) {
+							uni.setStorageSync('Authorization-status',true);
+							this.show = false;
+							this.handleTabSwitch(this.selectedIndex);
+						} else {
+							
+						}
+					})
+
+				}
+			},
+			handleTabSwitch(index) {
+				let url = '';
+				switch (index) {
+					case 0:
+            url = '/pages/lgz/introduction/introduction';
+						break;
+					case 1:
+						url = '/pages/lgz/traceability/traceability';
+						break;
+					case 2:
+						url = '/pages/lgz/feedback/feedback';
+						break;
+					case 3:
+            url = '/pages/lgz/my/my';
+						break;
+					default:
+						break;
+				}
+
+				uni.navigateTo({
+					url: url
+				});
+			}
+
+		}
+	};
+</script>
+
+<style scoped>
+	/* 修复内容区域样式 */
+	::v-deep .u-tabbar__content {
+		background-color: transparent !important;
+		box-shadow: none !important;
+		height: 140rpx;
+		border: none;
+	}
+
+
+	/* 修复图标尺寸 - 精确选择器路径 */
+	::v-deep .custom-tabbar .u-tabbar-item .u-tabbar-item__icon .u-icon__img {
+		width: 80rpx !important;
+		height: 80rpx !important;
+	}
+
+	.login-text {
+		text-align: center;
+		font-size: 18px;
+		font-weight: 800;
+		margin-bottom: 10px;
+	}
+
+	.login-btn {
+		border-radius: 22px;
+		border: none !important;
+		background-color: #5ac725;
+		color: white;
+		font-size: 15px;
+		margin-bottom: 15px;
+	}
+</style>

+ 177 - 0
components/tabbar_cjx.vue

@@ -0,0 +1,177 @@
+<template>
+	<view class="">
+		<u-tabbar :value="initIndex" @click="handleLogin" @change="onTabChange" :fixed="true" :placeholder="true"
+			:safeAreaInsetBottom="true" class="custom-tabbar" activeColor="#d81e06" inactiveColor="#fff">
+			<u-tabbar-item v-for="(item, index) in items" :key="index" :text="item.text"
+				:icon="require(`@/static/images/tabbar/cjx/${item.icon}`)" />
+		</u-tabbar>
+		<u-popup :show="show" mode="bottom" class="popup-view" @close="close" @open="open">
+			<view style="margin: 20px">
+				<view class="login-text">
+					超级炫
+				</view>
+				<button class="login-btn" open-type="getPhoneNumber" @getphonenumber="handlePhone">
+					授权登录
+				</button>
+			</view>
+		</u-popup>
+	</view>
+
+
+</template>
+
+<script>
+	import {
+		getUserInfo
+	} from '@/api/login'
+	export default {
+		data() {
+			return {
+				show: false,
+				loginDate: {
+					jsCode: '',
+					encryptedData: '',
+					code: '',
+					iv: ''
+				},
+				// 选中的 tab 索引
+				initIndex: 4,
+				selectedIndex: 4,
+				// 自定义 tab 数据
+				items: [{
+						text: '溯源信息',
+						icon: 'traceability.png'
+					},
+					{
+						text: '意见反馈',
+						icon: 'opinion.png'
+					},
+					{
+						text: '公司简介',
+						icon: 'company.png'
+					},
+					{
+						text: '个人中心',
+						icon: 'scan.png'
+					},
+				]
+			};
+		},
+		created() {
+			// // 监听事件
+			// uni.$on('updateSelectedIndex', (index) => {
+			// 	this.selectedIndex = index;
+			// });
+		},
+		methods: {
+			open() {
+				// console.log('open');
+			},
+			close() {
+				this.show = false
+				// console.log('close');
+			},
+			onTabChange(index) {
+				//判断是否已经授权
+				if (uni.getStorageSync('Authorization-status')) {
+					this.handleTabSwitch(index);
+					return;
+				}
+				this.handleLogin();
+				this.show = true;
+				this.selectedIndex = index;
+				return;
+
+			},
+			async handleLogin() {
+
+				const [loginRes, profileRes] = await Promise.all([
+					uni.login({
+						provider: 'weixin'
+					}),
+					uni.getUserProfile({
+						desc: '登录需要'
+					})
+				])
+				this.loginDate.iv = profileRes.iv;
+				this.loginDate.encryptedData = profileRes.encryptedData;
+				this.loginDate.jsCode = loginRes.code;
+
+			},
+			handlePhone(e) {
+				if (e.detail.code) {
+					this.loginDate.code = e.detail.code;
+					// this.loginDate.iv = e.detail.iv;
+					// this.loginDate.encryptedData = e.detail.encryptedData;
+					getUserInfo(this.loginDate).then(res => {
+						if (res.code === 0) {
+							uni.setStorageSync('Authorization-status', true);
+							this.show = false;
+							this.handleTabSwitch(this.selectedIndex);
+						} else {
+
+						}
+					})
+
+				}
+			},
+			handleTabSwitch(index) {
+				let url = '';
+				switch (index) {
+					case 0:
+						url = '/pages/cjx/introduction/introduction';
+						break;
+					case 1:
+						url = '/pages/cjx/traceability/traceability';
+						break;
+					case 2:
+						url = '/pages/cjx/feedback/feedback';
+						break;
+					case 3:
+						url = '/pages/cjx/my/my';
+						break;
+					default:
+						break;
+				}
+
+				uni.navigateTo({
+					url: url
+				});
+			}
+
+		}
+	};
+</script>
+
+<style scoped>
+	/* 修复内容区域样式 */
+	::v-deep .u-tabbar__content {
+		background-color: transparent !important;
+		box-shadow: none !important;
+		height: 140rpx;
+		border: none;
+	}
+
+
+	/* 修复图标尺寸 - 精确选择器路径 */
+	::v-deep .custom-tabbar .u-tabbar-item .u-tabbar-item__icon .u-icon__img {
+		width: 80rpx !important;
+		height: 80rpx !important;
+	}
+
+	.login-text {
+		text-align: center;
+		font-size: 18px;
+		font-weight: 800;
+		margin-bottom: 10px;
+	}
+
+	.login-btn {
+		border-radius: 22px;
+		border: none !important;
+		background-color: #5ac725;
+		color: white;
+		font-size: 15px;
+		margin-bottom: 15px;
+	}
+</style>

+ 29 - 0
config.js

@@ -0,0 +1,29 @@
+// 应用全局配置
+module.exports = {
+
+  // baseUrl: 'https://scantest.dnzc.vip',
+  baseUrl: 'http://172.16.7.235:8080/pg',
+  
+
+  // 应用信息
+  appInfo: {
+    // 应用名称
+    name: "uav-app",
+    // 应用版本
+    version: "1.1.0",
+    // 应用logo
+    logo: "/static/logo.png",
+    // 官方网站
+    site_url: "http://uav.vip",
+    // 政策协议
+    agreements: [{
+        title: "隐私政策",
+        url: "https://uav.vip/protocol.html"
+      },   {
+        title: "用户服务协议",
+        url: "https://uav.vip/protocol.html"
+      }
+    ]
+  },
+
+}

+ 20 - 0
index.html

@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <script>
+      var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
+        CSS.supports('top: constant(a)'))
+      document.write(
+        '<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
+        (coverSupport ? ', viewport-fit=cover' : '') + '" />')
+    </script>
+    <title></title>
+    <!--preload-links-->
+    <!--app-context-->
+  </head>
+  <body>
+    <div id="app"><!--app-html--></div>
+    <script type="module" src="/main.js"></script>
+  </body>
+</html>

+ 26 - 0
main.js

@@ -0,0 +1,26 @@
+import App from './App'
+
+// #ifndef VUE3
+import Vue from 'vue'
+import './uni.promisify.adaptor'
+import uView from '@/node_modules/uview-ui';
+import store from './store' // 引入 store
+Vue.use(uView);
+Vue.prototype.$store = store
+Vue.config.productionTip = false
+App.mpType = 'app'
+const app = new Vue({
+  ...App
+})
+app.$mount()
+// #endif
+
+// #ifdef VUE3
+import { createSSRApp } from 'vue'
+export function createApp() {
+  const app = createSSRApp(App)
+  return {
+    app
+  }
+}
+// #endif

+ 73 - 0
manifest.json

@@ -0,0 +1,73 @@
+{
+    "name" : "tm-sm-gzgz",
+    "appid" : "__UNI__BE7E4E1",
+    "description" : "",
+    "versionName" : "1.0.0",
+    "versionCode" : "100",
+    "transformPx" : false,
+    /* 5+App特有相关 */
+    "app-plus" : {
+        "usingComponents" : true,
+        "nvueStyleCompiler" : "uni-app",
+        "compilerVersion" : 3,
+        "splashscreen" : {
+            "alwaysShowBeforeRender" : true,
+            "waiting" : true,
+            "autoclose" : true,
+            "delay" : 0
+        },
+        /* 模块配置 */
+        "modules" : {},
+        /* 应用发布信息 */
+        "distribute" : {
+            /* android打包配置 */
+            "android" : {
+                "permissions" : [
+                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
+                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
+                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
+                ]
+            },
+            /* ios打包配置 */
+            "ios" : {},
+            /* SDK配置 */
+            "sdkConfigs" : {}
+        }
+    },
+    /* 快应用特有相关 */
+    "quickapp" : {},
+    /* 小程序特有相关 */
+    "mp-weixin" : {
+        "appid" : "wx67fbe90ca1db0372",
+        "setting" : {
+            "urlCheck" : false,
+            "minified" : true
+        },
+        "usingComponents" : true
+    },
+    "mp-alipay" : {
+        "usingComponents" : true
+    },
+    "mp-baidu" : {
+        "usingComponents" : true
+    },
+    "mp-toutiao" : {
+        "usingComponents" : true
+    },
+    "uniStatistics" : {
+        "enable" : false
+    },
+    "vueVersion" : "2"
+}

+ 27 - 0
mixins/claimMixin.js

@@ -0,0 +1,27 @@
+// mixins/claimMixin.js
+export default {
+  data() {
+    return {
+      scanUserData: {},
+      prizeJson: {}
+    }
+  },
+  
+  onLoad() {
+    let scanDetail = uni.getStorageSync('scanDetail');
+    this.scanUserData = scanDetail.result.scanInfo;
+    this.prizeJson = scanDetail.prizeJson;
+    console.log(scanDetail);
+  },
+  
+  methods: {
+    goBack() {
+      uni.navigateBack();
+    },
+    openDetail() {
+      uni.navigateTo({
+        url: '/pages/lgz/index/rules'
+      });
+    }
+  }
+}

+ 12 - 0
node_modules/.bin/fxparser

@@ -0,0 +1,12 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  exec "$basedir/node"  "$basedir/../fast-xml-parser/src/cli/cli.js" "$@"
+else 
+  exec node  "$basedir/../fast-xml-parser/src/cli/cli.js" "$@"
+fi

+ 17 - 0
node_modules/.bin/fxparser.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+GOTO start
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
+:start
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%"  "%dp0%\..\fast-xml-parser\src\cli\cli.js" %*

+ 28 - 0
node_modules/.bin/fxparser.ps1

@@ -0,0 +1,28 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  # Support pipeline input
+  if ($MyInvocation.ExpectingInput) {
+    $input | & "$basedir/node$exe"  "$basedir/../fast-xml-parser/src/cli/cli.js" $args
+  } else {
+    & "$basedir/node$exe"  "$basedir/../fast-xml-parser/src/cli/cli.js" $args
+  }
+  $ret=$LASTEXITCODE
+} else {
+  # Support pipeline input
+  if ($MyInvocation.ExpectingInput) {
+    $input | & "node$exe"  "$basedir/../fast-xml-parser/src/cli/cli.js" $args
+  } else {
+    & "node$exe"  "$basedir/../fast-xml-parser/src/cli/cli.js" $args
+  }
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 12 - 0
node_modules/.bin/geo2topo

@@ -0,0 +1,12 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  exec "$basedir/node"  "$basedir/../topojson-server/bin/geo2topo" "$@"
+else 
+  exec node  "$basedir/../topojson-server/bin/geo2topo" "$@"
+fi

+ 17 - 0
node_modules/.bin/geo2topo.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+GOTO start
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
+:start
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%"  "%dp0%\..\topojson-server\bin\geo2topo" %*

+ 28 - 0
node_modules/.bin/geo2topo.ps1

@@ -0,0 +1,28 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  # Support pipeline input
+  if ($MyInvocation.ExpectingInput) {
+    $input | & "$basedir/node$exe"  "$basedir/../topojson-server/bin/geo2topo" $args
+  } else {
+    & "$basedir/node$exe"  "$basedir/../topojson-server/bin/geo2topo" $args
+  }
+  $ret=$LASTEXITCODE
+} else {
+  # Support pipeline input
+  if ($MyInvocation.ExpectingInput) {
+    $input | & "node$exe"  "$basedir/../topojson-server/bin/geo2topo" $args
+  } else {
+    & "node$exe"  "$basedir/../topojson-server/bin/geo2topo" $args
+  }
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 12 - 0
node_modules/.bin/topo2geo

@@ -0,0 +1,12 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  exec "$basedir/node"  "$basedir/../topojson-client/bin/topo2geo" "$@"
+else 
+  exec node  "$basedir/../topojson-client/bin/topo2geo" "$@"
+fi

+ 17 - 0
node_modules/.bin/topo2geo.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+GOTO start
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
+:start
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%"  "%dp0%\..\topojson-client\bin\topo2geo" %*

+ 28 - 0
node_modules/.bin/topo2geo.ps1

@@ -0,0 +1,28 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  # Support pipeline input
+  if ($MyInvocation.ExpectingInput) {
+    $input | & "$basedir/node$exe"  "$basedir/../topojson-client/bin/topo2geo" $args
+  } else {
+    & "$basedir/node$exe"  "$basedir/../topojson-client/bin/topo2geo" $args
+  }
+  $ret=$LASTEXITCODE
+} else {
+  # Support pipeline input
+  if ($MyInvocation.ExpectingInput) {
+    $input | & "node$exe"  "$basedir/../topojson-client/bin/topo2geo" $args
+  } else {
+    & "node$exe"  "$basedir/../topojson-client/bin/topo2geo" $args
+  }
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 12 - 0
node_modules/.bin/topomerge

@@ -0,0 +1,12 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  exec "$basedir/node"  "$basedir/../topojson-client/bin/topomerge" "$@"
+else 
+  exec node  "$basedir/../topojson-client/bin/topomerge" "$@"
+fi

+ 17 - 0
node_modules/.bin/topomerge.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+GOTO start
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
+:start
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%"  "%dp0%\..\topojson-client\bin\topomerge" %*

+ 28 - 0
node_modules/.bin/topomerge.ps1

@@ -0,0 +1,28 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  # Support pipeline input
+  if ($MyInvocation.ExpectingInput) {
+    $input | & "$basedir/node$exe"  "$basedir/../topojson-client/bin/topomerge" $args
+  } else {
+    & "$basedir/node$exe"  "$basedir/../topojson-client/bin/topomerge" $args
+  }
+  $ret=$LASTEXITCODE
+} else {
+  # Support pipeline input
+  if ($MyInvocation.ExpectingInput) {
+    $input | & "node$exe"  "$basedir/../topojson-client/bin/topomerge" $args
+  } else {
+    & "node$exe"  "$basedir/../topojson-client/bin/topomerge" $args
+  }
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 12 - 0
node_modules/.bin/topoquantize

@@ -0,0 +1,12 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  exec "$basedir/node"  "$basedir/../topojson-client/bin/topoquantize" "$@"
+else 
+  exec node  "$basedir/../topojson-client/bin/topoquantize" "$@"
+fi

+ 17 - 0
node_modules/.bin/topoquantize.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+GOTO start
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
+:start
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%"  "%dp0%\..\topojson-client\bin\topoquantize" %*

+ 28 - 0
node_modules/.bin/topoquantize.ps1

@@ -0,0 +1,28 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  # Support pipeline input
+  if ($MyInvocation.ExpectingInput) {
+    $input | & "$basedir/node$exe"  "$basedir/../topojson-client/bin/topoquantize" $args
+  } else {
+    & "$basedir/node$exe"  "$basedir/../topojson-client/bin/topoquantize" $args
+  }
+  $ret=$LASTEXITCODE
+} else {
+  # Support pipeline input
+  if ($MyInvocation.ExpectingInput) {
+    $input | & "node$exe"  "$basedir/../topojson-client/bin/topoquantize" $args
+  } else {
+    & "node$exe"  "$basedir/../topojson-client/bin/topoquantize" $args
+  }
+  $ret=$LASTEXITCODE
+}
+exit $ret

文件差異過大導致無法顯示
+ 2289 - 0
node_modules/.package-lock.json


+ 4 - 0
node_modules/@amap/amap-jsapi-loader/.vscode/settings.json

@@ -0,0 +1,4 @@
+{
+  "editor.tabSize": 4,
+  "prettier.tabWidth": 4
+}

+ 111 - 0
node_modules/@amap/amap-jsapi-loader/README.md

@@ -0,0 +1,111 @@
+# amap-jsapi-loader
+amap-jsapi-loader 是高德开放平台官网提供的地图 JSAPI 的加载器,可帮助开发者快速定位、有效避免加载引用地图 JSAPI 各种错误用法。
+
+
+该加载器具有以下特性:
+* 支持以 普通JS 和 npm包 两种方式使用;
+* 有效避免错误异步加载导致的 JSAPI 资源加载不完整问题;
+* 对于加载混用多个版本 JSAPI 的错误用法给予报错处理;
+* 对于不合法加载引用 JSAPI 给予报错处理;
+* 支持指定 JSAPI 版本;
+* 支持插件加载;
+* 允许多次执行加载操作,网络资源不会重复请求,便于大型工程模块管理;
+
+
+# USAGE
+
+## AMapLoader.load方法参数说明
+```js
+AMapLoader.load({
+    "key": "",              // 申请好的Web端开发者Key,首次调用 load 时必填
+    "version": "2.0",   // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
+    "plugins": []           // 需要使用的的插件列表,如比例尺'AMap.Scale'等
+    "AMapUI": {             // 是否加载 AMapUI,缺省不加载
+        "version": '1.1',   // AMapUI 缺省 1.1
+        "plugins":[],       // 需要加载的 AMapUI ui插件
+    },
+    "Loca":{                // 是否加载 Loca, 缺省不加载
+        "version": '1.3.2'  // Loca 版本,缺省 1.3.2
+    },
+}).then(()=>{
+    window.AMap.xx;
+    window.AMapUI.xx;
+    window.Loca.xx
+});
+
+```
+
+## AMapUI
+
+AMapUI 用法和官网有一点点区别。通过 AMapUI.xx 来获取组件
+```js
+AMapLoader.load({
+    key: '',//首次load必填
+    version: '2.0',
+    AMapUI: {
+        version: '1.1',
+        plugins: ['overlay/SimpleMarker'],
+    }
+}).then((AMap) => {
+    map = new AMap.Map('container');
+
+    // !!! 通过 AMap.SimpleMarker 获取组件
+    new AMapUI.SimpleMarker({
+        //前景文字
+        iconLabel: 'A',
+        //图标主题
+        iconTheme: 'default',
+        //背景图标样式
+        iconStyle: 'red',
+        map: map,
+        position: map.getCenter()
+    });
+}).catch((e) => {
+    console.error(e);
+});
+```
+
+
+# 使用
+#### 以普通 JS 方式使用 Loader
+尚未发布在线Loader,可将 dist/index.js 复制到项目下
+```
+<script src="../dist/index.js"></script>
+<script>
+    AMapLoader.load({
+        key:'',//首次load必填
+        version:'2.0',
+        plugins:['AMap.Scale']
+    }).then((AMap)=>{
+        map = new AMap.Map('container');
+        map.addControl(new AMap.Scale())
+    }).catch((e)=>{
+        console.error(e);
+    });   
+</script>
+```
+#### 以 NPM 包方式使用 Loader
+安装
+```
+tnpm i @alife/amap-jsapi-loader --save-dev
+```
+使用
+```
+import AMapLoader from '@alife/amap-jsapi-loader';
+
+AMapLoader.load().then((AMap)=>{
+    map = new AMap.Map('container');
+}).catch(e=>{
+    console.log(e);
+})
+
+```
+
+# 相关链接:
+地&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;图 JSAPI:  &nbsp;&nbsp;[示例中心](https://lbs.amap.com/demo-center/js-api)&nbsp;&nbsp;&nbsp;&nbsp;[教程](https://lbs.amap.com/api/javascript-api/summary)&nbsp;&nbsp;&nbsp;&nbsp;[参考手册](https://lbs.amap.com/api/javascript-api/reference/map)
+
+
+
+数据可视化 JSAPI:  &nbsp;&nbsp;[示例中心](https://lbs.amap.com/demo-center/loca-api)&nbsp;&nbsp;&nbsp;&nbsp;[教程](https://lbs.amap.com/api/loca-api/prod_intro)&nbsp;&nbsp;&nbsp;&nbsp;[参考手册](https://lbs.amap.com/api/loca-api/guide/baselayer)
+
+

文件差異過大導致無法顯示
+ 11 - 0
node_modules/@amap/amap-jsapi-loader/dist/index.js


+ 69 - 0
node_modules/@amap/amap-jsapi-loader/example/AMapUI.html

@@ -0,0 +1,69 @@
+<!doctype html>
+<html lang="en">
+
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
+    <title>JSAPI Loader</title>
+    <style>
+        html,
+        body,
+        #container {
+            height: 100%;
+            width: 100%;
+            margin: 0;
+        }
+    </style>
+</head>
+
+<body>
+    <div id="container" tabindex="0"></div>
+
+    <script src="../dist/index.js"></script>
+    <script>
+        AMapLoader.load({
+            key: '',//首次load必填
+            version: '2.0Beta',
+            plugins: ['AMap.Scale'],
+            AMapUI: {
+                plugins: ['overlay/SimpleMarker'],
+            }
+        }).then((AMap) => {
+            map = new AMap.Map('container');
+            map.addControl(new AMap.Scale());
+            new AMapUI.SimpleMarker({
+
+                //前景文字
+                iconLabel: 'A',
+
+                //图标主题
+                iconTheme: 'default',
+
+                //背景图标样式
+                iconStyle: 'red',
+
+                //...其他Marker选项...,不包括content
+                map: map,
+                position: map.getCenter()
+            });
+        }).catch((e) => {
+            console.error(e);
+        });
+        setTimeout(function () {
+            AMapLoader.load({
+                plugins: ['AMap.MapType']
+            }).then((AMap) => {
+                map.addControl(new AMap.MapType())
+            }).catch((e) => {
+                console.error(e);
+            });
+        }, 5000);
+
+    </script>
+
+
+    </script>
+</body>
+
+</html>

+ 76 - 0
node_modules/@amap/amap-jsapi-loader/example/Loca.html

@@ -0,0 +1,76 @@
+<!doctype html>
+<html lang="en">
+
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
+    <title>JSAPI Loader</title>
+    <style>
+        html,
+        body,
+        #container {
+            height: 100%;
+            width: 100%;
+            margin: 0;
+        }
+    </style>
+</head>
+
+<body>
+    <div id="container" tabindex="0"></div>
+    <script src="https://a.amap.com/Loca/static/mock/districts.js"></script>
+    <script src="../dist/index.js"></script>
+    <script>
+        AMapLoader.load({
+            key: 'd3c5511c8a102496b1fdb985e6ca1cd7',//首次load必填
+            // version: '2.0',
+            Loca: {
+                version: '2.0.0beta'
+            }
+        }).then((AMap) => {
+            var map = new AMap.Map('container', {
+                zoom: 4,
+                center: [107.4976, 32.1697],
+                features: ['bg', 'road'],
+                // Loca 自 1.2.0 起 viewMode 模式默认为 3D,如需 2D 模式,请显示配置。
+                // viewMode: '3D'
+            });
+
+            var layer = new Loca.PointLayer({
+                map: map
+            });
+
+            layer.setData(districts, {
+                // 指定经纬度所在字段
+                lnglat: 'center'
+            });
+
+            layer.setOptions({
+                style: {
+                    // 圆形半径,单位像素
+                    radius: 5,
+                    // 填充颜色
+                    color: '#07E8E4',
+                    // 描边颜色
+                    borderColor: '#5DFBF9',
+                    // 描边宽度,单位像素
+                    borderWidth: 1,
+                    // 透明度 [0-1]
+                    opacity: 0.9,
+                }
+            });
+
+            layer.render();
+
+        }).catch((e) => {
+            console.error(e);
+        });
+
+    </script>
+
+
+    </script>
+</body>
+
+</html>

+ 94 - 0
node_modules/@amap/amap-jsapi-loader/example/Multi.html

@@ -0,0 +1,94 @@
+<!doctype html>
+<html lang="en">
+
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
+    <title>JSAPI Loader</title>
+    <style>
+        html,
+        body,
+        #container {
+            height: 100%;
+            width: 100%;
+            margin: 0;
+        }
+    </style>
+</head>
+
+<body>
+    <div id="container" tabindex="0"></div>
+    <script src="https://a.amap.com/Loca/static/mock/districts.js"></script>
+    <script src="../dist/index.js"></script>
+    <script>
+        AMapLoader.load({
+            key: '',//首次load必填
+            version: '1.4.15',
+            AMapUI: {
+                plugins: ['overlay/SimpleMarker'],
+            },
+            Loca: {
+                version: '1.3.2'
+            }
+        }).then((AMap) => {
+            var map = new AMap.Map('container', {
+                zoom: 4,
+                center: [107.4976, 32.1697],
+                features: ['bg', 'road'],
+                // Loca 自 1.2.0 起 viewMode 模式默认为 3D,如需 2D 模式,请显示配置。
+                // viewMode: '3D'
+            });
+
+            new AMapUI.SimpleMarker({
+
+                //前景文字
+                iconLabel: 'A',
+
+                //图标主题
+                iconTheme: 'default',
+
+                //背景图标样式
+                iconStyle: 'red',
+
+                //...其他Marker选项...,不包括content
+                map: map,
+                position: map.getCenter()
+            });
+            var layer = new Loca.PointLayer({
+                map: map
+            });
+
+            layer.setData(districts, {
+                // 指定经纬度所在字段
+                lnglat: 'center'
+            });
+
+            layer.setOptions({
+                style: {
+                    // 圆形半径,单位像素
+                    radius: 5,
+                    // 填充颜色
+                    color: '#07E8E4',
+                    // 描边颜色
+                    borderColor: '#5DFBF9',
+                    // 描边宽度,单位像素
+                    borderWidth: 1,
+                    // 透明度 [0-1]
+                    opacity: 0.9,
+                }
+            });
+
+            layer.render();
+
+        }).catch((e) => {
+            console.error(e);
+        });
+
+    </script>
+
+
+    </script>
+</body>
+
+</html>

+ 36 - 0
node_modules/@amap/amap-jsapi-loader/example/example-es6.html

@@ -0,0 +1,36 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
+    <title>JSAPI Loader - ES6</title>
+    <style>
+        html, body, #container {
+            height: 100%;
+            width: 100%;
+            margin: 0;
+        }
+    </style>
+</head>
+<body>
+<div id="container" tabindex="0"></div>
+<script type="module">
+    import AMapLoader from '../src/index.js';
+    AMapLoader.load({
+        key:'',//必填
+        version:'2.0',
+        plugins:['AMap.Scale']
+    }).then((AMap)=>{
+        debugger
+        var map = new AMap.Map('container');
+        map.addControl(new AMap.Scale())
+    }).catch((e)=>{
+        console.error(e);
+    });
+</script>
+
+
+</script>
+</body>
+</html>

+ 46 - 0
node_modules/@amap/amap-jsapi-loader/example/example.html

@@ -0,0 +1,46 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
+    <title>AMap JSAPI Loader</title>
+    <style>
+        html, body, #container {
+            height: 100%;
+            width: 100%;
+            margin: 0;
+        }
+    </style>
+</head>
+<body>
+<div id="container" tabindex="0"></div>
+
+<script src="https://webapi.amap.com/loader.js"></script>
+<script>
+    AMapLoader.load({ //首次调用 load
+        key:'你申请的高德开放平台 Web 端 key',//首次load key为必填
+        version:'2.0',
+        plugins:['AMap.Scale','AMap.ToolBar']
+    }).then((AMap)=>{
+        map = new AMap.Map('container');
+        map.addControl(new AMap.Scale())
+        map.addControl(new AMap.ToolBar())
+        map.add(new AMap.Marker({
+            position:map.getCenter()
+        }));
+    }).catch((e)=>{
+        console.error(e);
+    });
+   
+    AMapLoader.load({ //可多次调用load
+        plugins:['AMap.MapType']
+    }).then((AMap)=>{
+        map.addControl(new AMap.MapType())
+    }).catch((e)=>{
+        console.error(e);
+    });
+   
+</script>
+</body>
+</html>

文件差異過大導致無法顯示
+ 2 - 0
node_modules/@amap/amap-jsapi-loader/example/libs/chai.min.js


文件差異過大導致無法顯示
+ 1 - 0
node_modules/@amap/amap-jsapi-loader/example/libs/mocha.min.css


文件差異過大導致無法顯示
+ 2 - 0
node_modules/@amap/amap-jsapi-loader/example/libs/mocha.min.js


+ 287 - 0
node_modules/@amap/amap-jsapi-loader/example/test.html

@@ -0,0 +1,287 @@
+<!doctype html>
+<html lang="en">
+
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
+    <title>JSAPI Loader</title>
+    <style>
+        html,
+        body,
+        #container {
+            height: 100%;
+            width: 100%;
+            margin: 0;
+        }
+    </style>
+</head>
+
+<body>
+    <div id="mocha"></div>
+
+    <link rel="stylesheet" href="./libs/mocha.min.css" />
+    <script src="./libs/chai.min.js"></script>
+    <script src="./libs/mocha.min.js"></script>
+
+    <script>
+        mocha.setup('bdd');
+        mocha.traceIgnores = ['mocha.min.js', 'chai.min.js'];
+        expect = chai.expect;
+    </script>
+    <div id="container" tabindex="0"></div>
+
+    <script src="../dist/index.js"></script>
+    <script>
+        // 请把 key 写在这里
+        const JSAPIKey = '';
+        const chai = window.chai;
+        const mocha = window.mocha;
+        mocha.setup({
+            timeout: '5000',
+            ui: 'bdd',
+        });
+        const expect = chai.expect;
+        describe('JSAPI', () => {
+            beforeEach(function () {
+                AMapLoader.reset()
+            });
+
+            it('Simple', (done) => {
+                AMapLoader.load({
+                    key: JSAPIKey,//首次load必填
+                    version: '2.0',
+                    plugins: ['AMap.Scale'],
+                    AMapUI: {
+                        plugins: ['overlay/SimpleMarker']
+                    }
+                }).then(() => {
+                    expect(Boolean(window.AMap)).eq(true)
+                    expect(Boolean(window.AMapUI)).eq(true)
+                    expect(Boolean(window.AMapUI.SimpleMarker)).eq(true)
+                    expect(Boolean(window.Loca)).eq(false)
+                    done();
+                });
+
+            });
+            it('Request with AMapUI Loca', (done) => {
+                AMapLoader.load({
+                    key: JSAPIKey,//首次load必填
+                    version: '1.4.15',
+                    plugins: ['AMap.Scale'],
+                    AMapUI: {
+                        plugins: ['overlay/SimpleMarker']
+                    },
+                    Loca: {
+                        version: '1.3.2'
+                    }
+                }).then(() => {
+                    expect(Boolean(window.AMap)).eq(true)
+                    expect(Boolean(window.AMapUI)).eq(true)
+                    expect(Boolean(window.AMapUI.SimpleMarker)).eq(true)
+
+                    expect(Boolean(window.Loca)).eq(true)
+                    done();
+                });
+
+            });
+            it('fail with multi version', (done) => {
+                AMapLoader.load({
+                    key: JSAPIKey,//首次load必填
+                    version: '2.0',
+                }).then(() => {
+                    done()
+                });
+                AMapLoader.load({
+                    key: JSAPIKey,//首次load必填
+                    version: '1.4.15',
+                }).then(() => {
+                    done(Error('should not here'))
+                })
+                    .catch(err => {
+                        try {
+                            expect(err).eq('不允许多个版本 JSAPI 混用')
+
+                        } catch (error) {
+                            done(error)
+                        }
+                    })
+
+            });
+            it('fail with multi key', (done) => {
+                AMapLoader.load({
+                    key: JSAPIKey,//首次load必填
+                    version: '2.0',
+                }).then(() => {
+                    done()
+                });
+                AMapLoader.load({
+                    key: 'asdfas',//首次load必填
+                }).then(() => {
+                    done(Error('should not here'))
+                })
+                    .catch(err => {
+                        try {
+                            expect(err).eq('多个不一致的 key')
+
+                        } catch (error) {
+                            done(error)
+                        }
+                    })
+
+            });
+        })
+
+
+        describe('AMapUI', () => {
+            beforeEach(function () {
+                AMapLoader.reset()
+            });
+
+            it('version', (done) => {
+                AMapLoader.load({
+                    key: JSAPIKey,//首次load必填
+                    version: '1.4.15',
+                    AMapUI: {
+                        version: '1.1',
+                        plugins: ['misc/PathSimplifier']
+                    }
+                }).then(() => {
+                    expect(Boolean(window.AMap)).eq(true)
+                    expect(Boolean(window.AMapUI)).eq(true)
+                    expect(Boolean(window.AMapUI.PathSimplifier)).eq(true)
+                    expect(Boolean(window.AMapUI.version.startsWith('1.1'))).eq(true)
+                    done();
+                }).catch(done);
+            });
+
+            it('async', (done) => {
+                console.log(window.AMap);
+                AMapLoader.load({
+                    key: JSAPIKey,//首次load必填
+                    version: '1.4.15',
+                    AMapUI: {
+                        version: '1.0',
+                        plugins: ['overlay/SimpleMarker']
+                    }
+                }).then(() => {
+                    AMapLoader.load({
+                        AMapUI: {
+                            plugins: ['overlay/SimpleInfoWindow']
+                        }
+                    }).then(() => {
+                        expect(Boolean(window.AMap)).eq(true)
+                        expect(Boolean(window.AMapUI.version.startsWith('1.0'))).eq(true)
+                        expect(Boolean(window.AMapUI.SimpleMarker)).eq(true)
+                        expect(Boolean(window.AMapUI.SimpleInfoWindow)).eq(true)
+                        done()
+                    });
+                }).catch(done);
+            })
+        });
+
+        describe('Loca', () => {
+            beforeEach(function () {
+                AMapLoader.reset()
+            });
+
+            it('version', (done) => {
+                AMapLoader.load({
+                    key: JSAPIKey,//首次load必填
+                    version: '1.4.15',
+                    Loca: {
+                        version: '1.3.1'
+                    }
+                }).then(() => {
+                    expect(Boolean(window.AMap)).eq(true)
+                    expect(Boolean(window.Loca)).eq(true)
+                    expect(window.Loca.version).eq('1.3.1')
+                    done()
+                }).catch(done);
+            });
+            it('fail with jsapi2.0', (done) => {
+                AMapLoader.load({
+                    key: JSAPIKey,//首次load必填
+                    version: '2.0',
+                    Loca: {
+                        version: '1.3.1'
+                    }
+                }).then(() => {
+                    done(Error('should not here'))
+                }).catch(err => {
+                    try {
+                        expect(err).eq("Loca 暂不适配 JSAPI 2.0,请使用 1.4.15")
+                        done()
+                    } catch (error) {
+                        done(error)
+                    }
+                });
+            });
+
+
+            it('async', (done) => {
+                AMapLoader.load({
+                    key: JSAPIKey,//首次load必填
+                    version: '1.4.15',
+                    Loca: {
+                        version: '1.2.1'
+                    }
+                }).then(() => {
+                    expect(Boolean(window.AMap)).eq(true)
+                    expect(Boolean(window.Loca)).eq(true)
+                    expect(window.Loca.version).eq('1.2.1')
+                    AMapLoader.load({
+                        Loca: {
+                            version: '1.2.1'
+                        }
+                    }).then(() => {
+                        expect(Boolean(window.AMap)).eq(true)
+                        expect(Boolean(window.Loca)).eq(true)
+                        expect(window.Loca.version).eq('1.2.1')
+                        done()
+                    }).catch(done);
+
+                });
+            })
+        });
+
+
+        describe('Advance', () => {
+            beforeEach(function () {
+                AMapLoader.reset()
+            });
+            it('Multi', (done) => {
+                AMapLoader.load({ key: JSAPIKey, version: '1.4.15' }).then(() => {
+                    expect(Boolean(window.AMap)).eq(true);
+                    expect(window.AMap.v).eq('1.4.15');
+
+                    expect(Boolean(window.AMapUI)).eq(false);
+                    expect(Boolean(window.Loca)).eq(false);
+                    AMapLoader.load({ AMapUI: {} }).then(() => {
+                        expect(Boolean(window.AMap)).eq(true);
+                        expect(window.AMap.v).eq('1.4.15');
+
+                        expect(Boolean(window.AMapUI)).eq(true);
+                        expect(window.AMapUI.version.startsWith('1.1')).eq(true);
+                        expect(Boolean(window.Loca)).eq(false);
+                        AMapLoader.load({ Loca: {} }).then(() => {
+                            expect(Boolean(window.AMap)).eq(true);
+                            expect(window.AMap.v).eq('1.4.15');
+                            expect(Boolean(window.AMapUI)).eq(true);
+                            expect(window.AMapUI.version.startsWith('1.1')).eq(true);
+                            expect(Boolean(window.Loca)).eq(true);
+                            expect(window.Loca.version).eq('1.3.2');
+                            done()
+                        })
+                    })
+                }).catch(done)
+            })
+        })
+        mocha.run()
+    </script>
+
+
+    </script>
+</body>
+
+</html>

+ 15 - 0
node_modules/@amap/amap-jsapi-loader/index.d.ts

@@ -0,0 +1,15 @@
+declare var load: (options: {
+    key: string; // 申请好的Web端开发者Key,首次调用 load 时必填
+    version: string; // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
+    plugins?: string[]; //插件列表
+    // 是否加载 AMapUI,缺省不加载
+    AMapUI?: {
+        version?: string; // AMapUI 缺省 1.1
+        plugins?: string[]; // 需要加载的 AMapUI ui插件
+    };
+    // 是否加载 Loca, 缺省不加载
+    Loca?: {
+        version?: string; // Loca 版本,缺省 1.3.2
+    };
+}) => Promise<any>;
+export { load };

+ 37 - 0
node_modules/@amap/amap-jsapi-loader/package.json

@@ -0,0 +1,37 @@
+{
+  "name": "@amap/amap-jsapi-loader",
+  "version": "1.0.1",
+  "description": "高德官网提供的地图JSAPI加载器,可以避免多种异步加载API的错误用法",
+  "main": "dist/index.js",
+  "types": "index.d.ts",
+  "directories": {
+    "test": "test"
+  },
+  "scripts": {
+    "build": "rollup -c rollup.config.js"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git@gitlab.alibaba-inc.com:amap-web/amap-jsapi-loader.git"
+  },
+  "keywords": [
+    "amap",
+    "jsapi",
+    "sdk",
+    "loader",
+    "地图",
+    "高德"
+  ],
+  "author": "mengmeng.du@alibaba-inc.com",
+  "license": "MIT",
+  "devDependencies": {
+    "@ampproject/rollup-plugin-closure-compiler": "^0.23.0",
+    "@babel/core": "^7.8.7",
+    "@babel/preset-env": "^7.8.7",
+    "rollup": "^1.32.0",
+    "rollup-plugin-babel": "^4.3.3",
+    "rollup-plugin-server": "^0.7.0",
+    "rollup-plugin-typescript2": "^0.27.1",
+    "typescript": "^3.9.7"
+  }
+}

+ 25 - 0
node_modules/@amap/amap-jsapi-loader/rollup.config.js

@@ -0,0 +1,25 @@
+import server from "rollup-plugin-server";
+import babel from "rollup-plugin-babel";
+import compiler from "@ampproject/rollup-plugin-closure-compiler";
+import rollupTypescript from 'rollup-plugin-typescript2';
+
+export default {
+    input: "src/index.ts",
+    output: {
+        file: "dist/index.js",
+        format: "umd",
+        name: "AMapLoader",
+    },
+    plugins: [
+        rollupTypescript(),
+        babel({
+            presets: [["@babel/env", { targets: { ie: 9 } }]],
+        }),
+        compiler(),
+        server({
+            contentBase: "./",
+            host: "127.0.0.1",
+            port: 3601,
+        }),
+    ],
+};

+ 5 - 0
node_modules/@amap/amap-jsapi-loader/src/global.d.ts

@@ -0,0 +1,5 @@
+declare var AMap: any;
+declare var AMapUI: any;
+declare var Loca: any;
+
+declare var ___onAPILoaded: any;

+ 367 - 0
node_modules/@amap/amap-jsapi-loader/src/index.ts

@@ -0,0 +1,367 @@
+if (!window) {
+    throw Error("AMap JSAPI can only be used in Browser.");
+}
+enum LoadStatus {
+    notload = "notload",
+    loading = "loading",
+    loaded = "loaded",
+    failed = "failed",
+}
+let config = {
+    key: "",
+    AMap: {
+        version: "1.4.15",
+        plugins: [],
+    },
+    AMapUI: {
+        version: "1.1",
+        plugins: [],
+    },
+    Loca: {
+        version: "1.3.2",
+    },
+};
+
+let Status = {
+    AMap: LoadStatus.notload,
+    AMapUI: LoadStatus.notload,
+    Loca: LoadStatus.notload,
+};
+let Callback = {
+    AMap: [],
+    AMapUI: [],
+    Loca: [],
+};
+
+let onloadCBKs = [];
+const onload = function (callback) {
+    if (typeof callback == "function") {
+        if (Status.AMap === LoadStatus.loaded) {
+            callback(window.AMap);
+            return;
+        }
+        onloadCBKs.push(callback);
+    }
+};
+
+interface LoadOption {
+    key: string;
+    version?: string;
+    plugins?: string[];
+    AMapUI?: {
+        version?: string;
+        plugins?: string[];
+    };
+    Loca?: {
+        version?: string;
+    };
+}
+function appendOther(option: LoadOption): Promise<any> {
+    let pros: Promise<void>[] = [];
+    if (option.AMapUI) {
+        pros.push(loadAMapUI(option.AMapUI));
+    }
+    if (option.Loca) {
+        pros.push(loadLoca(option.Loca));
+    }
+    return Promise.all(pros);
+}
+function loadAMapUI(params: { version?: string; plugins?: string[] }): Promise<void> {
+    return new Promise((res, rej) => {
+        const newPlugins: string[] = [];
+        if (params.plugins) {
+            for (var i = 0; i < params.plugins.length; i += 1) {
+                if (config.AMapUI.plugins.indexOf(params.plugins[i]) == -1) {
+                    newPlugins.push(params.plugins[i]);
+                }
+            }
+        }
+        if (Status.AMapUI === LoadStatus.failed) {
+            rej("前次请求 AMapUI 失败");
+        } else if (Status.AMapUI === LoadStatus.notload) {
+            Status.AMapUI = LoadStatus.loading;
+            config.AMapUI.version = params.version || config.AMapUI.version;
+            const version = config.AMapUI.version;
+            const parentNode = document.body || document.head;
+            const script = document.createElement("script");
+            script.type = "text/javascript";
+            script.src = `https://webapi.amap.com/ui/${version}/main.js`;
+
+            script.onerror = (e) => {
+                Status.AMapUI = LoadStatus.failed;
+                rej("请求 AMapUI 失败");
+            };
+            script.onload = () => {
+                Status.AMapUI = LoadStatus.loaded;
+                if (newPlugins.length) {
+                    window.AMapUI.loadUI(newPlugins, function () {
+                        for (let i = 0, len = newPlugins.length; i < len; i++) {
+                            const path = newPlugins[i];
+                            const name = path.split("/").slice(-1)[0];
+                            window.AMapUI[name] = arguments[i];
+                        }
+                        res();
+                        while (Callback.AMapUI.length) {
+                            Callback.AMapUI.splice(0, 1)[0]();
+                        }
+                    });
+                } else {
+                    res();
+                    while (Callback.AMapUI.length) {
+                        Callback.AMapUI.splice(0, 1)[0]();
+                    }
+                }
+            };
+            parentNode.appendChild(script);
+        } else if (Status.AMapUI === LoadStatus.loaded) {
+            if (params.version && params.version !== config.AMapUI.version) {
+                rej("不允许多个版本 AMapUI 混用");
+            } else {
+                if (newPlugins.length) {
+                    window.AMapUI.loadUI(newPlugins, function () {
+                        for (let i = 0, len = newPlugins.length; i < len; i++) {
+                            const path = newPlugins[i];
+                            const name = path.split("/").slice(-1)[0];
+                            window.AMapUI[name] = arguments[i];
+                        }
+                        res();
+                    });
+                } else {
+                    res();
+                }
+            }
+        } else {
+            if (params.version && params.version !== config.AMapUI.version) {
+                rej("不允许多个版本 AMapUI 混用");
+            } else {
+                Callback.AMapUI.push((err) => {
+                    if (err) {
+                        rej(err);
+                    } else {
+                        if (newPlugins.length) {
+                            window.AMapUI.loadUI(newPlugins, function () {
+                                for (let i = 0, len = newPlugins.length; i < len; i++) {
+                                    const path = newPlugins[i];
+                                    const name = path.split("/").slice(-1)[0];
+                                    window.AMapUI[name] = arguments[i];
+                                }
+                                res();
+                            });
+                        } else {
+                            res();
+                        }
+                    }
+                });
+            }
+        }
+    });
+}
+
+function loadLoca(params: { version?: string }): Promise<void> {
+    return new Promise((res, rej) => {
+        if (Status.Loca === LoadStatus.failed) {
+            rej("前次请求 Loca 失败");
+        } else if (Status.Loca === LoadStatus.notload) {
+            Status.Loca = LoadStatus.loading;
+            config.Loca.version = params.version || config.Loca.version;
+            const version = config.Loca.version;
+            const isApiV2 = config.AMap.version.startsWith("2");
+            const isLocaV2 = version.startsWith("2");
+            if ((isApiV2 && !isLocaV2) || (!isApiV2 && isLocaV2)) {
+                rej("JSAPI 与 Loca 版本不对应!!");
+                return;
+            }
+            const key = config.key;
+            const parentNode = document.body || document.head;
+            const script = document.createElement("script");
+            script.type = "text/javascript";
+            script.src = `https://webapi.amap.com/loca?v=${version}&key=${key}`;
+
+            script.onerror = (e) => {
+                Status.Loca = LoadStatus.failed;
+                rej("请求 AMapUI 失败");
+            };
+            script.onload = () => {
+                Status.Loca = LoadStatus.loaded;
+                res();
+                while (Callback.Loca.length) {
+                    Callback.Loca.splice(0, 1)[0]();
+                }
+            };
+            parentNode.appendChild(script);
+        } else if (Status.Loca === LoadStatus.loaded) {
+            if (params.version && params.version !== config.Loca.version) {
+                rej("不允许多个版本 Loca 混用");
+            } else {
+                res();
+            }
+        } else {
+            if (params.version && params.version !== config.Loca.version) {
+                rej("不允许多个版本 Loca 混用");
+            } else {
+                Callback.Loca.push((err) => {
+                    if (err) {
+                        rej(err);
+                    } else {
+                        rej();
+                    }
+                });
+            }
+        }
+    });
+}
+
+const load = function (options: LoadOption) {
+    return new Promise((resolve, reject) => {
+        if (Status.AMap == LoadStatus.failed) {
+            reject("");
+        } else if (Status.AMap == LoadStatus.notload) {
+            //初次加载
+            let { key, version, plugins } = options;
+            if (!key) {
+                reject("请填写key");
+                return;
+            }
+            if (window.AMap && location.host !== "lbs.amap.com") {
+                reject("禁止多种API加载方式混用");
+            }
+            config.key = key;
+            config.AMap.version = version || config.AMap.version;
+            config.AMap.plugins = plugins || config.AMap.plugins;
+            Status.AMap = LoadStatus.loading;
+
+            const parentNode = document.body || document.head;
+
+            window.___onAPILoaded = function (err) {
+                delete window.___onAPILoaded;
+                if (err) {
+                    Status.AMap = LoadStatus.failed;
+                    reject(err);
+                } else {
+                    Status.AMap = LoadStatus.loaded;
+                    appendOther(options)
+                        .then(() => {
+                            resolve(window.AMap);
+                        })
+                        .catch(reject);
+                    while (onloadCBKs.length) {
+                        onloadCBKs.splice(0, 1)[0]();
+                    }
+                }
+            };
+            const script = document.createElement("script");
+            script.type = "text/javascript";
+
+            script.src =
+                "https://webapi.amap.com/maps?callback=___onAPILoaded&v=" +
+                config.AMap.version +
+                "&key=" +
+                key +
+                "&plugin=" +
+                config.AMap.plugins.join(",");
+            script.onerror = (e) => {
+                Status.AMap = LoadStatus.failed;
+                reject(e);
+            };
+            parentNode.appendChild(script);
+        } else if (Status.AMap == LoadStatus.loaded) {
+            //deal multi load
+            if (options.key && options.key !== config.key) {
+                reject("多个不一致的 key");
+                return;
+            }
+            if (options.version && options.version !== config.AMap.version) {
+                reject("不允许多个版本 JSAPI 混用");
+                return;
+            }
+            const newPlugins = [];
+            if (options.plugins) {
+                for (var i = 0; i < options.plugins.length; i += 1) {
+                    if (config.AMap.plugins.indexOf(options.plugins[i]) == -1) {
+                        newPlugins.push(options.plugins[i]);
+                    }
+                }
+            }
+            if (newPlugins.length) {
+                window.AMap.plugin(newPlugins, () => {
+                    appendOther(options)
+                        .then(() => {
+                            resolve(window.AMap);
+                        })
+                        .catch(reject);
+                });
+            } else {
+                appendOther(options)
+                    .then(() => {
+                        resolve(window.AMap);
+                    })
+                    .catch(reject);
+            }
+        } else {
+            // loading
+            if (options.key && options.key !== config.key) {
+                reject("多个不一致的 key");
+                return;
+            }
+            if (options.version && options.version !== config.AMap.version) {
+                reject("不允许多个版本 JSAPI 混用");
+                return;
+            }
+            const newPlugins = [];
+            if (options.plugins) {
+                for (var i = 0; i < options.plugins.length; i += 1) {
+                    if (config.AMap.plugins.indexOf(options.plugins[i]) == -1) {
+                        newPlugins.push(options.plugins[i]);
+                    }
+                }
+            }
+            onload(() => {
+                if (newPlugins.length) {
+                    window.AMap.plugin(newPlugins, () => {
+                        appendOther(options)
+                            .then(() => {
+                                resolve(window.AMap);
+                            })
+                            .catch(reject);
+                    });
+                } else {
+                    appendOther(options)
+                        .then(() => {
+                            resolve(window.AMap);
+                        })
+                        .catch(reject);
+                }
+            });
+        }
+    });
+};
+function reset() {
+    delete window.AMap;
+    delete window.AMapUI;
+    delete window.Loca;
+    config = {
+        key: "",
+        AMap: {
+            version: "1.4.15",
+            plugins: [],
+        },
+        AMapUI: {
+            version: "1.1",
+            plugins: [],
+        },
+        Loca: {
+            version: "1.3.2",
+        },
+    };
+    Status = {
+        AMap: LoadStatus.notload,
+        AMapUI: LoadStatus.notload,
+        Loca: LoadStatus.notload,
+    };
+    Callback = {
+        AMap: [],
+        AMapUI: [],
+        Loca: [],
+    };
+}
+export default { load, reset };

+ 17 - 0
node_modules/@amap/amap-jsapi-loader/test/demo.ts

@@ -0,0 +1,17 @@
+import AMapLoader from "../";
+// import {  } from "@ali/test-amap-jsapi";
+
+AMapLoader.load({
+  key: "test",
+  version: "2.0"
+}).then(() => {
+  new AMap.Circle({})
+  const map = new AMap.Map("div");
+  map.on("complete", () => {
+    const circle = new AMap.Circle({
+      center: [135, 45],
+      radius: 40
+    });
+    map.add(circle);
+  });
+});

+ 7 - 0
node_modules/@amap/amap-jsapi-loader/test/test.ts

@@ -0,0 +1,7 @@
+import AMapLoader from "../";
+import "@amap/amap-jsapi-loader";
+
+AMapLoader.load({
+  key: "test",
+  version: "2.0"
+}).then(() => {});

+ 7 - 0
node_modules/@fingerprintjs/fingerprintjs/LICENSE

@@ -0,0 +1,7 @@
+Business Source License 1.1 https://mariadb.com/bsl11/
+Licensor: FingerprintJS, Inc.
+Licensed Work: FingerprintJS browser fingerprinting library
+Additional Use Grant: None
+Change Date: Four years from first release for the specific version.
+Change License: MIT, text at https://opensource.org/license/mit/ with the following copyright notice:
+Copyright 2015-present FingerprintJS, Inc.

文件差異過大導致無法顯示
+ 3244 - 0
node_modules/@fingerprintjs/fingerprintjs/dist/fp.cjs.js


文件差異過大導致無法顯示
+ 634 - 0
node_modules/@fingerprintjs/fingerprintjs/dist/fp.d.ts


文件差異過大導致無法顯示
+ 3217 - 0
node_modules/@fingerprintjs/fingerprintjs/dist/fp.esm.js


文件差異過大導致無法顯示
+ 3323 - 0
node_modules/@fingerprintjs/fingerprintjs/dist/fp.js


文件差異過大導致無法顯示
+ 13 - 0
node_modules/@fingerprintjs/fingerprintjs/dist/fp.min.js


文件差異過大導致無法顯示
+ 3324 - 0
node_modules/@fingerprintjs/fingerprintjs/dist/fp.umd.js


文件差異過大導致無法顯示
+ 13 - 0
node_modules/@fingerprintjs/fingerprintjs/dist/fp.umd.min.js


+ 81 - 0
node_modules/@fingerprintjs/fingerprintjs/package.json

@@ -0,0 +1,81 @@
+{
+  "name": "@fingerprintjs/fingerprintjs",
+  "description": "Browser fingerprinting library with the highest accuracy and stability",
+  "version": "4.6.2",
+  "keywords": [
+    "fraud",
+    "fraud detection",
+    "fraud prevention",
+    "browser",
+    "identification",
+    "fingerprint",
+    "fingerprinting",
+    "browser fingerprint",
+    "device fingerprint",
+    "privacy"
+  ],
+  "author": "FingerprintJS, Inc (https://fingerprint.com)",
+  "license": "BUSL-1.1",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/fingerprintjs/fingerprintjs.git"
+  },
+  "bugs": {
+    "url": "https://github.com/fingerprintjs/fingerprintjs/issues"
+  },
+  "homepage": "https://github.com/fingerprintjs/fingerprintjs",
+  "main": "dist/fp.cjs.js",
+  "module": "dist/fp.esm.js",
+  "types": "dist/fp.d.ts",
+  "sideEffects": false,
+  "files": [
+    "dist"
+  ],
+  "scripts": {
+    "build": "rimraf dist && rollup -c rollup.config.ts --configPlugin \"@rollup/plugin-typescript={tsconfig:'tsconfig.rollupConfig.json'}\"",
+    "build:watch": "yarn build --watch",
+    "playground:start": "cd playground && webpack-dev-server --mode development",
+    "playground:build": "cd playground && webpack --mode production",
+    "lint": "eslint --ext .js,.ts --ignore-path .gitignore --max-warnings 0 .",
+    "lint:fix": "yarn lint --fix",
+    "test:local": "karma start --preset local --single-run",
+    "test:browserstack": "karma start --preset browserstack --single-run",
+    "test:browserstack:beta": "karma start --preset browserstack-beta --single-run",
+    "check:dts": "tsc --isolatedModules --noEmit dist/fp.d.ts",
+    "check:ssr": "node --require './dist/fp.cjs.js' --eval '' || (echo \"The distributive files can't be used with server side rendering. Make sure the code doesn't use browser API until an exported function is called.\" && exit 1)"
+  },
+  "dependencies": {
+    "tslib": "^2.4.1"
+  },
+  "devDependencies": {
+    "@fpjs-incubator/broyster": "^0.2.3",
+    "@rollup/plugin-json": "^5.0.1",
+    "@rollup/plugin-node-resolve": "^15.0.1",
+    "@rollup/plugin-terser": "^0.2.1",
+    "@rollup/plugin-typescript": "^10.0.1",
+    "@types/jasmine": "^3.10.3",
+    "@types/ua-parser-js": "^0.7.39",
+    "@typescript-eslint/eslint-plugin": "^5.62.0",
+    "@typescript-eslint/parser": "^5.62.0",
+    "eslint": "^8.27.0",
+    "eslint-config-prettier": "^8.5.0",
+    "eslint-plugin-prettier": "^4.2.1",
+    "file-loader": "^6.2.0",
+    "got": "^11.8.5",
+    "html-webpack-plugin": "^5.5.0",
+    "karma": "^6.4.1",
+    "prettier": "^2.7.1",
+    "rimraf": "^3.0.2",
+    "rollup": "^3.25.0",
+    "rollup-plugin-dts": "^5.3.1",
+    "rollup-plugin-license": "^3.0.1",
+    "terser-webpack-plugin": "^5.3.6",
+    "ts-loader": "^9.4.2",
+    "ts-node": "^10.9.1",
+    "typescript": "^5.1.6",
+    "ua-parser-js": "^1.0.39",
+    "webpack": "^5.75.0",
+    "webpack-cli": "^5.0.1",
+    "webpack-dev-server": "^4.11.1"
+  }
+}

+ 124 - 0
node_modules/@fingerprintjs/fingerprintjs/readme.md

@@ -0,0 +1,124 @@
+<p align="center">
+  <a href="https://fingerprint.com">
+    <picture>
+      <source media="(prefers-color-scheme: dark)" srcset="resources/logo_light.svg" />
+      <source media="(prefers-color-scheme: light)" srcset="resources/logo_dark.svg" />
+      <img src="resources/logo_dark.svg" alt="FingerprintJS logo" width="312px" />
+    </picture>
+  </a>
+</p>
+<p align="center">
+  <a href="https://github.com/fingerprintjs/fingerprintjs/actions/workflows/test.yml"><img src="https://github.com/fingerprintjs/fingerprintjs/actions/workflows/test.yml/badge.svg" alt="Build status"></a>
+  <a href="https://www.npmjs.com/package/@fingerprintjs/fingerprintjs"><img src="https://img.shields.io/npm/v/@fingerprintjs/fingerprintjs.svg" alt="Current NPM version"></a>
+  <a href="https://www.npmjs.com/package/@fingerprintjs/fingerprintjs"><img src="https://img.shields.io/npm/dm/@fingerprintjs/fingerprintjs.svg" alt="Monthly downloads from NPM"></a>
+  <a href="https://www.jsdelivr.com/package/npm/@fingerprintjs/fingerprintjs"><img src="https://img.shields.io/jsdelivr/npm/hm/@fingerprintjs/fingerprintjs.svg" alt="Monthly downloads from jsDelivr"></a>
+</p>
+<p align="center">
+  <a href="https://discord.gg/39EpE2neBg">
+    <img src="https://img.shields.io/discord/852099967190433792?style=for-the-badge&label=Discord&logo=Discord&logoColor=white&color=5865F2" alt="Discord server">
+  </a>
+</p>
+
+FingerprintJS is a [source-available](docs/licensing.md), client-side, browser fingerprinting library that queries browser attributes and computes a hashed visitor identifier from them. Unlike cookies and local storage, a fingerprint stays the same in incognito/private mode and even when browser data is purged.
+
+FingerprintJS is available under a [BSL license](docs/licensing.md) for non-production purposes.
+
+_FingerprintJS is different from [Fingerprint Identification](https://dev.fingerprint.com/docs/introduction#fingerprint-identification-vs-fingerprintjs), our more detailed and accurate commercial product. See below for [more information](#industry-leading-accuracy-with-fingerprint-identification)._
+
+## Demo
+
+Visit https://fingerprintjs.github.io/fingerprintjs to see your visitor identifier.
+
+Now, try visiting the same page in private / incognito mode and notice how the visitor identifier remains the **same**!
+
+## Getting Started
+
+```html
+<script>
+  // Initialize the agent at application startup.
+  // If you're using an ad blocker or Brave/Firefox, this import will not work.
+  // Please use the NPM package instead: https://t.ly/ORyXk
+  const fpPromise = import('https://openfpcdn.io/fingerprintjs/v4')
+    .then(FingerprintJS => FingerprintJS.load())
+
+  // Get the visitor identifier when you need it.
+  fpPromise
+    .then(fp => fp.get())
+    .then(result => {
+      // This is the visitor identifier:
+      const visitorId = result.visitorId
+      console.log(visitorId)
+    })
+</script>
+```
+
+[Run this code](https://stackblitz.com/edit/fpjs-4-cdn?file=index.html&devtoolsheight=100)
+
+### Resources
+
+📕 [API Reference](docs/api.md)
+
+⚛️ [Sample usage with React on the StackBlitz platform](https://stackblitz.com/edit/fingerprintjs-react-demo)
+
+🔑 [FingerprintJS Licensing](docs/licensing.md)
+
+## Limitations
+
+### Accuracy
+
+Since FingerprintJS processes and generates the fingerprints from within the browser itself, the accuracy is limited (40% - 60%). For example, when 2 different users send requests using identical (i.e. same version, same vendor, same platform), browsers, FingerprintJS will not be able to tell these two browsers apart, primarily because the attributes from these browsers will be identical.
+
+### Security
+
+Because of how the fingerprints are processed and generated from within the browser itself, they are vulnerable to spoofing and reverse engineering.
+
+## Industry-leading accuracy with Fingerprint Identification
+
+The main difference between FingerprintJS and [Fingerprint Identification](https://dev.fingerprint.com/docs/introduction) lies in the number of attributes collected from the browser, how they are processed, and the accuracy in identifying visitors.
+
+Fingerprint Identification is a **closed-source**, **commercial** device intelligence platform designed to prevent fraud and improve user experiences. It's an enhanced version of FingerprintJS and has been fully re-designed to solve the most challenging identification use cases. Its source is not available in this or any other public repository.
+
+Unlike FingerprintJS, Fingerprint Identification is able to achieve **industry-leading accuracy** because it processes the browser attributes on the server and also analyzes vast amounts of auxiliary data (e.g. IP addresses, time of visit patterns, URL changes, etc.). Because of these advanced matching techniques, Fingerprint Identification is able to reliably deduplicate different visitors that have identical devices.
+
+Fingerprint Identification is available for Web, Android, iOS, and other platforms. You can easily get started by [signing up](https://dashboard.fingerprint.com/signup) for a free, unlimited 14-day trial.
+
+Check out our [comparison table](docs/comparison.md) for a detailed breakdown of the differences between FingerprintJS and Fingerprint Identification.
+
+### Fingerprint Identification resources
+
+🍿 [Fingerprint Identification live demo](https://demo.fingerprint.com/playground)
+
+📕 [Fingerprint Identification documentation](https://dev.fingerprint.com)
+
+▶️ [Video: Use Fingerprint Identification to prevent multiple signups by same user](https://www.youtube.com/watch?v=jWX9P5_jZn8)
+
+⏱️ [How to upgrade from FingerprintJS to Fingerprint Identification in 30 seconds](https://dev.fingerprint.com/docs/migrating-from-fingerprintjs-to-fingerprint-pro#migrating-from-fingerprintjs-v4-source-available-to-pro)
+
+## Migrating to v4
+
+| Migrating from | Migration Guide | Documentation |
+|----------|-----------|-----------|
+| **v3** | [Migrating from v3 to v4](docs/migration/v3_v4.md) | [v3 documentation](https://github.com/fingerprintjs/fingerprintjs/tree/v3) |
+| **v2** | [Migrating from v2 to v4](docs/migration/v2_v4.md) | [v2 documentation](https://github.com/fingerprintjs/fingerprintjs/tree/v2) |
+| **v1** | [Migrating from v1 to v4](docs/migration/v1_v4.md) | [v1 documentation](https://github.com/fingerprintjs/fingerprintjs/tree/1.8.6) |
+
+## Version policy
+
+See the compatibility policy for the API and visitor identifiers in the [version policy guide](docs/version_policy.md).
+
+## Supported browsers
+
+The library supports all popular browsers. See more details and learn how to run the library in old browsers in the [browser support guide](docs/browser_support.md).
+
+## Where to get support
+
+Using [Issues](https://github.com/fingerprintjs/fingerprintjs/issues) and [Discussions](https://github.com/fingerprintjs/fingerprintjs/discussions) publicly will help the community and other users with similar issues.
+
+You can also join our [Discord server](https://discord.gg/ad6R2ttHVX) to ask questions, share feedback, and connect with other developers.
+
+If you require private support for FingerprintJS, please email us at [oss-support@fingerprint.com](mailto:oss-support@fingerprint.com).
+
+## Contributing
+
+See the [Contribution guidelines](contributing.md) to learn how to contribute to the project or run the project locally.
+Please read it carefully before making a pull request.

+ 20 - 0
node_modules/@turf/along/LICENSE

@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2017 TurfJS
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 59 - 0
node_modules/@turf/along/README.md

@@ -0,0 +1,59 @@
+# @turf/along
+
+<!-- Generated by documentation.js. Update this documentation by updating the source code. -->
+
+## along
+
+Takes a [LineString][1] and returns a [Point][2] at a specified distance along the line.
+
+### Parameters
+
+*   `line` **([Feature][3]<[LineString][1]> | [LineString][1])** input line
+*   `distance` **[number][4]** distance along the line
+*   `options` **[Object][5]?** Optional parameters (optional, default `{}`)
+
+    *   `options.units` **Units** can be degrees, radians, miles, or kilometers (optional, default `"kilometers"`)
+
+### Examples
+
+```javascript
+var line = turf.lineString([[-83, 30], [-84, 36], [-78, 41]]);
+var options = {units: 'miles'};
+
+var along = turf.along(line, 200, options);
+
+//addToMap
+var addToMap = [along, line]
+```
+
+Returns **[Feature][3]<[Point][2]>** Point `distance` `units` along the line
+
+[1]: https://tools.ietf.org/html/rfc7946#section-3.1.4
+
+[2]: https://tools.ietf.org/html/rfc7946#section-3.1.2
+
+[3]: https://tools.ietf.org/html/rfc7946#section-3.2
+
+[4]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number
+
+[5]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object
+
+<!-- This file is automatically generated. Please don't edit it directly. If you find an error, edit the source file of the module in question (likely index.js or index.ts), and re-run "yarn docs" from the root of the turf project. -->
+
+---
+
+This module is part of the [Turfjs project](https://turfjs.org/), an open source module collection dedicated to geographic algorithms. It is maintained in the [Turfjs/turf](https://github.com/Turfjs/turf) repository, where you can create PRs and issues.
+
+### Installation
+
+Install this single module individually:
+
+```sh
+$ npm install @turf/along
+```
+
+Or install the all-encompassing @turf/turf module that includes all modules as functions:
+
+```sh
+$ npm install @turf/turf
+```

+ 39 - 0
node_modules/@turf/along/dist/cjs/index.cjs

@@ -0,0 +1,39 @@
+"use strict";Object.defineProperty(exports, "__esModule", {value: true});// index.ts
+var _bearing = require('@turf/bearing');
+var _destination = require('@turf/destination');
+var _distance = require('@turf/distance');
+var _helpers = require('@turf/helpers');
+var _invariant = require('@turf/invariant');
+function along(line, distance, options = {}) {
+  const geom = _invariant.getGeom.call(void 0, line);
+  const coords = geom.coordinates;
+  let travelled = 0;
+  for (let i = 0; i < coords.length; i++) {
+    if (distance >= travelled && i === coords.length - 1) {
+      break;
+    } else if (travelled >= distance) {
+      const overshot = distance - travelled;
+      if (!overshot) {
+        return _helpers.point.call(void 0, coords[i]);
+      } else {
+        const direction = _bearing.bearing.call(void 0, coords[i], coords[i - 1]) - 180;
+        const interpolated = _destination.destination.call(void 0, 
+          coords[i],
+          overshot,
+          direction,
+          options
+        );
+        return interpolated;
+      }
+    } else {
+      travelled += _distance.distance.call(void 0, coords[i], coords[i + 1], options);
+    }
+  }
+  return _helpers.point.call(void 0, coords[coords.length - 1]);
+}
+var turf_along_default = along;
+
+
+
+exports.along = along; exports.default = turf_along_default;
+//# sourceMappingURL=index.cjs.map

文件差異過大導致無法顯示
+ 1 - 0
node_modules/@turf/along/dist/cjs/index.cjs.map


+ 26 - 0
node_modules/@turf/along/dist/cjs/index.d.cts

@@ -0,0 +1,26 @@
+import { Feature, LineString, Point } from 'geojson';
+import { Units } from '@turf/helpers';
+
+/**
+ * Takes a {@link LineString} and returns a {@link Point} at a specified distance along the line.
+ *
+ * @function
+ * @param {Feature<LineString>|LineString} line input line
+ * @param {number} distance distance along the line
+ * @param {Object} [options] Optional parameters
+ * @param {Units} [options.units="kilometers"] can be degrees, radians, miles, or kilometers
+ * @returns {Feature<Point>} Point `distance` `units` along the line
+ * @example
+ * var line = turf.lineString([[-83, 30], [-84, 36], [-78, 41]]);
+ * var options = {units: 'miles'};
+ *
+ * var along = turf.along(line, 200, options);
+ *
+ * //addToMap
+ * var addToMap = [along, line]
+ */
+declare function along(line: Feature<LineString> | LineString, distance: number, options?: {
+    units?: Units;
+}): Feature<Point>;
+
+export { along, along as default };

+ 26 - 0
node_modules/@turf/along/dist/esm/index.d.ts

@@ -0,0 +1,26 @@
+import { Feature, LineString, Point } from 'geojson';
+import { Units } from '@turf/helpers';
+
+/**
+ * Takes a {@link LineString} and returns a {@link Point} at a specified distance along the line.
+ *
+ * @function
+ * @param {Feature<LineString>|LineString} line input line
+ * @param {number} distance distance along the line
+ * @param {Object} [options] Optional parameters
+ * @param {Units} [options.units="kilometers"] can be degrees, radians, miles, or kilometers
+ * @returns {Feature<Point>} Point `distance` `units` along the line
+ * @example
+ * var line = turf.lineString([[-83, 30], [-84, 36], [-78, 41]]);
+ * var options = {units: 'miles'};
+ *
+ * var along = turf.along(line, 200, options);
+ *
+ * //addToMap
+ * var addToMap = [along, line]
+ */
+declare function along(line: Feature<LineString> | LineString, distance: number, options?: {
+    units?: Units;
+}): Feature<Point>;
+
+export { along, along as default };

+ 39 - 0
node_modules/@turf/along/dist/esm/index.js

@@ -0,0 +1,39 @@
+// index.ts
+import { bearing } from "@turf/bearing";
+import { destination } from "@turf/destination";
+import { distance as measureDistance } from "@turf/distance";
+import { point } from "@turf/helpers";
+import { getGeom } from "@turf/invariant";
+function along(line, distance, options = {}) {
+  const geom = getGeom(line);
+  const coords = geom.coordinates;
+  let travelled = 0;
+  for (let i = 0; i < coords.length; i++) {
+    if (distance >= travelled && i === coords.length - 1) {
+      break;
+    } else if (travelled >= distance) {
+      const overshot = distance - travelled;
+      if (!overshot) {
+        return point(coords[i]);
+      } else {
+        const direction = bearing(coords[i], coords[i - 1]) - 180;
+        const interpolated = destination(
+          coords[i],
+          overshot,
+          direction,
+          options
+        );
+        return interpolated;
+      }
+    } else {
+      travelled += measureDistance(coords[i], coords[i + 1], options);
+    }
+  }
+  return point(coords[coords.length - 1]);
+}
+var turf_along_default = along;
+export {
+  along,
+  turf_along_default as default
+};
+//# sourceMappingURL=index.js.map

文件差異過大導致無法顯示
+ 1 - 0
node_modules/@turf/along/dist/esm/index.js.map


+ 75 - 0
node_modules/@turf/along/package.json

@@ -0,0 +1,75 @@
+{
+  "name": "@turf/along",
+  "version": "7.2.0",
+  "description": "turf along module",
+  "author": "Turf Authors",
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/Turfjs/turf/issues"
+  },
+  "homepage": "https://github.com/Turfjs/turf",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/Turfjs/turf.git"
+  },
+  "funding": "https://opencollective.com/turf",
+  "publishConfig": {
+    "access": "public"
+  },
+  "keywords": [
+    "along",
+    "line",
+    "linestring",
+    "turf",
+    "distance"
+  ],
+  "type": "module",
+  "main": "dist/cjs/index.cjs",
+  "module": "dist/esm/index.js",
+  "types": "dist/esm/index.d.ts",
+  "exports": {
+    "./package.json": "./package.json",
+    ".": {
+      "import": {
+        "types": "./dist/esm/index.d.ts",
+        "default": "./dist/esm/index.js"
+      },
+      "require": {
+        "types": "./dist/cjs/index.d.cts",
+        "default": "./dist/cjs/index.cjs"
+      }
+    }
+  },
+  "sideEffects": false,
+  "files": [
+    "dist"
+  ],
+  "scripts": {
+    "bench": "tsx bench.ts",
+    "build": "tsup --config ../../tsup.config.ts",
+    "docs": "tsx ../../scripts/generate-readmes.ts",
+    "test": "npm-run-all --npm-path npm test:*",
+    "test:tape": "tsx test.ts"
+  },
+  "devDependencies": {
+    "@types/benchmark": "^2.1.5",
+    "@types/tape": "^4.13.4",
+    "benchmark": "^2.1.4",
+    "load-json-file": "^7.0.1",
+    "npm-run-all": "^4.1.5",
+    "tape": "^5.9.0",
+    "tsup": "^8.3.5",
+    "tsx": "^4.19.2",
+    "typescript": "^5.5.4"
+  },
+  "dependencies": {
+    "@turf/bearing": "^7.2.0",
+    "@turf/destination": "^7.2.0",
+    "@turf/distance": "^7.2.0",
+    "@turf/helpers": "^7.2.0",
+    "@turf/invariant": "^7.2.0",
+    "@types/geojson": "^7946.0.10",
+    "tslib": "^2.8.1"
+  },
+  "gitHead": "7b0f0374c4668cd569f8904c71e2ae7d941be867"
+}

+ 20 - 0
node_modules/@turf/angle/LICENSE

@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2017 TurfJS
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 60 - 0
node_modules/@turf/angle/README.md

@@ -0,0 +1,60 @@
+# @turf/angle
+
+<!-- Generated by documentation.js. Update this documentation by updating the source code. -->
+
+## angle
+
+Finds the angle formed by two adjacent segments defined by 3 points. The result will be the (positive clockwise)
+angle with origin on the `startPoint-midPoint` segment, or its explementary angle if required.
+
+### Parameters
+
+*   `startPoint` **[Coord][1]** Start Point Coordinates
+*   `midPoint` **[Coord][1]** Mid Point Coordinates
+*   `endPoint` **[Coord][1]** End Point Coordinates
+*   `options` **[Object][2]** Optional parameters (optional, default `{}`)
+
+    *   `options.explementary` **[boolean][3]** Returns the explementary angle instead (360 - angle) (optional, default `false`)
+    *   `options.mercator` **[boolean][3]** if calculations should be performed over Mercator or WGS84 projection (optional, default `false`)
+
+### Examples
+
+```javascript
+turf.angle([5, 5], [5, 6], [3, 4]);
+//=45
+```
+
+Returns **[number][4]** Angle between the provided points, or its explementary.
+
+[1]: https://tools.ietf.org/html/rfc7946#section-3.1.1
+
+[2]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object
+
+[3]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean
+
+[4]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number
+
+<!-- This file is automatically generated. Please don't edit it directly. If you find an error, edit the source file of the module in question (likely index.js or index.ts), and re-run "yarn docs" from the root of the turf project. -->
+
+---
+
+This module is part of the [Turfjs project](https://turfjs.org/), an open source module collection dedicated to geographic algorithms. It is maintained in the [Turfjs/turf](https://github.com/Turfjs/turf) repository, where you can create PRs and issues.
+
+### Installation
+
+Install this single module individually:
+
+```sh
+$ npm install @turf/angle
+```
+
+Or install the all-encompassing @turf/turf module that includes all modules as functions:
+
+```sh
+$ npm install @turf/turf
+```
+
+
+### Diagrams
+
+![turf-angle](diagrams/turf-angle.png)

+ 41 - 0
node_modules/@turf/angle/dist/cjs/index.cjs

@@ -0,0 +1,41 @@
+"use strict";Object.defineProperty(exports, "__esModule", {value: true});// index.ts
+var _bearing = require('@turf/bearing');
+var _helpers = require('@turf/helpers');
+var _rhumbbearing = require('@turf/rhumb-bearing');
+function angle(startPoint, midPoint, endPoint, options = {}) {
+  if (!_helpers.isObject.call(void 0, options)) {
+    throw new Error("options is invalid");
+  }
+  if (!startPoint) {
+    throw new Error("startPoint is required");
+  }
+  if (!midPoint) {
+    throw new Error("midPoint is required");
+  }
+  if (!endPoint) {
+    throw new Error("endPoint is required");
+  }
+  const A = startPoint;
+  const O = midPoint;
+  const B = endPoint;
+  const azimuthOA = _helpers.bearingToAzimuth.call(void 0, 
+    options.mercator !== true ? _bearing.bearing.call(void 0, O, A) : _rhumbbearing.rhumbBearing.call(void 0, O, A)
+  );
+  let azimuthOB = _helpers.bearingToAzimuth.call(void 0, 
+    options.mercator !== true ? _bearing.bearing.call(void 0, O, B) : _rhumbbearing.rhumbBearing.call(void 0, O, B)
+  );
+  if (azimuthOB < azimuthOA) {
+    azimuthOB = azimuthOB + 360;
+  }
+  const angleAOB = azimuthOB - azimuthOA;
+  if (options.explementary === true) {
+    return 360 - angleAOB;
+  }
+  return angleAOB;
+}
+var turf_angle_default = angle;
+
+
+
+exports.angle = angle; exports.default = turf_angle_default;
+//# sourceMappingURL=index.cjs.map

文件差異過大導致無法顯示
+ 1 - 0
node_modules/@turf/angle/dist/cjs/index.cjs.map


+ 24 - 0
node_modules/@turf/angle/dist/cjs/index.d.cts

@@ -0,0 +1,24 @@
+import { Coord } from '@turf/helpers';
+
+/**
+ * Finds the angle formed by two adjacent segments defined by 3 points. The result will be the (positive clockwise)
+ * angle with origin on the `startPoint-midPoint` segment, or its explementary angle if required.
+ *
+ * @function
+ * @param {Coord} startPoint Start Point Coordinates
+ * @param {Coord} midPoint Mid Point Coordinates
+ * @param {Coord} endPoint End Point Coordinates
+ * @param {Object} [options={}] Optional parameters
+ * @param {boolean} [options.explementary=false] Returns the explementary angle instead (360 - angle)
+ * @param {boolean} [options.mercator=false] if calculations should be performed over Mercator or WGS84 projection
+ * @returns {number} Angle between the provided points, or its explementary.
+ * @example
+ * turf.angle([5, 5], [5, 6], [3, 4]);
+ * //=45
+ */
+declare function angle(startPoint: Coord, midPoint: Coord, endPoint: Coord, options?: {
+    explementary?: boolean;
+    mercator?: boolean;
+}): number;
+
+export { angle, angle as default };

+ 24 - 0
node_modules/@turf/angle/dist/esm/index.d.ts

@@ -0,0 +1,24 @@
+import { Coord } from '@turf/helpers';
+
+/**
+ * Finds the angle formed by two adjacent segments defined by 3 points. The result will be the (positive clockwise)
+ * angle with origin on the `startPoint-midPoint` segment, or its explementary angle if required.
+ *
+ * @function
+ * @param {Coord} startPoint Start Point Coordinates
+ * @param {Coord} midPoint Mid Point Coordinates
+ * @param {Coord} endPoint End Point Coordinates
+ * @param {Object} [options={}] Optional parameters
+ * @param {boolean} [options.explementary=false] Returns the explementary angle instead (360 - angle)
+ * @param {boolean} [options.mercator=false] if calculations should be performed over Mercator or WGS84 projection
+ * @returns {number} Angle between the provided points, or its explementary.
+ * @example
+ * turf.angle([5, 5], [5, 6], [3, 4]);
+ * //=45
+ */
+declare function angle(startPoint: Coord, midPoint: Coord, endPoint: Coord, options?: {
+    explementary?: boolean;
+    mercator?: boolean;
+}): number;
+
+export { angle, angle as default };

+ 41 - 0
node_modules/@turf/angle/dist/esm/index.js

@@ -0,0 +1,41 @@
+// index.ts
+import { bearing } from "@turf/bearing";
+import { bearingToAzimuth, isObject } from "@turf/helpers";
+import { rhumbBearing } from "@turf/rhumb-bearing";
+function angle(startPoint, midPoint, endPoint, options = {}) {
+  if (!isObject(options)) {
+    throw new Error("options is invalid");
+  }
+  if (!startPoint) {
+    throw new Error("startPoint is required");
+  }
+  if (!midPoint) {
+    throw new Error("midPoint is required");
+  }
+  if (!endPoint) {
+    throw new Error("endPoint is required");
+  }
+  const A = startPoint;
+  const O = midPoint;
+  const B = endPoint;
+  const azimuthOA = bearingToAzimuth(
+    options.mercator !== true ? bearing(O, A) : rhumbBearing(O, A)
+  );
+  let azimuthOB = bearingToAzimuth(
+    options.mercator !== true ? bearing(O, B) : rhumbBearing(O, B)
+  );
+  if (azimuthOB < azimuthOA) {
+    azimuthOB = azimuthOB + 360;
+  }
+  const angleAOB = azimuthOB - azimuthOA;
+  if (options.explementary === true) {
+    return 360 - angleAOB;
+  }
+  return angleAOB;
+}
+var turf_angle_default = angle;
+export {
+  angle,
+  turf_angle_default as default
+};
+//# sourceMappingURL=index.js.map

文件差異過大導致無法顯示
+ 1 - 0
node_modules/@turf/angle/dist/esm/index.js.map


+ 79 - 0
node_modules/@turf/angle/package.json

@@ -0,0 +1,79 @@
+{
+  "name": "@turf/angle",
+  "version": "7.2.0",
+  "description": "turf angle module",
+  "author": "Turf Authors",
+  "contributors": [
+    "Denis <@DenisCarriere>"
+  ],
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/Turfjs/turf/issues"
+  },
+  "homepage": "https://github.com/Turfjs/turf",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/Turfjs/turf.git"
+  },
+  "funding": "https://opencollective.com/turf",
+  "publishConfig": {
+    "access": "public"
+  },
+  "keywords": [
+    "turf",
+    "angle"
+  ],
+  "type": "module",
+  "main": "dist/cjs/index.cjs",
+  "module": "dist/esm/index.js",
+  "types": "dist/esm/index.d.ts",
+  "exports": {
+    "./package.json": "./package.json",
+    ".": {
+      "import": {
+        "types": "./dist/esm/index.d.ts",
+        "default": "./dist/esm/index.js"
+      },
+      "require": {
+        "types": "./dist/cjs/index.d.cts",
+        "default": "./dist/cjs/index.cjs"
+      }
+    }
+  },
+  "sideEffects": false,
+  "files": [
+    "dist"
+  ],
+  "scripts": {
+    "bench": "tsx bench.ts",
+    "build": "tsup --config ../../tsup.config.ts",
+    "docs": "tsx ../../scripts/generate-readmes.ts",
+    "test": "npm-run-all --npm-path npm test:*",
+    "test:tape": "tsx test.ts"
+  },
+  "devDependencies": {
+    "@turf/distance": "^7.2.0",
+    "@turf/sector": "^7.2.0",
+    "@turf/truncate": "^7.2.0",
+    "@types/benchmark": "^2.1.5",
+    "@types/tape": "^4.13.4",
+    "benchmark": "^2.1.4",
+    "glob": "^10.3.10",
+    "load-json-file": "^7.0.1",
+    "npm-run-all": "^4.1.5",
+    "tape": "^5.9.0",
+    "tsup": "^8.3.5",
+    "tsx": "^4.19.2",
+    "typescript": "^5.5.4",
+    "write-json-file": "^5.0.0"
+  },
+  "dependencies": {
+    "@turf/bearing": "^7.2.0",
+    "@turf/helpers": "^7.2.0",
+    "@turf/invariant": "^7.2.0",
+    "@turf/rhumb-bearing": "^7.2.0",
+    "@types/geojson": "^7946.0.10",
+    "tslib": "^2.8.1"
+  },
+  "gitHead": "7b0f0374c4668cd569f8904c71e2ae7d941be867"
+}

+ 20 - 0
node_modules/@turf/area/LICENSE

@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2017 TurfJS
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 55 - 0
node_modules/@turf/area/README.md

@@ -0,0 +1,55 @@
+# @turf/area
+
+<!-- Generated by documentation.js. Update this documentation by updating the source code. -->
+
+## area
+
+Calculates the geodesic area in square meters of one or more polygons.
+
+### Parameters
+
+*   `geojson` **[GeoJSON][1]** input polygon(s) as [Geometry][2], [Feature][3], or [FeatureCollection][4]
+
+### Examples
+
+```javascript
+var polygon = turf.polygon([[[125, -15], [113, -22], [154, -27], [144, -15], [125, -15]]]);
+
+var area = turf.area(polygon);
+
+//addToMap
+var addToMap = [polygon]
+polygon.properties.area = area
+```
+
+Returns **[number][5]** area in square meters
+
+[1]: https://tools.ietf.org/html/rfc7946#section-3
+
+[2]: https://tools.ietf.org/html/rfc7946#section-3.1
+
+[3]: https://tools.ietf.org/html/rfc7946#section-3.2
+
+[4]: https://tools.ietf.org/html/rfc7946#section-3.3
+
+[5]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number
+
+<!-- This file is automatically generated. Please don't edit it directly. If you find an error, edit the source file of the module in question (likely index.js or index.ts), and re-run "yarn docs" from the root of the turf project. -->
+
+---
+
+This module is part of the [Turfjs project](https://turfjs.org/), an open source module collection dedicated to geographic algorithms. It is maintained in the [Turfjs/turf](https://github.com/Turfjs/turf) repository, where you can create PRs and issues.
+
+### Installation
+
+Install this single module individually:
+
+```sh
+$ npm install @turf/area
+```
+
+Or install the all-encompassing @turf/turf module that includes all modules as functions:
+
+```sh
+$ npm install @turf/turf
+```

+ 66 - 0
node_modules/@turf/area/dist/cjs/index.cjs

@@ -0,0 +1,66 @@
+"use strict";Object.defineProperty(exports, "__esModule", {value: true});// index.ts
+var _helpers = require('@turf/helpers');
+var _meta = require('@turf/meta');
+function area(geojson) {
+  return _meta.geomReduce.call(void 0, 
+    geojson,
+    (value, geom) => {
+      return value + calculateArea(geom);
+    },
+    0
+  );
+}
+function calculateArea(geom) {
+  let total = 0;
+  let i;
+  switch (geom.type) {
+    case "Polygon":
+      return polygonArea(geom.coordinates);
+    case "MultiPolygon":
+      for (i = 0; i < geom.coordinates.length; i++) {
+        total += polygonArea(geom.coordinates[i]);
+      }
+      return total;
+    case "Point":
+    case "MultiPoint":
+    case "LineString":
+    case "MultiLineString":
+      return 0;
+  }
+  return 0;
+}
+function polygonArea(coords) {
+  let total = 0;
+  if (coords && coords.length > 0) {
+    total += Math.abs(ringArea(coords[0]));
+    for (let i = 1; i < coords.length; i++) {
+      total -= Math.abs(ringArea(coords[i]));
+    }
+  }
+  return total;
+}
+var FACTOR = _helpers.earthRadius * _helpers.earthRadius / 2;
+var PI_OVER_180 = Math.PI / 180;
+function ringArea(coords) {
+  const coordsLength = coords.length - 1;
+  if (coordsLength <= 2) return 0;
+  let total = 0;
+  let i = 0;
+  while (i < coordsLength) {
+    const lower = coords[i];
+    const middle = coords[i + 1 === coordsLength ? 0 : i + 1];
+    const upper = coords[i + 2 >= coordsLength ? (i + 2) % coordsLength : i + 2];
+    const lowerX = lower[0] * PI_OVER_180;
+    const middleY = middle[1] * PI_OVER_180;
+    const upperX = upper[0] * PI_OVER_180;
+    total += (upperX - lowerX) * Math.sin(middleY);
+    i++;
+  }
+  return total * FACTOR;
+}
+var turf_area_default = area;
+
+
+
+exports.area = area; exports.default = turf_area_default;
+//# sourceMappingURL=index.cjs.map

文件差異過大導致無法顯示
+ 1 - 0
node_modules/@turf/area/dist/cjs/index.cjs.map


+ 20 - 0
node_modules/@turf/area/dist/cjs/index.d.cts

@@ -0,0 +1,20 @@
+import { Feature, FeatureCollection, Geometry } from 'geojson';
+
+/**
+ * Calculates the geodesic area in square meters of one or more polygons.
+ *
+ * @function
+ * @param {GeoJSON} geojson input polygon(s) as {@link Geometry}, {@link Feature}, or {@link FeatureCollection}
+ * @returns {number} area in square meters
+ * @example
+ * var polygon = turf.polygon([[[125, -15], [113, -22], [154, -27], [144, -15], [125, -15]]]);
+ *
+ * var area = turf.area(polygon);
+ *
+ * //addToMap
+ * var addToMap = [polygon]
+ * polygon.properties.area = area
+ */
+declare function area(geojson: Feature<any> | FeatureCollection<any> | Geometry): number;
+
+export { area, area as default };

+ 20 - 0
node_modules/@turf/area/dist/esm/index.d.ts

@@ -0,0 +1,20 @@
+import { Feature, FeatureCollection, Geometry } from 'geojson';
+
+/**
+ * Calculates the geodesic area in square meters of one or more polygons.
+ *
+ * @function
+ * @param {GeoJSON} geojson input polygon(s) as {@link Geometry}, {@link Feature}, or {@link FeatureCollection}
+ * @returns {number} area in square meters
+ * @example
+ * var polygon = turf.polygon([[[125, -15], [113, -22], [154, -27], [144, -15], [125, -15]]]);
+ *
+ * var area = turf.area(polygon);
+ *
+ * //addToMap
+ * var addToMap = [polygon]
+ * polygon.properties.area = area
+ */
+declare function area(geojson: Feature<any> | FeatureCollection<any> | Geometry): number;
+
+export { area, area as default };

+ 66 - 0
node_modules/@turf/area/dist/esm/index.js

@@ -0,0 +1,66 @@
+// index.ts
+import { earthRadius } from "@turf/helpers";
+import { geomReduce } from "@turf/meta";
+function area(geojson) {
+  return geomReduce(
+    geojson,
+    (value, geom) => {
+      return value + calculateArea(geom);
+    },
+    0
+  );
+}
+function calculateArea(geom) {
+  let total = 0;
+  let i;
+  switch (geom.type) {
+    case "Polygon":
+      return polygonArea(geom.coordinates);
+    case "MultiPolygon":
+      for (i = 0; i < geom.coordinates.length; i++) {
+        total += polygonArea(geom.coordinates[i]);
+      }
+      return total;
+    case "Point":
+    case "MultiPoint":
+    case "LineString":
+    case "MultiLineString":
+      return 0;
+  }
+  return 0;
+}
+function polygonArea(coords) {
+  let total = 0;
+  if (coords && coords.length > 0) {
+    total += Math.abs(ringArea(coords[0]));
+    for (let i = 1; i < coords.length; i++) {
+      total -= Math.abs(ringArea(coords[i]));
+    }
+  }
+  return total;
+}
+var FACTOR = earthRadius * earthRadius / 2;
+var PI_OVER_180 = Math.PI / 180;
+function ringArea(coords) {
+  const coordsLength = coords.length - 1;
+  if (coordsLength <= 2) return 0;
+  let total = 0;
+  let i = 0;
+  while (i < coordsLength) {
+    const lower = coords[i];
+    const middle = coords[i + 1 === coordsLength ? 0 : i + 1];
+    const upper = coords[i + 2 >= coordsLength ? (i + 2) % coordsLength : i + 2];
+    const lowerX = lower[0] * PI_OVER_180;
+    const middleY = middle[1] * PI_OVER_180;
+    const upperX = upper[0] * PI_OVER_180;
+    total += (upperX - lowerX) * Math.sin(middleY);
+    i++;
+  }
+  return total * FACTOR;
+}
+var turf_area_default = area;
+export {
+  area,
+  turf_area_default as default
+};
+//# sourceMappingURL=index.js.map

文件差異過大導致無法顯示
+ 1 - 0
node_modules/@turf/area/dist/esm/index.js.map


+ 72 - 0
node_modules/@turf/area/package.json

@@ -0,0 +1,72 @@
+{
+  "name": "@turf/area",
+  "version": "7.2.0",
+  "description": "turf area module",
+  "author": "Turf Authors",
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/Turfjs/turf/issues"
+  },
+  "homepage": "https://github.com/Turfjs/turf",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/Turfjs/turf.git"
+  },
+  "funding": "https://opencollective.com/turf",
+  "publishConfig": {
+    "access": "public"
+  },
+  "keywords": [
+    "turf",
+    "area",
+    "polygon",
+    "multipolygon"
+  ],
+  "type": "module",
+  "main": "dist/cjs/index.cjs",
+  "module": "dist/esm/index.js",
+  "types": "dist/esm/index.d.ts",
+  "exports": {
+    "./package.json": "./package.json",
+    ".": {
+      "import": {
+        "types": "./dist/esm/index.d.ts",
+        "default": "./dist/esm/index.js"
+      },
+      "require": {
+        "types": "./dist/cjs/index.d.cts",
+        "default": "./dist/cjs/index.cjs"
+      }
+    }
+  },
+  "sideEffects": false,
+  "files": [
+    "dist"
+  ],
+  "scripts": {
+    "bench": "tsx bench.ts",
+    "build": "tsup --config ../../tsup.config.ts",
+    "docs": "tsx ../../scripts/generate-readmes.ts",
+    "test": "npm-run-all --npm-path npm test:*",
+    "test:tape": "tsx test.ts"
+  },
+  "devDependencies": {
+    "@types/benchmark": "^2.1.5",
+    "@types/tape": "^4.13.4",
+    "benchmark": "^2.1.4",
+    "load-json-file": "^7.0.1",
+    "npm-run-all": "^4.1.5",
+    "tape": "^5.9.0",
+    "tsup": "^8.3.5",
+    "tsx": "^4.19.2",
+    "typescript": "^5.5.4",
+    "write-json-file": "^5.0.0"
+  },
+  "dependencies": {
+    "@turf/helpers": "^7.2.0",
+    "@turf/meta": "^7.2.0",
+    "@types/geojson": "^7946.0.10",
+    "tslib": "^2.8.1"
+  },
+  "gitHead": "7b0f0374c4668cd569f8904c71e2ae7d941be867"
+}

+ 20 - 0
node_modules/@turf/bbox-clip/LICENSE

@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2017 TurfJS
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 62 - 0
node_modules/@turf/bbox-clip/README.md

@@ -0,0 +1,62 @@
+# @turf/bbox-clip
+
+<!-- Generated by documentation.js. Update this documentation by updating the source code. -->
+
+## bboxClip
+
+Takes a [Feature][1] and a bbox and clips the feature to the bbox using
+[lineclip][2].
+May result in degenerate edges when clipping Polygons.
+
+### Parameters
+
+*   `feature` **[Feature][1]<([LineString][3] | [MultiLineString][4] | [Polygon][5] | [MultiPolygon][6])>** feature to clip to the bbox
+*   `bbox` **[BBox][7]** extent in \[minX, minY, maxX, maxY] order
+
+### Examples
+
+```javascript
+var bbox = [0, 0, 10, 10];
+var poly = turf.polygon([[[2, 2], [8, 4], [12, 8], [3, 7], [2, 2]]]);
+
+var clipped = turf.bboxClip(poly, bbox);
+
+//addToMap
+var addToMap = [bbox, poly, clipped]
+```
+
+Returns **[Feature][1]<([LineString][3] | [MultiLineString][4] | [Polygon][5] | [MultiPolygon][6])>** clipped Feature
+
+[1]: https://tools.ietf.org/html/rfc7946#section-3.2
+
+[2]: https://github.com/mapbox/lineclip
+
+[3]: https://tools.ietf.org/html/rfc7946#section-3.1.4
+
+[4]: https://tools.ietf.org/html/rfc7946#section-3.1.5
+
+[5]: https://tools.ietf.org/html/rfc7946#section-3.1.6
+
+[6]: https://tools.ietf.org/html/rfc7946#section-3.1.7
+
+[7]: https://tools.ietf.org/html/rfc7946#section-5
+
+<!-- This file is automatically generated. Please don't edit it directly. If you find an error, edit the source file of the module in question (likely index.js or index.ts), and re-run "yarn docs" from the root of the turf project. -->
+
+---
+
+This module is part of the [Turfjs project](https://turfjs.org/), an open source module collection dedicated to geographic algorithms. It is maintained in the [Turfjs/turf](https://github.com/Turfjs/turf) repository, where you can create PRs and issues.
+
+### Installation
+
+Install this single module individually:
+
+```sh
+$ npm install @turf/bbox-clip
+```
+
+Or install the all-encompassing @turf/turf module that includes all modules as functions:
+
+```sh
+$ npm install @turf/turf
+```

+ 133 - 0
node_modules/@turf/bbox-clip/dist/cjs/index.cjs

@@ -0,0 +1,133 @@
+"use strict";Object.defineProperty(exports, "__esModule", {value: true});// index.ts
+
+
+
+
+
+var _helpers = require('@turf/helpers');
+var _invariant = require('@turf/invariant');
+
+// lib/lineclip.ts
+function lineclip(points, bbox, result) {
+  var len = points.length, codeA = bitCode(points[0], bbox), part = [], i, codeB, lastCode;
+  let a;
+  let b;
+  if (!result) result = [];
+  for (i = 1; i < len; i++) {
+    a = points[i - 1];
+    b = points[i];
+    codeB = lastCode = bitCode(b, bbox);
+    while (true) {
+      if (!(codeA | codeB)) {
+        part.push(a);
+        if (codeB !== lastCode) {
+          part.push(b);
+          if (i < len - 1) {
+            result.push(part);
+            part = [];
+          }
+        } else if (i === len - 1) {
+          part.push(b);
+        }
+        break;
+      } else if (codeA & codeB) {
+        break;
+      } else if (codeA) {
+        a = intersect(a, b, codeA, bbox);
+        codeA = bitCode(a, bbox);
+      } else {
+        b = intersect(a, b, codeB, bbox);
+        codeB = bitCode(b, bbox);
+      }
+    }
+    codeA = lastCode;
+  }
+  if (part.length) result.push(part);
+  return result;
+}
+function polygonclip(points, bbox) {
+  var result, edge, prev, prevInside, i, p, inside;
+  for (edge = 1; edge <= 8; edge *= 2) {
+    result = [];
+    prev = points[points.length - 1];
+    prevInside = !(bitCode(prev, bbox) & edge);
+    for (i = 0; i < points.length; i++) {
+      p = points[i];
+      inside = !(bitCode(p, bbox) & edge);
+      if (inside !== prevInside) result.push(intersect(prev, p, edge, bbox));
+      if (inside) result.push(p);
+      prev = p;
+      prevInside = inside;
+    }
+    points = result;
+    if (!points.length) break;
+  }
+  return result;
+}
+function intersect(a, b, edge, bbox) {
+  return edge & 8 ? [a[0] + (b[0] - a[0]) * (bbox[3] - a[1]) / (b[1] - a[1]), bbox[3]] : edge & 4 ? [a[0] + (b[0] - a[0]) * (bbox[1] - a[1]) / (b[1] - a[1]), bbox[1]] : edge & 2 ? [bbox[2], a[1] + (b[1] - a[1]) * (bbox[2] - a[0]) / (b[0] - a[0])] : edge & 1 ? [bbox[0], a[1] + (b[1] - a[1]) * (bbox[0] - a[0]) / (b[0] - a[0])] : null;
+}
+function bitCode(p, bbox) {
+  var code = 0;
+  if (p[0] < bbox[0]) code |= 1;
+  else if (p[0] > bbox[2]) code |= 2;
+  if (p[1] < bbox[1]) code |= 4;
+  else if (p[1] > bbox[3]) code |= 8;
+  return code;
+}
+
+// index.ts
+function bboxClip(feature, bbox) {
+  const geom = _invariant.getGeom.call(void 0, feature);
+  const type = geom.type;
+  const properties = feature.type === "Feature" ? feature.properties : {};
+  let coords = geom.coordinates;
+  switch (type) {
+    case "LineString":
+    case "MultiLineString": {
+      const lines = [];
+      if (type === "LineString") {
+        coords = [coords];
+      }
+      coords.forEach((line) => {
+        lineclip(line, bbox, lines);
+      });
+      if (lines.length === 1) {
+        return _helpers.lineString.call(void 0, lines[0], properties);
+      }
+      return _helpers.multiLineString.call(void 0, lines, properties);
+    }
+    case "Polygon":
+      return _helpers.polygon.call(void 0, clipPolygon(coords, bbox), properties);
+    case "MultiPolygon":
+      return _helpers.multiPolygon.call(void 0, 
+        coords.map((poly) => {
+          return clipPolygon(poly, bbox);
+        }),
+        properties
+      );
+    default:
+      throw new Error("geometry " + type + " not supported");
+  }
+}
+function clipPolygon(rings, bbox) {
+  const outRings = [];
+  for (const ring of rings) {
+    const clipped = polygonclip(ring, bbox);
+    if (clipped.length > 0) {
+      if (clipped[0][0] !== clipped[clipped.length - 1][0] || clipped[0][1] !== clipped[clipped.length - 1][1]) {
+        clipped.push(clipped[0]);
+      }
+      if (clipped.length >= 4) {
+        outRings.push(clipped);
+      }
+    }
+  }
+  return outRings;
+}
+var turf_bbox_clip_default = bboxClip;
+
+
+
+exports.bboxClip = bboxClip; exports.default = turf_bbox_clip_default;
+//# sourceMappingURL=index.cjs.map

文件差異過大導致無法顯示
+ 1 - 0
node_modules/@turf/bbox-clip/dist/cjs/index.cjs.map


+ 23 - 0
node_modules/@turf/bbox-clip/dist/cjs/index.d.cts

@@ -0,0 +1,23 @@
+import { Polygon, MultiPolygon, LineString, MultiLineString, GeoJsonProperties, Feature, BBox } from 'geojson';
+
+/**
+ * Takes a {@link Feature} and a bbox and clips the feature to the bbox using
+ * [lineclip](https://github.com/mapbox/lineclip).
+ * May result in degenerate edges when clipping Polygons.
+ *
+ * @function
+ * @param {Feature<LineString|MultiLineString|Polygon|MultiPolygon>} feature feature to clip to the bbox
+ * @param {BBox} bbox extent in [minX, minY, maxX, maxY] order
+ * @returns {Feature<LineString|MultiLineString|Polygon|MultiPolygon>} clipped Feature
+ * @example
+ * var bbox = [0, 0, 10, 10];
+ * var poly = turf.polygon([[[2, 2], [8, 4], [12, 8], [3, 7], [2, 2]]]);
+ *
+ * var clipped = turf.bboxClip(poly, bbox);
+ *
+ * //addToMap
+ * var addToMap = [bbox, poly, clipped]
+ */
+declare function bboxClip<G extends Polygon | MultiPolygon | LineString | MultiLineString, P extends GeoJsonProperties = GeoJsonProperties>(feature: Feature<G, P> | G, bbox: BBox): Feature<LineString, P | {}> | Feature<MultiLineString, P | {}> | Feature<Polygon, P | {}> | Feature<MultiPolygon, P | {}>;
+
+export { bboxClip, bboxClip as default };

+ 23 - 0
node_modules/@turf/bbox-clip/dist/esm/index.d.ts

@@ -0,0 +1,23 @@
+import { Polygon, MultiPolygon, LineString, MultiLineString, GeoJsonProperties, Feature, BBox } from 'geojson';
+
+/**
+ * Takes a {@link Feature} and a bbox and clips the feature to the bbox using
+ * [lineclip](https://github.com/mapbox/lineclip).
+ * May result in degenerate edges when clipping Polygons.
+ *
+ * @function
+ * @param {Feature<LineString|MultiLineString|Polygon|MultiPolygon>} feature feature to clip to the bbox
+ * @param {BBox} bbox extent in [minX, minY, maxX, maxY] order
+ * @returns {Feature<LineString|MultiLineString|Polygon|MultiPolygon>} clipped Feature
+ * @example
+ * var bbox = [0, 0, 10, 10];
+ * var poly = turf.polygon([[[2, 2], [8, 4], [12, 8], [3, 7], [2, 2]]]);
+ *
+ * var clipped = turf.bboxClip(poly, bbox);
+ *
+ * //addToMap
+ * var addToMap = [bbox, poly, clipped]
+ */
+declare function bboxClip<G extends Polygon | MultiPolygon | LineString | MultiLineString, P extends GeoJsonProperties = GeoJsonProperties>(feature: Feature<G, P> | G, bbox: BBox): Feature<LineString, P | {}> | Feature<MultiLineString, P | {}> | Feature<Polygon, P | {}> | Feature<MultiPolygon, P | {}>;
+
+export { bboxClip, bboxClip as default };

+ 133 - 0
node_modules/@turf/bbox-clip/dist/esm/index.js

@@ -0,0 +1,133 @@
+// index.ts
+import {
+  lineString,
+  multiLineString,
+  multiPolygon,
+  polygon
+} from "@turf/helpers";
+import { getGeom } from "@turf/invariant";
+
+// lib/lineclip.ts
+function lineclip(points, bbox, result) {
+  var len = points.length, codeA = bitCode(points[0], bbox), part = [], i, codeB, lastCode;
+  let a;
+  let b;
+  if (!result) result = [];
+  for (i = 1; i < len; i++) {
+    a = points[i - 1];
+    b = points[i];
+    codeB = lastCode = bitCode(b, bbox);
+    while (true) {
+      if (!(codeA | codeB)) {
+        part.push(a);
+        if (codeB !== lastCode) {
+          part.push(b);
+          if (i < len - 1) {
+            result.push(part);
+            part = [];
+          }
+        } else if (i === len - 1) {
+          part.push(b);
+        }
+        break;
+      } else if (codeA & codeB) {
+        break;
+      } else if (codeA) {
+        a = intersect(a, b, codeA, bbox);
+        codeA = bitCode(a, bbox);
+      } else {
+        b = intersect(a, b, codeB, bbox);
+        codeB = bitCode(b, bbox);
+      }
+    }
+    codeA = lastCode;
+  }
+  if (part.length) result.push(part);
+  return result;
+}
+function polygonclip(points, bbox) {
+  var result, edge, prev, prevInside, i, p, inside;
+  for (edge = 1; edge <= 8; edge *= 2) {
+    result = [];
+    prev = points[points.length - 1];
+    prevInside = !(bitCode(prev, bbox) & edge);
+    for (i = 0; i < points.length; i++) {
+      p = points[i];
+      inside = !(bitCode(p, bbox) & edge);
+      if (inside !== prevInside) result.push(intersect(prev, p, edge, bbox));
+      if (inside) result.push(p);
+      prev = p;
+      prevInside = inside;
+    }
+    points = result;
+    if (!points.length) break;
+  }
+  return result;
+}
+function intersect(a, b, edge, bbox) {
+  return edge & 8 ? [a[0] + (b[0] - a[0]) * (bbox[3] - a[1]) / (b[1] - a[1]), bbox[3]] : edge & 4 ? [a[0] + (b[0] - a[0]) * (bbox[1] - a[1]) / (b[1] - a[1]), bbox[1]] : edge & 2 ? [bbox[2], a[1] + (b[1] - a[1]) * (bbox[2] - a[0]) / (b[0] - a[0])] : edge & 1 ? [bbox[0], a[1] + (b[1] - a[1]) * (bbox[0] - a[0]) / (b[0] - a[0])] : null;
+}
+function bitCode(p, bbox) {
+  var code = 0;
+  if (p[0] < bbox[0]) code |= 1;
+  else if (p[0] > bbox[2]) code |= 2;
+  if (p[1] < bbox[1]) code |= 4;
+  else if (p[1] > bbox[3]) code |= 8;
+  return code;
+}
+
+// index.ts
+function bboxClip(feature, bbox) {
+  const geom = getGeom(feature);
+  const type = geom.type;
+  const properties = feature.type === "Feature" ? feature.properties : {};
+  let coords = geom.coordinates;
+  switch (type) {
+    case "LineString":
+    case "MultiLineString": {
+      const lines = [];
+      if (type === "LineString") {
+        coords = [coords];
+      }
+      coords.forEach((line) => {
+        lineclip(line, bbox, lines);
+      });
+      if (lines.length === 1) {
+        return lineString(lines[0], properties);
+      }
+      return multiLineString(lines, properties);
+    }
+    case "Polygon":
+      return polygon(clipPolygon(coords, bbox), properties);
+    case "MultiPolygon":
+      return multiPolygon(
+        coords.map((poly) => {
+          return clipPolygon(poly, bbox);
+        }),
+        properties
+      );
+    default:
+      throw new Error("geometry " + type + " not supported");
+  }
+}
+function clipPolygon(rings, bbox) {
+  const outRings = [];
+  for (const ring of rings) {
+    const clipped = polygonclip(ring, bbox);
+    if (clipped.length > 0) {
+      if (clipped[0][0] !== clipped[clipped.length - 1][0] || clipped[0][1] !== clipped[clipped.length - 1][1]) {
+        clipped.push(clipped[0]);
+      }
+      if (clipped.length >= 4) {
+        outRings.push(clipped);
+      }
+    }
+  }
+  return outRings;
+}
+var turf_bbox_clip_default = bboxClip;
+export {
+  bboxClip,
+  turf_bbox_clip_default as default
+};
+//# sourceMappingURL=index.js.map

文件差異過大導致無法顯示
+ 1 - 0
node_modules/@turf/bbox-clip/dist/esm/index.js.map


+ 79 - 0
node_modules/@turf/bbox-clip/package.json

@@ -0,0 +1,79 @@
+{
+  "name": "@turf/bbox-clip",
+  "version": "7.2.0",
+  "description": "turf bbox-clip module",
+  "author": "Turf Authors",
+  "contributors": [
+    "Tim Channell <@tcql>",
+    "Vladimir Agafonkin <@mourner>",
+    "Denis Carriere <@DenisCarriere>"
+  ],
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/Turfjs/turf/issues"
+  },
+  "homepage": "https://github.com/Turfjs/turf",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/Turfjs/turf.git"
+  },
+  "funding": "https://opencollective.com/turf",
+  "publishConfig": {
+    "access": "public"
+  },
+  "keywords": [
+    "turf",
+    "geojson",
+    "gis",
+    "bbox",
+    "clip"
+  ],
+  "type": "module",
+  "main": "dist/cjs/index.cjs",
+  "module": "dist/esm/index.js",
+  "types": "dist/esm/index.d.ts",
+  "exports": {
+    "./package.json": "./package.json",
+    ".": {
+      "import": {
+        "types": "./dist/esm/index.d.ts",
+        "default": "./dist/esm/index.js"
+      },
+      "require": {
+        "types": "./dist/cjs/index.d.cts",
+        "default": "./dist/cjs/index.cjs"
+      }
+    }
+  },
+  "sideEffects": false,
+  "files": [
+    "dist"
+  ],
+  "scripts": {
+    "bench": "tsx bench.ts",
+    "build": "tsup --config ../../tsup.config.ts",
+    "docs": "tsx ../../scripts/generate-readmes.ts",
+    "test": "npm-run-all --npm-path npm test:*",
+    "test:tape": "tsx test.ts"
+  },
+  "devDependencies": {
+    "@turf/bbox": "^7.2.0",
+    "@types/benchmark": "^2.1.5",
+    "@types/tape": "^4.13.4",
+    "benchmark": "^2.1.4",
+    "load-json-file": "^7.0.1",
+    "npm-run-all": "^4.1.5",
+    "tape": "^5.9.0",
+    "tsup": "^8.3.5",
+    "tsx": "^4.19.2",
+    "typescript": "^5.5.4",
+    "write-json-file": "^5.0.0"
+  },
+  "dependencies": {
+    "@turf/helpers": "^7.2.0",
+    "@turf/invariant": "^7.2.0",
+    "@types/geojson": "^7946.0.10",
+    "tslib": "^2.8.1"
+  },
+  "gitHead": "7b0f0374c4668cd569f8904c71e2ae7d941be867"
+}

+ 20 - 0
node_modules/@turf/bbox-polygon/LICENSE

@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2017 TurfJS
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 60 - 0
node_modules/@turf/bbox-polygon/README.md

@@ -0,0 +1,60 @@
+# @turf/bbox-polygon
+
+<!-- Generated by documentation.js. Update this documentation by updating the source code. -->
+
+## bboxPolygon
+
+Takes a bbox and returns an equivalent [polygon][1].
+
+### Parameters
+
+*   `bbox` **[BBox][2]** extent in \[minX, minY, maxX, maxY] order
+*   `options` **[Object][3]** Optional parameters (optional, default `{}`)
+
+    *   `options.properties` **[GeoJsonProperties][4]** Translate properties to Polygon (optional, default `{}`)
+    *   `options.id` **([string][5] | [number][6])** Translate Id to Polygon (optional, default `{}`)
+
+### Examples
+
+```javascript
+var bbox = [0, 0, 10, 10];
+
+var poly = turf.bboxPolygon(bbox);
+
+//addToMap
+var addToMap = [poly]
+```
+
+Returns **[Feature][4]<[Polygon][1]>** a Polygon representation of the bounding box
+
+[1]: https://tools.ietf.org/html/rfc7946#section-3.1.6
+
+[2]: https://tools.ietf.org/html/rfc7946#section-5
+
+[3]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object
+
+[4]: https://tools.ietf.org/html/rfc7946#section-3.2
+
+[5]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String
+
+[6]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number
+
+<!-- This file is automatically generated. Please don't edit it directly. If you find an error, edit the source file of the module in question (likely index.js or index.ts), and re-run "yarn docs" from the root of the turf project. -->
+
+---
+
+This module is part of the [Turfjs project](https://turfjs.org/), an open source module collection dedicated to geographic algorithms. It is maintained in the [Turfjs/turf](https://github.com/Turfjs/turf) repository, where you can create PRs and issues.
+
+### Installation
+
+Install this single module individually:
+
+```sh
+$ npm install @turf/bbox-polygon
+```
+
+Or install the all-encompassing @turf/turf module that includes all modules as functions:
+
+```sh
+$ npm install @turf/turf
+```

+ 28 - 0
node_modules/@turf/bbox-polygon/dist/cjs/index.cjs

@@ -0,0 +1,28 @@
+"use strict";Object.defineProperty(exports, "__esModule", {value: true});// index.ts
+var _helpers = require('@turf/helpers');
+function bboxPolygon(bbox, options = {}) {
+  const west = Number(bbox[0]);
+  const south = Number(bbox[1]);
+  const east = Number(bbox[2]);
+  const north = Number(bbox[3]);
+  if (bbox.length === 6) {
+    throw new Error(
+      "@turf/bbox-polygon does not support BBox with 6 positions"
+    );
+  }
+  const lowLeft = [west, south];
+  const topLeft = [west, north];
+  const topRight = [east, north];
+  const lowRight = [east, south];
+  return _helpers.polygon.call(void 0, 
+    [[lowLeft, lowRight, topRight, topLeft, lowLeft]],
+    options.properties,
+    { bbox, id: options.id }
+  );
+}
+var turf_bbox_polygon_default = bboxPolygon;
+
+
+
+exports.bboxPolygon = bboxPolygon; exports.default = turf_bbox_polygon_default;
+//# sourceMappingURL=index.cjs.map

文件差異過大導致無法顯示
+ 1 - 0
node_modules/@turf/bbox-polygon/dist/cjs/index.cjs.map


+ 26 - 0
node_modules/@turf/bbox-polygon/dist/cjs/index.d.cts

@@ -0,0 +1,26 @@
+import { GeoJsonProperties, BBox, Feature, Polygon } from 'geojson';
+import { Id } from '@turf/helpers';
+
+/**
+ * Takes a bbox and returns an equivalent {@link Polygon|polygon}.
+ *
+ * @function
+ * @param {BBox} bbox extent in [minX, minY, maxX, maxY] order
+ * @param {Object} [options={}] Optional parameters
+ * @param {GeoJsonProperties} [options.properties={}] Translate properties to Polygon
+ * @param {string|number} [options.id={}] Translate Id to Polygon
+ * @returns {Feature<Polygon>} a Polygon representation of the bounding box
+ * @example
+ * var bbox = [0, 0, 10, 10];
+ *
+ * var poly = turf.bboxPolygon(bbox);
+ *
+ * //addToMap
+ * var addToMap = [poly]
+ */
+declare function bboxPolygon<P extends GeoJsonProperties = GeoJsonProperties>(bbox: BBox, options?: {
+    properties?: P;
+    id?: Id;
+}): Feature<Polygon, P>;
+
+export { bboxPolygon, bboxPolygon as default };

+ 26 - 0
node_modules/@turf/bbox-polygon/dist/esm/index.d.ts

@@ -0,0 +1,26 @@
+import { GeoJsonProperties, BBox, Feature, Polygon } from 'geojson';
+import { Id } from '@turf/helpers';
+
+/**
+ * Takes a bbox and returns an equivalent {@link Polygon|polygon}.
+ *
+ * @function
+ * @param {BBox} bbox extent in [minX, minY, maxX, maxY] order
+ * @param {Object} [options={}] Optional parameters
+ * @param {GeoJsonProperties} [options.properties={}] Translate properties to Polygon
+ * @param {string|number} [options.id={}] Translate Id to Polygon
+ * @returns {Feature<Polygon>} a Polygon representation of the bounding box
+ * @example
+ * var bbox = [0, 0, 10, 10];
+ *
+ * var poly = turf.bboxPolygon(bbox);
+ *
+ * //addToMap
+ * var addToMap = [poly]
+ */
+declare function bboxPolygon<P extends GeoJsonProperties = GeoJsonProperties>(bbox: BBox, options?: {
+    properties?: P;
+    id?: Id;
+}): Feature<Polygon, P>;
+
+export { bboxPolygon, bboxPolygon as default };

+ 28 - 0
node_modules/@turf/bbox-polygon/dist/esm/index.js

@@ -0,0 +1,28 @@
+// index.ts
+import { polygon } from "@turf/helpers";
+function bboxPolygon(bbox, options = {}) {
+  const west = Number(bbox[0]);
+  const south = Number(bbox[1]);
+  const east = Number(bbox[2]);
+  const north = Number(bbox[3]);
+  if (bbox.length === 6) {
+    throw new Error(
+      "@turf/bbox-polygon does not support BBox with 6 positions"
+    );
+  }
+  const lowLeft = [west, south];
+  const topLeft = [west, north];
+  const topRight = [east, north];
+  const lowRight = [east, south];
+  return polygon(
+    [[lowLeft, lowRight, topRight, topLeft, lowLeft]],
+    options.properties,
+    { bbox, id: options.id }
+  );
+}
+var turf_bbox_polygon_default = bboxPolygon;
+export {
+  bboxPolygon,
+  turf_bbox_polygon_default as default
+};
+//# sourceMappingURL=index.js.map

文件差異過大導致無法顯示
+ 1 - 0
node_modules/@turf/bbox-polygon/dist/esm/index.js.map


+ 0 - 0
node_modules/@turf/bbox-polygon/package.json


部分文件因文件數量過多而無法顯示