skyr 0.1.2 → 0.2.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,146 @@
1
+ /**
2
+ * Type-safe error handling with Result types
3
+ * Inspired by Rust's Result<T, E>
4
+ */
5
+ /**
6
+ * Structured failure with code, message, and optional cause
7
+ */
8
+ export type Failure<Code extends string> = {
9
+ code: Code;
10
+ message: string;
11
+ cause?: unknown;
12
+ };
13
+ /**
14
+ * Result type - either success (Ok) or failure (Fail)
15
+ */
16
+ export type Result<T, E> = Ok<T, E> | Fail<T, E>;
17
+ /**
18
+ * Extract code literals from a Failure union type
19
+ * ExtractCodes<Failure<"A"> | Failure<"B">> = "A" | "B"
20
+ */
21
+ export type ExtractCodes<E> = E extends Failure<infer Code> ? Code : never;
22
+ /**
23
+ * Handler map for pattern matching on failure codes
24
+ * Provides autocomplete for available codes and narrows failure type per handler
25
+ */
26
+ export type FailureHandlers<E> = {
27
+ [K in ExtractCodes<E>]?: (failure: Extract<E, Failure<K>>) => any;
28
+ };
29
+ export declare class Ok<T, E> {
30
+ readonly value: T;
31
+ readonly _tag: "Ok";
32
+ constructor(value: T);
33
+ map<U>(fn: (value: T) => U): Result<U, E>;
34
+ map<U>(fn: (value: T) => Promise<U>): AsyncResult<U, E | Failure<"UNKNOWN_FAILURE">>;
35
+ map<U, F>(fn: (value: T) => Result<U, F>): Result<U, E | F>;
36
+ map<U, F>(fn: (value: T) => AsyncResult<U, F>): AsyncResult<U, E | F>;
37
+ mapFailure<F>(_fn: (failure: never) => F): Result<T, F>;
38
+ mapFailure(_handlers: FailureHandlers<never>): Result<T, never>;
39
+ inspect(fn: (value: T) => void): Result<T, E>;
40
+ inspectFailure(_fn: (failure: never) => void): Result<T, E>;
41
+ unwrap(): T;
42
+ unwrapOr<U>(_defaultValue: U): T | U;
43
+ expect(_message: string): T;
44
+ match<U>(handlers: {
45
+ ok: (value: T) => U;
46
+ failed: (failure: E) => U;
47
+ }): U;
48
+ isOk(): this is Ok<T, E>;
49
+ hasFailed(): this is Fail<T, E>;
50
+ [Symbol.iterator](): Generator<never, T, unknown>;
51
+ }
52
+ export declare class Fail<T, E> {
53
+ readonly failure: E;
54
+ readonly _tag: "Fail";
55
+ constructor(failure: E);
56
+ map<U>(_fn: (value: never) => U): Result<U, E>;
57
+ mapFailure<F>(fn: (failure: E) => F): Result<T, F>;
58
+ mapFailure<F>(fn: (failure: E) => Promise<F>): AsyncResult<T, F | Failure<"UNKNOWN_FAILURE">>;
59
+ mapFailure<U, F>(fn: (failure: E) => Result<U, F>): Result<T | U, F>;
60
+ mapFailure<U, F>(fn: (failure: E) => AsyncResult<U, F>): AsyncResult<T | U, F>;
61
+ mapFailure(handlers: FailureHandlers<E>): any;
62
+ inspect(_fn: (value: never) => void): Result<T, E>;
63
+ inspectFailure(fn: (failure: E) => void): Result<T, E>;
64
+ unwrap(): E;
65
+ unwrapOr<U>(defaultValue: U): T | U;
66
+ expect(message: string): never;
67
+ match<U>(handlers: {
68
+ ok: (value: T) => U;
69
+ failed: (failure: E) => U;
70
+ }): U;
71
+ isOk(): this is Ok<T, E>;
72
+ hasFailed(): this is Fail<T, E>;
73
+ [Symbol.iterator](): Generator<Fail<never, E>, T>;
74
+ }
75
+ /**
76
+ * AsyncResult wraps a Promise<Result<T, E>> and implements PromiseLike
77
+ * Allows chaining with .map/.mapFailure before awaiting
78
+ */
79
+ export declare class AsyncResult<T, E> implements PromiseLike<Result<T, E>> {
80
+ private promise;
81
+ constructor(promise: Promise<Result<T, E>>);
82
+ then<TResult1 = Result<T, E>, TResult2 = never>(onfulfilled?: ((value: Result<T, E>) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null): PromiseLike<TResult1 | TResult2>;
83
+ map<U, F>(fn: (value: T) => U | Promise<U> | Result<U, F> | AsyncResult<U, F>): AsyncResult<U, E | F | Failure<"UNKNOWN_FAILURE">>;
84
+ mapFailure<U, F>(fn: (failure: E) => F | Promise<F> | Result<U, F> | AsyncResult<U, F>): AsyncResult<T | U, F | Failure<"UNKNOWN_FAILURE">>;
85
+ mapFailure(handlers: FailureHandlers<E>): any;
86
+ inspect(fn: (value: T) => void): AsyncResult<T, E>;
87
+ inspectFailure(fn: (failure: E) => void): AsyncResult<T, E>;
88
+ unwrap(): Promise<T | E>;
89
+ unwrapOr<U>(defaultValue: U): Promise<T | U>;
90
+ expect(message: string): Promise<T>;
91
+ match<U>(handlers: {
92
+ ok: (value: T) => U;
93
+ failed: (failure: E) => U;
94
+ }): Promise<U>;
95
+ isOk(): Promise<boolean>;
96
+ hasFailed(): Promise<boolean>;
97
+ [Symbol.iterator](): Generator<AsyncResult<T, E>, T, unknown>;
98
+ }
99
+ /**
100
+ * Create a successful Result
101
+ */
102
+ export declare function ok<T>(value: T): Result<T, never>;
103
+ /**
104
+ * Create a structured failure
105
+ */
106
+ export declare function failure<Code extends string>(code: Code, message: string, cause?: unknown): Failure<Code>;
107
+ /**
108
+ * Create a failed Result
109
+ * Can be curried: fail("CODE") returns a factory function
110
+ */
111
+ export declare function fail<Code extends string>(code: Code): (message: string, cause?: unknown) => Result<never, Failure<Code>>;
112
+ export declare function fail<Code extends string>(code: Code, message: string, cause?: unknown): Result<never, Failure<Code>>;
113
+ /**
114
+ * Reusable factory for unknown failures
115
+ */
116
+ export declare const UnknownFailure: (message: string, cause?: unknown) => Result<never, Failure<"UNKNOWN_FAILURE">>;
117
+ /**
118
+ * Convert throwing function or Promise into a Result
119
+ * Catches any errors and converts them to Failure
120
+ */
121
+ export declare function fromThrowable<T>(promise: Promise<T>): AsyncResult<T, Failure<"UNKNOWN_FAILURE">>;
122
+ export declare function fromThrowable<T, E>(promise: Promise<T>, failureMapper: (error: unknown) => E): AsyncResult<T, E>;
123
+ export declare function fromThrowable<T>(fn: () => Promise<T>): AsyncResult<T, Failure<"UNKNOWN_FAILURE">>;
124
+ export declare function fromThrowable<T, E>(fn: () => Promise<T>, failureMapper: (error: unknown) => E): AsyncResult<T, E>;
125
+ export declare function fromThrowable<T>(fn: () => T): Result<T, Failure<"UNKNOWN_FAILURE">>;
126
+ export declare function fromThrowable<T, E>(fn: () => T, failureMapper: (error: unknown) => E): Result<T, E>;
127
+ /**
128
+ * Wrap a function to return Results instead of throwing
129
+ */
130
+ export declare function wrapThrowable<Args extends any[], T>(fn: (...args: Args) => Promise<T>): (...args: Args) => AsyncResult<T, Failure<"UNKNOWN_FAILURE">>;
131
+ export declare function wrapThrowable<Args extends any[], T, E>(fn: (...args: Args) => Promise<T>, failureMapper: (error: unknown) => E): (...args: Args) => AsyncResult<T, E>;
132
+ export declare function wrapThrowable<Args extends any[], T>(fn: (...args: Args) => T): (...args: Args) => Result<T, Failure<"UNKNOWN_FAILURE">>;
133
+ export declare function wrapThrowable<Args extends any[], T, E>(fn: (...args: Args) => T, failureMapper: (error: unknown) => E): (...args: Args) => Result<T, E>;
134
+ /**
135
+ * Check if value is a Fail result
136
+ */
137
+ export declare function hasFailed(value: unknown): value is Fail<unknown, unknown>;
138
+ /**
139
+ * Check if value is an Ok result
140
+ */
141
+ export declare function isOk(value: unknown): value is Ok<unknown, unknown>;
142
+ /**
143
+ * Check if value is any Result (Ok or Fail)
144
+ */
145
+ export declare function isResult(value: unknown): value is Result<unknown, unknown>;
146
+ //# sourceMappingURL=result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"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"}
package/dist/result.js ADDED
@@ -0,0 +1,419 @@
1
+ /**
2
+ * Type-safe error handling with Result types
3
+ * Inspired by Rust's Result<T, E>
4
+ */
5
+ // ============================================================================
6
+ // Ok Class - Represents Success
7
+ // ============================================================================
8
+ export class Ok {
9
+ value;
10
+ _tag = "Ok";
11
+ constructor(value) {
12
+ this.value = value;
13
+ }
14
+ map(fn) {
15
+ const result = fn(this.value);
16
+ // Handle Result types
17
+ if (result instanceof Ok || result instanceof Fail) {
18
+ return result;
19
+ }
20
+ // Handle AsyncResult
21
+ if (result instanceof AsyncResult) {
22
+ return result;
23
+ }
24
+ // Handle Promise
25
+ if (result instanceof Promise) {
26
+ return new AsyncResult(result
27
+ .then((v) => new Ok(v))
28
+ .catch((err) => new Fail(createUnknownFailure(err))));
29
+ }
30
+ // Handle plain value
31
+ return new Ok(result);
32
+ }
33
+ mapFailure(_fnOrHandlers) {
34
+ return this;
35
+ }
36
+ // Inspection methods (for side effects)
37
+ inspect(fn) {
38
+ fn(this.value);
39
+ return this;
40
+ }
41
+ inspectFailure(_fn) {
42
+ return this;
43
+ }
44
+ // Unwrapping methods
45
+ unwrap() {
46
+ return this.value;
47
+ }
48
+ unwrapOr(_defaultValue) {
49
+ return this.value;
50
+ }
51
+ expect(_message) {
52
+ return this.value;
53
+ }
54
+ // Pattern matching
55
+ match(handlers) {
56
+ return handlers.ok(this.value);
57
+ }
58
+ // Type guards
59
+ isOk() {
60
+ return true;
61
+ }
62
+ hasFailed() {
63
+ return false;
64
+ }
65
+ // Generator support - allows `yield* ok(value)` to unwrap the value
66
+ // deno-lint-ignore require-yield
67
+ *[Symbol.iterator]() {
68
+ return this.value;
69
+ }
70
+ }
71
+ // ============================================================================
72
+ // Fail Class - Represents Failure
73
+ // ============================================================================
74
+ export class Fail {
75
+ failure;
76
+ _tag = "Fail";
77
+ constructor(failure) {
78
+ this.failure = failure;
79
+ }
80
+ // Transformation methods
81
+ map(_fn) {
82
+ return this;
83
+ }
84
+ mapFailure(fnOrHandlers) {
85
+ // Handle pattern matching with handler map
86
+ if (typeof fnOrHandlers === "object" && fnOrHandlers !== null) {
87
+ const handlers = fnOrHandlers;
88
+ const failure = this.failure;
89
+ // Check if this failure has a code property and if there's a handler for it
90
+ if (failure && typeof failure === "object" && "code" in failure) {
91
+ const handler = handlers[failure.code];
92
+ if (handler) {
93
+ const result = handler(failure);
94
+ // Apply same logic as function form
95
+ if (result instanceof Ok || result instanceof Fail) {
96
+ return result;
97
+ }
98
+ if (result instanceof AsyncResult) {
99
+ return result;
100
+ }
101
+ if (result instanceof Promise) {
102
+ return new AsyncResult(result
103
+ .then((f) => new Fail(f))
104
+ .catch((err) => new Fail(createUnknownFailure(err))));
105
+ }
106
+ return new Fail(result);
107
+ }
108
+ }
109
+ // No handler found, pass through unchanged
110
+ return this;
111
+ }
112
+ // Handle function form
113
+ const fn = fnOrHandlers;
114
+ const result = fn(this.failure);
115
+ // Handle Result types
116
+ if (result instanceof Ok || result instanceof Fail) {
117
+ return result;
118
+ }
119
+ // Handle AsyncResult
120
+ if (result instanceof AsyncResult) {
121
+ return result;
122
+ }
123
+ // Handle Promise
124
+ if (result instanceof Promise) {
125
+ return new AsyncResult(result
126
+ .then((f) => new Fail(f))
127
+ .catch((err) => new Fail(createUnknownFailure(err))));
128
+ }
129
+ // Handle plain failure value
130
+ return new Fail(result);
131
+ }
132
+ // Inspection methods
133
+ inspect(_fn) {
134
+ return this;
135
+ }
136
+ inspectFailure(fn) {
137
+ fn(this.failure);
138
+ return this;
139
+ }
140
+ // Unwrapping methods
141
+ unwrap() {
142
+ return this.failure;
143
+ }
144
+ unwrapOr(defaultValue) {
145
+ return defaultValue;
146
+ }
147
+ expect(message) {
148
+ throw new globalThis.Error(`${message}: ${JSON.stringify(this.failure)}`);
149
+ }
150
+ // Pattern matching
151
+ match(handlers) {
152
+ return handlers.failed(this.failure);
153
+ }
154
+ // Type guards
155
+ isOk() {
156
+ return false;
157
+ }
158
+ hasFailed() {
159
+ return true;
160
+ }
161
+ // Generator support - allows `yield* fail(...)` to short-circuit
162
+ *[Symbol.iterator]() {
163
+ // @ts-expect-error -- This is structurally equivalent and safe
164
+ yield this;
165
+ // @ts-expect-error -- This is structurally equivalent and safe
166
+ return this;
167
+ }
168
+ }
169
+ // ============================================================================
170
+ // AsyncResult - Wraps Promise<Result<T, E>>
171
+ // ============================================================================
172
+ /**
173
+ * AsyncResult wraps a Promise<Result<T, E>> and implements PromiseLike
174
+ * Allows chaining with .map/.mapFailure before awaiting
175
+ */
176
+ export class AsyncResult {
177
+ promise;
178
+ constructor(promise) {
179
+ this.promise = promise;
180
+ }
181
+ // PromiseLike implementation - makes it awaitable
182
+ then(onfulfilled, onrejected) {
183
+ return this.promise.then(onfulfilled, onrejected);
184
+ }
185
+ // Transformation methods
186
+ map(fn) {
187
+ return new AsyncResult(this.promise.then(async (result) => {
188
+ if (!result.isOk()) {
189
+ return result;
190
+ }
191
+ const mapped = fn(result.value);
192
+ // Handle Result types
193
+ if (mapped instanceof Ok || mapped instanceof Fail) {
194
+ return mapped;
195
+ }
196
+ // Handle AsyncResult
197
+ if (mapped instanceof AsyncResult) {
198
+ return (await mapped);
199
+ }
200
+ // Handle Promise
201
+ if (mapped instanceof Promise) {
202
+ try {
203
+ const value = await mapped;
204
+ return new Ok(value);
205
+ }
206
+ catch (err) {
207
+ return new Fail(createUnknownFailure(err));
208
+ }
209
+ }
210
+ // Handle plain value
211
+ return new Ok(mapped);
212
+ }));
213
+ }
214
+ mapFailure(fnOrHandlers) {
215
+ return new AsyncResult(this.promise.then(async (result) => {
216
+ if (!result.hasFailed()) {
217
+ return result;
218
+ }
219
+ // Handle pattern matching with handler map
220
+ if (typeof fnOrHandlers === "object" &&
221
+ fnOrHandlers !== null &&
222
+ typeof fnOrHandlers !== "function") {
223
+ const handlers = fnOrHandlers;
224
+ const failure = result.failure;
225
+ // Check if this failure has a code property and if there's a handler for it
226
+ if (failure && typeof failure === "object" && "code" in failure) {
227
+ const handler = handlers[failure.code];
228
+ if (handler) {
229
+ const mapped = handler(failure);
230
+ // Apply same logic as function form below
231
+ if (mapped instanceof Ok || mapped instanceof Fail) {
232
+ return mapped;
233
+ }
234
+ if (mapped instanceof AsyncResult) {
235
+ return (await mapped);
236
+ }
237
+ if (mapped instanceof Promise) {
238
+ try {
239
+ const failureValue = await mapped;
240
+ return new Fail(failureValue);
241
+ }
242
+ catch (err) {
243
+ return new Fail(createUnknownFailure(err));
244
+ }
245
+ }
246
+ return new Fail(mapped);
247
+ }
248
+ }
249
+ // No handler found, pass through unchanged
250
+ return result;
251
+ }
252
+ // Handle function form
253
+ const fn = fnOrHandlers;
254
+ const mapped = fn(result.failure);
255
+ // Handle Result types
256
+ if (mapped instanceof Ok || mapped instanceof Fail) {
257
+ return mapped;
258
+ }
259
+ // Handle AsyncResult
260
+ if (mapped instanceof AsyncResult) {
261
+ return (await mapped);
262
+ }
263
+ // Handle Promise
264
+ if (mapped instanceof Promise) {
265
+ try {
266
+ const failure = await mapped;
267
+ return new Fail(failure);
268
+ }
269
+ catch (err) {
270
+ return new Fail(createUnknownFailure(err));
271
+ }
272
+ }
273
+ // Handle plain failure value
274
+ return new Fail(mapped);
275
+ }));
276
+ }
277
+ // Inspection methods
278
+ inspect(fn) {
279
+ return new AsyncResult(this.promise.then((result) => {
280
+ if (result.isOk()) {
281
+ fn(result.value);
282
+ }
283
+ return result;
284
+ }));
285
+ }
286
+ inspectFailure(fn) {
287
+ return new AsyncResult(this.promise.then((result) => {
288
+ if (result.hasFailed()) {
289
+ fn(result.failure);
290
+ }
291
+ return result;
292
+ }));
293
+ }
294
+ // Unwrapping methods
295
+ async unwrap() {
296
+ const result = await this.promise;
297
+ return result.unwrap();
298
+ }
299
+ async unwrapOr(defaultValue) {
300
+ const result = await this.promise;
301
+ return result.unwrapOr(defaultValue);
302
+ }
303
+ async expect(message) {
304
+ const result = await this.promise;
305
+ return result.expect(message);
306
+ }
307
+ // Pattern matching
308
+ async match(handlers) {
309
+ const result = await this.promise;
310
+ return result.match(handlers);
311
+ }
312
+ // Type guards
313
+ async isOk() {
314
+ const result = await this.promise;
315
+ return result.isOk();
316
+ }
317
+ async hasFailed() {
318
+ const result = await this.promise;
319
+ return result.hasFailed();
320
+ }
321
+ // Generator support - allows `yield* asyncResult` to unwrap when awaited
322
+ *[Symbol.iterator]() {
323
+ // @ts-expect-error -- The DI system will send the unwrapped value
324
+ return yield this;
325
+ }
326
+ }
327
+ // ============================================================================
328
+ // Factory Functions
329
+ // ============================================================================
330
+ /**
331
+ * Create a successful Result
332
+ */
333
+ export function ok(value) {
334
+ return new Ok(value);
335
+ }
336
+ /**
337
+ * Create a structured failure
338
+ */
339
+ export function failure(code, message, cause) {
340
+ return { code, message, cause };
341
+ }
342
+ export function fail(code, message, cause) {
343
+ if (message === undefined) {
344
+ // Return factory function for curried usage
345
+ return (msg, c) => {
346
+ return new Fail(failure(code, msg, c));
347
+ };
348
+ }
349
+ return new Fail(failure(code, message, cause));
350
+ }
351
+ /**
352
+ * Reusable factory for unknown failures
353
+ */
354
+ export const UnknownFailure = fail("UNKNOWN_FAILURE");
355
+ // ============================================================================
356
+ // Error Conversion Utilities
357
+ // ============================================================================
358
+ /**
359
+ * Convert unknown error to structured Failure
360
+ */
361
+ function createUnknownFailure(err) {
362
+ const message = err instanceof globalThis.Error ? err.message : String(err);
363
+ return failure("UNKNOWN_FAILURE", message, err);
364
+ }
365
+ export function fromThrowable(fnOrPromise, failureMapper = createUnknownFailure) {
366
+ // Handle direct Promise
367
+ if (fnOrPromise instanceof Promise) {
368
+ return new AsyncResult(fnOrPromise
369
+ .then((value) => new Ok(value))
370
+ .catch((error) => new Fail(failureMapper(error))));
371
+ }
372
+ // Handle function
373
+ try {
374
+ const result = fnOrPromise();
375
+ // If function returns Promise, wrap in AsyncResult
376
+ if (result instanceof Promise) {
377
+ return new AsyncResult(result
378
+ .then((value) => new Ok(value))
379
+ .catch((error) => new Fail(failureMapper(error))));
380
+ }
381
+ // Synchronous success
382
+ return new Ok(result);
383
+ }
384
+ catch (error) {
385
+ // Synchronous error
386
+ return new Fail(failureMapper(error));
387
+ }
388
+ }
389
+ export function wrapThrowable(fn, failureMapper) {
390
+ return (...args) => fromThrowable(() => fn(...args), failureMapper);
391
+ }
392
+ // ============================================================================
393
+ // Type Guards
394
+ // ============================================================================
395
+ /**
396
+ * Check if value is a Fail result
397
+ */
398
+ export function hasFailed(value) {
399
+ return (value != null &&
400
+ typeof value === "object" &&
401
+ "_tag" in value &&
402
+ value._tag === "Fail");
403
+ }
404
+ /**
405
+ * Check if value is an Ok result
406
+ */
407
+ export function isOk(value) {
408
+ return (value != null &&
409
+ typeof value === "object" &&
410
+ "_tag" in value &&
411
+ value._tag === "Ok");
412
+ }
413
+ /**
414
+ * Check if value is any Result (Ok or Fail)
415
+ */
416
+ export function isResult(value) {
417
+ return isOk(value) || hasFailed(value);
418
+ }
419
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,19 @@
1
1
  {
2
2
  "name": "skyr",
3
- "version": "0.1.2",
3
+ "version": "0.2.0",
4
4
  "type": "module",
5
5
  "module": "dist/index.js",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
8
- "files": ["dist", "src", "package.json", "README.md", "!**/*.test.ts"],
8
+ "files": [
9
+ "dist",
10
+ "src",
11
+ "package.json",
12
+ "README.md",
13
+ "!**/*.test.ts"
14
+ ],
9
15
  "scripts": {
10
- "package": "tsdown",
16
+ "package": "tsc",
11
17
  "test": "bun test",
12
18
  "check": "bun build ./src/index.ts --target=node --outfile=/dev/null",
13
19
  "lint": "biome check .",
@@ -15,9 +21,8 @@
15
21
  "format:check": "biome format ."
16
22
  },
17
23
  "devDependencies": {
18
- "@biomejs/biome": "^1.9.4",
24
+ "@biomejs/biome": "2.2.5",
19
25
  "@types/bun": "latest",
20
- "tsdown": "^0.15.6",
21
- "typescript": "^5.9.3"
26
+ "typescript": "5.9.3"
22
27
  }
23
28
  }
package/src/di.ts CHANGED
@@ -6,11 +6,11 @@
6
6
  import {
7
7
  AsyncResult,
8
8
  type Fail,
9
- Ok,
10
- type Result,
11
9
  hasFailed,
12
10
  isOk,
13
11
  isResult,
12
+ Ok,
13
+ type Result,
14
14
  } from "./result.js";
15
15
 
16
16
  // ============================================================================
package/src/index.ts CHANGED
@@ -1,3 +1,5 @@
1
+ export type { Fn } from "./di.js";
2
+ export { fn } from "./di.js";
1
3
  export type { AsyncResult, Fail, Failure, Ok, Result } from "./result.js";
2
4
  export {
3
5
  fail,
@@ -7,5 +9,3 @@ export {
7
9
  UnknownFailure,
8
10
  wrapThrowable,
9
11
  } from "./result.js";
10
- export type { Fn } from "./di.js";
11
- export { fn } from "./di.js";