@slan-health/tracker 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,85 @@
1
+ export default async ({ url = "", data = {}, header = {}, method = "GET" }) => {
2
+ method = method.toUpperCase();
3
+
4
+ if (method == "GET") {
5
+ let dataStr = ""; //数据拼接字符串
6
+ Object.keys(data).forEach((key) => {
7
+ dataStr += key + "=" + data[key] + "&";
8
+ });
9
+
10
+ if (dataStr !== "") {
11
+ dataStr = dataStr.slice(0, dataStr.lastIndexOf("&"));
12
+ url = url + "?" + dataStr;
13
+ }
14
+ }
15
+
16
+ if (typeof window !== "undefined" && window.fetch) {
17
+ let requestConfig = {
18
+ // credentials: "include",
19
+ method: method,
20
+ headers: {
21
+ Accept: "application/json",
22
+ "content-type": "application/json",
23
+ ...header,
24
+ },
25
+ mode: "cors",
26
+ cache: "force-cache",
27
+ };
28
+
29
+ if (method == "POST") {
30
+ Object.defineProperty(requestConfig, "body", {
31
+ value: JSON.stringify(data),
32
+ });
33
+ }
34
+ try {
35
+ const response = await fetch(url, requestConfig);
36
+ const responseJson = await response.json();
37
+ return responseJson;
38
+ } catch (error) {
39
+ throw new Error(error);
40
+ }
41
+ } else if (typeof window !== "undefined") {
42
+ return new Promise((resolve, reject) => {
43
+ let requestObj;
44
+ if (window.XMLHttpRequest) {
45
+ requestObj = new XMLHttpRequest();
46
+ } else {
47
+ requestObj = new window.ActiveXObject();
48
+ }
49
+ Object.keys(header || {}).forEach((key) => {
50
+ requestObj.setRequestHeader(key, header[key]);
51
+ });
52
+
53
+ if (method == "GET") {
54
+ requestObj.open(method, url, true);
55
+ requestObj.setRequestHeader(
56
+ "content-type",
57
+ "application/x-www-form-urlencoded"
58
+ );
59
+
60
+ requestObj.send();
61
+ } else if (method == "POST") {
62
+ requestObj.open(method, url, true);
63
+ requestObj.setRequestHeader("content-type", "application/json");
64
+ requestObj.send(JSON.stringify(data));
65
+ } else {
66
+ reject("error type");
67
+ }
68
+ requestObj.onreadystatechange = () => {
69
+ if (requestObj.readyState == 4) {
70
+ if (requestObj.status == 200) {
71
+ let obj = requestObj.response;
72
+ if (typeof obj !== "object") {
73
+ obj = JSON.parse(obj);
74
+ }
75
+ resolve(obj);
76
+ } else {
77
+ reject(requestObj);
78
+ }
79
+ }
80
+ };
81
+ });
82
+ } else {
83
+ throw new Error("Request client is not available in the current environment");
84
+ }
85
+ };
@@ -0,0 +1,6 @@
1
+ export default function (n = 16) {
2
+ if (n > 21) return null;
3
+ var re = new RegExp('(\\d{' + n + '})(\\.|$)');
4
+ var num = (Array(n - 1).join('0') + Math.pow(10, n) * Math.random()).match(re)[1];
5
+ return num;
6
+ }
package/src/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export { createTracker } from "./core/createTracker";
2
+ export { default as EventType } from "./core/EventType";
3
+ export { default as TrackerMode } from "./core/TrackerMode";
4
+ export { getActiveTracker } from "./core/trackerStore";
package/src/react.js ADDED
@@ -0,0 +1,5 @@
1
+ export {
2
+ TrackerProvider,
3
+ useTracker as useReactTracker,
4
+ usePageStay as useReactPageStay,
5
+ } from "./adapters/react";
package/src/vue.js ADDED
@@ -0,0 +1,8 @@
1
+ export {
2
+ createVueTracker,
3
+ trackerSymbol,
4
+ getActiveTracker as getVueActiveTracker,
5
+ useTracker,
6
+ usePageTracker,
7
+ usePageStay,
8
+ } from "./adapters/vue";
package/vite.config.js ADDED
@@ -0,0 +1,38 @@
1
+ import { defineConfig } from "vite";
2
+ import vue from "@vitejs/plugin-vue";
3
+ import { resolve } from "path";
4
+ export default defineConfig({
5
+ plugins: [vue()],
6
+ build: {
7
+ target: "modules",
8
+ //压缩
9
+ minify: true,
10
+ rollupOptions: {
11
+ input: ["./src/index.js", "./src/vue.js", "./src/react.js"],
12
+ //忽略文件
13
+ external: ["vue", "vue-router", "react", "react-dom"],
14
+ output: [
15
+ {
16
+ format: "es",
17
+ //不用打包成.es.js,这里我们想把它打包成.js
18
+ entryFileNames: "[name].js",
19
+ //配置打包根目录
20
+ dir: resolve(__dirname, "./dist/es"),
21
+ inlineDynamicImports: false,
22
+ },
23
+ {
24
+ format: "cjs",
25
+ //不用打包成.mjs
26
+ entryFileNames: "[name].js",
27
+ //配置打包根目录
28
+ dir: resolve(__dirname, "./dist/lib"),
29
+ inlineDynamicImports: false,
30
+ },
31
+ ],
32
+ },
33
+ lib: {
34
+ entry: "./src/index.js",
35
+ name: "web-track",
36
+ },
37
+ },
38
+ });