@adriangalilea/utils 0.4.0 → 0.5.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.
package/README.md CHANGED
@@ -107,12 +107,14 @@ format.percentage(123.456) // "123%"
107
107
 
108
108
  ### Offensive Programming
109
109
 
110
- Fail loud, fail fast. All primitives throw `Panic` — an uncaught `Panic` crashes the process with a full stack trace. Zero dependencies, works identically in Node, Deno, Bun, and browsers.
110
+ Fail loud, fail fast. Zero dependencies, works in Node, Deno, Bun, and browsers.
111
+
112
+ Two kinds of errors, kept separate: **`Panic`** (bugs in us — crash the process) and **`SourcedError`** (boundary failures — handle per-source).
111
113
 
112
114
  ```typescript
113
- import { assert, panic, must, unwrap, Panic } from '@adriangalilea/utils'
115
+ import { assert, panic, assertNever, must, unwrap, Panic, SourcedError, isSourcedError } from '@adriangalilea/utils'
114
116
 
115
- // Assert invariants — narrows types
117
+ // Assert invariants — narrows types via `asserts condition`
116
118
  assert(port > 0 && port < 65536, 'invalid port:', port)
117
119
 
118
120
  // Impossible state
@@ -121,33 +123,66 @@ switch (state) {
121
123
  default: panic('impossible state:', state)
122
124
  }
123
125
 
126
+ // Exhaustiveness check — TS compile error if you miss a case
127
+ type Event = { kind: 'click' } | { kind: 'hover' } | { kind: 'scroll' }
128
+ function handle(e: Event) {
129
+ switch (e.kind) {
130
+ case 'click': return handleClick()
131
+ case 'hover': return handleHover()
132
+ // forgot 'scroll' → TS error: Argument of type '{ kind: "scroll" }' not assignable to 'never'
133
+ default: return assertNever(e)
134
+ }
135
+ }
136
+ // Add a new variant to Event → every assertNever site lights up at compile time.
137
+
124
138
  // Unwrap operations that shouldn't fail (sync + async)
125
139
  const data = must(() => JSON.parse(staticJsonString))
126
140
  const file = must(() => readFileSync(path))
127
141
  const resp = await must(() => fetch(url))
128
142
 
129
- // Unwrap nullable values — type narrows T | null | undefined → T in one expression
130
- // (assert needs two statements, unwrap does it inline)
143
+ // Unwrap nullable values — T | null | undefined → T in one expression
131
144
  const user = unwrap(db.findUser(id), 'user not found:', id)
132
145
  const el = unwrap(document.getElementById('app'))
146
+ ```
147
+
148
+ #### Typed boundary errors — `SourcedError`
133
149
 
134
- // must() replaces try/catch boilerplate:
135
- // try { return readFileSync(path, 'utf-8') }
136
- // catch (err) { check(err) }
137
- // becomes:
138
- return must(() => readFileSync(path, 'utf-8'))
139
-
140
- // Panic is a distinct error class — distinguishes bugs from runtime errors
141
- // In a server: let Panics crash, handle everything else
142
- app.use((err, req, res, next) => {
143
- if (err instanceof Panic) throw err // bug, re-throw, let it crash
144
- res.status(500).json({ error: 'internal error' })
145
- })
146
-
147
- // In tests: assert that code panics
148
- expect(() => assert(false, 'boom')).toThrow(Panic)
150
+ Every external system call should wear its source. When it fails, carry forensics:
151
+
152
+ ```typescript
153
+ import { SourcedError, isSourcedError, Panic } from '@adriangalilea/utils'
154
+
155
+ try {
156
+ return await stripe.charges.create({ customer, amount })
157
+ } catch (e) {
158
+ throw new SourcedError({
159
+ source: 'stripe',
160
+ operation: 'charge_customer',
161
+ message: e instanceof Error ? e.message : String(e),
162
+ status: (e as any)?.statusCode,
163
+ cause: e,
164
+ context: { customer, amount },
165
+ })
166
+ }
167
+
168
+ // At catch boundaries — keep Panics and SourcedErrors separate:
169
+ try { await doWork() }
170
+ catch (e) {
171
+ if (e instanceof Panic) throw e // bug in us — crash
172
+ if (isSourcedError(e, 'stripe') && e.status === 402) {
173
+ // TS knows e.source === 'stripe' here (generic narrows)
174
+ return { error: 'card declined' }
175
+ }
176
+ if (isSourcedError(e)) {
177
+ logger.error(`[${e.source}:${e.operation}]`, e.toJSON()) // structured forensics
178
+ throw e
179
+ }
180
+ throw e // unknown — re-throw
181
+ }
149
182
  ```
