@ontrails/core 1.0.0-beta.0 → 1.0.0-beta.2

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.
@@ -1,3 +1,3 @@
1
1
  $ oxlint ./src
2
2
  Found 0 warnings and 0 errors.
3
- Finished in 101ms on 60 files with 93 rules using 24 threads.
3
+ Finished in 27ms on 60 files with 93 rules using 24 threads.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # @ontrails/core
2
2
 
3
+ ## 1.0.0-beta.2
4
+
5
+ ### Patch Changes
6
+
7
+ - Fix workspace dependency resolution in published packages. Now using bun publish
8
+ which correctly replaces workspace:^ with actual version numbers.
9
+
10
+ ## 1.0.0-beta.1
11
+
12
+ ### Patch Changes
13
+
14
+ - Fix two blocking bugs from real-world migration:
15
+ - Published packages now resolve correctly (workspace:^ instead of workspace:\*)
16
+ - Error forwarding works across different success types (Err no longer carries phantom T)
17
+
3
18
  ## 1.0.0-beta.0
4
19
 
5
20
  ### Minor Changes
package/README.md CHANGED
@@ -1,35 +1,31 @@
1
1
  # @ontrails/core
2
2
 
3
- The foundation of Trails. Result type, error taxonomy, trail/hike/event definitions, topo, validation, patterns, redaction, branded types, and collection utilities. One external dependency: `zod`.
3
+ The foundation. Define trails, compose them into topos, return typed Results, and let the framework derive everything else.
4
4
 
5
- ## Installation
6
-
7
- ```bash
8
- bun add @ontrails/core
9
- ```
10
-
11
- ## Quick Start
5
+ ## Usage
12
6
 
13
7
  ```typescript
14
- import { trail, hike, topo, Result } from '@ontrails/core';
8
+ import { trail, topo, Result } from '@ontrails/core';
15
9
  import { z } from 'zod';
16
10
 
17
- // Define a trail -- the atomic unit of work
18
- const show = trail('entity.show', {
19
- input: z.object({ name: z.string().describe('Entity name') }),
20
- output: z.object({ name: z.string(), type: z.string() }),
11
+ const greet = trail('greet', {
12
+ input: z.object({ name: z.string().describe('Who to greet') }),
13
+ output: z.object({ message: z.string() }),
21
14
  readOnly: true,
22
15
  examples: [
23
- {
24
- name: 'Show an entity',
25
- input: { name: 'Alpha' },
26
- expected: { name: 'Alpha', type: 'concept' },
27
- },
16
+ { name: 'Hello', input: { name: 'World' }, expected: { message: 'Hello, World!' } },
28
17
  ],
29
- implementation: (input) => Result.ok({ name: input.name, type: 'concept' }),
18
+ implementation: (input) => Result.ok({ message: `Hello, ${input.name}!` }),
30
19
  });
31
20
 
32
- // Define a hike -- a composite that follows other trails
21
+ const app = topo('myapp', { greet });
22
+ ```
23
+
24
+ Hikes compose trails through `ctx.follow()`:
25
+
26
+ ```typescript
27
+ import { hike } from '@ontrails/core';
28
+
33
29
  const onboard = hike('entity.onboard', {
34
30
  follows: ['entity.add', 'entity.relate'],
35
31
  input: z.object({ name: z.string(), type: z.string() }),
@@ -39,141 +35,73 @@ const onboard = hike('entity.onboard', {
39
35
  return Result.ok({ entity: added.value });
40
36
  },
41
37
  });
42
-
43
- // Collect into an app
44
- import * as entity from './trails/entity';
45
- const app = topo('myapp', entity);
46
38
  ```
47
39
 
