@adriangalilea/utils 0.0.10

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 (110) hide show
  1. package/README.md +99 -0
  2. package/dist/browser.d.ts +14 -0
  3. package/dist/browser.d.ts.map +1 -0
  4. package/dist/browser.js +18 -0
  5. package/dist/browser.js.map +1 -0
  6. package/dist/currency/crypto-symbols-data.d.ts +10 -0
  7. package/dist/currency/crypto-symbols-data.d.ts.map +1 -0
  8. package/dist/currency/crypto-symbols-data.js +13765 -0
  9. package/dist/currency/crypto-symbols-data.js.map +1 -0
  10. package/dist/currency/crypto-symbols.d.ts +20 -0
  11. package/dist/currency/crypto-symbols.d.ts.map +1 -0
  12. package/dist/currency/crypto-symbols.js +23 -0
  13. package/dist/currency/crypto-symbols.js.map +1 -0
  14. package/dist/currency/download-crypto-list.d.ts +10 -0
  15. package/dist/currency/download-crypto-list.d.ts.map +1 -0
  16. package/dist/currency/download-crypto-list.js +69 -0
  17. package/dist/currency/download-crypto-list.js.map +1 -0
  18. package/dist/currency/index.d.ts +84 -0
  19. package/dist/currency/index.d.ts.map +1 -0
  20. package/dist/currency/index.js +230 -0
  21. package/dist/currency/index.js.map +1 -0
  22. package/dist/dir.d.ts +40 -0
  23. package/dist/dir.d.ts.map +1 -0
  24. package/dist/dir.js +108 -0
  25. package/dist/dir.js.map +1 -0
  26. package/dist/file.d.ts +53 -0
  27. package/dist/file.d.ts.map +1 -0
  28. package/dist/file.js +211 -0
  29. package/dist/file.js.map +1 -0
  30. package/dist/format.d.ts +40 -0
  31. package/dist/format.d.ts.map +1 -0
  32. package/dist/format.js +83 -0
  33. package/dist/format.js.map +1 -0
  34. package/dist/index.d.ts +16 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +20 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/kev.d.ts +149 -0
  39. package/dist/kev.d.ts.map +1 -0
  40. package/dist/kev.js +761 -0
  41. package/dist/kev.js.map +1 -0
  42. package/dist/log.d.ts +91 -0
  43. package/dist/log.d.ts.map +1 -0
  44. package/dist/log.js +300 -0
  45. package/dist/log.js.map +1 -0
  46. package/dist/logger.d.ts +91 -0
  47. package/dist/logger.d.ts.map +1 -0
  48. package/dist/logger.js +269 -0
  49. package/dist/logger.js.map +1 -0
  50. package/dist/offensive.d.ts +73 -0
  51. package/dist/offensive.d.ts.map +1 -0
  52. package/dist/offensive.js +103 -0
  53. package/dist/offensive.js.map +1 -0
  54. package/dist/path.d.ts +67 -0
  55. package/dist/path.d.ts.map +1 -0
  56. package/dist/path.js +107 -0
  57. package/dist/path.js.map +1 -0
  58. package/dist/platform/dir.d.ts +40 -0
  59. package/dist/platform/dir.d.ts.map +1 -0
  60. package/dist/platform/dir.js +108 -0
  61. package/dist/platform/dir.js.map +1 -0
  62. package/dist/platform/file.d.ts +53 -0
  63. package/dist/platform/file.d.ts.map +1 -0
  64. package/dist/platform/file.js +211 -0
  65. package/dist/platform/file.js.map +1 -0
  66. package/dist/platform/kev.d.ts +149 -0
  67. package/dist/platform/kev.d.ts.map +1 -0
  68. package/dist/platform/kev.js +762 -0
  69. package/dist/platform/kev.js.map +1 -0
  70. package/dist/platform/path.d.ts +67 -0
  71. package/dist/platform/path.d.ts.map +1 -0
  72. package/dist/platform/path.js +108 -0
  73. package/dist/platform/path.js.map +1 -0
  74. package/dist/platform/project.d.ts +35 -0
  75. package/dist/platform/project.d.ts.map +1 -0
  76. package/dist/platform/project.js +155 -0
  77. package/dist/platform/project.js.map +1 -0
  78. package/dist/project.d.ts +35 -0
  79. package/dist/project.d.ts.map +1 -0
  80. package/dist/project.js +154 -0
  81. package/dist/project.js.map +1 -0
  82. package/dist/runtime.d.ts +65 -0
  83. package/dist/runtime.d.ts.map +1 -0
  84. package/dist/runtime.js +193 -0
  85. package/dist/runtime.js.map +1 -0
  86. package/dist/universal/currency/crypto-symbols-data.d.ts +10 -0
  87. package/dist/universal/currency/crypto-symbols-data.d.ts.map +1 -0
  88. package/dist/universal/currency/crypto-symbols-data.js +13765 -0
  89. package/dist/universal/currency/crypto-symbols-data.js.map +1 -0
  90. package/dist/universal/currency/crypto-symbols.d.ts +20 -0
  91. package/dist/universal/currency/crypto-symbols.d.ts.map +1 -0
  92. package/dist/universal/currency/crypto-symbols.js +23 -0
  93. package/dist/universal/currency/crypto-symbols.js.map +1 -0
  94. package/dist/universal/currency/download-crypto-list.d.ts +10 -0
  95. package/dist/universal/currency/download-crypto-list.d.ts.map +1 -0
  96. package/dist/universal/currency/download-crypto-list.js +69 -0
  97. package/dist/universal/currency/download-crypto-list.js.map +1 -0
  98. package/dist/universal/currency/index.d.ts +90 -0
  99. package/dist/universal/currency/index.d.ts.map +1 -0
  100. package/dist/universal/currency/index.js +276 -0
  101. package/dist/universal/currency/index.js.map +1 -0
  102. package/dist/universal/format.d.ts +40 -0
  103. package/dist/universal/format.d.ts.map +1 -0
  104. package/dist/universal/format.js +83 -0
  105. package/dist/universal/format.js.map +1 -0
  106. package/dist/universal/log.d.ts +91 -0
  107. package/dist/universal/log.d.ts.map +1 -0
  108. package/dist/universal/log.js +309 -0
  109. package/dist/universal/log.js.map +1 -0
  110. package/package.json +75 -0