150
183
 
184
+ Every `SourcedError` carries `source`, `operation`, `status`, `context`, and the original exception via `cause`. Call `.toJSON()` for serialization across process boundaries.
185
+
151
186
  ## Features
152
187
 
153
188
  - **Logger**: Next.js-style colored console output with symbols
@@ -158,7 +193,7 @@ expect(() => assert(false, 'boom')).toThrow(Panic)
158
193
  - Percentage and basis point utilities
159
194
  - Fiat and stablecoin detection
160
195
  - **Format**: Number and currency formatting with compact notation
161
- - **Offensive Programming**: assert, panic, must, unwrap — all throw `Panic` with full stack traces
196
+ - **Offensive Programming**: assert, panic, assertNever, must, unwrap (throw `Panic`) + SourcedError for typed boundary failures
162
197
  - **File Operations**: Read, write with automatic path resolution
163
198
  - **Directory Operations**: Create, list, walk directories
164
199
  - **KEV**: Redis-style environment variable management with monorepo support
@@ -186,23 +221,33 @@ dir.create(xdg.state('notify'))
186
221
 
187
222
  ### Unseen
188
223
 
189
- Persistent dedup filter for arrays of objects. Remembers which IDs it has seen across runs, returns only the new ones.
224
+ "What's new since last time?" — filters an array of objects to only the ones you haven't seen before. Remembers across runs.
190
225
 
191
226
  ```typescript
192
227
  import { unseen } from '@adriangalilea/utils'
193
228
 
194
- type Message = { id: string, text: string }
195
-
196
- const messages: Message[] = await fetchMessages()
229
+ const messages = await fetchMessages()
197
230
  const newMessages = await unseen('messages', messages, 'id')
198
- // 1st run: 3 messages → returns 3. 2nd run: same 3 → returns []. 3rd run: 5 → returns 2 new.
231
+ ```
199
232
 
200
- for (const m of newMessages) console.log(m.text)
233
+ 1st run:
234
+ ```
235
+ messages = [{ id: '1', from: 'alice', text: 'hi' }]
236
+ newMessages = [{ id: '1', from: 'alice', text: 'hi' }]
201
237
  ```
202
238
 
203
- The third argument is the field name that uniquely identifies each item (e.g. `'id'`, `'messageId'`, `'bdnsCode'`). Type-safe — autocompletes valid fields, catches typos at compile time.
239
+ 2nd run, no new message:
240
+ ```
241
+ newMessages = []
242
+ ```
243
+
244
+ 3rd run, bob replied:
245
+ ```
246
+ messages = [{ id: '1', ... }, { id: '2', from: 'bob', text: 'hey' }]
247
+ newMessages = [{ id: '2', from: 'bob', text: 'hey' }]
248
+ ```
204
249
 
205
- State persists at `~/.local/state/unseen/{namespace}.json`.
250
+ Saves state to: `$XDG_STATE_HOME/unseen/{name}.json`
206
251
 
207
252
  ## Release
208
253
 
