@pluve/mp-logger-sdk 0.0.1

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 (84) hide show
  1. package/README.md +133 -0
  2. package/dist/cjs/capture/wechatError.js +85 -0
  3. package/dist/cjs/compress/compression.js +94 -0
  4. package/dist/cjs/config/index.js +48 -0
  5. package/dist/cjs/core/fingerprint.js +32 -0
  6. package/dist/cjs/core/httpClient.js +55 -0
  7. package/dist/cjs/core/loggerSDK.js +580 -0
  8. package/dist/cjs/core/queueManager.js +121 -0
  9. package/dist/cjs/core/retryManager.js +123 -0
  10. package/dist/cjs/index.js +25 -0
  11. package/dist/cjs/stack/stacktrace.js +69 -0
  12. package/dist/cjs/transport/transport.js +17 -0
  13. package/dist/cjs/transport/transportAdapter.js +39 -0
  14. package/dist/cjs/transport/wechatTransport.js +98 -0
  15. package/dist/cjs/types/api.js +17 -0
  16. package/dist/cjs/types/env.js +17 -0
  17. package/dist/cjs/types/external.d.ts +15 -0
  18. package/dist/cjs/types/logEvent.js +17 -0
  19. package/dist/cjs/types/logEventLevel.js +17 -0
  20. package/dist/cjs/types/sdkOptions.js +17 -0
  21. package/dist/cjs/types/securityType.js +34 -0
  22. package/dist/cjs/types/trackOptions.js +17 -0
  23. package/dist/cjs/utils/environment.js +85 -0
  24. package/dist/cjs/utils/innerMD5.js +143 -0
  25. package/dist/cjs/utils/session.js +27 -0
  26. package/dist/cjs/utils/tools.js +73 -0
  27. package/dist/cjs/utils/uuid.js +31 -0
  28. package/dist/esm/capture/wechatError.js +65 -0
  29. package/dist/esm/compress/compression.js +74 -0
  30. package/dist/esm/config/index.js +28 -0
  31. package/dist/esm/core/fingerprint.js +12 -0
  32. package/dist/esm/core/httpClient.js +35 -0
  33. package/dist/esm/core/loggerSDK.js +560 -0
  34. package/dist/esm/core/queueManager.js +101 -0
  35. package/dist/esm/core/retryManager.js +103 -0
  36. package/dist/esm/index.js +5 -0
  37. package/dist/esm/stack/stacktrace.js +49 -0
  38. package/dist/esm/transport/transport.js +0 -0
  39. package/dist/esm/transport/transportAdapter.js +19 -0
  40. package/dist/esm/transport/wechatTransport.js +78 -0
  41. package/dist/esm/types/api.js +0 -0
  42. package/dist/esm/types/env.js +0 -0
  43. package/dist/esm/types/external.d.ts +15 -0
  44. package/dist/esm/types/logEvent.js +0 -0
  45. package/dist/esm/types/logEventLevel.js +0 -0
  46. package/dist/esm/types/sdkOptions.js +0 -0
  47. package/dist/esm/types/securityType.js +14 -0
  48. package/dist/esm/types/trackOptions.js +0 -0
  49. package/dist/esm/utils/environment.js +65 -0
  50. package/dist/esm/utils/innerMD5.js +123 -0
  51. package/dist/esm/utils/session.js +7 -0
  52. package/dist/esm/utils/tools.js +53 -0
  53. package/dist/esm/utils/uuid.js +11 -0
  54. package/dist/types/capture/jsError.d.ts +2 -0
  55. package/dist/types/capture/promiseError.d.ts +2 -0
  56. package/dist/types/capture/resourceError.d.ts +2 -0
  57. package/dist/types/capture/wechatError.d.ts +3 -0
  58. package/dist/types/compress/compression.d.ts +9 -0
  59. package/dist/types/config/index.d.ts +9 -0
  60. package/dist/types/core/fingerprint.d.ts +8 -0
  61. package/dist/types/core/httpClient.d.ts +11 -0
  62. package/dist/types/core/loggerSDK.d.ts +87 -0
  63. package/dist/types/core/queueManager.d.ts +55 -0
  64. package/dist/types/core/retryManager.d.ts +53 -0
  65. package/dist/types/index.d.ts +2 -0
  66. package/dist/types/stack/stacktrace.d.ts +2 -0
  67. package/dist/types/transport/beaconTransport.d.ts +11 -0
  68. package/dist/types/transport/pixelImageTransport.d.ts +11 -0
  69. package/dist/types/transport/transport.d.ts +14 -0
  70. package/dist/types/transport/transportAdapter.d.ts +8 -0
  71. package/dist/types/transport/wechatTransport.d.ts +11 -0
  72. package/dist/types/types/api.d.ts +12 -0
  73. package/dist/types/types/env.d.ts +14 -0
  74. package/dist/types/types/logEvent.d.ts +57 -0
  75. package/dist/types/types/logEventLevel.d.ts +2 -0
  76. package/dist/types/types/sdkOptions.d.ts +61 -0
  77. package/dist/types/types/securityType.d.ts +6 -0
  78. package/dist/types/types/trackOptions.d.ts +7 -0
  79. package/dist/types/utils/environment.d.ts +10 -0
  80. package/dist/types/utils/innerMD5.d.ts +6 -0
  81. package/dist/types/utils/session.d.ts +1 -0
  82. package/dist/types/utils/tools.d.ts +12 -0
  83. package/dist/types/utils/uuid.d.ts +7 -0
  84. package/package.json +65 -0
