@pluve/logger-sdk 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +40 -2
- package/dist/{cjs/index.d.ts → index.d.ts} +1 -1
- package/dist/{esm/index.js → index.js} +2 -2
- package/dist/{cjs/loggerSDK.d.ts → loggerSDK.d.ts} +1 -1
- package/dist/{esm/loggerSDK.js → loggerSDK.js} +8 -4
- package/dist/{esm/transportAdapter.js → transportAdapter.js} +34 -10
- package/dist/{esm/types.d.ts → types.d.ts} +5 -1
- package/dist/{esm/utils.d.ts → utils.d.ts} +17 -0
- package/dist/utils.js +361 -0
- package/package.json +3 -5
- package/dist/cjs/index.js +0 -41
- package/dist/cjs/loggerSDK.js +0 -158
- package/dist/cjs/transportAdapter.js +0 -182
- package/dist/cjs/types.d.ts +0 -46
- package/dist/cjs/types.js +0 -17
- package/dist/cjs/utils.d.ts +0 -30
- package/dist/cjs/utils.js +0 -208
- package/dist/esm/index.d.ts +0 -6
- package/dist/esm/loggerSDK.d.ts +0 -36
- package/dist/esm/transportAdapter.d.ts +0 -51
- package/dist/esm/utils.js +0 -229
- package/dist/umd/logger-sdk.min.js +0 -1
- package/lib/dbQueue.d.ts +0 -10
- package/lib/dbQueue.js +0 -133
- package/lib/index.d.ts +0 -1
- package/lib/index.js +0 -9
- package/lib/loggerSDK.d.ts +0 -29
- package/lib/loggerSDK.js +0 -571
- package/lib/storeAdapter.d.ts +0 -7
- package/lib/storeAdapter.js +0 -99
- package/lib/transportAdapter.d.ts +0 -66
- package/lib/transportAdapter.js +0 -406
- package/lib/types.d.ts +0 -35
- package/lib/types.js +0 -1
- package/lib/utils.d.ts +0 -5
- package/lib/utils.js +0 -50
- /package/dist/{cjs/transportAdapter.d.ts → transportAdapter.d.ts} +0 -0
- /package/dist/{esm/types.js → types.js} +0 -0
package/dist/utils.js
ADDED
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
|
2
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
3
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
4
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
5
|
+
/*
|
|
6
|
+
* @Author : 黄震 huangzhen@yfpharmacy.com
|
|
7
|
+
* @Date : 2025-11-21 14:31:33
|
|
8
|
+
* @LastEditors : 黄震 huangzhen@yfpharmacy.com
|
|
9
|
+
* @LastEditTime : 2025-12-08 13:46:02
|
|
10
|
+
* @Description : utils 工具函数
|
|
11
|
+
* Copyright (c) 2025 by 益丰大药房连锁股份有限公司, All Rights Reserved.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
// 当前时间戳(毫秒)
|
|
15
|
+
export var now = function now() {
|
|
16
|
+
return Date.now();
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* 生成 UUID v4
|
|
21
|
+
* 符合 RFC 4122 标准
|
|
22
|
+
* 格式: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
|
|
23
|
+
* 其中 x 是 0-f 的十六进制数字,y 是 8/9/a/b 之一
|
|
24
|
+
*/
|
|
25
|
+
export function generateUUID() {
|
|
26
|
+
// 使用 crypto.randomUUID() (现代浏览器支持)
|
|
27
|
+
if (isBrowser() && typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {
|
|
28
|
+
try {
|
|
29
|
+
return crypto.randomUUID();
|
|
30
|
+
} catch (e) {
|
|
31
|
+
// fallback to manual generation
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// 微信小程序环境 - 使用手动生成
|
|
36
|
+
// 浏览器环境降级方案 - 使用手动生成
|
|
37
|
+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
|
38
|
+
var r = Math.floor(Math.random() * 16);
|
|
39
|
+
var v = c === 'x' ? r : Math.floor(r % 4 + 8);
|
|
40
|
+
return v.toString(16);
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// 判断是否在浏览器环境
|
|
45
|
+
export function isBrowser() {
|
|
46
|
+
try {
|
|
47
|
+
return typeof window !== 'undefined' && typeof window.document !== 'undefined';
|
|
48
|
+
} catch (e) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// 判断是否在微信小程序环境
|
|
54
|
+
export function isWeChatMiniProgram() {
|
|
55
|
+
try {
|
|
56
|
+
// @ts-ignore
|
|
57
|
+
return typeof wx !== 'undefined' && typeof wx.getSystemInfo === 'function';
|
|
58
|
+
} catch (e) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// 安全 JSON 序列化:处理循环引用
|
|
64
|
+
export function safeStringify(obj) {
|
|
65
|
+
var seen = new WeakSet();
|
|
66
|
+
return JSON.stringify(obj, function (_k, v) {
|
|
67
|
+
if (v && _typeof(v) === 'object') {
|
|
68
|
+
if (seen.has(v)) return '[Circular]';
|
|
69
|
+
seen.add(v);
|
|
70
|
+
}
|
|
71
|
+
return v;
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* 将字符串转换为 Uint8Array
|
|
77
|
+
*/
|
|
78
|
+
function stringToUint8Array(str) {
|
|
79
|
+
var encoder = new TextEncoder();
|
|
80
|
+
return encoder.encode(str);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* 将 Uint8Array 转换为 Base64
|
|
85
|
+
*/
|
|
86
|
+
function uint8ArrayToBase64(bytes) {
|
|
87
|
+
var binary = '';
|
|
88
|
+
var len = bytes.byteLength;
|
|
89
|
+
for (var i = 0; i < len; i += 1) {
|
|
90
|
+
binary += String.fromCharCode(bytes[i]);
|
|
91
|
+
}
|
|
92
|
+
return btoa(binary);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* gzip 压缩字符串
|
|
97
|
+
* @param data - 需要压缩的字符串
|
|
98
|
+
* @returns 压缩后的 Base64 字符串
|
|
99
|
+
*/
|
|
100
|
+
export function gzipCompress(_x) {
|
|
101
|
+
return _gzipCompress.apply(this, arguments);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* 检查是否支持 gzip 压缩
|
|
106
|
+
*/
|
|
107
|
+
function _gzipCompress() {
|
|
108
|
+
_gzipCompress = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(data) {
|
|
109
|
+
var stream, writer, reader, bytes, chunks, result, totalLength, compressed, offset;
|
|
110
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
111
|
+
while (1) switch (_context.prev = _context.next) {
|
|
112
|
+
case 0:
|
|
113
|
+
if (!(isBrowser() && typeof CompressionStream !== 'undefined')) {
|
|
114
|
+
_context.next = 31;
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
_context.prev = 1;
|
|
118
|
+
stream = new CompressionStream('gzip');
|
|
119
|
+
writer = stream.writable.getWriter();
|
|
120
|
+
reader = stream.readable.getReader(); // 将字符串转换为 Uint8Array
|
|
121
|
+
bytes = stringToUint8Array(data); // 写入数据
|
|
122
|
+
_context.next = 8;
|
|
123
|
+
return writer.write(bytes);
|
|
124
|
+
case 8:
|
|
125
|
+
_context.next = 10;
|
|
126
|
+
return writer.close();
|
|
127
|
+
case 10:
|
|
128
|
+
// 读取压缩后的数据
|
|
129
|
+
chunks = [];
|
|
130
|
+
_context.next = 13;
|
|
131
|
+
return reader.read();
|
|
132
|
+
case 13:
|
|
133
|
+
result = _context.sent;
|
|
134
|
+
case 14:
|
|
135
|
+
if (result.done) {
|
|
136
|
+
_context.next = 21;
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
chunks.push(result.value);
|
|
140
|
+
// eslint-disable-next-line no-await-in-loop
|
|
141
|
+
_context.next = 18;
|
|
142
|
+
return reader.read();
|
|
143
|
+
case 18:
|
|
144
|
+
result = _context.sent;
|
|
145
|
+
_context.next = 14;
|
|
146
|
+
break;
|
|
147
|
+
case 21:
|
|
148
|
+
// 合并所有 chunks
|
|
149
|
+
totalLength = chunks.reduce(function (acc, chunk) {
|
|
150
|
+
return acc + chunk.length;
|
|
151
|
+
}, 0);
|
|
152
|
+
compressed = new Uint8Array(totalLength);
|
|
153
|
+
offset = 0;
|
|
154
|
+
chunks.forEach(function (chunk) {
|
|
155
|
+
compressed.set(chunk, offset);
|
|
156
|
+
offset += chunk.length;
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
// 转换为 Base64
|
|
160
|
+
return _context.abrupt("return", uint8ArrayToBase64(compressed));
|
|
161
|
+
case 28:
|
|
162
|
+
_context.prev = 28;
|
|
163
|
+
_context.t0 = _context["catch"](1);
|
|
164
|
+
return _context.abrupt("return", data);
|
|
165
|
+
case 31:
|
|
166
|
+
return _context.abrupt("return", data);
|
|
167
|
+
case 32:
|
|
168
|
+
case "end":
|
|
169
|
+
return _context.stop();
|
|
170
|
+
}
|
|
171
|
+
}, _callee, null, [[1, 28]]);
|
|
172
|
+
}));
|
|
173
|
+
return _gzipCompress.apply(this, arguments);
|
|
174
|
+
}
|
|
175
|
+
export function isGzipSupported() {
|
|
176
|
+
return isBrowser() && typeof CompressionStream !== 'undefined';
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// 生成随机 sessionId
|
|
180
|
+
var cachedSessionId = null;
|
|
181
|
+
export function getSessionId() {
|
|
182
|
+
if (cachedSessionId) return cachedSessionId;
|
|
183
|
+
|
|
184
|
+
// 微信小程序环境
|
|
185
|
+
if (isWeChatMiniProgram()) {
|
|
186
|
+
try {
|
|
187
|
+
// @ts-ignore
|
|
188
|
+
var stored = wx.getStorageSync('logger_session_id');
|
|
189
|
+
if (stored) {
|
|
190
|
+
cachedSessionId = stored;
|
|
191
|
+
return stored;
|
|
192
|
+
}
|
|
193
|
+
} catch (e) {
|
|
194
|
+
// 忽略错误
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// 浏览器环境 - 尝试从 sessionStorage 读取
|
|
199
|
+
if (isBrowser() && typeof sessionStorage !== 'undefined') {
|
|
200
|
+
try {
|
|
201
|
+
var _stored = sessionStorage.getItem('logger_session_id');
|
|
202
|
+
if (_stored) {
|
|
203
|
+
cachedSessionId = _stored;
|
|
204
|
+
return _stored;
|
|
205
|
+
}
|
|
206
|
+
} catch (e) {
|
|
207
|
+
// sessionStorage 不可用,忽略
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// 生成新的 sessionId
|
|
212
|
+
cachedSessionId = "".concat(Date.now(), "_").concat(Math.random().toString(36).substring(2, 15));
|
|
213
|
+
|
|
214
|
+
// 微信小程序 - 存储到 Storage
|
|
215
|
+
if (isWeChatMiniProgram()) {
|
|
216
|
+
try {
|
|
217
|
+
// @ts-ignore
|
|
218
|
+
wx.setStorageSync('logger_session_id', cachedSessionId);
|
|
219
|
+
} catch (e) {
|
|
220
|
+
// 忽略错误
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// 浏览器 - 尝试存储到 sessionStorage
|
|
225
|
+
if (isBrowser() && typeof sessionStorage !== 'undefined') {
|
|
226
|
+
try {
|
|
227
|
+
sessionStorage.setItem('logger_session_id', cachedSessionId);
|
|
228
|
+
} catch (e) {
|
|
229
|
+
// 存储失败,忽略
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return cachedSessionId;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// 获取当前页面 URL
|
|
236
|
+
export function getCurrentUrl() {
|
|
237
|
+
// 微信小程序环境
|
|
238
|
+
if (isWeChatMiniProgram()) {
|
|
239
|
+
try {
|
|
240
|
+
// @ts-ignore
|
|
241
|
+
var pages = getCurrentPages();
|
|
242
|
+
if (pages && pages.length > 0) {
|
|
243
|
+
var currentPage = pages[pages.length - 1];
|
|
244
|
+
return currentPage.route || '';
|
|
245
|
+
}
|
|
246
|
+
} catch (e) {
|
|
247
|
+
return '';
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// 浏览器环境
|
|
252
|
+
if (isBrowser()) {
|
|
253
|
+
return window.location.href;
|
|
254
|
+
}
|
|
255
|
+
return '';
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/** 平台类型 */
|
|
259
|
+
|
|
260
|
+
/** 环境信息 */
|
|
261
|
+
|
|
262
|
+
// 缓存环境信息
|
|
263
|
+
var cachedEnvInfo = null;
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* 获取环境信息
|
|
267
|
+
*/
|
|
268
|
+
export function getEnvironmentInfo() {
|
|
269
|
+
if (cachedEnvInfo) return cachedEnvInfo;
|
|
270
|
+
var envInfo = {
|
|
271
|
+
platform: 'unknown'
|
|
272
|
+
};
|
|
273
|
+
|
|
274
|
+
// 微信小程序环境
|
|
275
|
+
if (isWeChatMiniProgram()) {
|
|
276
|
+
envInfo.platform = 'wechat';
|
|
277
|
+
try {
|
|
278
|
+
// @ts-ignore
|
|
279
|
+
var systemInfo = wx.getSystemInfoSync();
|
|
280
|
+
envInfo.systemInfo = {
|
|
281
|
+
brand: systemInfo.brand,
|
|
282
|
+
model: systemInfo.model,
|
|
283
|
+
system: systemInfo.system,
|
|
284
|
+
platform: systemInfo.platform,
|
|
285
|
+
version: systemInfo.version,
|
|
286
|
+
SDKVersion: systemInfo.SDKVersion
|
|
287
|
+
};
|
|
288
|
+
envInfo.screenWidth = systemInfo.screenWidth;
|
|
289
|
+
envInfo.screenHeight = systemInfo.screenHeight;
|
|
290
|
+
envInfo.language = systemInfo.language;
|
|
291
|
+
} catch (e) {
|
|
292
|
+
// 忽略错误
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
// 浏览器环境
|
|
296
|
+
else if (isBrowser()) {
|
|
297
|
+
envInfo.platform = 'browser';
|
|
298
|
+
envInfo.userAgent = navigator.userAgent;
|
|
299
|
+
envInfo.screenWidth = window.screen.width;
|
|
300
|
+
envInfo.screenHeight = window.screen.height;
|
|
301
|
+
envInfo.language = navigator.language;
|
|
302
|
+
}
|
|
303
|
+
cachedEnvInfo = envInfo;
|
|
304
|
+
return envInfo;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* 解析浏览器信息
|
|
309
|
+
*/
|
|
310
|
+
export function parseBrowserInfo(userAgent) {
|
|
311
|
+
var ua = userAgent.toLowerCase();
|
|
312
|
+
var browser = 'Unknown';
|
|
313
|
+
var browserVersion = '';
|
|
314
|
+
var os = 'Unknown';
|
|
315
|
+
var osVersion = '';
|
|
316
|
+
|
|
317
|
+
// 浏览器检测
|
|
318
|
+
if (ua.indexOf('chrome') > -1 && ua.indexOf('edge') === -1) {
|
|
319
|
+
browser = 'Chrome';
|
|
320
|
+
var match = ua.match(/chrome\/(\d+\.\d+)/);
|
|
321
|
+
browserVersion = match ? match[1] : '';
|
|
322
|
+
} else if (ua.indexOf('safari') > -1 && ua.indexOf('chrome') === -1) {
|
|
323
|
+
browser = 'Safari';
|
|
324
|
+
var _match = ua.match(/version\/(\d+\.\d+)/);
|
|
325
|
+
browserVersion = _match ? _match[1] : '';
|
|
326
|
+
} else if (ua.indexOf('firefox') > -1) {
|
|
327
|
+
browser = 'Firefox';
|
|
328
|
+
var _match2 = ua.match(/firefox\/(\d+\.\d+)/);
|
|
329
|
+
browserVersion = _match2 ? _match2[1] : '';
|
|
330
|
+
} else if (ua.indexOf('edge') > -1) {
|
|
331
|
+
browser = 'Edge';
|
|
332
|
+
var _match3 = ua.match(/edge\/(\d+\.\d+)/);
|
|
333
|
+
browserVersion = _match3 ? _match3[1] : '';
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// 操作系统检测
|
|
337
|
+
if (ua.indexOf('windows') > -1) {
|
|
338
|
+
os = 'Windows';
|
|
339
|
+
if (ua.indexOf('windows nt 10') > -1) osVersion = '10';else if (ua.indexOf('windows nt 6.3') > -1) osVersion = '8.1';else if (ua.indexOf('windows nt 6.2') > -1) osVersion = '8';else if (ua.indexOf('windows nt 6.1') > -1) osVersion = '7';
|
|
340
|
+
} else if (ua.indexOf('mac os') > -1) {
|
|
341
|
+
os = 'macOS';
|
|
342
|
+
var _match4 = ua.match(/mac os x (\d+[._]\d+)/);
|
|
343
|
+
osVersion = _match4 ? _match4[1].replace('_', '.') : '';
|
|
344
|
+
} else if (ua.indexOf('android') > -1) {
|
|
345
|
+
os = 'Android';
|
|
346
|
+
var _match5 = ua.match(/android (\d+\.\d+)/);
|
|
347
|
+
osVersion = _match5 ? _match5[1] : '';
|
|
348
|
+
} else if (ua.indexOf('iphone') > -1 || ua.indexOf('ipad') > -1) {
|
|
349
|
+
os = 'iOS';
|
|
350
|
+
var _match6 = ua.match(/os (\d+[._]\d+)/);
|
|
351
|
+
osVersion = _match6 ? _match6[1].replace('_', '.') : '';
|
|
352
|
+
} else if (ua.indexOf('linux') > -1) {
|
|
353
|
+
os = 'Linux';
|
|
354
|
+
}
|
|
355
|
+
return {
|
|
356
|
+
browser: browser,
|
|
357
|
+
browserVersion: browserVersion,
|
|
358
|
+
os: os,
|
|
359
|
+
osVersion: osVersion
|
|
360
|
+
};
|
|
361
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pluve/logger-sdk",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"description": "logger sdk",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"logger"
|
|
@@ -8,14 +8,12 @@
|
|
|
8
8
|
"author": "黄震 <huangzhen@yfpharmacy.com>",
|
|
9
9
|
"homepage": "http://.",
|
|
10
10
|
"license": "ISC",
|
|
11
|
-
"main": "
|
|
12
|
-
"types": "
|
|
11
|
+
"main": "dist/index.js",
|
|
12
|
+
"types": "dist/index.d.ts",
|
|
13
13
|
"directories": {
|
|
14
|
-
"lib": "lib",
|
|
15
14
|
"dist": "dist"
|
|
16
15
|
},
|
|
17
16
|
"files": [
|
|
18
|
-
"lib/*",
|
|
19
17
|
"dist/*"
|
|
20
18
|
],
|
|
21
19
|
"publishConfig": {
|
package/dist/cjs/index.js
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
var __export = (target, all) => {
|
|
6
|
-
for (var name in all)
|
|
7
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
-
};
|
|
9
|
-
var __copyProps = (to, from, except, desc) => {
|
|
10
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
-
for (let key of __getOwnPropNames(from))
|
|
12
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
-
}
|
|
15
|
-
return to;
|
|
16
|
-
};
|
|
17
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
-
|
|
19
|
-
// src/index.ts
|
|
20
|
-
var src_exports = {};
|
|
21
|
-
__export(src_exports, {
|
|
22
|
-
LoggerSDK: () => import_loggerSDK.LoggerSDK,
|
|
23
|
-
TransportAdapters: () => import_transportAdapter.TransportAdapters,
|
|
24
|
-
defaultTransport: () => import_transportAdapter.defaultTransport,
|
|
25
|
-
getEnvironmentInfo: () => import_utils.getEnvironmentInfo,
|
|
26
|
-
isWeChatMiniProgram: () => import_utils.isWeChatMiniProgram,
|
|
27
|
-
parseBrowserInfo: () => import_utils.parseBrowserInfo
|
|
28
|
-
});
|
|
29
|
-
module.exports = __toCommonJS(src_exports);
|
|
30
|
-
var import_loggerSDK = require("./loggerSDK");
|
|
31
|
-
var import_transportAdapter = require("./transportAdapter");
|
|
32
|
-
var import_utils = require("./utils");
|
|
33
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
34
|
-
0 && (module.exports = {
|
|
35
|
-
LoggerSDK,
|
|
36
|
-
TransportAdapters,
|
|
37
|
-
defaultTransport,
|
|
38
|
-
getEnvironmentInfo,
|
|
39
|
-
isWeChatMiniProgram,
|
|
40
|
-
parseBrowserInfo
|
|
41
|
-
});
|
package/dist/cjs/loggerSDK.js
DELETED
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
var __export = (target, all) => {
|
|
6
|
-
for (var name in all)
|
|
7
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
-
};
|
|
9
|
-
var __copyProps = (to, from, except, desc) => {
|
|
10
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
-
for (let key of __getOwnPropNames(from))
|
|
12
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
-
}
|
|
15
|
-
return to;
|
|
16
|
-
};
|
|
17
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
-
|
|
19
|
-
// src/loggerSDK.ts
|
|
20
|
-
var loggerSDK_exports = {};
|
|
21
|
-
__export(loggerSDK_exports, {
|
|
22
|
-
LoggerSDK: () => LoggerSDK,
|
|
23
|
-
default: () => loggerSDK_default
|
|
24
|
-
});
|
|
25
|
-
module.exports = __toCommonJS(loggerSDK_exports);
|
|
26
|
-
var import_transportAdapter = require("./transportAdapter");
|
|
27
|
-
var import_utils = require("./utils");
|
|
28
|
-
var LoggerSDK = class {
|
|
29
|
-
constructor(options) {
|
|
30
|
-
this.seq = 0;
|
|
31
|
-
this.closed = false;
|
|
32
|
-
this.opts = {
|
|
33
|
-
endpoint: options.endpoint,
|
|
34
|
-
appId: options.appId || "unknown",
|
|
35
|
-
env: options.env || "dev",
|
|
36
|
-
debug: !!options.debug,
|
|
37
|
-
pixelParam: options.pixelParam || "data",
|
|
38
|
-
maxPixelUrlLen: options.maxPixelUrlLen || 1900
|
|
39
|
-
};
|
|
40
|
-
this.envTags = this.collectEnvironmentTags();
|
|
41
|
-
this.attachUnloadHandlers();
|
|
42
|
-
}
|
|
43
|
-
logDebug(...args) {
|
|
44
|
-
if (this.opts.debug)
|
|
45
|
-
console.debug("[LoggerSDK]", ...args);
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* 收集环境信息并生成 tags(仅在初始化时执行一次)
|
|
49
|
-
*/
|
|
50
|
-
collectEnvironmentTags() {
|
|
51
|
-
const envInfo = (0, import_utils.getEnvironmentInfo)();
|
|
52
|
-
const tags = {
|
|
53
|
-
platform: envInfo.platform
|
|
54
|
-
};
|
|
55
|
-
if (envInfo.platform === "browser" && envInfo.userAgent) {
|
|
56
|
-
const browserInfo = (0, import_utils.parseBrowserInfo)(envInfo.userAgent);
|
|
57
|
-
tags.browser = browserInfo.browser;
|
|
58
|
-
tags.browserVersion = browserInfo.browserVersion;
|
|
59
|
-
tags.os = browserInfo.os;
|
|
60
|
-
tags.osVersion = browserInfo.osVersion;
|
|
61
|
-
tags.screenWidth = envInfo.screenWidth;
|
|
62
|
-
tags.screenHeight = envInfo.screenHeight;
|
|
63
|
-
tags.language = envInfo.language;
|
|
64
|
-
} else if (envInfo.platform === "wechat" && envInfo.systemInfo) {
|
|
65
|
-
tags.brand = envInfo.systemInfo.brand;
|
|
66
|
-
tags.model = envInfo.systemInfo.model;
|
|
67
|
-
tags.system = envInfo.systemInfo.system;
|
|
68
|
-
tags.wechatVersion = envInfo.systemInfo.version;
|
|
69
|
-
tags.SDKVersion = envInfo.systemInfo.SDKVersion;
|
|
70
|
-
tags.screenWidth = envInfo.screenWidth;
|
|
71
|
-
tags.screenHeight = envInfo.screenHeight;
|
|
72
|
-
tags.language = envInfo.language;
|
|
73
|
-
}
|
|
74
|
-
this.logDebug("Environment tags collected:", tags);
|
|
75
|
-
return tags;
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* 记录事件
|
|
79
|
-
*/
|
|
80
|
-
async track(eventType, message, options) {
|
|
81
|
-
if (this.closed)
|
|
82
|
-
return;
|
|
83
|
-
this.seq += 1;
|
|
84
|
-
const logEvent = {
|
|
85
|
-
eventType,
|
|
86
|
-
ts: (0, import_utils.now)(),
|
|
87
|
-
appId: this.opts.appId || "unknown",
|
|
88
|
-
env: this.opts.env || "dev",
|
|
89
|
-
level: (options == null ? void 0 : options.level) || "info",
|
|
90
|
-
message,
|
|
91
|
-
stack: options == null ? void 0 : options.stack,
|
|
92
|
-
url: (0, import_utils.getCurrentUrl)(),
|
|
93
|
-
userId: options == null ? void 0 : options.userId,
|
|
94
|
-
sessionId: (0, import_utils.getSessionId)(),
|
|
95
|
-
// 合并预收集的环境 tags 和用户自定义 tags
|
|
96
|
-
tags: {
|
|
97
|
-
...this.envTags,
|
|
98
|
-
...(options == null ? void 0 : options.tags) || {}
|
|
99
|
-
}
|
|
100
|
-
};
|
|
101
|
-
this.logDebug("track", logEvent);
|
|
102
|
-
try {
|
|
103
|
-
await (0, import_transportAdapter.defaultTransport)(logEvent, this.opts);
|
|
104
|
-
} catch (error) {
|
|
105
|
-
this.logDebug("track failed", error);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* 设置用户信息
|
|
110
|
-
*/
|
|
111
|
-
identify(userId) {
|
|
112
|
-
this.logDebug("identify", userId);
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* 销毁实例
|
|
116
|
-
*/
|
|
117
|
-
destroy() {
|
|
118
|
-
this.closed = true;
|
|
119
|
-
}
|
|
120
|
-
// ========== 自动采集 ===========
|
|
121
|
-
/**
|
|
122
|
-
* 监听页面卸载事件
|
|
123
|
-
*/
|
|
124
|
-
attachUnloadHandlers() {
|
|
125
|
-
if ((0, import_utils.isWeChatMiniProgram)()) {
|
|
126
|
-
this.logDebug("WeChat MiniProgram environment detected");
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
if (!(0, import_utils.isBrowser)())
|
|
130
|
-
return;
|
|
131
|
-
const win = window;
|
|
132
|
-
document.addEventListener && document.addEventListener("visibilitychange", () => {
|
|
133
|
-
try {
|
|
134
|
-
if (document.visibilityState === "hidden") {
|
|
135
|
-
console.log("Page hidden");
|
|
136
|
-
}
|
|
137
|
-
} catch {
|
|
138
|
-
}
|
|
139
|
-
});
|
|
140
|
-
win.addEventListener && win.addEventListener("pagehide", () => {
|
|
141
|
-
try {
|
|
142
|
-
console.log("Page hide");
|
|
143
|
-
} catch {
|
|
144
|
-
}
|
|
145
|
-
});
|
|
146
|
-
win.addEventListener && win.addEventListener("beforeunload", () => {
|
|
147
|
-
try {
|
|
148
|
-
console.log("Page unload");
|
|
149
|
-
} catch {
|
|
150
|
-
}
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
};
|
|
154
|
-
var loggerSDK_default = LoggerSDK;
|
|
155
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
156
|
-
0 && (module.exports = {
|
|
157
|
-
LoggerSDK
|
|
158
|
-
});
|