@tarsis/toolkit 0.4.1 → 0.4.2-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,170 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const move = (source, start, end) => {
6
+ const item = source[start];
7
+ const result = source.slice(0);
8
+ result.splice(start, 1);
9
+ result.splice(end, 0, item);
10
+ return result;
11
+ };
12
+
13
+ const times = (fn, size) => Array.from({ length: size }, (_, index) => fn(index));
14
+
15
+ const logRank = {
16
+ silent: 0,
17
+ error: 1,
18
+ warn: 2,
19
+ info: 3,
20
+ debug: 4
21
+ };
22
+ const getEnvLogLevel = () => {
23
+ if (typeof process === "undefined") return "info";
24
+ const envLevel = process.env.LOG_LEVEL?.toLowerCase();
25
+ return envLevel && Object.prototype.hasOwnProperty.call(logRank, envLevel) ? envLevel : "info";
26
+ };
27
+ let currentLevel = getEnvLogLevel();
28
+ const setLogLevel = (level) => {
29
+ if (Object.prototype.hasOwnProperty.call(logRank, level)) {
30
+ currentLevel = level;
31
+ }
32
+ };
33
+ const getTimestamp = () => {
34
+ const now = /* @__PURE__ */ new Date();
35
+ return now.toTimeString().split(" ")[0] + "." + now.getMilliseconds().toString().padStart(3, "0");
36
+ };
37
+ const shouldLog = (level) => {
38
+ return logRank[level] <= logRank[currentLevel];
39
+ };
40
+ let sessionId = null;
41
+ let requestId = null;
42
+ const setSessionId = (id) => {
43
+ sessionId = id;
44
+ };
45
+ const setRequestId = (id) => {
46
+ requestId = id;
47
+ };
48
+ const clearSession = () => {
49
+ sessionId = null;
50
+ requestId = null;
51
+ };
52
+ const getSessionInfo = () => {
53
+ const parts = [];
54
+ if (sessionId) parts.push(`session:${sessionId}`);
55
+ if (requestId) parts.push(`req:${requestId}`);
56
+ return parts.length > 0 ? `[${parts.join("|")}]` : "";
57
+ };
58
+ class BaseLogger {
59
+ prefix;
60
+ emoji;
61
+ constructor(prefix, emoji) {
62
+ this.prefix = prefix;
63
+ this.emoji = emoji;
64
+ }
65
+ log(level, emoji, msg, fn = console.log, data) {
66
+ if (shouldLog(level)) {
67
+ const sessionInfo = getSessionInfo();
68
+ const logMessage = `[${getTimestamp()}] ${emoji} ${this.prefix ? `[${this.prefix}] ` : ""}${msg}${sessionInfo}`;
69
+ fn(logMessage);
70
+ if (data && shouldLog(level)) {
71
+ console.dir(data, { depth: null });
72
+ }
73
+ }
74
+ }
75
+ info(msg, data) {
76
+ this.log("info", this.emoji, msg, console.log, data);
77
+ }
78
+ debug(msg, data) {
79
+ this.log("debug", this.emoji, msg, console.debug, data);
80
+ }
81
+ success(msg, data) {
82
+ this.log("info", "✅", msg, console.log, data);
83
+ }
84
+ warn(msg, data) {
85
+ this.log("warn", "⚠️", msg, console.warn, data);
86
+ }
87
+ error(msg, detail) {
88
+ this.log("error", "❌", msg, console.error, detail);
89
+ }
90
+ scope(msg, data) {
91
+ this.log("debug", "🔹", msg, console.debug, data);
92
+ }
93
+ dir(data) {
94
+ if (shouldLog("debug")) {
95
+ this.log("debug", "📦", "Object:", console.debug);
96
+ console.dir(data, { depth: null });
97
+ }
98
+ }
99
+ time(label) {
100
+ const start = performance.now();
101
+ return {
102
+ end: (data) => {
103
+ const duration = performance.now() - start;
104
+ this.info(`${label} completed in ${duration.toFixed(2)}ms`, data);
105
+ }
106
+ };
107
+ }
108
+ }
109
+ const logger = new BaseLogger("", "ℹ️");
110
+ const componentLogger = new BaseLogger("Component", "🧩");
111
+ const hookLogger = new BaseLogger("Hook", "🪝");
112
+ const animationLogger = new BaseLogger("Animation", "🎬");
113
+ const eventLogger = new BaseLogger("Event", "⚡");
114
+ const apiLogger = new BaseLogger("API", "🌐");
115
+ const storageLogger = new BaseLogger("Storage", "💾");
116
+ const utilsLogger = new BaseLogger("Utils", "🔧");
117
+ const getCurrentLogLevel = () => currentLevel;
118
+ const isDebugEnabled = () => shouldLog("debug");
119
+
120
+ const noop = (..._args) => {
121
+ };
122
+
123
+ const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
124
+
125
+ const is = (type) => (x) => Object(x) instanceof type;
126
+
127
+ const isNonNullable = (value) => value !== void 0 && value !== null;
128
+
129
+ const notReachable = (arg) => {
130
+ throw new Error(`"${arg}" should never be reached`);
131
+ };
132
+
133
+ const keys = (value) => {
134
+ const primitiveKeys = Object.keys(
135
+ value
136
+ );
137
+ const symbolKeys = Object.getOwnPropertySymbols(value).filter(
138
+ (sym) => Object.getOwnPropertyDescriptor(value, sym)?.enumerable
139
+ );
140
+ return [...primitiveKeys, ...symbolKeys];
141
+ };
142
+
143
+ const values = (input) => {
144
+ return keys(input).map((key) => input[key]);
145
+ };
146
+
147
+ exports.BaseLogger = BaseLogger;
148
+ exports.animationLogger = animationLogger;
149
+ exports.apiLogger = apiLogger;
150
+ exports.clearSession = clearSession;
151
+ exports.componentLogger = componentLogger;
152
+ exports.eventLogger = eventLogger;
153
+ exports.getCurrentLogLevel = getCurrentLogLevel;
154
+ exports.hookLogger = hookLogger;
155
+ exports.is = is;
156
+ exports.isDebugEnabled = isDebugEnabled;
157
+ exports.isNonNullable = isNonNullable;
158
+ exports.keys = keys;
159
+ exports.logger = logger;
160
+ exports.move = move;
161
+ exports.noop = noop;
162
+ exports.notReachable = notReachable;
163
+ exports.setLogLevel = setLogLevel;
164
+ exports.setRequestId = setRequestId;
165
+ exports.setSessionId = setSessionId;
166
+ exports.storageLogger = storageLogger;
167
+ exports.times = times;
168
+ exports.utilsLogger = utilsLogger;
169
+ exports.values = values;
170
+ exports.wait = wait;
@@ -0,0 +1,72 @@
1
+ export declare const animationLogger: BaseLogger;
2
+
3
+ export declare const apiLogger: BaseLogger;
4
+
5
+ export declare class BaseLogger {
6
+ protected prefix: string;
7
+ protected emoji: string;
8
+ constructor(prefix: string, emoji: string);
9
+ private log;
10
+ info(msg: string, data?: unknown): void;
11
+ debug(msg: string, data?: unknown): void;
12
+ success(msg: string, data?: unknown): void;
13
+ warn(msg: string, data?: unknown): void;
14
+ error(msg: string, detail?: unknown): void;
15
+ scope(msg: string, data?: unknown): void;
16
+ dir<T>(data: T): void;
17
+ time(label: string): {
18
+ end: (data?: unknown) => void;
19
+ };
20
+ }
21
+
22
+ export declare const clearSession: () => void;
23
+
24
+ export declare const componentLogger: BaseLogger;
25
+
26
+ declare type Constructor<T> = new (...args: any[]) => T;
27
+
28
+ export declare const eventLogger: BaseLogger;
29
+
30
+ export declare const getCurrentLogLevel: () => LogLevel;
31
+
32
+ export declare const hookLogger: BaseLogger;
33
+
34
+ export declare const is: <T>(type: Constructor<T>) => (x: T) => boolean;
35
+
36
+ export declare const isDebugEnabled: () => boolean;
37
+
38
+ export declare const isNonNullable: <T>(value: T) => value is NonNullable<T>;
39
+
40
+ export declare const keys: <T extends Record<string | number | symbol, any>>(value: T) => Array<`${keyof T & (string | number | boolean)}` | (keyof T & symbol)>;
41
+
42
+ export declare const logger: BaseLogger;
43
+
44
+ /**
45
+ * Advanced logger utility for the toolkit
46
+ * Provides consistent logging interface across components with emojis, session tracking, and performance timing
47
+ */
48
+ export declare type LogLevel = 'silent' | 'error' | 'warn' | 'info' | 'debug';
49
+
50
+ export declare const move: <T>(source: T[], start: number, end: number) => T[];
51
+
52
+ export declare const noop: (..._args: unknown[]) => void;
53
+
54
+ export declare const notReachable: (arg: never) => never;
55
+
56
+ export declare const setLogLevel: (level: LogLevel) => void;
57
+
58
+ export declare const setRequestId: (id: string) => void;
59
+
60
+ export declare const setSessionId: (id: string) => void;
61
+
62
+ export declare const storageLogger: BaseLogger;
63
+
64
+ export declare const times: <T>(fn: (index: number) => T, size: number) => T[];
65
+
66
+ export declare const utilsLogger: BaseLogger;
67
+
68
+ export declare const values: <T extends Record<string | number | symbol, any>>(input: T) => Array<T[keyof T]>;
69
+
70
+ export declare const wait: (ms: number) => Promise<unknown>;
71
+
72
+ export { }
package/dist/server.js ADDED
@@ -0,0 +1,143 @@
1
+ const move = (source, start, end) => {
2
+ const item = source[start];
3
+ const result = source.slice(0);
4
+ result.splice(start, 1);
5
+ result.splice(end, 0, item);
6
+ return result;
7
+ };
8
+
9
+ const times = (fn, size) => Array.from({ length: size }, (_, index) => fn(index));
10
+
11
+ const logRank = {
12
+ silent: 0,
13
+ error: 1,
14
+ warn: 2,
15
+ info: 3,
16
+ debug: 4
17
+ };
18
+ const getEnvLogLevel = () => {
19
+ if (typeof process === "undefined") return "info";
20
+ const envLevel = process.env.LOG_LEVEL?.toLowerCase();
21
+ return envLevel && Object.prototype.hasOwnProperty.call(logRank, envLevel) ? envLevel : "info";
22
+ };
23
+ let currentLevel = getEnvLogLevel();
24
+ const setLogLevel = (level) => {
25
+ if (Object.prototype.hasOwnProperty.call(logRank, level)) {
26
+ currentLevel = level;
27
+ }
28
+ };
29
+ const getTimestamp = () => {
30
+ const now = /* @__PURE__ */ new Date();
31
+ return now.toTimeString().split(" ")[0] + "." + now.getMilliseconds().toString().padStart(3, "0");
32
+ };
33
+ const shouldLog = (level) => {
34
+ return logRank[level] <= logRank[currentLevel];
35
+ };
36
+ let sessionId = null;
37
+ let requestId = null;
38
+ const setSessionId = (id) => {
39
+ sessionId = id;
40
+ };
41
+ const setRequestId = (id) => {
42
+ requestId = id;
43
+ };
44
+ const clearSession = () => {
45
+ sessionId = null;
46
+ requestId = null;
47
+ };
48
+ const getSessionInfo = () => {
49
+ const parts = [];
50
+ if (sessionId) parts.push(`session:${sessionId}`);
51
+ if (requestId) parts.push(`req:${requestId}`);
52
+ return parts.length > 0 ? `[${parts.join("|")}]` : "";
53
+ };
54
+ class BaseLogger {
55
+ prefix;
56
+ emoji;
57
+ constructor(prefix, emoji) {
58
+ this.prefix = prefix;
59
+ this.emoji = emoji;
60
+ }
61
+ log(level, emoji, msg, fn = console.log, data) {
62
+ if (shouldLog(level)) {
63
+ const sessionInfo = getSessionInfo();
64
+ const logMessage = `[${getTimestamp()}] ${emoji} ${this.prefix ? `[${this.prefix}] ` : ""}${msg}${sessionInfo}`;
65
+ fn(logMessage);
66
+ if (data && shouldLog(level)) {
67
+ console.dir(data, { depth: null });
68
+ }
69
+ }
70
+ }
71
+ info(msg, data) {
72
+ this.log("info", this.emoji, msg, console.log, data);
73
+ }
74
+ debug(msg, data) {
75
+ this.log("debug", this.emoji, msg, console.debug, data);
76
+ }
77
+ success(msg, data) {
78
+ this.log("info", "✅", msg, console.log, data);
79
+ }
80
+ warn(msg, data) {
81
+ this.log("warn", "⚠️", msg, console.warn, data);
82
+ }
83
+ error(msg, detail) {
84
+ this.log("error", "❌", msg, console.error, detail);
85
+ }
86
+ scope(msg, data) {
87
+ this.log("debug", "🔹", msg, console.debug, data);
88
+ }
89
+ dir(data) {
90
+ if (shouldLog("debug")) {
91
+ this.log("debug", "📦", "Object:", console.debug);
92
+ console.dir(data, { depth: null });
93
+ }
94
+ }
95
+ time(label) {
96
+ const start = performance.now();
97
+ return {
98
+ end: (data) => {
99
+ const duration = performance.now() - start;
100
+ this.info(`${label} completed in ${duration.toFixed(2)}ms`, data);
101
+ }
102
+ };
103
+ }
104
+ }
105
+ const logger = new BaseLogger("", "ℹ️");
106
+ const componentLogger = new BaseLogger("Component", "🧩");
107
+ const hookLogger = new BaseLogger("Hook", "🪝");
108
+ const animationLogger = new BaseLogger("Animation", "🎬");
109
+ const eventLogger = new BaseLogger("Event", "⚡");
110
+ const apiLogger = new BaseLogger("API", "🌐");
111
+ const storageLogger = new BaseLogger("Storage", "💾");
112
+ const utilsLogger = new BaseLogger("Utils", "🔧");
113
+ const getCurrentLogLevel = () => currentLevel;
114
+ const isDebugEnabled = () => shouldLog("debug");
115
+
116
+ const noop = (..._args) => {
117
+ };
118
+
119
+ const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
120
+
121
+ const is = (type) => (x) => Object(x) instanceof type;
122
+
123
+ const isNonNullable = (value) => value !== void 0 && value !== null;
124
+
125
+ const notReachable = (arg) => {
126
+ throw new Error(`"${arg}" should never be reached`);
127
+ };
128
+
129
+ const keys = (value) => {
130
+ const primitiveKeys = Object.keys(
131
+ value
132
+ );
133
+ const symbolKeys = Object.getOwnPropertySymbols(value).filter(
134
+ (sym) => Object.getOwnPropertyDescriptor(value, sym)?.enumerable
135
+ );
136
+ return [...primitiveKeys, ...symbolKeys];
137
+ };
138
+
139
+ const values = (input) => {
140
+ return keys(input).map((key) => input[key]);
141
+ };
142
+
143
+ export { BaseLogger, animationLogger, apiLogger, clearSession, componentLogger, eventLogger, getCurrentLogLevel, hookLogger, is, isDebugEnabled, isNonNullable, keys, logger, move, noop, notReachable, setLogLevel, setRequestId, setSessionId, storageLogger, times, utilsLogger, values, wait };