package/dist/logger.js ADDED
@@ -0,0 +1,269 @@
1
+ /**
2
+ * A Next.js-style logger for TypeScript applications
3
+ * Provides colored output with Unicode symbols for different log levels
4
+ */
5
+ // ANSI escape codes for colors
6
+ const ANSI = {
7
+ reset: '\x1b[0m',
8
+ bold: '\x1b[1m',
9
+ dim: '\x1b[2m',
10
+ // Foreground colors
11
+ black: '\x1b[30m',
12
+ red: '\x1b[31m',
13
+ green: '\x1b[32m',
14
+ yellow: '\x1b[33m',
15
+ blue: '\x1b[34m',
16
+ magenta: '\x1b[35m',
17
+ cyan: '\x1b[36m',
18
+ white: '\x1b[37m',
19
+ gray: '\x1b[90m',
20
+ // Custom purple (Next.js style)
21
+ purple: '\x1b[38;2;173;127;168m',
22
+ // Background colors
23
+ bgRed: '\x1b[41m',
24
+ bgGreen: '\x1b[42m',
25
+ bgYellow: '\x1b[43m',
26
+ bgBlue: '\x1b[44m',
27
+ bgMagenta: '\x1b[45m',
28
+ bgCyan: '\x1b[46m',
29
+ bgWhite: '\x1b[47m',
30
+ };
31
+ // Detect if colors should be enabled
32
+ const isColorEnabled = () => {
33
+ const env = process.env;
34
+ if (env.NO_COLOR)
35
+ return false;
36
+ if (env.FORCE_COLOR)
37
+ return true;
38
+ return process.stdout?.isTTY && !env.CI && env.TERM !== 'dumb';
39
+ };
40
+ const colorEnabled = isColorEnabled();
41
+ // Color formatter function
42
+ const formatter = (open, close = ANSI.reset) => {
43
+ if (!colorEnabled)
44
+ return (str) => str;
45
+ return (str) => `${open}${str}${close}`;
46
+ };
47
+ // Text styling functions
48
+ export const bold = formatter(ANSI.bold);
49
+ export const dim = formatter(ANSI.dim);
50
+ export const red = formatter(ANSI.red);
51
+ export const green = formatter(ANSI.green);
52
+ export const yellow = formatter(ANSI.yellow);
53
+ export const blue = formatter(ANSI.blue);
54
+ export const magenta = formatter(ANSI.magenta);
55
+ export const cyan = formatter(ANSI.cyan);
56
+ export const white = formatter(ANSI.white);
57
+ export const gray = formatter(ANSI.gray);
58
+ export const purple = formatter(ANSI.purple);
59
+ // Background colors
60
+ export const bgRed = formatter(ANSI.bgRed);
61
+ export const bgGreen = formatter(ANSI.bgGreen);
62
+ export const bgYellow = formatter(ANSI.bgYellow);
63
+ export const bgBlue = formatter(ANSI.bgBlue);
64
+ export const bgMagenta = formatter(ANSI.bgMagenta);
65
+ export const bgCyan = formatter(ANSI.bgCyan);
66
+ export const bgWhite = formatter(ANSI.bgWhite);
67
+ // Prefix symbols matching Next.js style
68
+ const prefixes = {
69
+ wait: white(bold('○')),
70
+ error: red(bold('⨯')),
71
+ warn: yellow(bold('⚠')),
72
+ ready: '▶',
73
+ info: white(bold(' ')),
74
+ success: green(bold('✓')),
75
+ event: green(bold('✓')),
76
+ trace: magenta(bold('»')),
77
+ };
78
+ // LRU Cache for warn-once functionality
79
+ class LRUCache {
80
+ cache = new Map();
81
+ maxSize;
82
+ constructor(maxSize) {
83
+ this.maxSize = maxSize;
84
+ }
85
+ get(key) {
86
+ const item = this.cache.get(key);
87
+ if (item !== undefined) {
88
+ // Move to end (most recently used)
89
+ this.cache.delete(key);
90
+ this.cache.set(key, item);
91
+ }
92
+ return item;
93
+ }
94
+ set(key, value) {
95
+ if (this.cache.has(key)) {
96
+ this.cache.delete(key);
97
+ }
98
+ this.cache.set(key, value);
99
+ if (this.cache.size > this.maxSize) {
100
+ // Remove least recently used (first item)
101
+ const firstKey = this.cache.keys().next().value;
102
+ if (firstKey !== undefined) {
103
+ this.cache.delete(firstKey);
104
+ }
105
+ }
106
+ }
107
+ has(key) {
108
+ return this.cache.has(key);
109
+ }
110
+ }
111
+ const warnOnceCache = new LRUCache(10_000);
112
+ // Core logging function
113
+ function prefixedLog(level, ...messages) {
114
+ // Remove empty first message
115
+ if ((messages[0] === '' || messages[0] === undefined) && messages.length === 1) {
116
+ messages.shift();
117
+ }
118
+ // Determine console method based on level
119
+ const consoleMethod = level === 'error' ? 'error' : level === 'warn' ? 'warn' : 'log';
120
+ const prefix = prefixes[level];
121
+ // Handle empty messages
122
+ if (messages.length === 0) {
123
+ console[consoleMethod]('');
124
+ return;
125
+ }
126
+ // Format and log the message
127
+ if (messages.length === 1 && typeof messages[0] === 'string') {
128
+ console[consoleMethod](` ${prefix} ${messages[0]}`);
129
+ }
130
+ else {
131
+ console[consoleMethod](` ${prefix}`, ...messages);
132
+ }
133
+ }
134
+ // Bootstrap function for startup messages (no prefix, just indentation)
135
+ export function bootstrap(...messages) {
136
+ console.log(' ' + messages.join(' '));
137
+ }
138
+ // Main logging functions
139
+ export function wait(...messages) {
140
+ prefixedLog('wait', ...messages);
141
+ }
142
+ export function error(...messages) {
143
+ prefixedLog('error', ...messages);
144
+ }
145
+ export function warn(...messages) {
146
+ prefixedLog('warn', ...messages);
147
+ }
148
+ export function ready(...messages) {
149
+ prefixedLog('ready', ...messages);
150
+ }
151
+ export function info(...messages) {
152
+ prefixedLog('info', ...messages);
153
+ }
154
+ export function success(...messages) {
155
+ prefixedLog('success', ...messages);
156
+ }
157
+ export function event(...messages) {
158
+ prefixedLog('event', ...messages);
159
+ }
160
+ export function trace(...messages) {
161
+ prefixedLog('trace', ...messages);
162
+ }
163
+ // Special warn-once function
164
+ export function warnOnce(...messages) {
165
+ const key = messages.join(' ');
166
+ if (!warnOnceCache.has(key)) {
167
+ warnOnceCache.set(key, true);
168
+ warn(...messages);
169
+ }
170
+ }
171
+ // Timer functionality for measuring durations
172
+ const timers = new Map();
173
+ export function time(label) {
174
+ timers.set(label, Date.now());
175
+ }
176
+ export function timeEnd(label) {
177
+ const start = timers.get(label);
178
+ if (start === undefined) {
179
+ warn(`Timer '${label}' does not exist`);
180
+ return;
181
+ }
182
+ const duration = Date.now() - start;
183
+ timers.delete(label);
184
+ const formatted = duration > 10000
185
+ ? `${Math.round(duration / 100) / 10}s`
186
+ : `${Math.round(duration)}ms`;
187
+ trace(`${label}: ${formatted}`);
188
+ }
189
+ // Utility function to create a prefixed logger instance
190
+ export function createLogger(prefix) {
191
+ return {
192
+ wait: (...messages) => wait(`[${prefix}]`, ...messages),
193
+ error: (...messages) => error(`[${prefix}]`, ...messages),
194
+ warn: (...messages) => warn(`[${prefix}]`, ...messages),
195
+ ready: (...messages) => ready(`[${prefix}]`, ...messages),
196
+ info: (...messages) => info(`[${prefix}]`, ...messages),
197
+ success: (...messages) => success(`[${prefix}]`, ...messages),
198
+ event: (...messages) => event(`[${prefix}]`, ...messages),
199
+ trace: (...messages) => trace(`[${prefix}]`, ...messages),
200
+ warnOnce: (...messages) => warnOnce(`[${prefix}]`, ...messages),
201
+ time: (label) => time(`${prefix}:${label}`),
202
+ timeEnd: (label) => timeEnd(`${prefix}:${label}`),
203
+ };
204
+ }
205
+ // Export a default logger instance
206
+ const logger = {
207
+ wait,
208
+ error,
209
+ warn,
210
+ ready,
211
+ info,
212
+ success,
213
+ event,
214
+ trace,
215
+ warnOnce,
216
+ time,
217
+ timeEnd,
218
+ bootstrap,
219
+ createLogger,
220
+ // Color utilities
221
+ colors: {
222
+ bold,
223
+ dim,
224
+ red,
225
+ green,
226
+ yellow,
227
+ blue,
228
+ magenta,
229
+ cyan,
230
+ white,
231
+ gray,
232
+ purple,
233
+ bgRed,
234
+ bgGreen,
235
+ bgYellow,
236
+ bgBlue,
237
+ bgMagenta,
238
+ bgCyan,
239
+ bgWhite,
240
+ },
241
+ };
242
+ export default logger;
243
+ // Example usage helper
244
+ export function logAppStartup(options) {
245
+ const { name, version, port, host = 'localhost', environment } = options;
246
+ bootstrap(bold(purple(`▶ ${name} ${version}`)));
247
+ bootstrap(`- Local: http://${host}:${port}`);
248
+ if (host !== 'localhost') {
249
+ bootstrap(`- Network: http://${getNetworkAddress()}:${port}`);
250
+ }
251
+ if (environment) {
252
+ bootstrap(`- Environment: ${environment}`);
253
+ }
254
+ info('');
255
+ }
256
+ // Helper to get network address
257
+ function getNetworkAddress() {
258
+ const os = require('os');
259
+ const interfaces = os.networkInterfaces();
260
+ for (const name of Object.keys(interfaces)) {
261
+ for (const iface of interfaces[name]) {
262
+ if (iface.family === 'IPv4' && !iface.internal) {
263
+ return iface.address;
264
+ }
265
+ }
266
+ }
267
+ return 'localhost';
268
+ }
269
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * OFFENSIVE PROGRAMMING PRIMITIVES
3
+ *
4
+ * "A confused program SHOULD scream" - John Carmack
5
+ *
6
+ * These utilities are the ANTITHESIS of defensive programming.
7
+ *
8
+ * Defensive programming: try/catch, error recovery, graceful degradation, silent failures
9
+ * Offensive programming: FAIL LOUD, FAIL FAST, NO RECOVERY, CRASH EARLY
10
+ *
11
+ * We don't handle errors - we make them catastrophic.
12
+ * We don't recover - we crash.
13
+ * We don't validate and continue - we assert and panic.
14
+ *
15
+ * This approach makes bugs IMPOSSIBLE to ignore:
16
+ * - Wrong assumptions? CRASH
17
+ * - Invalid state? CRASH
18
+ * - "Impossible" error? CRASH
19
+ *
20
+ * The only acceptable response to confusion is to scream and die.
21
+ */
22
+ /**
23
+ * Assert exits with error if condition is false.
24
+ * Use for validating preconditions and invariants.
25
+ *
26
+ * @example
27
+ * function sendPacket(data: Buffer, port: number) {
28
+ * assert(data.length > 0, 'empty packet')
29
+ * assert(port > 0 && port < 65536, 'invalid port:', port)
30
+ * // Now safe to proceed
31
+ * }
32
+ */
33
+ export declare function assert(condition: boolean, ...msg: any[]): asserts condition;
34
+ /**
35
+ * Must unwraps a value that may throw and exits if error occurs.
36
+ * Use for operations that should never fail in correct code.
37
+ *
38
+ * @example
39
+ * const data = must(() => JSON.parse(staticJsonString))
40
+ * const regex = must(() => new RegExp('^\\d+$'))
41
+ */
42
+ export declare function must<T>(fn: () => T): T;
43
+ /**
44
+ * Check exits cleanly with formatted error message if error is not null/undefined.
45
+ * Use for expected errors: file not found, network issues, permissions, etc.
46
+ *
47
+ * @example
48
+ * try {
49
+ * const data = await fs.readFile(userFile)
50
+ * } catch (err) {
51
+ * check(err) // exits with error message
52
+ * }
53
+ */
54
+ export declare function check(err: any, ...messages: string[]): void;
55
+ /**
56
+ * Panic immediately exits with error message.
57
+ * Use when the program reaches an impossible state.
58
+ *
59
+ * @example
60
+ * switch (state) {
61
+ * case 'ready': handleReady(); break
62
+ * case 'loading': handleLoading(); break
63
+ * default: panic('impossible state:', state)
64
+ * }
65
+ */
66
+ export declare function panic(...msg: any[]): never;
67
+ export declare const offensive: {
68
+ assert: typeof assert;
69
+ must: typeof must;
70
+ check: typeof check;
71
+ panic: typeof panic;
72
+ };
73
+ //# sourceMappingURL=offensive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"offensive.d.ts","sourceRoot":"","sources":["../src/offensive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAKH;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAM3E;AAED;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAOtC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAS3D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,KAAK,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAI1C;AAED,eAAO,MAAM,SAAS;;;;;CAKrB,CAAA"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * OFFENSIVE PROGRAMMING PRIMITIVES
3
+ *
4
+ * "A confused program SHOULD scream" - John Carmack
5
+ *
6
+ * These utilities are the ANTITHESIS of defensive programming.
7
+ *
8
+ * Defensive programming: try/catch, error recovery, graceful degradation, silent failures
9
+ * Offensive programming: FAIL LOUD, FAIL FAST, NO RECOVERY, CRASH EARLY
10
+ *
11
+ * We don't handle errors - we make them catastrophic.
12
+ * We don't recover - we crash.
13
+ * We don't validate and continue - we assert and panic.
14
+ *
15
+ * This approach makes bugs IMPOSSIBLE to ignore:
16
+ * - Wrong assumptions? CRASH
17
+ * - Invalid state? CRASH
18
+ * - "Impossible" error? CRASH
19
+ *
20
+ * The only acceptable response to confusion is to scream and die.
21
+ */
22
+ import { log } from './universal/log.js';
23
+ import { runtime } from './runtime.js';
24
+ /**
25
+ * Assert exits with error if condition is false.
26
+ * Use for validating preconditions and invariants.
27
+ *
28
+ * @example
29
+ * function sendPacket(data: Buffer, port: number) {
30
+ * assert(data.length > 0, 'empty packet')
31
+ * assert(port > 0 && port < 65536, 'invalid port:', port)
32
+ * // Now safe to proceed
33
+ * }
34
+ */
35
+ export function assert(condition, ...msg) {
36
+ if (!condition) {
37
+ const message = msg.length > 0 ? msg.join(' ') : 'assertion failed';
38
+ log.error(message);
39
+ runtime.exit(1);
40
+ }
41
+ }
42
+ /**
43
+ * Must unwraps a value that may throw and exits if error occurs.
44
+ * Use for operations that should never fail in correct code.
45
+ *
46
+ * @example
47
+ * const data = must(() => JSON.parse(staticJsonString))
48
+ * const regex = must(() => new RegExp('^\\d+$'))
49
+ */
50
+ export function must(fn) {
51
+ try {
52
+ return fn();
53
+ }
54
+ catch (error) {
55
+ log.error(error);
56
+ return runtime.exit(1);
57
+ }
58
+ }
59
+ /**
60
+ * Check exits cleanly with formatted error message if error is not null/undefined.
61
+ * Use for expected errors: file not found, network issues, permissions, etc.
62
+ *
63
+ * @example
64
+ * try {
65
+ * const data = await fs.readFile(userFile)
66
+ * } catch (err) {
67
+ * check(err) // exits with error message
68
+ * }
69
+ */
70
+ export function check(err, ...messages) {
71
+ if (err) {
72
+ if (messages.length > 0) {
73
+ log.error(messages.join(' '));
74
+ }
75
+ else {
76
+ log.error(err);
77
+ }
78
+ runtime.exit(1);
79
+ }
80
+ }
81
+ /**
82
+ * Panic immediately exits with error message.
83
+ * Use when the program reaches an impossible state.
84
+ *
85
+ * @example
86
+ * switch (state) {
87
+ * case 'ready': handleReady(); break
88
+ * case 'loading': handleLoading(); break
89
+ * default: panic('impossible state:', state)
90
+ * }
91
+ */
92
+ export function panic(...msg) {
93
+ const message = msg.length > 0 ? msg.join(' ') : 'panic';
94
+ log.error(message);
95
+ return runtime.exit(1);
96
+ }
97
+ export const offensive = {
98
+ assert,
99
+ must,
100
+ check,
101
+ panic,
102
+ };
103
+ //# sourceMappingURL=offensive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"offensive.js","sourceRoot":"","sources":["../src/offensive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,MAAM,CAAC,SAAkB,EAAE,GAAG,GAAU;IACtD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAA;QACnE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,IAAI,CAAI,EAAW;IACjC,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,CAAA;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAChB,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAU,CAAA;IACjC,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,KAAK,CAAC,GAAQ,EAAE,GAAG,QAAkB;IACnD,IAAI,GAAG,EAAE,CAAC;QACR,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QAC/B,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAChB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,KAAK,CAAC,GAAG,GAAU;IACjC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;IACxD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAClB,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACxB,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,MAAM;IACN,IAAI;IACJ,KAAK;IACL,KAAK;CACN,CAAA"}
package/dist/path.d.ts ADDED
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Path utilities for consistent path handling across the library
3
+ */
4
+ declare class PathOps {
5
+ /**
6
+ * Resolve a path relative to the calling module
7
+ * Pass import.meta.url as the second parameter to resolve relative to your module
8
+ *
9
+ * @example
10
+ * // In some module, resolve a file relative to that module:
11
+ * const configPath = path.resolve('./config.json', import.meta.url)
12
+ */
13
+ resolve(targetPath: string, baseUrl?: string): string;
14
+ /**
15
+ * Join path segments
16
+ */
17
+ join(...segments: string[]): string;
18
+ /**
19
+ * Get the directory name of a path
20
+ */
21
+ dirname(p: string): string;
22
+ /**
23
+ * Get the base name of a path
24
+ */
25
+ basename(p: string, ext?: string): string;
26
+ /**
27
+ * Get the extension of a path
28
+ */
29
+ extname(p: string): string;
30
+ /**
31
+ * Parse a path into its components
32
+ */
33
+ parse(p: string): {
34
+ root: string;
35
+ dir: string;
36
+ base: string;
37
+ ext: string;
38
+ name: string;
39
+ };
40
+ /**
41
+ * Check if a path is absolute
42
+ */
43
+ isAbsolute(p: string): boolean;
44
+ /**
45
+ * Get the relative path from one path to another
46
+ */
47
+ relative(from: string, to: string): string;
48
+ /**
49
+ * Convert a file:// URL to a path
50
+ */
51
+ fromFileUrl(url: string): string;
52
+ /**
53
+ * Get the directory from a file:// URL
54
+ */
55
+ dirnameFromUrl(url: string): string;
56
+ /**
57
+ * Resolve to absolute path
58
+ */
59
+ absolute(...segments: string[]): string;
60
+ /**
61
+ * Get current working directory
62
+ */
63
+ cwd(): string;
64
+ }
65
+ export declare const path: PathOps;
66
+ export {};
67
+ //# sourceMappingURL=path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../src/path.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,cAAM,OAAO;IACX;;;;;;;OAOG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAwBrD;;OAEG;IACH,IAAI,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM;IAInC;;OAEG;IACH,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAI1B;;OAEG;IACH,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM;IAIzC;;OAEG;IACH,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAI1B;;OAEG;IACH,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG;QAChB,IAAI,EAAE,MAAM,CAAA;QACZ,GAAG,EAAE,MAAM,CAAA;QACX,IAAI,EAAE,MAAM,CAAA;QACZ,GAAG,EAAE,MAAM,CAAA;QACX,IAAI,EAAE,MAAM,CAAA;KACb;IAID;;OAEG;IACH,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO;IAI9B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM;IAI1C;;OAEG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAOhC;;OAEG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAInC;;OAEG;IACH,QAAQ,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM;IAIvC;;OAEG;IACH,GAAG,IAAI,MAAM;CAGd;AAED,eAAO,MAAM,IAAI,SAAgB,CAAA"}
package/dist/path.js ADDED
@@ -0,0 +1,107 @@
1
+ import { fileURLToPath } from 'url';
2
+ import { dirname, join, resolve, isAbsolute, relative, basename, extname, parse } from 'path';
3
+ /**
4
+ * Path utilities for consistent path handling across the library
5
+ */
6
+ class PathOps {
7
+ /**
8
+ * Resolve a path relative to the calling module
9
+ * Pass import.meta.url as the second parameter to resolve relative to your module
10
+ *
11
+ * @example
12
+ * // In some module, resolve a file relative to that module:
13
+ * const configPath = path.resolve('./config.json', import.meta.url)
14
+ */
15
+ resolve(targetPath, baseUrl) {
16
+ // If absolute path, return as-is
17
+ if (isAbsolute(targetPath)) {
18
+ return targetPath;
19
+ }
20
+ // If we have a base URL (import.meta.url), resolve relative to it
21
+ if (baseUrl) {
22
+ if (baseUrl.startsWith('file://')) {
23
+ const basePath = fileURLToPath(baseUrl);
24
+ const baseDir = dirname(basePath);
25
+ return join(baseDir, targetPath);
26
+ }
27
+ // If baseUrl is a regular path, use it as base directory
28
+ if (isAbsolute(baseUrl)) {
29
+ const baseDir = dirname(baseUrl);
30
+ return join(baseDir, targetPath);
31
+ }
32
+ }
33
+ // Default to resolving from current working directory
34
+ return resolve(process.cwd(), targetPath);
35
+ }
36
+ /**
37
+ * Join path segments
38
+ */
39
+ join(...segments) {
40
+ return join(...segments);
41
+ }
42
+ /**
43
+ * Get the directory name of a path
44
+ */
45
+ dirname(p) {
46
+ return dirname(p);
47
+ }
48
+ /**
49
+ * Get the base name of a path
50
+ */
51
+ basename(p, ext) {
52
+ return basename(p, ext);
53
+ }
54
+ /**
55
+ * Get the extension of a path
56
+ */
57
+ extname(p) {
58
+ return extname(p);
59
+ }
60
+ /**
61
+ * Parse a path into its components
62
+ */
63
+ parse(p) {
64
+ return parse(p);
65
+ }
66
+ /**
67
+ * Check if a path is absolute
68
+ */
69
+ isAbsolute(p) {
70
+ return isAbsolute(p);
71
+ }
72
+ /**
73
+ * Get the relative path from one path to another
74
+ */
75
+ relative(from, to) {
76
+ return relative(from, to);
77
+ }
78
+ /**
79
+ * Convert a file:// URL to a path
80
+ */
81
+ fromFileUrl(url) {
82
+ if (url.startsWith('file://')) {
83
+ return fileURLToPath(url);
84
+ }
85
+ return url;
86
+ }
87
+ /**
88
+ * Get the directory from a file:// URL
89
+ */
90
+ dirnameFromUrl(url) {
91
+ return dirname(this.fromFileUrl(url));
92
+ }
93
+ /**
94
+ * Resolve to absolute path
95
+ */
96
+ absolute(...segments) {
97
+ return resolve(...segments);
98
+ }
99
+ /**
100
+ * Get current working directory
101
+ */
102
+ cwd() {
103
+ return process.cwd();
104
+ }
105
+ }
106
+ export const path = new PathOps();
107
+ //# sourceMappingURL=path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.js","sourceRoot":"","sources":["../src/path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAA;AAE7F;;GAEG;AACH,MAAM,OAAO;IACX;;;;;;;OAOG;IACH,OAAO,CAAC,UAAkB,EAAE,OAAgB;QAC1C,iCAAiC;QACjC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,OAAO,UAAU,CAAA;QACnB,CAAC;QAED,kEAAkE;QAClE,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAClC,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;gBACvC,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;gBACjC,OAAO,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;YAClC,CAAC;YACD,yDAAyD;YACzD,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;gBAChC,OAAO,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;YAClC,CAAC;QACH,CAAC;QAED,sDAAsD;QACtD,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAA;IAC3C,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,GAAG,QAAkB;QACxB,OAAO,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAA;IAC1B,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,CAAS;QACf,OAAO,OAAO,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,CAAS,EAAE,GAAY;QAC9B,OAAO,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACzB,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,CAAS;QACf,OAAO,OAAO,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,CAAS;QAOb,OAAO,KAAK,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,CAAS;QAClB,OAAO,UAAU,CAAC,CAAC,CAAC,CAAA;IACtB,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,IAAY,EAAE,EAAU;QAC/B,OAAO,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAC3B,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,GAAW;QACrB,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,OAAO,aAAa,CAAC,GAAG,CAAC,CAAA;QAC3B,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,GAAW;QACxB,OAAO,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAA;IACvC,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,GAAG,QAAkB;QAC5B,OAAO,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAA;IAC7B,CAAC;IAED;;OAEG;IACH,GAAG;QACD,OAAO,OAAO,CAAC,GAAG,EAAE,CAAA;IACtB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,OAAO,EAAE,CAAA"}