@ga-components/logger 1.0.4 → 1.0.6
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/dist/index.d.mts +9 -5
- package/dist/index.d.ts +9 -5
- package/dist/index.js +9 -34
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +9 -34
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -24,18 +24,22 @@ interface LoggerConfig {
|
|
|
24
24
|
appId: string;
|
|
25
25
|
repo: string;
|
|
26
26
|
}
|
|
27
|
+
type LogParams = {
|
|
28
|
+
fnName: string;
|
|
29
|
+
messageError?: Error;
|
|
30
|
+
payload?: Record<string, unknown>;
|
|
31
|
+
endpointName?: string;
|
|
32
|
+
};
|
|
27
33
|
|
|
28
34
|
declare class Logger {
|
|
29
35
|
private config;
|
|
30
36
|
private initialized;
|
|
31
|
-
private fetchIntercepted;
|
|
32
37
|
init(config: LoggerConfig): void;
|
|
33
38
|
setUserId(userId: string | null): void;
|
|
34
|
-
interceptFetch(): void;
|
|
35
39
|
private send;
|
|
36
|
-
info(
|
|
37
|
-
warn(
|
|
38
|
-
error(
|
|
40
|
+
info(params: LogParams): Promise<void>;
|
|
41
|
+
warn(params: LogParams): Promise<void>;
|
|
42
|
+
error(params: LogParams): Promise<void>;
|
|
39
43
|
}
|
|
40
44
|
declare const logger: Logger;
|
|
41
45
|
|
package/dist/index.d.ts
CHANGED
|
@@ -24,18 +24,22 @@ interface LoggerConfig {
|
|
|
24
24
|
appId: string;
|
|
25
25
|
repo: string;
|
|
26
26
|
}
|
|
27
|
+
type LogParams = {
|
|
28
|
+
fnName: string;
|
|
29
|
+
messageError?: Error;
|
|
30
|
+
payload?: Record<string, unknown>;
|
|
31
|
+
endpointName?: string;
|
|
32
|
+
};
|
|
27
33
|
|
|
28
34
|
declare class Logger {
|
|
29
35
|
private config;
|
|
30
36
|
private initialized;
|
|
31
|
-
private fetchIntercepted;
|
|
32
37
|
init(config: LoggerConfig): void;
|
|
33
38
|
setUserId(userId: string | null): void;
|
|
34
|
-
interceptFetch(): void;
|
|
35
39
|
private send;
|
|
36
|
-
info(
|
|
37
|
-
warn(
|
|
38
|
-
error(
|
|
40
|
+
info(params: LogParams): Promise<void>;
|
|
41
|
+
warn(params: LogParams): Promise<void>;
|
|
42
|
+
error(params: LogParams): Promise<void>;
|
|
39
43
|
}
|
|
40
44
|
declare const logger: Logger;
|
|
41
45
|
|
package/dist/index.js
CHANGED
|
@@ -59,7 +59,6 @@ var Logger = class {
|
|
|
59
59
|
constructor() {
|
|
60
60
|
this.config = null;
|
|
61
61
|
this.initialized = false;
|
|
62
|
-
this.fetchIntercepted = false;
|
|
63
62
|
}
|
|
64
63
|
init(config) {
|
|
65
64
|
this.config = config;
|
|
@@ -74,33 +73,6 @@ var Logger = class {
|
|
|
74
73
|
}
|
|
75
74
|
this.config.userId = userId;
|
|
76
75
|
}
|
|
77
|
-
// Auto intercept semua fetch
|
|
78
|
-
interceptFetch() {
|
|
79
|
-
if (this.fetchIntercepted) return;
|
|
80
|
-
const originalFetch = window.fetch;
|
|
81
|
-
window.fetch = async (...args) => {
|
|
82
|
-
const url = typeof args[0] === "string" ? args[0] : args[0].url;
|
|
83
|
-
const method = (args[1]?.method ?? "GET").toUpperCase();
|
|
84
|
-
const endpoint = `${method} ${url}`;
|
|
85
|
-
try {
|
|
86
|
-
const response = await originalFetch(...args);
|
|
87
|
-
if (!response.ok) {
|
|
88
|
-
this.send("error", `HTTP ${response.status} ${endpoint}`, { endpoint, status: response.status });
|
|
89
|
-
}
|
|
90
|
-
return response;
|
|
91
|
-
} catch (error) {
|
|
92
|
-
this.send(
|
|
93
|
-
"error",
|
|
94
|
-
`Network error ${endpoint}`,
|
|
95
|
-
{ endpoint },
|
|
96
|
-
error instanceof Error ? error : new Error(String(error))
|
|
97
|
-
);
|
|
98
|
-
throw error;
|
|
99
|
-
}
|
|
100
|
-
};
|
|
101
|
-
this.fetchIntercepted = true;
|
|
102
|
-
console.info("[ga-logger] fetch intercepted \u2705");
|
|
103
|
-
}
|
|
104
76
|
async send(level, message, payload = {}, error, endpoint) {
|
|
105
77
|
if (!this.initialized || !this.config) {
|
|
106
78
|
console.warn("[ga-logger] not initialized. Call logger.init() first.");
|
|
@@ -129,14 +101,17 @@ var Logger = class {
|
|
|
129
101
|
console.error("[ga-logger] failed to send log:", e);
|
|
130
102
|
}
|
|
131
103
|
}
|
|
132
|
-
info(
|
|
133
|
-
|
|
104
|
+
info(params) {
|
|
105
|
+
const { fnName, payload, endpointName } = params;
|
|
106
|
+
return this.send("info", fnName, payload, void 0, endpointName);
|
|
134
107
|
}
|
|
135
|
-
warn(
|
|
136
|
-
|
|
108
|
+
warn(params) {
|
|
109
|
+
const { fnName, payload, endpointName } = params;
|
|
110
|
+
return this.send("warn", fnName, payload, void 0, endpointName);
|
|
137
111
|
}
|
|
138
|
-
error(
|
|
139
|
-
|
|
112
|
+
error(params) {
|
|
113
|
+
const { fnName, messageError, payload, endpointName } = params;
|
|
114
|
+
return this.send("error", fnName, payload, messageError, endpointName);
|
|
140
115
|
}
|
|
141
116
|
};
|
|
142
117
|
var logger = new Logger();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/core/logger.ts","../src/config/firebase.ts"],"sourcesContent":["export { logger } from \"./core/logger\";\nexport type { LogEntry, LoggerConfig, LogLevel, LogEnv } from \"./types\";\n","import { collection, addDoc, Timestamp } from \"firebase/firestore\";\nimport { initFirebase, getDb } from \"../config/firebase\";\nimport type { LogEntry, LogLevel, LoggerConfig } from \"../types\";\n\nconst sessionId = `sess_${Date.now()}_${Math.random().toString(36).slice(2, 7)}`;\n\nclass Logger {\n private config: LoggerConfig | null = null;\n private initialized = false;\n
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/core/logger.ts","../src/config/firebase.ts"],"sourcesContent":["export { logger } from \"./core/logger\";\nexport type { LogEntry, LoggerConfig, LogLevel, LogEnv } from \"./types\";\n","import { collection, addDoc, Timestamp } from \"firebase/firestore\";\nimport { initFirebase, getDb } from \"../config/firebase\";\nimport type { LogEntry, LogLevel, LogParams, LoggerConfig } from \"../types\";\n\nconst sessionId = `sess_${Date.now()}_${Math.random().toString(36).slice(2, 7)}`;\n\nclass Logger {\n private config: LoggerConfig | null = null;\n private initialized = false;\n\n init(config: LoggerConfig) {\n this.config = config;\n initFirebase(config);\n this.initialized = true;\n console.info(\"[ga-logger] initialized —\", config.env);\n }\n\n setUserId(userId: string | null) {\n if (!this.config) {\n console.warn(\"[ga-logger] not initialized. Call logger.init() first.\");\n return;\n }\n this.config.userId = userId;\n }\n\n private async send(\n level: LogLevel,\n message: string,\n payload: Record<string, unknown> = {},\n error?: Error,\n endpoint?: string,\n ) {\n if (!this.initialized || !this.config) {\n console.warn(\"[ga-logger] not initialized. Call logger.init() first.\");\n return;\n }\n\n const entry: LogEntry = {\n timestamp: new Date(),\n level,\n message,\n env: this.config.env,\n userId: this.config.userId ?? null,\n sessionId,\n page: typeof window !== \"undefined\" ? window.location.pathname : \"\",\n stackTrace: error?.stack ?? null,\n payload,\n repo: this.config.repo,\n endpoint: endpoint ?? null,\n };\n try {\n const db = getDb();\n await addDoc(collection(db, \"logs\"), {\n ...entry,\n timestamp: Timestamp.fromDate(entry.timestamp),\n });\n } catch (e) {\n console.error(\"[ga-logger] failed to send log:\", e);\n }\n }\n\n info(params: LogParams) {\n const { fnName, payload, endpointName } = params;\n return this.send(\"info\", fnName, payload, undefined, endpointName);\n }\n\n warn(params: LogParams) {\n const { fnName, payload, endpointName } = params;\n return this.send(\"warn\", fnName, payload, undefined, endpointName);\n }\n\n error(params: LogParams) {\n const { fnName, messageError, payload, endpointName } = params;\n return this.send(\"error\", fnName, payload, messageError, endpointName);\n }\n}\n\n\nexport const logger = new Logger();","import { initializeApp, getApps, FirebaseApp } from \"firebase/app\";\nimport { getFirestore, Firestore } from \"firebase/firestore\";\nimport { LoggerConfig } from \"../types\";\n\nlet app: FirebaseApp;\nlet db: Firestore;\n\nexport const initFirebase = (config: LoggerConfig) => {\n if (!getApps().length) {\n app = initializeApp(\n {\n apiKey: config.apiKey,\n authDomain: config.authDomain,\n projectId: config.projectId,\n storageBucket: config.storageBucket,\n messagingSenderId: config.messagingSenderId,\n appId: config.appId,\n },\n \"ga-logger\",\n );\n } else {\n app = getApps()[0];\n }\n\n db = getFirestore(app);\n return db;\n};\n\nexport const getDb = () => db;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,oBAA8C;;;ACA9C,iBAAoD;AACpD,uBAAwC;AAGxC,IAAI;AACJ,IAAI;AAEG,IAAM,eAAe,CAAC,WAAyB;AAClD,MAAI,KAAC,oBAAQ,EAAE,QAAQ;AACnB,cAAM;AAAA,MACF;AAAA,QACI,QAAQ,OAAO;AAAA,QACf,YAAY,OAAO;AAAA,QACnB,WAAW,OAAO;AAAA,QAClB,eAAe,OAAO;AAAA,QACtB,mBAAmB,OAAO;AAAA,QAC1B,OAAO,OAAO;AAAA,MAClB;AAAA,MACA;AAAA,IACJ;AAAA,EACJ,OAAO;AACH,cAAM,oBAAQ,EAAE,CAAC;AAAA,EACrB;AAEA,WAAK,+BAAa,GAAG;AACrB,SAAO;AACX;AAEO,IAAM,QAAQ,MAAM;;;ADxB3B,IAAM,YAAY,QAAQ,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;AAE9E,IAAM,SAAN,MAAa;AAAA,EAAb;AACI,SAAQ,SAA8B;AACtC,SAAQ,cAAc;AAAA;AAAA,EAEtB,KAAK,QAAsB;AACvB,SAAK,SAAS;AACd,iBAAa,MAAM;AACnB,SAAK,cAAc;AACnB,YAAQ,KAAK,kCAA6B,OAAO,GAAG;AAAA,EACxD;AAAA,EAEA,UAAU,QAAuB;AAC7B,QAAI,CAAC,KAAK,QAAQ;AACd,cAAQ,KAAK,wDAAwD;AACrE;AAAA,IACJ;AACA,SAAK,OAAO,SAAS;AAAA,EACzB;AAAA,EAEA,MAAc,KACV,OACA,SACA,UAAmC,CAAC,GACpC,OACA,UACF;AACE,QAAI,CAAC,KAAK,eAAe,CAAC,KAAK,QAAQ;AACnC,cAAQ,KAAK,wDAAwD;AACrE;AAAA,IACJ;AAEA,UAAM,QAAkB;AAAA,MACpB,WAAW,oBAAI,KAAK;AAAA,MACpB;AAAA,MACA;AAAA,MACA,KAAK,KAAK,OAAO;AAAA,MACjB,QAAQ,KAAK,OAAO,UAAU;AAAA,MAC9B;AAAA,MACA,MAAM,OAAO,WAAW,cAAc,OAAO,SAAS,WAAW;AAAA,MACjE,YAAY,OAAO,SAAS;AAAA,MAC5B;AAAA,MACA,MAAM,KAAK,OAAO;AAAA,MAClB,UAAU,YAAY;AAAA,IAC1B;AACA,QAAI;AACA,YAAMC,MAAK,MAAM;AACjB,gBAAM,8BAAO,8BAAWA,KAAI,MAAM,GAAG;AAAA,QACjC,GAAG;AAAA,QACH,WAAW,4BAAU,SAAS,MAAM,SAAS;AAAA,MACjD,CAAC;AAAA,IACL,SAAS,GAAG;AACR,cAAQ,MAAM,mCAAmC,CAAC;AAAA,IACtD;AAAA,EACJ;AAAA,EAEA,KAAK,QAAmB;AACpB,UAAM,EAAE,QAAQ,SAAS,aAAa,IAAI;AAC1C,WAAO,KAAK,KAAK,QAAQ,QAAQ,SAAS,QAAW,YAAY;AAAA,EACrE;AAAA,EAEA,KAAK,QAAmB;AACpB,UAAM,EAAE,QAAQ,SAAS,aAAa,IAAI;AAC1C,WAAO,KAAK,KAAK,QAAQ,QAAQ,SAAS,QAAW,YAAY;AAAA,EACrE;AAAA,EAEA,MAAM,QAAmB;AACrB,UAAM,EAAE,QAAQ,cAAc,SAAS,aAAa,IAAI;AACxD,WAAO,KAAK,KAAK,SAAS,QAAQ,SAAS,cAAc,YAAY;AAAA,EACzE;AACJ;AAGO,IAAM,SAAS,IAAI,OAAO;","names":["import_firestore","db"]}
|
package/dist/index.mjs
CHANGED
|
@@ -33,7 +33,6 @@ var Logger = class {
|
|
|
33
33
|
constructor() {
|
|
34
34
|
this.config = null;
|
|
35
35
|
this.initialized = false;
|
|
36
|
-
this.fetchIntercepted = false;
|
|
37
36
|
}
|
|
38
37
|
init(config) {
|
|
39
38
|
this.config = config;
|
|
@@ -48,33 +47,6 @@ var Logger = class {
|
|
|
48
47
|
}
|
|
49
48
|
this.config.userId = userId;
|
|
50
49
|
}
|
|
51
|
-
// Auto intercept semua fetch
|
|
52
|
-
interceptFetch() {
|
|
53
|
-
if (this.fetchIntercepted) return;
|
|
54
|
-
const originalFetch = window.fetch;
|
|
55
|
-
window.fetch = async (...args) => {
|
|
56
|
-
const url = typeof args[0] === "string" ? args[0] : args[0].url;
|
|
57
|
-
const method = (args[1]?.method ?? "GET").toUpperCase();
|
|
58
|
-
const endpoint = `${method} ${url}`;
|
|
59
|
-
try {
|
|
60
|
-
const response = await originalFetch(...args);
|
|
61
|
-
if (!response.ok) {
|
|
62
|
-
this.send("error", `HTTP ${response.status} ${endpoint}`, { endpoint, status: response.status });
|
|
63
|
-
}
|
|
64
|
-
return response;
|
|
65
|
-
} catch (error) {
|
|
66
|
-
this.send(
|
|
67
|
-
"error",
|
|
68
|
-
`Network error ${endpoint}`,
|
|
69
|
-
{ endpoint },
|
|
70
|
-
error instanceof Error ? error : new Error(String(error))
|
|
71
|
-
);
|
|
72
|
-
throw error;
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
this.fetchIntercepted = true;
|
|
76
|
-
console.info("[ga-logger] fetch intercepted \u2705");
|
|
77
|
-
}
|
|
78
50
|
async send(level, message, payload = {}, error, endpoint) {
|
|
79
51
|
if (!this.initialized || !this.config) {
|
|
80
52
|
console.warn("[ga-logger] not initialized. Call logger.init() first.");
|
|
@@ -103,14 +75,17 @@ var Logger = class {
|
|
|
103
75
|
console.error("[ga-logger] failed to send log:", e);
|
|
104
76
|
}
|
|
105
77
|
}
|
|
106
|
-
info(
|
|
107
|
-
|
|
78
|
+
info(params) {
|
|
79
|
+
const { fnName, payload, endpointName } = params;
|
|
80
|
+
return this.send("info", fnName, payload, void 0, endpointName);
|
|
108
81
|
}
|
|
109
|
-
warn(
|
|
110
|
-
|
|
82
|
+
warn(params) {
|
|
83
|
+
const { fnName, payload, endpointName } = params;
|
|
84
|
+
return this.send("warn", fnName, payload, void 0, endpointName);
|
|
111
85
|
}
|
|
112
|
-
error(
|
|
113
|
-
|
|
86
|
+
error(params) {
|
|
87
|
+
const { fnName, messageError, payload, endpointName } = params;
|
|
88
|
+
return this.send("error", fnName, payload, messageError, endpointName);
|
|
114
89
|
}
|
|
115
90
|
};
|
|
116
91
|
var logger = new Logger();
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/logger.ts","../src/config/firebase.ts"],"sourcesContent":["import { collection, addDoc, Timestamp } from \"firebase/firestore\";\nimport { initFirebase, getDb } from \"../config/firebase\";\nimport type { LogEntry, LogLevel, LoggerConfig } from \"../types\";\n\nconst sessionId = `sess_${Date.now()}_${Math.random().toString(36).slice(2, 7)}`;\n\nclass Logger {\n private config: LoggerConfig | null = null;\n private initialized = false;\n
|
|
1
|
+
{"version":3,"sources":["../src/core/logger.ts","../src/config/firebase.ts"],"sourcesContent":["import { collection, addDoc, Timestamp } from \"firebase/firestore\";\nimport { initFirebase, getDb } from \"../config/firebase\";\nimport type { LogEntry, LogLevel, LogParams, LoggerConfig } from \"../types\";\n\nconst sessionId = `sess_${Date.now()}_${Math.random().toString(36).slice(2, 7)}`;\n\nclass Logger {\n private config: LoggerConfig | null = null;\n private initialized = false;\n\n init(config: LoggerConfig) {\n this.config = config;\n initFirebase(config);\n this.initialized = true;\n console.info(\"[ga-logger] initialized —\", config.env);\n }\n\n setUserId(userId: string | null) {\n if (!this.config) {\n console.warn(\"[ga-logger] not initialized. Call logger.init() first.\");\n return;\n }\n this.config.userId = userId;\n }\n\n private async send(\n level: LogLevel,\n message: string,\n payload: Record<string, unknown> = {},\n error?: Error,\n endpoint?: string,\n ) {\n if (!this.initialized || !this.config) {\n console.warn(\"[ga-logger] not initialized. Call logger.init() first.\");\n return;\n }\n\n const entry: LogEntry = {\n timestamp: new Date(),\n level,\n message,\n env: this.config.env,\n userId: this.config.userId ?? null,\n sessionId,\n page: typeof window !== \"undefined\" ? window.location.pathname : \"\",\n stackTrace: error?.stack ?? null,\n payload,\n repo: this.config.repo,\n endpoint: endpoint ?? null,\n };\n try {\n const db = getDb();\n await addDoc(collection(db, \"logs\"), {\n ...entry,\n timestamp: Timestamp.fromDate(entry.timestamp),\n });\n } catch (e) {\n console.error(\"[ga-logger] failed to send log:\", e);\n }\n }\n\n info(params: LogParams) {\n const { fnName, payload, endpointName } = params;\n return this.send(\"info\", fnName, payload, undefined, endpointName);\n }\n\n warn(params: LogParams) {\n const { fnName, payload, endpointName } = params;\n return this.send(\"warn\", fnName, payload, undefined, endpointName);\n }\n\n error(params: LogParams) {\n const { fnName, messageError, payload, endpointName } = params;\n return this.send(\"error\", fnName, payload, messageError, endpointName);\n }\n}\n\n\nexport const logger = new Logger();","import { initializeApp, getApps, FirebaseApp } from \"firebase/app\";\nimport { getFirestore, Firestore } from \"firebase/firestore\";\nimport { LoggerConfig } from \"../types\";\n\nlet app: FirebaseApp;\nlet db: Firestore;\n\nexport const initFirebase = (config: LoggerConfig) => {\n if (!getApps().length) {\n app = initializeApp(\n {\n apiKey: config.apiKey,\n authDomain: config.authDomain,\n projectId: config.projectId,\n storageBucket: config.storageBucket,\n messagingSenderId: config.messagingSenderId,\n appId: config.appId,\n },\n \"ga-logger\",\n );\n } else {\n app = getApps()[0];\n }\n\n db = getFirestore(app);\n return db;\n};\n\nexport const getDb = () => db;\n"],"mappings":";AAAA,SAAS,YAAY,QAAQ,iBAAiB;;;ACA9C,SAAS,eAAe,eAA4B;AACpD,SAAS,oBAA+B;AAGxC,IAAI;AACJ,IAAI;AAEG,IAAM,eAAe,CAAC,WAAyB;AAClD,MAAI,CAAC,QAAQ,EAAE,QAAQ;AACnB,UAAM;AAAA,MACF;AAAA,QACI,QAAQ,OAAO;AAAA,QACf,YAAY,OAAO;AAAA,QACnB,WAAW,OAAO;AAAA,QAClB,eAAe,OAAO;AAAA,QACtB,mBAAmB,OAAO;AAAA,QAC1B,OAAO,OAAO;AAAA,MAClB;AAAA,MACA;AAAA,IACJ;AAAA,EACJ,OAAO;AACH,UAAM,QAAQ,EAAE,CAAC;AAAA,EACrB;AAEA,OAAK,aAAa,GAAG;AACrB,SAAO;AACX;AAEO,IAAM,QAAQ,MAAM;;;ADxB3B,IAAM,YAAY,QAAQ,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;AAE9E,IAAM,SAAN,MAAa;AAAA,EAAb;AACI,SAAQ,SAA8B;AACtC,SAAQ,cAAc;AAAA;AAAA,EAEtB,KAAK,QAAsB;AACvB,SAAK,SAAS;AACd,iBAAa,MAAM;AACnB,SAAK,cAAc;AACnB,YAAQ,KAAK,kCAA6B,OAAO,GAAG;AAAA,EACxD;AAAA,EAEA,UAAU,QAAuB;AAC7B,QAAI,CAAC,KAAK,QAAQ;AACd,cAAQ,KAAK,wDAAwD;AACrE;AAAA,IACJ;AACA,SAAK,OAAO,SAAS;AAAA,EACzB;AAAA,EAEA,MAAc,KACV,OACA,SACA,UAAmC,CAAC,GACpC,OACA,UACF;AACE,QAAI,CAAC,KAAK,eAAe,CAAC,KAAK,QAAQ;AACnC,cAAQ,KAAK,wDAAwD;AACrE;AAAA,IACJ;AAEA,UAAM,QAAkB;AAAA,MACpB,WAAW,oBAAI,KAAK;AAAA,MACpB;AAAA,MACA;AAAA,MACA,KAAK,KAAK,OAAO;AAAA,MACjB,QAAQ,KAAK,OAAO,UAAU;AAAA,MAC9B;AAAA,MACA,MAAM,OAAO,WAAW,cAAc,OAAO,SAAS,WAAW;AAAA,MACjE,YAAY,OAAO,SAAS;AAAA,MAC5B;AAAA,MACA,MAAM,KAAK,OAAO;AAAA,MAClB,UAAU,YAAY;AAAA,IAC1B;AACA,QAAI;AACA,YAAMA,MAAK,MAAM;AACjB,YAAM,OAAO,WAAWA,KAAI,MAAM,GAAG;AAAA,QACjC,GAAG;AAAA,QACH,WAAW,UAAU,SAAS,MAAM,SAAS;AAAA,MACjD,CAAC;AAAA,IACL,SAAS,GAAG;AACR,cAAQ,MAAM,mCAAmC,CAAC;AAAA,IACtD;AAAA,EACJ;AAAA,EAEA,KAAK,QAAmB;AACpB,UAAM,EAAE,QAAQ,SAAS,aAAa,IAAI;AAC1C,WAAO,KAAK,KAAK,QAAQ,QAAQ,SAAS,QAAW,YAAY;AAAA,EACrE;AAAA,EAEA,KAAK,QAAmB;AACpB,UAAM,EAAE,QAAQ,SAAS,aAAa,IAAI;AAC1C,WAAO,KAAK,KAAK,QAAQ,QAAQ,SAAS,QAAW,YAAY;AAAA,EACrE;AAAA,EAEA,MAAM,QAAmB;AACrB,UAAM,EAAE,QAAQ,cAAc,SAAS,aAAa,IAAI;AACxD,WAAO,KAAK,KAAK,SAAS,QAAQ,SAAS,cAAc,YAAY;AAAA,EACzE;AACJ;AAGO,IAAM,SAAS,IAAI,OAAO;","names":["db"]}
|