@@ -1,29 +1,31 @@
1
1
  /**
2
- * OFFENSIVE PROGRAMMING PRIMITIVES
2
+ * Offensive programming primitives + typed boundary errors.
3
3
  *
4
- * "A confused program SHOULD scream" - John Carmack
4
+ * "A confused program SHOULD scream." John Carmack
5
5
  *
6
6
  * Throw, always. An uncaught Panic crashes the process with a full stack trace.
7
7
  * Zero dependencies. Works identically in Node, Deno, Bun, and browsers.
8
8
  *
9
- * Four primitives:
10
- * assert(cond, ...msg) - invariant checking, narrows types
11
- * panic(...msg) - impossible state reached
12
- * must(() => expr) - unwrap-or-die for operations (sync + async)
13
- * unwrap(value, ...msg) - unwrap nullable values
9
+ * Fail-fast primitives (throw Panic — bugs in us):
10
+ * assert(cond, ...msg) invariant checking, narrows types via `asserts`
11
+ * panic(...msg) impossible state reached
12
+ * assertNever(value, ...msg) exhaustiveness check compile error on missed cases
13
+ * must(() => expr) unwrap-or-die for operations (sync + async)
14
+ * unwrap(value, ...msg) unwrap nullable T | null | undefined → T
14
15
  *
15
- * must() replaces the old try/catch/check pattern:
16
+ * Typed boundary errors (throw SourcedError the external system failed):
17
+ * SourcedError typed error with source/operation/status/context
18
+ * isSourcedError(e, source?) type guard for catch-site narrowing
16
19
  *
17
- * // before: 5 lines
18
- * try {
19
- * const data = readFileSync(path, 'utf-8')
20
- * return data
21
- * } catch (err) {
22
- * check(err)
23
- * }
20
+ * Panics are bugs. SourcedErrors are boundary failures. Keep them separate at
21
+ * catch boundaries:
24
22
  *
25
- * // after: 1 line
26
- * return must(() => readFileSync(path, 'utf-8'))
23
+ * try { await doWork() }
24
+ * catch (e) {
25
+ * if (e instanceof Panic) throw e // bug in us — crash
26
+ * if (isSourcedError(e, 'stripe')) { ... } // stripe failed — handle
27
+ * throw e // unknown — re-throw
28
+ * }
27
29
  */
28
30
  /**
29
31
  * Distinct error class for offensive programming failures.
@@ -61,6 +63,23 @@ export declare function assert(condition: boolean, ...msg: any[]): asserts condi
61
63
  * }
62
64
  */
63
65
  export declare function panic(...msg: any[]): never;
66
+ /**
67
+ * Exhaustiveness check — compile error if a switch/if misses a case.
68
+ * The `never` type means TS won't let you call this if all cases are handled.
69
+ * Add a new variant to a union → every assertNever site lights up at compile time.
70
+ *
71
+ * @example
72
+ * type Event = { kind: 'click' } | { kind: 'hover' } | { kind: 'scroll' }
73
+ * function handle(e: Event) {
74
+ * switch (e.kind) {
75
+ * case 'click': return handleClick()
76
+ * case 'hover': return handleHover()
77
+ * // forgot 'scroll' → TS error: Argument of type '{ kind: "scroll" }' not assignable to 'never'
78
+ * default: assertNever(e)
79
+ * }
80
+ * }
81
+ */
82
+ export declare function assertNever(value: never, ...msg: any[]): never;
64
83
  /**
65
84
  * Must unwraps an operation that should never fail. Handles sync and async.
66
85
  *
@@ -85,11 +104,64 @@ export declare function must<T>(fn: () => T): T;
85
104
  * const el = unwrap(document.getElementById('app'))
86
105
  */
87
106
  export declare function unwrap<T>(value: T | null | undefined, ...msg: any[]): T;
