@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.
Files changed (38) hide show
  1. package/README.md +40 -2
  2. package/dist/{cjs/index.d.ts → index.d.ts} +1 -1
  3. package/dist/{esm/index.js → index.js} +2 -2
  4. package/dist/{cjs/loggerSDK.d.ts → loggerSDK.d.ts} +1 -1
  5. package/dist/{esm/loggerSDK.js → loggerSDK.js} +8 -4
  6. package/dist/{esm/transportAdapter.js → transportAdapter.js} +34 -10
  7. package/dist/{esm/types.d.ts → types.d.ts} +5 -1
  8. package/dist/{esm/utils.d.ts → utils.d.ts} +17 -0
  9. package/dist/utils.js +361 -0
  10. package/package.json +3 -5
  11. package/dist/cjs/index.js +0 -41
  12. package/dist/cjs/loggerSDK.js +0 -158
  13. package/dist/cjs/transportAdapter.js +0 -182
  14. package/dist/cjs/types.d.ts +0 -46
  15. package/dist/cjs/types.js +0 -17
  16. package/dist/cjs/utils.d.ts +0 -30
  17. package/dist/cjs/utils.js +0 -208
  18. package/dist/esm/index.d.ts +0 -6
  19. package/dist/esm/loggerSDK.d.ts +0 -36
  20. package/dist/esm/transportAdapter.d.ts +0 -51
  21. package/dist/esm/utils.js +0 -229
  22. package/dist/umd/logger-sdk.min.js +0 -1
  23. package/lib/dbQueue.d.ts +0 -10
  24. package/lib/dbQueue.js +0 -133
  25. package/lib/index.d.ts +0 -1
  26. package/lib/index.js +0 -9
  27. package/lib/loggerSDK.d.ts +0 -29
  28. package/lib/loggerSDK.js +0 -571
  29. package/lib/storeAdapter.d.ts +0 -7
  30. package/lib/storeAdapter.js +0 -99
  31. package/lib/transportAdapter.d.ts +0 -66
  32. package/lib/transportAdapter.js +0 -406
  33. package/lib/types.d.ts +0 -35
  34. package/lib/types.js +0 -1
  35. package/lib/utils.d.ts +0 -5
  36. package/lib/utils.js +0 -50
  37. /package/dist/{cjs/transportAdapter.d.ts → transportAdapter.d.ts} +0 -0
  38. /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.2",
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": "lib/index.js",
12
- "types": "lib/index.d.ts",
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
- });
@@ -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
- });