@@ -0,0 +1,87 @@
1
+ import { Env } from '../types/env';
2
+ import { SDKOptions } from '../types/sdkOptions';
3
+ import { TrackOptions } from '../types/trackOptions';
4
+ export declare class LoggerSDK {
5
+ private static instance;
6
+ private opts?;
7
+ /** 事件序列编号,用于事件去重 */
8
+ private seq;
9
+ /** 是否已关闭 */
10
+ private closed;
11
+ /** 预收集的环境信息 tags(仅用于初始化上报) */
12
+ private envTags;
13
+ /** 是否已初始化 */
14
+ private initialized;
15
+ /** 初始化时生成并锁定的会话标识 */
16
+ private sessionId;
17
+ /** 队列管理器 */
18
+ private queueManager?;
19
+ /** 重试管理器 */
20
+ private retryManager?;
21
+ private transporter?;
22
+ /** 批量上报定时器 */
23
+ private batchTimer?;
24
+ /** 是否正在上报 */
25
+ private isSending;
26
+ private collectSwitch;
27
+ private collectLogLevel;
28
+ private recentAutoEvents;
29
+ private offWxError?;
30
+ private offWxUnhandled?;
31
+ private constructor();
32
+ static getInstance(): LoggerSDK;
33
+ /**
34
+ * 初始化:配置参数、收集环境信息与 UA,并生成 sessionId,完成初始上报
35
+ */
36
+ init(options: SDKOptions): void;
37
+ /**
38
+ * 设置 token 信息
39
+ * @param token token
40
+ */
41
+ setToken(token: string): void;
42
+ /**
43
+ * 设置用户信息
44
+ */
45
+ identify(userId: string): void;
46
+ /** 设置店铺编码 */
47
+ setStoreCode(storeCode: string): void;
48
+ /** 设置日志 stage(env) */
49
+ setStage(stage: Env): void;
50
+ private flattenEnvTags;
51
+ track({ message, error, traceId, logLevel }: TrackOptions): Promise<void>;
52
+ private trackInner;
53
+ /**
54
+ * 判断是否应该发送事件
55
+ */
56
+ private shouldSend;
57
+ /**
58
+ * 记录事件
59
+ */
60
+ private doTrack;
61
+ /**
62
+ * 手动刷新队列,立即上报所有待发送日志
63
+ */
64
+ flush(): Promise<void>;
65
+ /**
66
+ * 销毁实例
67
+ */
68
+ destroy(): Promise<void>;
69
+ private generateToken;
70
+ /**
71
+ * 发送单个事件(带重试)
72
+ */
73
+ private sendEvent;
74
+ /**
75
+ * 批量发送事件(带重试)
76
+ */
77
+ private sendBatch;
78
+ /**
79
+ * 启动批量上报定时器
80
+ */
81
+ private startBatchTimer;
82
+ /**
83
+ * 初始化 SDK(注册/初始化)
84
+ */
85
+ private initSDK;
86
+ }
87
+ export default LoggerSDK;
@@ -0,0 +1,55 @@
1
+ import { LogEvent } from '../types/logEvent';
2
+ /** 队列配置选项 */
3
+ export interface QueueOptions {
4
+ /** 队列最大长度 */
5
+ maxSize: number;
6
+ /** 是否启用持久化存储 */
7
+ enableStorage: boolean;
8
+ /** 存储 key 前缀 */
9
+ storagePrefix: string;
10
+ /** 调试模式 */
11
+ debug?: boolean;
12
+ }
13
+ /**
14
+ * 队列管理器
15
+ * - 内存队列:快速访问
16
+ * - 持久化存储:防止页面刷新/关闭时数据丢失
17
+ */
18
+ export declare class QueueManager {
19
+ private queue;
20
+ private opts;
21
+ private storageKey;
22
+ constructor(options: QueueOptions);
23
+ /**
24
+ * 添加日志到队列
25
+ */
26
+ enqueue(event: LogEvent): boolean;
27
+ /**
28
+ * 批量获取日志(不移除)
29
+ */
30
+ peek(count: number): LogEvent[];
31
+ /**
32
+ * 批量移除日志
33
+ */
34
+ dequeue(count: number): LogEvent[];
35
+ /**
36
+ * 获取队列长度
37
+ */
38
+ size(): number;
39
+ /**
40
+ * 清空队列
41
+ */
42
+ clear(): void;
43
+ /**
44
+ * 从持久化存储加载队列
45
+ */
46
+ private loadFromStorage;
47
+ /**
48
+ * 保存队列到持久化存储
49
+ */
50
+ private saveToStorage;
51
+ /**
52
+ * 从持久化存储移除队列
53
+ */
54
+ private removeFromStorage;
55
+ }
@@ -0,0 +1,53 @@
1
+ /** 重试配置选项 */
2
+ export interface RetryOptions {
3
+ /** 最大重试次数 */
4
+ maxRetries: number;
5
+ /** 基础延迟时间(毫秒) */
6
+ baseDelay: number;
7
+ /** 是否使用指数退避策略 */
8
+ useBackoff: boolean;
9
+ /** 调试模式 */
10
+ debug?: boolean;
11
+ }
12
+ /**
13
+ * 重试管理器
14
+ * - 支持自定义重试次数
15
+ * - 支持指数退避策略(exponential backoff)
16
+ * - 防止重复重试同一任务
17
+ */
18
+ export declare class RetryManager {
19
+ private opts;
20
+ private retryingTasks;
21
+ constructor(options: RetryOptions);
22
+ /**
23
+ * 执行带重试的任务
24
+ * @param taskId - 任务唯一标识
25
+ * @param fn - 要执行的异步函数
26
+ * @returns Promise
27
+ */
28
+ executeWithRetry<T>(taskId: string, fn: () => Promise<T>): Promise<T>;
29
+ /**
30
+ * 执行任务(带重试逻辑)
31
+ */
32
+ private executeTask;
33
+ /**
34
+ * 计算延迟时间
35
+ * @param attempt - 当前重试次数
36
+ * @param baseDelay - 基础延迟时间
37
+ * @param useBackoff - 是否使用指数退避
38
+ * @returns 延迟时间(毫秒)
39
+ */
40
+ private static calculateDelay;
41
+ /**
42
+ * 睡眠函数
43
+ */
44
+ private static sleep;
45
+ /**
46
+ * 获取正在重试的任务数量
47
+ */
48
+ getRetryingCount(): number;
49
+ /**
50
+ * 清空所有重试任务
51
+ */
52
+ clear(): void;
53
+ }
@@ -0,0 +1,2 @@
1
+ export { LoggerSDK } from './core/loggerSDK';
2
+ export type { Env, Stage } from './types/env';
@@ -0,0 +1,2 @@
1
+ import { StackFrame } from '../types/logEvent';
2
+ export declare function parseStack(error: Error): Promise<StackFrame[]>;
@@ -0,0 +1,11 @@
1
+ import { ReportData } from '../types/logEvent';
2
+ import { Transporter, TransportOptions } from './transport';
3
+ export declare class BeaconTransport implements Transporter {
4
+ /** 传输器名称 */
5
+ name: string;
6
+ /** 传输器名称 */
7
+ private opts?;
8
+ constructor(opts: TransportOptions);
9
+ isSupported(): boolean;
10
+ send(token: string, payload: ReportData): Promise<void>;
11
+ }
@@ -0,0 +1,11 @@
1
+ import { Transporter, TransportOptions } from './transport';
2
+ import { ReportData } from '../types/logEvent';
3
+ export declare class PixelImageTransport implements Transporter {
4
+ /** 传输器名称 */
5
+ name: string;
6
+ /** 传输器选项 */
7
+ private opts?;
8
+ constructor(opts: TransportOptions);
9
+ isSupported(): boolean;
10
+ send(token: string, payload: ReportData): Promise<void>;
11
+ }
@@ -0,0 +1,14 @@
1
+ import { ReportData } from '../types/logEvent';
2
+ import { SDKOptions } from '../types/sdkOptions';
3
+ /** 传输选项接口 */
4
+ export interface TransportOptions extends SDKOptions {
5
+ }
6
+ /** 传输适配器接口 */
7
+ export interface Transporter {
8
+ /** 适配器名称 */
9
+ name: string;
10
+ /** 是否支持当前环境 */
11
+ isSupported(): boolean;
12
+ /** 发送数据 */
13
+ send(token: string, payload: ReportData): Promise<void>;
14
+ }
@@ -0,0 +1,8 @@
1
+ import type { Transporter, TransportOptions } from './transport';
2
+ export declare class TransportAdapter {
3
+ private static instance;
4
+ private opts;
5
+ private constructor();
6
+ static getInstance(opts: TransportOptions): TransportAdapter;
7
+ getTransporter(): Promise<Transporter>;
8
+ }
@@ -0,0 +1,11 @@
1
+ import { ReportData } from '../types/logEvent';
2
+ import { Transporter, TransportOptions } from './transport';
3
+ export declare class WechatTransport implements Transporter {
4
+ /** 传输器名称 */
5
+ name: string;
6
+ /** 传输器选项 */
7
+ private opts?;
8
+ constructor(opts: TransportOptions);
9
+ isSupported(): boolean;
10
+ send(token: string, payload: ReportData): Promise<void>;
11
+ }
@@ -0,0 +1,12 @@
1
+ export interface SDKInitData {
2
+ collectSwitch: number;
3
+ collectLogLevel: string[];
4
+ samplingRate: number;
5
+ }
6
+ export interface APIResponse<T> {
7
+ code: number;
8
+ message?: string;
9
+ data: T;
10
+ timestamp: string;
11
+ traceId: string;
12
+ }
@@ -0,0 +1,14 @@
1
+ /** 环境类型 */
2
+ export type Env = 'develop' | 'testing' | 'product';
3
+ export type Stage = 'develop' | 'testing' | 'sit' | 'yace' | 'product';
4
+ /** 平台类型 */
5
+ export type PlatformType = 'browser' | 'wechat' | 'unknown';
6
+ /** 环境信息 */
7
+ export interface EnvironmentInfo {
8
+ platform: PlatformType;
9
+ userAgent?: string;
10
+ screenWidth?: number;
11
+ screenHeight?: number;
12
+ language?: string;
13
+ systemInfo?: any;
14
+ }
@@ -0,0 +1,57 @@
1
+ import { Stage } from './env';
2
+ import { LogEventLevel } from './logEventLevel';
3
+ /** 标准化日志上报格式 */
4
+ export interface LogEvent {
5
+ /** 日志 ID */
6
+ logId: string;
7
+ /** 事件序列编号(去重/排序辅助) */
8
+ seq: number;
9
+ /** 应用标识 */
10
+ appId: string;
11
+ /** 环境标识 */
12
+ stage: Stage;
13
+ /** 日志级别:info/warn/error/fatal */
14
+ level: LogEventLevel;
15
+ /** 可选:跟踪 ID(跨服务调用链跟踪) */
16
+ traceId?: string;
17
+ /** 会话标识,同 sessionId */
18
+ frontendId: string;
19
+ /** 发生页面 URL */
20
+ url?: string;
21
+ location: string;
22
+ /** 异常信息 */
23
+ message: string;
24
+ /** 可选:堆栈信息(长字符串) */
25
+ throwable?: string;
26
+ /** 可选:用户 ID(脱敏) */
27
+ userId?: string;
28
+ /** 可选:店铺编码 */
29
+ storeCode?: string;
30
+ /** 可选的结构化额外信息 */
31
+ tags?: Record<string, any>;
32
+ }
33
+ export interface StackFrame {
34
+ file: string;
35
+ line: number;
36
+ column: number;
37
+ function?: string;
38
+ }
39
+ export type BaseErrorInfo = {
40
+ type: 'js' | 'promise' | 'resource';
41
+ message: string;
42
+ stack: StackFrame[];
43
+ throwable?: string;
44
+ };
45
+ export type ReportData = {
46
+ appId: string;
47
+ appStage: Stage;
48
+ items: ReportItem[];
49
+ };
50
+ export type ReportItem = {
51
+ level: LogEventLevel;
52
+ traceId?: string;
53
+ frontendId: string;
54
+ location: string;
55
+ message: string;
56
+ throwable?: string;
57
+ };
@@ -0,0 +1,2 @@
1
+ /** 日志级别 */
2
+ export type LogEventLevel = 'INFO' | 'WARN' | 'ERROR' | 'FATAL';
@@ -0,0 +1,61 @@
1
+ import { Env, Stage } from './env';
2
+ import { LogEventLevel } from './logEventLevel';
3
+ /** SDK 配置选项 */
4
+ export interface SDKOptions {
5
+ /** 上报端点 URL */
6
+ /** 应用 ID */
7
+ appId: string;
8
+ /** 环境标识 */
9
+ env?: Env;
10
+ /** 日志环境 */
11
+ logStage: Stage;
12
+ /** 是否开启调试模式 */
13
+ debug?: boolean;
14
+ /** 是否启用批量上报,默认 true */
15
+ enableBatch?: boolean;
16
+ /** 批量上报最大数量,默认 10 */
17
+ batchSize?: number;
18
+ /** 是否启用 gzip 压缩,默认 true (仅在批量模式下有效) */
19
+ enableGzip?: boolean;
20
+ /** 批量模式下启用 gzip 压缩的最小 items 数量,默认 2 */
21
+ gzipBatchMinSize?: number;
22
+ /** 最大像素图 URL 长度,默认 1900 */
23
+ maxPixelUrlLen?: number;
24
+ /** 批量上报时间间隔(毫秒),默认 5000 */
25
+ batchInterval?: number;
26
+ /** 队列最大长度,默认 100 */
27
+ maxQueueSize?: number;
28
+ /** 是否启用持久化存储,默认 true */
29
+ enableStorage?: boolean;
30
+ /** 持久化存储的 key 前缀,默认 'logger_sdk' */
31
+ storagePrefix?: string;
32
+ /** 是否启用重试,默认 true */
33
+ enableRetry?: boolean;
34
+ /** 最大重试次数,默认 3 */
35
+ maxRetries?: number;
36
+ /** 重试基础延迟时间(毫秒),默认 1000 */
37
+ retryDelay?: number;
38
+ /** 是否使用指数退避策略,默认 true */
39
+ retryBackoff?: boolean;
40
+ /** 可选:用户 ID(脱敏) */
41
+ userId?: string;
42
+ /** 可选:店铺编码 */
43
+ storeCode?: string;
44
+ /** token */
45
+ token: string;
46
+ /** 全局采样率 0.0-1.0,默认 1.0(全量) */
47
+ sampleRate?: number;
48
+ /** 分级采样率,优先于全局采样率 */
49
+ levelSampleRate?: Partial<Record<LogEventLevel, number>>;
50
+ /** 事件来源采样率(js/promise/resource/custom),优先于全局采样率 */
51
+ sourceSampleRate?: Partial<Record<'js' | 'promise' | 'resource' | 'custom', number>>;
52
+ /** 页面路径采样率,key 为路径前缀,优先于全局采样率 */
53
+ pathSampleRate?: Record<string, number>;
54
+ autoCapture?: {
55
+ js?: boolean;
56
+ promise?: boolean;
57
+ resource?: boolean;
58
+ wechat?: boolean;
59
+ };
60
+ enableAutoCapture?: boolean;
61
+ }
@@ -0,0 +1,6 @@
1
+ export declare const SecurityType: {
2
+ ACCOUNT_CENTER: string;
3
+ EHP: string;
4
+ CUSTOMER: string;
5
+ BASE: string;
6
+ };
@@ -0,0 +1,7 @@
1
+ import { LogEventLevel } from './logEventLevel';
2
+ export type TrackOptions = {
3
+ message: string;
4
+ error?: Error | unknown;
5
+ traceId?: string;
6
+ logLevel?: LogEventLevel;
7
+ };
@@ -0,0 +1,10 @@
1
+ import { EnvironmentInfo } from '../types/env';
2
+ export declare function getCurrentUrl(): string;
3
+ /**
4
+ * 获取环境信息
5
+ */
6
+ export declare function getEnvironmentInfo(): EnvironmentInfo;
7
+ /**
8
+ * 收集环境信息并生成 tags(仅在初始化时执行一次)
9
+ */
10
+ export declare function collectEnvironmentTags(): Record<string, string | number | boolean | undefined>;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Minimal MD5 implementation
3
+ * @param input Input string
4
+ * @returns MD5 hash string (hex)
5
+ */
6
+ export declare const md5: (input: string) => string;
@@ -0,0 +1 @@
1
+ export declare function getSessionId(): string;
@@ -0,0 +1,12 @@
1
+ export declare const now: () => number;
2
+ export declare function safeStringify(obj: any): string;
3
+ export declare function normalizeMessage(message: string): string;
4
+ export declare function logDebug(debug: boolean, ...args: any[]): void;
5
+ /**
6
+ * 计算哈希值到概率
7
+ */
8
+ export declare function hashToProb(s: string): number;
9
+ export declare function flattenStack(error: Error): Promise<{
10
+ location: string;
11
+ throwable: string;
12
+ }>;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * 生成 UUID v4
3
+ * 符合 RFC 4122 标准
4
+ * 格式: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
5
+ * 其中 x 是 0-f 的十六进制数字,y 是 8/9/a/b 之一
6
+ */
7
+ export declare function uuid(): string;
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@pluve/mp-logger-sdk",
3
+ "version": "0.0.1",
4
+ "description": "mini program logger sdk",
5
+ "keywords": [
6
+ "logger"
7
+ ],
8
+ "author": "黄震 <huangzhen@yfpharmacy.com>",
9
+ "homepage": "http://.",
10
+ "license": "ISC",
11
+ "main": "dist/cjs/index.js",
12
+ "module": "dist/esm/index.js",
13
+ "browser": "dist/esm/index.js",
14
+ "types": "dist/types/index.d.ts",
15
+ "exports": {
16
+ ".": {
17
+ "types": "./dist/types/index.d.ts",
18
+ "import": "./dist/esm/index.js",
19
+ "require": "./dist/cjs/index.js",
20
+ "default": "./dist/esm/index.js"
21
+ }
22
+ },
23
+ "typesVersions": {
24
+ "*": {
25
+ "index": ["dist/types/index.d.ts"],
26
+ "*": ["dist/types/*"]
27
+ }
28
+ },
29
+ "directories": {
30
+ "dist": "dist",
31
+ "types": "dist/types"
32
+ },
33
+ "files": [
34
+ "dist"
35
+ ],
36
+ "publishConfig": {
37
+ "access": "public",
38
+ "registry": "https://registry.npmjs.org"
39
+ },
40
+ "repository": {
41
+ "type": "git",
42
+ "url": "https://gitlab.pharmacyyf.com/frontend-common/pluve-lib.git"
43
+ },
44
+ "scripts": {
45
+ "init-install": "pnpm install",
46
+ "build-types": "tsc -p tsconfig.types.json",
47
+ "typecheck": "tsc -p tsconfig.json",
48
+ "build": "pnpm run build-types && father build",
49
+ "test": "vitest run",
50
+ "test:watch": "vitest",
51
+ "test:coverage": "vitest run --coverage",
52
+ "clear-types": "rm -rf lib",
53
+ "clear-build": "rm -rf dist",
54
+ "clear-node_modules": "rm -rf node_modules",
55
+ "generate-mermaid": "mermaid-cli logger-sdk.mermaid -o logger-sdk.svg"
56
+ },
57
+ "devDependencies": {
58
+ "vitest": "^4.0.15"
59
+ },
60
+ "dependencies": {
61
+ "fflate": "^0.8.2"
62
+ },
63
+ "peerDependencies": {
64
+ }
65
+ }