107
+ /**
108
+ * Typed error from a named external source with structured context.
109
+ *
110
+ * Raise at boundaries with the messy world (HTTP APIs, databases, external
111
+ * processes). Every SourcedError carries enough context to reconstruct the
112
+ * failure without a debugger.
113
+ *
114
+ * @example
115
+ * try {
116
+ * return await stripe.charges.create({ customer, amount })
117
+ * } catch (e) {
118
+ * throw new SourcedError({
119
+ * source: 'stripe',
120
+ * operation: 'charge_customer',
121
+ * message: e instanceof Error ? e.message : String(e),
122
+ * status: (e as any)?.statusCode,
123
+ * cause: e,
124
+ * context: { customer, amount },
125
+ * })
126
+ * }
127
+ */
128
+ export declare class SourcedError<S extends string = string> extends Error {
129
+ readonly source: S;
130
+ readonly operation: string;
131
+ readonly status?: number;
132
+ readonly context: Record<string, unknown>;
133
+ constructor(args: {
134
+ source: S;
135
+ operation: string;
136
+ message: string;
137
+ status?: number;
138
+ cause?: unknown;
139
+ context?: Record<string, unknown>;
140
+ });
141
+ toJSON(): Record<string, unknown>;
142
+ }
143
+ /**
144
+ * Type guard for SourcedError. Optionally narrows to a specific source.
145
+ *
146
+ * @example
147
+ * try { await charge(customer, amount) }
148
+ * catch (e) {
149
+ * if (isSourcedError(e, 'stripe') && e.status === 402) {
150
+ * // TS knows e.source === 'stripe' here
151
+ * return 'card declined'
152
+ * }
153
+ * throw e
154
+ * }
155
+ */
156
+ export declare function isSourcedError<S extends string>(e: unknown, source?: S): e is SourcedError<S>;
88
157
  export declare const offensive: {
89
158
  Panic: typeof Panic;
90
159
  assert: typeof assert;
91
160
  panic: typeof panic;
161
+ assertNever: typeof assertNever;
92
162
  must: typeof must;
93
163
  unwrap: typeof unwrap;
164
+ SourcedError: typeof SourcedError;
165
+ isSourcedError: typeof isSourcedError;
94
166
  };
95
167
  //# sourceMappingURL=offensive.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"offensive.d.ts","sourceRoot":"","sources":["../src/offensive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH;;;;;;;;;;;;;GAaG;AACH,qBAAa,KAAM,SAAQ,KAAK;gBAClB,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAE3E;AAED;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAE1C;AAED;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;AACzD,wBAAgB,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;AAevC;;;;;;;;;;;;GAYG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAGvE;AAED,eAAO,MAAM,SAAS;;;;;;CAMrB,CAAA"}