48
- Pure trails can return `Result` directly. Hikes and other I/O-bound trails can stay `async`; core normalizes both forms to one awaitable runtime shape before layers and surfaces execute them.
49
-
50
- ## API Overview
51
-
52
- ### Trail Primitives
53
-
54
- - **`trail(id, spec)`** -- Define an atomic unit of work. Typed input via Zod, returns `Result`. Authoring may be sync or async.
55
- - **`hike(id, spec)`** -- Define a composite that follows multiple trails via `ctx.follow()`. Declares dependencies with `follows: string[]`.
56
- - **`event(id, spec)`** -- Define a server-originated push with a typed data schema.
57
- - **`topo(name, ...modules)`** -- Collect trail modules into an app. Scans exports for `Trail` shapes and builds the topo.
58
-
59
- ### Result Type
60
-
61
- Built-in `Result<T, E>` with no external dependency.
62
-
63
- ```typescript
64
- Result.ok(value); // Create a success
65
- Result.err(error); // Create a failure
66
- Result.combine(results); // Collect Result<T>[] into Result<T[]>
67
-
68
- result.isOk(); // Type guard for Ok
69
- result.isErr(); // Type guard for Err
70
- result.map(fn); // Transform success value
71
- result.flatMap(fn); // Chain Result-returning functions
72
- result.match({ ok, err }); // Pattern match
73
- result.unwrapOr(fallback); // Value or fallback
74
- ```
75
-
76
- Implementations return `Result`, never `throw`.
77
-
78
- ### Error Taxonomy
40
+ ## API
79
41
 
80
- 13 error classes across 10 categories, all extending `TrailsError`. Each maps to CLI exit codes, HTTP status codes, JSON-RPC codes, and retryability.
42
+ ### Trail primitives
81
43
 
82
- | Category | Classes | Exit | HTTP | Retryable |
83
- | --- | --- | --- | --- | --- |
84
- | `validation` | `ValidationError`, `AmbiguousError`, `AssertionError` | 1 | 400 | No |
85
- | `not_found` | `NotFoundError` | 2 | 404 | No |
86
- | `conflict` | `AlreadyExistsError`, `ConflictError` | 3 | 409 | No |
87
- | `permission` | `PermissionError` | 4 | 403 | No |
88
- | `timeout` | `TimeoutError` | 5 | 504 | Yes |
89
- | `rate_limit` | `RateLimitError` | 6 | 429 | Yes |
90
- | `network` | `NetworkError` | 7 | 502 | Yes |
91
- | `internal` | `InternalError` | 8 | 500 | No |
92
- | `auth` | `AuthError` | 9 | 401 | No |
93
- | `cancelled` | `CancelledError` | 130 | 499 | No |
94
-
95
- All extend `TrailsError` directly (class inheritance, no factory pattern). Pattern matching via `instanceof` or `error.category`.
96
-
97
- ### Patterns (`@ontrails/core/patterns`)
98
-
99
- Reusable Zod schemas for common input/output shapes:
100
-
101
- - **Pagination** -- `paginationInput`, `paginationOutput` (cursor-based)
102
- - **Bulk operations** -- `bulkInput`, `bulkOutput` (batch with per-item results)
103
- - **Timestamps** -- `timestamps` (`createdAt`/`updatedAt`)
104
- - **Date ranges** -- `dateRangeInput` (`since`/`until`)
105
- - **Sorting** -- `sortInput` (`sortBy`/`sortOrder`)
106
- - **Status** -- `statusField` (lifecycle state)
107
- - **Change tracking** -- `changeOutput` (before/after snapshots)
108
- - **Progress** -- `progressOutput` (completion reporting)
109
-
110
- ### Redaction (`@ontrails/core/redaction`)
44
+ | Export | What it does |
45
+ | --- | --- |
46
+ | `trail(id, spec)` | Define an atomic unit of work with typed input and `Result` output |
47
+ | `hike(id, spec)` | Define a composition that follows other trails via `ctx.follow()` |
48
+ | `event(id, spec)` | Define a server-originated push with a typed data schema |
49
+ | `topo(name, ...modules)` | Collect trail modules into a queryable topology |
50
+ | `validateTopo(topo)` | Structural validation: follows exist, no cycles, examples parse, output schemas present |
111
51
 
112
- Strip sensitive data from logs and outputs.
52
+ ### Result
113
53
 