1
+ {"version":3,"file":"offensive.d.ts","sourceRoot":"","sources":["../src/offensive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH;;;;;;;;;;;;;GAaG;AACH,qBAAa,KAAM,SAAQ,KAAK;gBAClB,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAE3E;AAED;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAE1C;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAE9D;AAED;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;AACzD,wBAAgB,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;AAevC;;;;;;;;;;;;GAYG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAGvE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAE,SAAQ,KAAK;IAChE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;IAClB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;gBAE7B,IAAI,EAAE;QAChB,MAAM,EAAE,CAAC,CAAA;QACT,SAAS,EAAE,MAAM,CAAA;QACjB,OAAO,EAAE,MAAM,CAAA;QACf,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,KAAK,CAAC,EAAE,OAAO,CAAA;QACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAClC;IAUD,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAUlC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAE7F;AAED,eAAO,MAAM,SAAS;;;;;;;;;CASrB,CAAA"}
package/dist/offensive.js CHANGED
@@ -1,29 +1,31 @@
1
1
  /**
2
- * OFFENSIVE PROGRAMMING PRIMITIVES
2
+ * Offensive programming primitives + typed boundary errors.
3
3
  *
4
- * "A confused program SHOULD scream" - John Carmack
4
+ * "A confused program SHOULD scream." John Carmack
5
5
  *
6
6
  * Throw, always. An uncaught Panic crashes the process with a full stack trace.
7
7
  * Zero dependencies. Works identically in Node, Deno, Bun, and browsers.
8
8
  *
9
- * Four primitives:
10
- * assert(cond, ...msg) - invariant checking, narrows types
11
- * panic(...msg) - impossible state reached
12
- * must(() => expr) - unwrap-or-die for operations (sync + async)
13
- * unwrap(value, ...msg) - unwrap nullable values
9
+ * Fail-fast primitives (throw Panic — bugs in us):
10
+ * assert(cond, ...msg) invariant checking, narrows types via `asserts`
11
+ * panic(...msg) impossible state reached
12
+ * assertNever(value, ...msg) exhaustiveness check compile error on missed cases
13
+ * must(() => expr) unwrap-or-die for operations (sync + async)
14
+ * unwrap(value, ...msg) unwrap nullable T | null | undefined → T
14
15
  *
15
- * must() replaces the old try/catch/check pattern:
16
+ * Typed boundary errors (throw SourcedError the external system failed):
17
+ * SourcedError typed error with source/operation/status/context
18
+ * isSourcedError(e, source?) type guard for catch-site narrowing
16
19
  *
17
- * // before: 5 lines
18
- * try {
19
- * const data = readFileSync(path, 'utf-8')
20
- * return data
21
- * } catch (err) {
22
- * check(err)
23
- * }
20
+ * Panics are bugs. SourcedErrors are boundary failures. Keep them separate at
21
+ * catch boundaries:
24
22
  *
25
- * // after: 1 line
26
- * return must(() => readFileSync(path, 'utf-8'))
23
+ * try { await doWork() }
24
+ * catch (e) {
25
+ * if (e instanceof Panic) throw e // bug in us — crash
26
+ * if (isSourcedError(e, 'stripe')) { ... } // stripe failed — handle
27
+ * throw e // unknown — re-throw
28
+ * }
27
29
  */
28
30
  /**
29
31
  * Distinct error class for offensive programming failures.
@@ -69,6 +71,25 @@ export function assert(condition, ...msg) {
69
71
  export function panic(...msg) {
70
72
  throw new Panic(msg.join(' ') || 'panic');
71
73
  }
74
+ /**
75
+ * Exhaustiveness check — compile error if a switch/if misses a case.
76
+ * The `never` type means TS won't let you call this if all cases are handled.
77
+ * Add a new variant to a union → every assertNever site lights up at compile time.
78
+ *
79
+ * @example
80
+ * type Event = { kind: 'click' } | { kind: 'hover' } | { kind: 'scroll' }
81
+ * function handle(e: Event) {
82
+ * switch (e.kind) {
83
+ * case 'click': return handleClick()
84
+ * case 'hover': return handleHover()
85
+ * // forgot 'scroll' → TS error: Argument of type '{ kind: "scroll" }' not assignable to 'never'
86
+ * default: assertNever(e)
87
+ * }
88
+ * }
89
+ */
90
+ export function assertNever(value, ...msg) {
91
+ throw new Panic(msg.join(' ') || `assertNever: unexpected value: ${JSON.stringify(value)}`);
92
+ }
72
93
  export function must(fn) {
73
94
  try {
74
95
  const result = fn();
@@ -101,11 +122,76 @@ export function unwrap(value, ...msg) {
101
122
  throw new Panic(msg.join(' ') || `unwrap: got ${value}`);
102
123
  return value;
103
124
  }
125
+ /**
126
+ * Typed error from a named external source with structured context.
127
+ *
128
+ * Raise at boundaries with the messy world (HTTP APIs, databases, external
129
+ * processes). Every SourcedError carries enough context to reconstruct the
130
+ * failure without a debugger.
131
+ *
132
+ * @example
133
+ * try {
134
+ * return await stripe.charges.create({ customer, amount })
135
+ * } catch (e) {
136
+ * throw new SourcedError({
137
+ * source: 'stripe',
138
+ * operation: 'charge_customer',
139
+ * message: e instanceof Error ? e.message : String(e),
140
+ * status: (e as any)?.statusCode,
141
+ * cause: e,
142
+ * context: { customer, amount },
143
+ * })
144
+ * }
145
+ */
146
+ export class SourcedError extends Error {
147
+ source;
148
+ operation;
149
+ status;
150
+ context;
151
+ constructor(args) {
152
+ const status = args.status != null ? ` status=${args.status}` : '';
153
+ super(`[${args.source}:${args.operation}${status}] ${args.message}`, { cause: args.cause });
154
+ this.name = 'SourcedError';
155
+ this.source = args.source;
156
+ this.operation = args.operation;
157
+ this.status = args.status;
158
+ this.context = args.context ?? {};
159
+ }
160
+ toJSON() {
161
+ return {
162
+ source: this.source,
163
+ operation: this.operation,
164
+ status: this.status,
165
+ message: this.message,
166
+ context: this.context,
167
+ cause: this.cause instanceof Error ? this.cause.message : this.cause != null ? String(this.cause) : null,
168
+ };
169
+ }
170
+ }
171
+ /**
172
+ * Type guard for SourcedError. Optionally narrows to a specific source.
173
+ *
174
+ * @example
175
+ * try { await charge(customer, amount) }
176
+ * catch (e) {
177
+ * if (isSourcedError(e, 'stripe') && e.status === 402) {
178
+ * // TS knows e.source === 'stripe' here
179
+ * return 'card declined'
180
+ * }
181
+ * throw e
182
+ * }
183
+ */
184
+ export function isSourcedError(e, source) {
185
+ return e instanceof SourcedError && (source === undefined || e.source === source);
186
+ }
104
187
  export const offensive = {
105
188
  Panic,
106
189
  assert,
107
190
  panic,
191
+ assertNever,
108
192
  must,
109
193
  unwrap,
194
+ SourcedError,
195
+ isSourcedError,
110
196
  };
111
197
  //# sourceMappingURL=offensive.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"offensive.js","sourceRoot":"","sources":["../src/offensive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,KAAM,SAAQ,KAAK;IAC9B,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,OAAO,CAAA;IACrB,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CAAC,SAAkB,EAAE,GAAG,GAAU;IACtD,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,CAAA;AACtE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,KAAK,CAAC,GAAG,GAAU;IACjC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,CAAA;AAC3C,CAAC;AAYD,MAAM,UAAU,IAAI,CAAI,EAAwB;IAC9C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,EAAE,EAAE,CAAA;QACnB,IAAI,MAAM,YAAY,OAAO,EAAE,CAAC;YAC9B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBACtB,MAAM,IAAI,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;YAC7D,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IAC7D,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,MAAM,CAAI,KAA2B,EAAE,GAAG,GAAU;IAClE,IAAI,KAAK,IAAI,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,eAAe,KAAK,EAAE,CAAC,CAAA;IAC3E,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,KAAK;IACL,MAAM;IACN,KAAK;IACL,IAAI;IACJ,MAAM;CACP,CAAA"}
1
+ {"version":3,"file":"offensive.js","sourceRoot":"","sources":["../src/offensive.ts"],"names":[],"mappings":"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"}
@@ -1,28 +1,28 @@
1
1
  /**
2
- * Persistent dedup filter for arrays of objects.
3
- *
4
- * You have objects with IDs. `unseen` remembers which IDs it has
5
- * seen across runs and returns only the new ones.
2
+ * "What's new since last time?" — filters an array of objects to only
3
+ * the ones you haven't seen before. Remembers across runs.
6
4
  *
7
5
  * ```ts
8
- * type Message = { id: string, text: string }
9
- *
10
- * const messages: Message[] = await fetchMessages()
6
+ * const messages = await fetchMessages()
11
7
  * const newMessages = await unseen('messages', messages, 'id')
12
- *
13
- * // 1st run: 3 messages exist → returns all 3
14
- * // 2nd run: same 3 messages → returns []
15
- * // 3rd run: 5 messages exist → returns the 2 new ones
16
8
  * ```
17
9
  *
18
- * Makes any script idempotent — run it once or a thousand times,
19
- * you only process each item once. Any scheduling works.
10
+ * 1st run:
11
+ * messages = [{ id: '1', from: 'alice', text: 'hi' }]
12
+ * newMessages = [{ id: '1', from: 'alice', text: 'hi' }]
13
+ *
14
+ * 2nd run, no new message:
15
+ * newMessages = []
16
+ *
17
+ * 3rd run, bob replied:
18
+ * messages = [{ id: '1', ... }, { id: '2', from: 'bob', text: 'hey' }]
19
+ * newMessages = [{ id: '2', from: 'bob', text: 'hey' }]
20
20
  *
21
- * State persists at `~/.local/state/unseen/{namespace}.json`
21
+ * Saves state to: `$XDG_STATE_HOME/unseen/{namespace}.json`
22
22
  *
23
23
  * @param namespace - Name for this seen-set (e.g. 'messages', 'orders')
24
24
  * @param items - Array of objects to filter
25
- * @param key - Which field is the unique ID (e.g. 'id', 'messageId', 'bdnsCode')
25
+ * @param key - Which field is the unique ID (e.g. 'id', 'messageId')
26
26
  * @returns Only items not seen in previous runs
27
27
  */
28
28
  export declare function unseen<T>(namespace: string, items: T[], key: keyof T & string): Promise<T[]>;
@@ -4,30 +4,30 @@ import { file } from './file.js';
4
4
  import { join, dirname } from 'node:path';
5
5
  const STORE_DIR = xdg.state('unseen');
6
6
  /**
7
- * Persistent dedup filter for arrays of objects.
8
- *
9
- * You have objects with IDs. `unseen` remembers which IDs it has
10
- * seen across runs and returns only the new ones.
7
+ * "What's new since last time?" — filters an array of objects to only
8
+ * the ones you haven't seen before. Remembers across runs.
11
9
  *
12
10
  * ```ts
13
- * type Message = { id: string, text: string }
14
- *
15
- * const messages: Message[] = await fetchMessages()
11
+ * const messages = await fetchMessages()
16
12
  * const newMessages = await unseen('messages', messages, 'id')
17
- *
18
- * // 1st run: 3 messages exist → returns all 3
19
- * // 2nd run: same 3 messages → returns []
20
- * // 3rd run: 5 messages exist → returns the 2 new ones
21
13
  * ```
22
14
  *
23
- * Makes any script idempotent — run it once or a thousand times,
24
- * you only process each item once. Any scheduling works.
15
+ * 1st run:
16
+ * messages = [{ id: '1', from: 'alice', text: 'hi' }]
17
+ * newMessages = [{ id: '1', from: 'alice', text: 'hi' }]
18
+ *
19
+ * 2nd run, no new message:
20
+ * newMessages = []
21
+ *
22
+ * 3rd run, bob replied:
23
+ * messages = [{ id: '1', ... }, { id: '2', from: 'bob', text: 'hey' }]
24
+ * newMessages = [{ id: '2', from: 'bob', text: 'hey' }]
25
25
  *
26
- * State persists at `~/.local/state/unseen/{namespace}.json`
26
+ * Saves state to: `$XDG_STATE_HOME/unseen/{namespace}.json`
27
27
  *
28
28
  * @param namespace - Name for this seen-set (e.g. 'messages', 'orders')
29
29
  * @param items - Array of objects to filter
30
- * @param key - Which field is the unique ID (e.g. 'id', 'messageId', 'bdnsCode')
30
+ * @param key - Which field is the unique ID (e.g. 'id', 'messageId')
31
31
  * @returns Only items not seen in previous runs
32
32
  */
33
33
  export async function unseen(namespace, items, key) {
@@ -1,6 +1,20 @@
1
1
  /**
2
2
  * A Next.js-style logger for TypeScript applications
3
3
  * Provides colored output with Unicode symbols for different log levels
4
+ *
5
+ * Known limitations:
6
+ * - Global level is frozen at import time (const). No runtime setLevel().
7
+ * - createLogger() is just a prefix wrapper, not a real scoped instance.
8
+ * No per-scope level control (can't silence 'bor' but keep 'bdns' verbose).
9
+ * - No withTag/child pattern — consumer can't control library log levels.
10
+ *
11
+ * Candidate replacement: consola (unjs). Same DX goals, solves all the above:
12
+ * - consola.level = N at runtime
13
+ * - consola.withTag('bdns') for scoped loggers that inherit global level
14
+ * - Pretty dev output, JSON in prod, browser support, 0 deps
15
+ * - https://github.com/unjs/consola
16
+ *
17
+ * TODO: test consola in dokploy instance before migrating.
4
18
  */
5
19
  export declare const bold: (str: string) => string;
6
20
  export declare const dim: (str: string) => string;
@@ -20,6 +34,9 @@ export declare const bgBlue: (str: string) => string;
20
34
  export declare const bgMagenta: (str: string) => string;
21
35
  export declare const bgCyan: (str: string) => string;
22
36
  export declare const bgWhite: (str: string) => string;
37
+ type LogLevelName = 'error' | 'warn' | 'info' | 'trace';
38
+ /** Set the global log level at runtime. Overrides LOG_LEVEL env var. */
39
+ export declare function setLogLevel(level: LogLevelName): void;
23
40
  export declare function bootstrap(...messages: string[]): void;
24
41
  export declare function wait(...messages: any[]): void;
25
42
  export declare function error(...messages: any[]): void;
@@ -59,6 +76,7 @@ declare const log: {
59
76
  timeEnd: typeof timeEnd;
60
77
  bootstrap: typeof bootstrap;
61
78
  createLogger: typeof createLogger;
79
+ setLogLevel: typeof setLogLevel;
62
80
  colors: {
63
81
  bold: (str: string) => string;
64
82
  dim: (str: string) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/universal/log.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/universal/log.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,20 @@
1
1
  /**
2
2
  * A Next.js-style logger for TypeScript applications
3
3
  * Provides colored output with Unicode symbols for different log levels
4
+ *
5
+ * Known limitations:
6
+ * - Global level is frozen at import time (const). No runtime setLevel().
7
+ * - createLogger() is just a prefix wrapper, not a real scoped instance.
8
+ * No per-scope level control (can't silence 'bor' but keep 'bdns' verbose).
9
+ * - No withTag/child pattern — consumer can't control library log levels.
10
+ *
11
+ * Candidate replacement: consola (unjs). Same DX goals, solves all the above:
12
+ * - consola.level = N at runtime
13
+ * - consola.withTag('bdns') for scoped loggers that inherit global level
14
+ * - Pretty dev output, JSON in prod, browser support, 0 deps
15
+ * - https://github.com/unjs/consola
16
+ *
17
+ * TODO: test consola in dokploy instance before migrating.
4
18
  */
5
19
  import { runtime } from '../runtime.js';
6
20
  // ANSI escape codes for colors
@@ -88,12 +102,8 @@ const LOG_LEVELS = {
88
102
  wait: 3,
89
103
  trace: 4,
90
104
  };
91
- // Get current log level from environment
92
- function getCurrentLogLevel() {
93
- const level = runtime.env('LOG_LEVEL')?.toLowerCase();
94
- if (!level)
95
- return LOG_LEVELS.info; // Default to info
96
- switch (level) {
105
+ function parseLogLevel(level) {
106
+ switch (level?.toLowerCase()) {
97
107
  case 'error': return LOG_LEVELS.error;
98
108
  case 'warn': return LOG_LEVELS.warn;
99
109
  case 'info': return LOG_LEVELS.info;
@@ -102,7 +112,11 @@ function getCurrentLogLevel() {
102
112
  default: return LOG_LEVELS.info;
103
113
  }
104
114
  }
105
- const currentLogLevel = getCurrentLogLevel();
115
+ let currentLogLevel = parseLogLevel(runtime.env('LOG_LEVEL'));
116
+ /** Set the global log level at runtime. Overrides LOG_LEVEL env var. */
117
+ export function setLogLevel(level) {
118
+ currentLogLevel = parseLogLevel(level);
119
+ }
106
120
  // LRU Cache for warn-once functionality
107
121
  class LRUCache {
108
122
  cache = new Map();
@@ -250,6 +264,7 @@ const log = {
250
264
  timeEnd,
251
265
  bootstrap,
252
266
  createLogger,
267
+ setLogLevel,
253
268
  // Color utilities
254
269
  colors: {
255
270
  bold,
@@ -1 +1 @@
1
- {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/universal/log.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/universal/log.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adriangalilea/utils",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "TypeScript utilities - logger, currency, formatter, and more",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",