114
54
  ```typescript
115
- import {
116
- createRedactor,
117
- DEFAULT_PATTERNS,
118
- DEFAULT_SENSITIVE_KEYS,
119
- } from '@ontrails/core/redaction';
120
-
121
- const redactor = createRedactor({
122
- patterns: DEFAULT_PATTERNS,
123
- sensitiveKeys: DEFAULT_SENSITIVE_KEYS,
124
- });
55
+ Result.ok(value); // Success
56
+ Result.err(error); // Failure
57
+ Result.combine(results); // Result<T>[] → Result<T[]>
58
+ Result.fromJson(json); // Parse JSON string into Result
59
+ Result.toJson(value); // Serialize to JSON string as Result
60
+ Result.fromFetch(response); // Convert fetch Response to Result
61
+
62
+ result.isOk(); // Type guard
63
+ result.isErr(); // Type guard
64
+ result.map(fn); // Transform success
65
+ result.flatMap(fn); // Chain Result-returning functions
66
+ result.match({ ok, err }); // Pattern match
67
+ result.unwrapOr(fallback); // Value or fallback
125
68
  ```
126
69
 
127
- ### Validation
128
-
129
- - **`validateInput(schema, data)`** -- Validate data against a Zod schema, returning `Result`.
130
- - **`formatZodIssues(issues)`** -- Format Zod issues into human-readable strings.
131
- - **`zodToJsonSchema(schema)`** -- Convert a Zod schema to JSON Schema for MCP/HTTP surfaces.
70
+ ### Error taxonomy
132
71
 
133
- ### Branded Types
72
+ 13 error classes across 10 categories. Each maps deterministically to exit codes, HTTP status, and JSON-RPC codes on every surface.
134
73
 
135
- Nominal typing for IDs and domain-specific strings that should not be interchangeable.
136
-
137
- ```typescript
138
- import { uuid, email, nonEmptyString, positiveInt } from '@ontrails/core';
74
+ | Category | Classes | HTTP | Retryable |
75
+ | --- | --- | --- | --- |
76
+ | `validation` | `ValidationError`, `AmbiguousError`, `AssertionError` | 400 | No |
77
+ | `not_found` | `NotFoundError` | 404 | No |
78
+ | `conflict` | `AlreadyExistsError`, `ConflictError` | 409 | No |
79
+ | `permission` | `PermissionError` | 403 | No |
80
+ | `timeout` | `TimeoutError` | 504 | Yes |
81
+ | `rate_limit` | `RateLimitError` | 429 | Yes |
82
+ | `network` | `NetworkError` | 502 | Yes |
83
+ | `internal` | `InternalError` | 500 | No |
84
+ | `auth` | `AuthError` | 401 | No |
85
+ | `cancelled` | `CancelledError` | 499 | No |
139
86
 
140
- const id = uuid('550e8400-e29b-41d4-a716-446655440000');
141
- const addr = email('user@example.com');
142
- ```
87
+ The developer returns `Result.err(new NotFoundError(...))`. The framework maps it to the right code on every surface.
143
88
 
144
- ### Collections and Guards
89
+ ### Other exports
145
90
 
146
- - **Collections** -- `chunk`, `dedupe`, `groupBy`, `sortBy`, `isNonEmptyArray`
147
- - **Guards** -- `isDefined`, `isNonEmptyString`, `isPlainObject`, `hasProperty`, `assertNever`
91
+ - **Schema derivation** -- `deriveFields(schema)` extracts field metadata from Zod for prompts and forms
92
+ - **Validation** -- `validateInput`, `formatZodIssues`, `zodToJsonSchema`
148
93
  - **Resilience** -- `retry`, `withTimeout`, `shouldRetry`, `getBackoffDelay`
149
- - **Serialization** -- `serializeError`, `deserializeError`, `Result.fromJson`, `Result.toJson`
150
- - **Path Security** -- `securePath`, `isPathSafe`, `resolveSafePath`
151
- - **Workspace** -- `findWorkspaceRoot`, `isInsideWorkspace`, `getRelativePath`
94
+ - **Serialization** -- `serializeError`, `deserializeError`
95
+ - **Branded types** -- `uuid`, `email`, `nonEmptyString`, `positiveInt`
96
+ - **Layers** -- cross-cutting middleware via `composeLayers`
97
+ - **Guards and collections** -- `isDefined`, `chunk`, `dedupe`, `groupBy`, `sortBy`
98
+ - **Patterns** (`@ontrails/core/patterns`) -- reusable Zod schemas for pagination, bulk ops, timestamps, sorting
99
+ - **Redaction** (`@ontrails/core/redaction`) -- strip sensitive data before logging
152
100
 
153
- ### Layers
101
+ See the [API Reference](../../docs/api-reference.md) for the full list.
154
102
 
155
- Cross-cutting concerns that wrap trail execution:
103
+ ## Installation
156
104
 
157
- ```typescript
158
- const loggingLayer: Layer = {
159
- name: 'logging',
160
- wrap: (next, trail) => async (input, ctx) => {
161
- ctx.logger.info(`Executing ${trail.id}`);
162
- return next(input, ctx);
163
- },
164
- };
105
+ ```bash
106
+ bun add @ontrails/core zod
165
107
  ```
166
-
167
- ## Subpath Exports
168
-
169
- | Export | Contents |
170
- | --- | --- |
171
- | `@ontrails/core` | trail, hike, event, topo, Result, errors, types, validation, guards, collections, layers |
172
- | `@ontrails/core/patterns` | Reusable Zod schema patterns |
173
- | `@ontrails/core/redaction` | Redactor, default patterns and keys |
174
-
175
- ## Further Reading
176
-
177
- - [Getting Started](../../docs/getting-started.md)
178
- - [Architecture](../../docs/architecture.md)
179
- - [Vocabulary](../../docs/vocabulary.md)
package/dist/result.d.ts CHANGED
@@ -6,7 +6,7 @@ declare class Ok<T, E> {
6
6
  readonly value: T;
7
7
  constructor(value: T);
8
8
  isOk(): this is Ok<T, E>;
9
- isErr(): this is Err<T, E>;
9
+ isErr(): this is Err<E>;
10
10
  map<U>(fn: (value: T) => U): Result<U, E>;
11
11
  flatMap<U, F = E>(fn: (value: T) => Result<U, F>): Result<U, E | F>;
12
12
  mapErr<F>(_fn: (error: E) => F): Result<T, F>;
@@ -17,25 +17,25 @@ declare class Ok<T, E> {
17
17
  unwrap(): T;
18
18
  unwrapOr(_fallback: T): T;
19
19
  }
20
- declare class Err<T, E> {
20
+ declare class Err<E> {
21
21
  readonly error: E;
22
22
  constructor(error: E);
23
- isOk(): this is Ok<T, E>;
24
- isErr(): this is Err<T, E>;
25
- map<U>(_fn: (value: T) => U): Result<U, E>;
26
- flatMap<U, F = E>(_fn: (value: T) => Result<U, F>): Result<U, E | F>;
27
- mapErr<F>(fn: (error: E) => F): Result<T, F>;
23
+ isOk(): this is Ok<never, E>;
24
+ isErr(): this is Err<E>;
25
+ map<U>(_fn: (value: never) => U): Result<U, E>;
26
+ flatMap<U, F = E>(_fn: (value: never) => Result<U, F>): Result<U, E | F>;
27
+ mapErr<F>(fn: (error: E) => F): Result<never, F>;
28
28
  match<U>(handlers: {
29
- ok: (value: T) => U;
29
+ ok: (value: never) => U;
30
30
  err: (error: E) => U;
31
31
  }): U;
32
32
  unwrap(): never;
33
- unwrapOr(fallback: T): T;
33
+ unwrapOr<T>(fallback: T): T;
34
34
  }
35
- export type Result<T, E = Error> = Ok<T, E> | Err<T, E>;
35
+ export type Result<T, E = Error> = Ok<T, E> | Err<E>;
36
36
  export declare const Result: {
37
37
  readonly combine: <T, E>(results: readonly Result<T, E>[]) => Result<T[], E>;
38
- readonly err: <E>(error: E) => Result<never, E>;
38
+ readonly err: <E>(error: E) => Err<E>;
39
39
  /**
40
40
  * Wrap a fetch call in a Result, mapping failures to TrailsError subclasses.
41
41
  *
@@ -1 +1 @@
1
- {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"result.js","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ontrails/core",
3
- "version": "1.0.0-beta.0",
3
+ "version": "1.0.0-beta.2",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./src/index.ts",
@@ -16,6 +16,6 @@
16
16
  "clean": "rm -rf dist *.tsbuildinfo"
17
17
  },
18
18
  "peerDependencies": {
19
- "zod": "catalog:"
19
+ "zod": "^4.3.5"
20
20
  }
21
21
  }
package/src/result.ts CHANGED
@@ -17,7 +17,7 @@ class Ok<T, E> {
17
17
  }
18
18
 
19
19
  // oxlint-disable-next-line class-methods-use-this -- type guard for Result discriminated union
20
- isErr(): this is Err<T, E> {
20
+ isErr(): this is Err<E> {
21
21
  return false;
22
22
  }
23
23
 
@@ -47,7 +47,7 @@ class Ok<T, E> {
47
47
  }
48
48
 
49
49
  // oxlint-disable-next-line max-classes-per-file -- Result monad requires paired Ok/Err classes
50
- class Err<T, E> {
50
+ class Err<E> {
51
51
  readonly error: E;
52
52
 
53
53
  constructor(error: E) {
@@ -55,28 +55,28 @@ class Err<T, E> {
55
55
  }
56
56
 
57
57
  // oxlint-disable-next-line class-methods-use-this -- type guard for Result discriminated union
58
- isOk(): this is Ok<T, E> {
58
+ isOk(): this is Ok<never, E> {
59
59
  return false;
60
60
  }
61
61
 
62
62
  // oxlint-disable-next-line class-methods-use-this -- type guard for Result discriminated union
63
- isErr(): this is Err<T, E> {
63
+ isErr(): this is Err<E> {
64
64
  return true;
65
65
  }
66
66
 
67
- map<U>(_fn: (value: T) => U): Result<U, E> {
67
+ map<U>(_fn: (value: never) => U): Result<U, E> {
68
68
  return new Err(this.error);
69
69
  }
70
70
 
71
- flatMap<U, F = E>(_fn: (value: T) => Result<U, F>): Result<U, E | F> {
71
+ flatMap<U, F = E>(_fn: (value: never) => Result<U, F>): Result<U, E | F> {
72
72
  return new Err(this.error);
73
73
  }
74
74
 
75
- mapErr<F>(fn: (error: E) => F): Result<T, F> {
75
+ mapErr<F>(fn: (error: E) => F): Result<never, F> {
76
76
  return new Err(fn(this.error));
77
77
  }
78
78
 
79
- match<U>(handlers: { ok: (value: T) => U; err: (error: E) => U }): U {
79
+ match<U>(handlers: { ok: (value: never) => U; err: (error: E) => U }): U {
80
80
  return handlers.err(this.error);
81
81
  }
82
82
 
@@ -87,12 +87,12 @@ class Err<T, E> {
87
87
  }
88
88
 
89
89
  // oxlint-disable-next-line class-methods-use-this -- symmetric API with Ok.unwrapOr
90
- unwrapOr(fallback: T): T {
90
+ unwrapOr<T>(fallback: T): T {
91
91
  return fallback;
92
92
  }
93
93
  }
94
94
 
95
- export type Result<T, E = Error> = Ok<T, E> | Err<T, E>;
95
+ export type Result<T, E = Error> = Ok<T, E> | Err<E>;
96
96
 
97
97
  // eslint-disable-next-line @typescript-eslint/no-namespace
98
98
  export const Result = {
@@ -107,7 +107,7 @@ export const Result = {
107
107
  return new Ok(values);
108
108
  },
109
109
 
110
- err<E>(error: E): Result<never, E> {
110
+ err<E>(error: E): Err<E> {
111
111
  return new Err(error);
112
112
  },
113
113