@ontrails/core 1.0.0-beta.10 → 1.0.0-beta.11
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/.turbo/turbo-lint.log +1 -1
- package/CHANGELOG.md +20 -0
- package/README.md +1 -0
- package/dist/context.d.ts +2 -2
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +12 -7
- package/dist/context.js.map +1 -1
- package/dist/execute.d.ts +6 -3
- package/dist/execute.d.ts.map +1 -1
- package/dist/execute.js +149 -6
- package/dist/execute.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/service.d.ts +69 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +56 -0
- package/dist/service.js.map +1 -0
- package/dist/topo.d.ts +7 -0
- package/dist/topo.d.ts.map +1 -1
- package/dist/topo.js +37 -8
- package/dist/topo.js.map +1 -1
- package/dist/trail.d.ts +6 -1
- package/dist/trail.d.ts.map +1 -1
- package/dist/trail.js +2 -1
- package/dist/trail.js.map +1 -1
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/validate-topo.d.ts.map +1 -1
- package/dist/validate-topo.js +16 -0
- package/dist/validate-topo.js.map +1 -1
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +34 -3
- package/dist/validation.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/context.test.ts +12 -0
- package/src/__tests__/dispatch.test.ts +29 -2
- package/src/__tests__/execute.test.ts +318 -3
- package/src/__tests__/layer.test.ts +3 -2
- package/src/__tests__/service.test.ts +197 -0
- package/src/__tests__/topo.test.ts +71 -0
- package/src/__tests__/trail.test.ts +46 -2
- package/src/__tests__/validate-topo.test.ts +45 -1
- package/src/__tests__/validation.test.ts +53 -0
- package/src/context.ts +18 -9
- package/src/execute.ts +258 -9
- package/src/index.ts +17 -0
- package/src/service.ts +139 -0
- package/src/topo.ts +53 -9
- package/src/trail.ts +14 -2
- package/src/types.ts +11 -0
- package/src/validate-topo.ts +22 -0
- package/src/validation.ts +35 -3
- package/tsconfig.tsbuildinfo +1 -1
package/.turbo/turbo-lint.log
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# @ontrails/core
|
|
2
2
|
|
|
3
|
+
## 1.0.0-beta.11
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Add services as a first-class primitive.
|
|
8
|
+
|
|
9
|
+
Services make infrastructure dependencies declarative, injectable, and governable. Define a service with `service()`, declare it on a trail with `services: [db]`, and access it with `db.from(ctx)` or `ctx.service()`.
|
|
10
|
+
|
|
11
|
+
**Core:** `service()` factory, `ServiceSpec<T>`, `ServiceContext`, singleton resolution in `executeTrail`, in-flight creation dedup, `isService` guard, `findDuplicateServiceId`, topo service discovery and validation, `services` field on trail specs.
|
|
12
|
+
|
|
13
|
+
**Testing:** Auto-resolution of `mock` factories in `testAll`, `testExamples`, `testContracts`, and `testFollows`. Explicit `services` overrides with correct precedence (`explicit > ctx.extensions > auto-mock`). Service mock propagation through follow graphs.
|
|
14
|
+
|
|
15
|
+
**Warden:** `service-declarations` rule validates `db.from(ctx)` and `ctx.service()` usage matches declared `services: [...]`. `service-exists` rule validates declared service IDs resolve in project context. Scope-aware AST walking skips nested function boundaries.
|
|
16
|
+
|
|
17
|
+
**Surfaces:** Service overrides thread through `dispatch` and `blaze` on CLI, MCP, and HTTP.
|
|
18
|
+
|
|
19
|
+
**Introspection:** Survey and surface map outputs include service graph. Topo exposes `.services`, `.getService()`, `.hasService()`, `.listServices()`, `.serviceIds()`, `.serviceCount`.
|
|
20
|
+
|
|
21
|
+
**Docs:** ADR-009 accepted. Unified services guide, updated vocabulary, getting-started, architecture, and package READMEs.
|
|
22
|
+
|
|
3
23
|
## 1.0.0-beta.10
|
|
4
24
|
|
|
5
25
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -43,6 +43,7 @@ const onboard = trail('entity.onboard', {
|
|
|
43
43
|
| --- | --- |
|
|
44
44
|
| `trail(id, spec)` | Define a unit of work with typed input and `Result` output; use `follow` for composition |
|
|
45
45
|
| `event(id, spec)` | Define a server-originated push with a typed data schema |
|
|
46
|
+
| `service(id, spec)` | Define an infrastructure dependency with `create`, `dispose`, and optional `mock` |
|
|
46
47
|
| `topo(name, ...modules)` | Collect trail modules into a queryable topology |
|
|
47
48
|
| `validateTopo(topo)` | Structural validation: follow targets exist, no cycles, examples parse, output schemas present |
|
|
48
49
|
|
package/dist/context.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { TrailContext } from './types.js';
|
|
1
|
+
import type { TrailContext, TrailContextInit } from './types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Create a TrailContext with sensible defaults.
|
|
4
4
|
*
|
|
@@ -6,5 +6,5 @@ import type { TrailContext } from './types.js';
|
|
|
6
6
|
* - `signal` defaults to a fresh, non-aborted `AbortSignal`
|
|
7
7
|
* - All other fields come from `overrides`
|
|
8
8
|
*/
|
|
9
|
-
export declare const createTrailContext: (overrides?: Partial<
|
|
9
|
+
export declare const createTrailContext: (overrides?: Partial<TrailContextInit>) => TrailContext;
|
|
10
10
|
//# sourceMappingURL=context.d.ts.map
|
package/dist/context.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAMjE;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,GAC7B,YAAY,OAAO,CAAC,gBAAgB,CAAC,KACpC,YAUF,CAAC"}
|
package/dist/context.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createServiceLookup } from './service.js';
|
|
1
2
|
/**
|
|
2
3
|
* Create a TrailContext with sensible defaults.
|
|
3
4
|
*
|
|
@@ -5,11 +6,15 @@
|
|
|
5
6
|
* - `signal` defaults to a fresh, non-aborted `AbortSignal`
|
|
6
7
|
* - All other fields come from `overrides`
|
|
7
8
|
*/
|
|
8
|
-
export const createTrailContext = (overrides) =>
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
export const createTrailContext = (overrides) => {
|
|
10
|
+
const ctx = {
|
|
11
|
+
cwd: process.cwd(),
|
|
12
|
+
env: process.env,
|
|
13
|
+
requestId: Bun.randomUUIDv7(),
|
|
14
|
+
signal: new AbortController().signal,
|
|
15
|
+
...overrides,
|
|
16
|
+
};
|
|
17
|
+
ctx.service = overrides?.service ?? createServiceLookup(() => ctx);
|
|
18
|
+
return ctx;
|
|
19
|
+
};
|
|
15
20
|
//# sourceMappingURL=context.js.map
|
package/dist/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAOnD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,SAAqC,EACvB,EAAE;IAChB,MAAM,GAAG,GAAG;QACV,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,GAAG,EAAE,OAAO,CAAC,GAAyC;QACtD,SAAS,EAAE,GAAG,CAAC,YAAY,EAAE;QAC7B,MAAM,EAAE,IAAI,eAAe,EAAE,CAAC,MAAM;QACpC,GAAG,SAAS;KACU,CAAC;IACzB,GAAG,CAAC,OAAO,GAAG,SAAS,EAAE,OAAO,IAAI,mBAAmB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACnE,OAAO,GAAG,CAAC;AACb,CAAC,CAAC"}
|
package/dist/execute.d.ts
CHANGED
|
@@ -7,18 +7,21 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import type { AnyTrail } from './trail.js';
|
|
9
9
|
import type { Layer } from './layer.js';
|
|
10
|
-
import type {
|
|
10
|
+
import type { ServiceOverrideMap } from './service.js';
|
|
11
|
+
import type { TrailContextInit } from './types.js';
|
|
11
12
|
import { Result } from './result.js';
|
|
12
13
|
/** Options for executeTrail. */
|
|
13
14
|
export interface ExecuteTrailOptions {
|
|
14
15
|
/** Partial context overrides merged on top of the base context. */
|
|
15
|
-
readonly ctx?: Partial<
|
|
16
|
+
readonly ctx?: Partial<TrailContextInit> | undefined;
|
|
16
17
|
/** AbortSignal override (takes final precedence over ctx and factory). */
|
|
17
18
|
readonly signal?: AbortSignal | undefined;
|
|
18
19
|
/** Layers to compose around the implementation. */
|
|
19
20
|
readonly layers?: readonly Layer[] | undefined;
|
|
20
21
|
/** Factory that produces a base TrailContext (takes precedence over defaults). */
|
|
21
|
-
readonly createContext?: (() =>
|
|
22
|
+
readonly createContext?: (() => TrailContextInit | Promise<TrailContextInit>) | undefined;
|
|
23
|
+
/** Explicit service instance overrides keyed by service ID. */
|
|
24
|
+
readonly services?: ServiceOverrideMap | undefined;
|
|
22
25
|
}
|
|
23
26
|
/**
|
|
24
27
|
* Execute a trail through the standard validate-context-layers-run pipeline.
|
package/dist/execute.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAGV,kBAAkB,EACnB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAgB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAKjE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAYrC,gCAAgC;AAChC,MAAM,WAAW,mBAAmB;IAClC,mEAAmE;IACnE,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAAC;IACrD,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC1C,mDAAmD;IACnD,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,KAAK,EAAE,GAAG,SAAS,CAAC;IAC/C,kFAAkF;IAClF,QAAQ,CAAC,aAAa,CAAC,EACnB,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,GACpD,SAAS,CAAC;IACd,+DAA+D;IAC/D,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;CACpD;AA0QD;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GACvB,OAAO,QAAQ,EACf,UAAU,OAAO,EACjB,UAAU,mBAAmB,KAC5B,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAsBhC,CAAC"}
|
package/dist/execute.js
CHANGED
|
@@ -9,6 +9,7 @@ import { composeLayers } from './layer.js';
|
|
|
9
9
|
import { createTrailContext } from './context.js';
|
|
10
10
|
import { InternalError } from './errors.js';
|
|
11
11
|
import { Result } from './result.js';
|
|
12
|
+
import { createServiceLookup } from './service.js';
|
|
12
13
|
import { validateInput } from './validation.js';
|
|
13
14
|
// ---------------------------------------------------------------------------
|
|
14
15
|
// Context resolution
|
|
@@ -22,9 +23,10 @@ import { validateInput } from './validation.js';
|
|
|
22
23
|
* 3. `signal` override takes final precedence.
|
|
23
24
|
*/
|
|
24
25
|
const resolveContext = async (options) => {
|
|
25
|
-
const
|
|
26
|
+
const seed = options?.createContext
|
|
26
27
|
? await options.createContext()
|
|
27
28
|
: createTrailContext();
|
|
29
|
+
const base = seed.service ? seed : createTrailContext(seed);
|
|
28
30
|
const withOverrides = options?.ctx
|
|
29
31
|
? {
|
|
30
32
|
...base,
|
|
@@ -32,9 +34,149 @@ const resolveContext = async (options) => {
|
|
|
32
34
|
extensions: { ...base.extensions, ...options.ctx.extensions },
|
|
33
35
|
}
|
|
34
36
|
: base;
|
|
35
|
-
|
|
37
|
+
const resolved = options?.signal
|
|
36
38
|
? { ...withOverrides, signal: options.signal }
|
|
37
39
|
: withOverrides;
|
|
40
|
+
if (options?.ctx?.extensions !== undefined ||
|
|
41
|
+
resolved.service === undefined) {
|
|
42
|
+
const bound = { ...resolved };
|
|
43
|
+
bound.service = createServiceLookup(() => bound);
|
|
44
|
+
return bound;
|
|
45
|
+
}
|
|
46
|
+
return resolved;
|
|
47
|
+
};
|
|
48
|
+
const singletonServices = new WeakMap();
|
|
49
|
+
/** In-flight service creation promises, keyed by service × context. */
|
|
50
|
+
const pendingCreations = new WeakMap();
|
|
51
|
+
const hasOwnServiceOverride = (overrides, id) => overrides !== undefined && Object.hasOwn(overrides, id);
|
|
52
|
+
const toServiceContext = (ctx) => ({
|
|
53
|
+
cwd: ctx.cwd,
|
|
54
|
+
env: ctx.env,
|
|
55
|
+
workspaceRoot: ctx.workspaceRoot,
|
|
56
|
+
});
|
|
57
|
+
const toServiceContextKey = (ctx) => JSON.stringify({
|
|
58
|
+
cwd: ctx.cwd,
|
|
59
|
+
env: Object.entries(ctx.env ?? {}).toSorted(([left], [right]) => left.localeCompare(right)),
|
|
60
|
+
workspaceRoot: ctx.workspaceRoot,
|
|
61
|
+
});
|
|
62
|
+
const toInternalServiceError = (id, error) => {
|
|
63
|
+
const cause = error instanceof Error ? error : undefined;
|
|
64
|
+
const message = cause?.message ?? String(error);
|
|
65
|
+
return new InternalError(`Service "${id}" failed to resolve: ${message}`, {
|
|
66
|
+
...(cause ? { cause } : {}),
|
|
67
|
+
context: { serviceId: id },
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
const getCachedSingletonService = (declaredService, serviceContext) => {
|
|
71
|
+
const scopedCache = singletonServices.get(declaredService);
|
|
72
|
+
if (scopedCache === undefined) {
|
|
73
|
+
return { found: false, value: undefined };
|
|
74
|
+
}
|
|
75
|
+
const key = toServiceContextKey(serviceContext);
|
|
76
|
+
if (!scopedCache.has(key)) {
|
|
77
|
+
return { found: false, value: undefined };
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
found: true,
|
|
81
|
+
value: scopedCache.get(key),
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
const getProvidedService = (ctx, overrides, declaredService, serviceContext) => {
|
|
85
|
+
const { id } = declaredService;
|
|
86
|
+
if (hasOwnServiceOverride(overrides, id)) {
|
|
87
|
+
return Result.ok(overrides[id]);
|
|
88
|
+
}
|
|
89
|
+
if (Object.hasOwn(ctx.extensions ?? {}, id)) {
|
|
90
|
+
return Result.ok(ctx.extensions?.[id]);
|
|
91
|
+
}
|
|
92
|
+
const cached = getCachedSingletonService(declaredService, serviceContext);
|
|
93
|
+
if (cached.found) {
|
|
94
|
+
return Result.ok(cached.value);
|
|
95
|
+
}
|
|
96
|
+
return undefined;
|
|
97
|
+
};
|
|
98
|
+
const getSingletonServiceCache = (declaredService) => {
|
|
99
|
+
const existing = singletonServices.get(declaredService);
|
|
100
|
+
if (existing !== undefined) {
|
|
101
|
+
return existing;
|
|
102
|
+
}
|
|
103
|
+
const created = new Map();
|
|
104
|
+
singletonServices.set(declaredService, created);
|
|
105
|
+
return created;
|
|
106
|
+
};
|
|
107
|
+
const doCreateServiceInstance = async (declaredService, serviceContext) => {
|
|
108
|
+
try {
|
|
109
|
+
const created = await declaredService.create(serviceContext);
|
|
110
|
+
if (created.isErr()) {
|
|
111
|
+
return Result.err(created.error);
|
|
112
|
+
}
|
|
113
|
+
const instance = created.unwrap();
|
|
114
|
+
getSingletonServiceCache(declaredService).set(toServiceContextKey(serviceContext), instance);
|
|
115
|
+
return Result.ok(instance);
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
return Result.err(toInternalServiceError(declaredService.id, error));
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
const trackPendingCreation = (declaredService, key, promise) => {
|
|
122
|
+
const pending = pendingCreations.get(declaredService);
|
|
123
|
+
if (pending) {
|
|
124
|
+
pending.set(key, promise);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
pendingCreations.set(declaredService, new Map([[key, promise]]));
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
/**
|
|
131
|
+
* Deduplicates concurrent creation of the same service singleton.
|
|
132
|
+
* If a creation is already in flight for this service × context key,
|
|
133
|
+
* returns the existing promise instead of spawning a second factory call.
|
|
134
|
+
*/
|
|
135
|
+
const createServiceInstance = async (declaredService, serviceContext) => {
|
|
136
|
+
const key = toServiceContextKey(serviceContext);
|
|
137
|
+
const inflight = pendingCreations.get(declaredService)?.get(key);
|
|
138
|
+
if (inflight) {
|
|
139
|
+
return inflight;
|
|
140
|
+
}
|
|
141
|
+
const promise = doCreateServiceInstance(declaredService, serviceContext);
|
|
142
|
+
trackPendingCreation(declaredService, key, promise);
|
|
143
|
+
try {
|
|
144
|
+
return await promise;
|
|
145
|
+
}
|
|
146
|
+
finally {
|
|
147
|
+
pendingCreations.get(declaredService)?.delete(key);
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
const resolveServiceInstance = async (declaredService, ctx, serviceContext, overrides) => getProvidedService(ctx, overrides, declaredService, serviceContext) ??
|
|
151
|
+
(await createServiceInstance(declaredService, serviceContext));
|
|
152
|
+
const withResolvedServices = (ctx, resolvedServices) => {
|
|
153
|
+
const extensions = { ...ctx.extensions, ...resolvedServices };
|
|
154
|
+
const resolvedCtx = { ...ctx, extensions };
|
|
155
|
+
resolvedCtx.service = createServiceLookup(() => resolvedCtx);
|
|
156
|
+
return resolvedCtx;
|
|
157
|
+
};
|
|
158
|
+
const resolveServices = async (trail, ctx, overrides) => {
|
|
159
|
+
if (trail.services.length === 0) {
|
|
160
|
+
return Result.ok(ctx);
|
|
161
|
+
}
|
|
162
|
+
const resolvedServices = {};
|
|
163
|
+
const serviceContext = toServiceContext(ctx);
|
|
164
|
+
for (const declaredService of trail.services) {
|
|
165
|
+
const resolved = await resolveServiceInstance(declaredService, ctx, serviceContext, overrides);
|
|
166
|
+
if (resolved.isErr()) {
|
|
167
|
+
return resolved;
|
|
168
|
+
}
|
|
169
|
+
resolvedServices[declaredService.id] = resolved.unwrap();
|
|
170
|
+
}
|
|
171
|
+
return Result.ok(withResolvedServices(ctx, resolvedServices));
|
|
172
|
+
};
|
|
173
|
+
const prepareContext = async (trail, options) => {
|
|
174
|
+
const baseCtx = await resolveContext(options);
|
|
175
|
+
return await resolveServices(trail, baseCtx, options?.services);
|
|
176
|
+
};
|
|
177
|
+
const runTrail = async (trail, input, ctx, layers) => {
|
|
178
|
+
const impl = composeLayers([...layers], trail, trail.run);
|
|
179
|
+
return await impl(input, ctx);
|
|
38
180
|
};
|
|
39
181
|
// ---------------------------------------------------------------------------
|
|
40
182
|
// Pipeline
|
|
@@ -51,10 +193,11 @@ export const executeTrail = async (trail, rawInput, options) => {
|
|
|
51
193
|
if (validated.isErr()) {
|
|
52
194
|
return validated;
|
|
53
195
|
}
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
196
|
+
const resolvedCtx = await prepareContext(trail, options);
|
|
197
|
+
if (resolvedCtx.isErr()) {
|
|
198
|
+
return resolvedCtx;
|
|
199
|
+
}
|
|
200
|
+
return await runTrail(trail, validated.value, resolvedCtx.value, options?.layers ?? []);
|
|
58
201
|
}
|
|
59
202
|
catch (error) {
|
|
60
203
|
const message = error instanceof Error ? error.message : String(error);
|
package/dist/execute.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export { Result } from './result.js';
|
|
2
2
|
export { TrailsError, ValidationError, AmbiguousError, AssertionError, NotFoundError, AlreadyExistsError, ConflictError, PermissionError, TimeoutError, RateLimitError, NetworkError, InternalError, AuthError, CancelledError, exitCodeMap, statusCodeMap, jsonRpcCodeMap, retryableMap, isRetryable, isTrailsError, } from './errors.js';
|
|
3
3
|
export type { ErrorCategory } from './errors.js';
|
|
4
|
-
export type { Implementation, TrailContext, FollowFn, ProgressCallback, ProgressEvent, Logger, } from './types.js';
|
|
4
|
+
export type { Implementation, TrailContext, TrailContextInit, FollowFn, ProgressCallback, ProgressEvent, Logger, ServiceLookup, } from './types.js';
|
|
5
5
|
export { createTrailContext } from './context.js';
|
|
6
|
+
export { createServiceLookup, findDuplicateServiceId, isService, service, } from './service.js';
|
|
7
|
+
export type { AnyService, Service, ServiceContext, ServiceOverrideMap, ServiceSpec, } from './service.js';
|
|
6
8
|
export { trail } from './trail.js';
|
|
7
9
|
export type { AnyTrail, Intent, Trail, TrailSpec, TrailExample, } from './trail.js';
|
|
8
10
|
export type { TrailInput, TrailOutput, TrailResult } from './type-utils.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EACL,WAAW,EACX,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,aAAa,EACb,SAAS,EACT,cAAc,EACd,WAAW,EACX,aAAa,EACb,cAAc,EACd,YAAY,EACZ,WAAW,EACX,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,YAAY,EACV,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,gBAAgB,EAChB,aAAa,EACb,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -4,6 +4,8 @@ export { Result } from './result.js';
|
|
|
4
4
|
export { TrailsError, ValidationError, AmbiguousError, AssertionError, NotFoundError, AlreadyExistsError, ConflictError, PermissionError, TimeoutError, RateLimitError, NetworkError, InternalError, AuthError, CancelledError, exitCodeMap, statusCodeMap, jsonRpcCodeMap, retryableMap, isRetryable, isTrailsError, } from './errors.js';
|
|
5
5
|
// Context factory
|
|
6
6
|
export { createTrailContext } from './context.js';
|
|
7
|
+
// Service
|
|
8
|
+
export { createServiceLookup, findDuplicateServiceId, isService, service, } from './service.js';
|
|
7
9
|
// Trail
|
|
8
10
|
export { trail } from './trail.js';
|
|
9
11
|
export { inputOf, outputOf } from './type-utils.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,SAAS;AACT,OAAO,EACL,WAAW,EACX,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,aAAa,EACb,SAAS,EACT,cAAc,EACd,WAAW,EACX,aAAa,EACb,cAAc,EACd,YAAY,EACZ,WAAW,EACX,aAAa,GACd,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,SAAS;AACT,OAAO,EACL,WAAW,EACX,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,aAAa,EACb,SAAS,EACT,cAAc,EACd,WAAW,EACX,aAAa,EACb,cAAc,EACd,YAAY,EACZ,WAAW,EACX,aAAa,GACd,MAAM,aAAa,CAAC;AAerB,kBAAkB;AAClB,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,UAAU;AACV,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,SAAS,EACT,OAAO,GACR,MAAM,cAAc,CAAC;AAStB,QAAQ;AACR,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAWnC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEpD,QAAQ;AACR,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,OAAO;AACP,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,kBAAkB;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,QAAQ;AACR,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,SAAS;AACT,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,UAAU;AACV,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,WAAW;AACX,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,aAAa;AACb,OAAO,EACL,aAAa,EACb,cAAc,EACd,eAAe,EACf,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAEzB,gBAAgB;AAChB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtE,aAAa;AACb,OAAO,EACL,KAAK,EACL,WAAW,EACX,WAAW,EACX,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAGzB,uDAAuD;AAEvD,gBAAgB;AAChB,OAAO,EACL,KAAK,EACL,OAAO,EACP,IAAI,EACJ,KAAK,EACL,cAAc,EACd,WAAW,EACX,OAAO,EACP,MAAM,GACP,MAAM,cAAc,CAAC;AAStB,gBAAgB;AAChB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE7E,YAAY;AACZ,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAExB,OAAO;AACP,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAGzD,SAAS;AACT,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,WAAW,GACZ,MAAM,aAAa,CAAC;AAErB,cAAc;AACd,OAAO,EACL,KAAK,EACL,MAAM,EACN,OAAO,EACP,MAAM,EACN,eAAe,GAChB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { Result } from './result.js';
|
|
2
|
+
import type { ServiceLookup, TrailContext } from './types.js';
|
|
3
|
+
import type { z } from 'zod';
|
|
4
|
+
/**
|
|
5
|
+
* Stable process-scoped fields available when constructing a service.
|
|
6
|
+
*
|
|
7
|
+
* Services are app-level singletons, so they intentionally do not receive the
|
|
8
|
+
* full per-request TrailContext.
|
|
9
|
+
*/
|
|
10
|
+
export type ServiceContext = Pick<TrailContext, 'cwd' | 'env' | 'workspaceRoot'>;
|
|
11
|
+
/**
|
|
12
|
+
* Everything needed to describe a service before a factory is introduced.
|
|
13
|
+
*/
|
|
14
|
+
export interface ServiceSpec<T> {
|
|
15
|
+
/** Create the service instance from stable process-scoped context. */
|
|
16
|
+
readonly create: (svc: ServiceContext) => Result<T, Error> | Promise<Result<T, Error>>;
|
|
17
|
+
/** Reserved config schema for follow-up config composition work. */
|
|
18
|
+
readonly config?: z.ZodType | undefined;
|
|
19
|
+
/** Optional cleanup performed when the hosting surface shuts down. */
|
|
20
|
+
readonly dispose?: ((service: T) => void | Promise<void>) | undefined;
|
|
21
|
+
/** Optional operational readiness probe for introspection tooling. */
|
|
22
|
+
readonly health?: ((service: T) => Result<unknown, Error> | Promise<Result<unknown, Error>>) | undefined;
|
|
23
|
+
/** Optional test factory used by higher-level helpers. */
|
|
24
|
+
readonly mock?: (() => T | Promise<T>) | undefined;
|
|
25
|
+
/** Human-readable description. */
|
|
26
|
+
readonly description?: string | undefined;
|
|
27
|
+
/** Arbitrary metadata for tooling and filtering. */
|
|
28
|
+
readonly metadata?: Readonly<Record<string, unknown>> | undefined;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* A typed service definition.
|
|
32
|
+
*
|
|
33
|
+
* TRL-73 introduces the structural contract only. The `service()` factory and
|
|
34
|
+
* runtime helpers land in follow-up branches.
|
|
35
|
+
*/
|
|
36
|
+
export interface Service<T> extends ServiceSpec<T> {
|
|
37
|
+
readonly kind: 'service';
|
|
38
|
+
readonly id: string;
|
|
39
|
+
/** Read the resolved service instance from a trail context. */
|
|
40
|
+
from(ctx: TrailContext): T;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Existential type for heterogeneous service collections.
|
|
44
|
+
*
|
|
45
|
+
* `Service<T>` includes function parameters in `dispose`/`health`, so `unknown`
|
|
46
|
+
* is too narrow for mixed service arrays. `any` is the correct existential here.
|
|
47
|
+
*/
|
|
48
|
+
export type AnyService = Service<any>;
|
|
49
|
+
/** Explicit runtime overrides keyed by service ID. */
|
|
50
|
+
export type ServiceOverrideMap = Readonly<Record<string, unknown>>;
|
|
51
|
+
/** Create a `ctx.service(...)` accessor bound to a concrete context snapshot. */
|
|
52
|
+
export declare const createServiceLookup: (getContext: () => Pick<TrailContext, "extensions">) => ServiceLookup;
|
|
53
|
+
/**
|
|
54
|
+
* Create a typed service definition.
|
|
55
|
+
*
|
|
56
|
+
* The service object is inert until a later execution branch resolves concrete
|
|
57
|
+
* instances into TrailContext extensions.
|
|
58
|
+
*/
|
|
59
|
+
export declare const service: <T>(id: string, spec: ServiceSpec<T>) => Service<T>;
|
|
60
|
+
/** Narrow unknown values to service definitions during topo discovery. */
|
|
61
|
+
export declare const isService: (value: unknown) => value is AnyService;
|
|
62
|
+
/**
|
|
63
|
+
* Return the first duplicate service ID in a collection, if any.
|
|
64
|
+
*
|
|
65
|
+
* This supports later topo registration without each caller duplicating the
|
|
66
|
+
* same scan logic.
|
|
67
|
+
*/
|
|
68
|
+
export declare const findDuplicateServiceId: (services: readonly Pick<AnyService, "id">[]) => string | undefined;
|
|
69
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,IAAI,CAC/B,YAAY,EACZ,KAAK,GAAG,KAAK,GAAG,eAAe,CAChC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,sEAAsE;IACtE,QAAQ,CAAC,MAAM,EAAE,CACf,GAAG,EAAE,cAAc,KAChB,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAClD,oEAAoE;IACpE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC;IACxC,sEAAsE;IACtE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;IACtE,sEAAsE;IACtE,QAAQ,CAAC,MAAM,CAAC,EACZ,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,GAC1E,SAAS,CAAC;IACd,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IACnD,kCAAkC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,oDAAoD;IACpD,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;CACnE;AAED;;;;;GAKG;AACH,MAAM,WAAW,OAAO,CAAC,CAAC,CAAE,SAAQ,WAAW,CAAC,CAAC,CAAC;IAChD,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,IAAI,CAAC,GAAG,EAAE,YAAY,GAAG,CAAC,CAAC;CAC5B;AAED;;;;;GAKG;AAEH,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AAEtC,sDAAsD;AACtD,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAmBnE,iFAAiF;AACjF,eAAO,MAAM,mBAAmB,GAC9B,YAAY,MAAM,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,KACjD,aAQkB,CAAC;AAEtB;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,IAAI,MAAM,EAAE,MAAM,WAAW,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CASnE,CAAC;AAEL,0EAA0E;AAC1E,eAAO,MAAM,SAAS,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,UAMnD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GACjC,UAAU,SAAS,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,KAC1C,MAAM,GAAG,SASX,CAAC"}
|
package/dist/service.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { NotFoundError } from './errors.js';
|
|
2
|
+
const getServiceId = (serviceOrId) => (typeof serviceOrId === 'string' ? serviceOrId : serviceOrId.id);
|
|
3
|
+
const getServiceInstance = (ctx, serviceOrId) => {
|
|
4
|
+
const id = getServiceId(serviceOrId);
|
|
5
|
+
return ctx.extensions?.[id];
|
|
6
|
+
};
|
|
7
|
+
const hasServiceInstance = (ctx, serviceOrId) => Object.hasOwn(ctx.extensions ?? {}, getServiceId(serviceOrId));
|
|
8
|
+
/** Create a `ctx.service(...)` accessor bound to a concrete context snapshot. */
|
|
9
|
+
export const createServiceLookup = (getContext) => ((serviceOrId) => {
|
|
10
|
+
const id = getServiceId(serviceOrId);
|
|
11
|
+
const ctx = getContext();
|
|
12
|
+
if (!hasServiceInstance(ctx, id)) {
|
|
13
|
+
throw new NotFoundError(`Service "${id}" not found in trail context`);
|
|
14
|
+
}
|
|
15
|
+
return getServiceInstance(ctx, id);
|
|
16
|
+
});
|
|
17
|
+
/**
|
|
18
|
+
* Create a typed service definition.
|
|
19
|
+
*
|
|
20
|
+
* The service object is inert until a later execution branch resolves concrete
|
|
21
|
+
* instances into TrailContext extensions.
|
|
22
|
+
*/
|
|
23
|
+
export const service = (id, spec) => Object.freeze({
|
|
24
|
+
...spec,
|
|
25
|
+
from(ctx) {
|
|
26
|
+
const lookup = ctx.service ?? createServiceLookup(() => ctx);
|
|
27
|
+
return lookup(this);
|
|
28
|
+
},
|
|
29
|
+
id,
|
|
30
|
+
kind: 'service',
|
|
31
|
+
});
|
|
32
|
+
/** Narrow unknown values to service definitions during topo discovery. */
|
|
33
|
+
export const isService = (value) => {
|
|
34
|
+
if (typeof value !== 'object' || value === null) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
const v = value;
|
|
38
|
+
return v.kind === 'service' && typeof v.id === 'string';
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Return the first duplicate service ID in a collection, if any.
|
|
42
|
+
*
|
|
43
|
+
* This supports later topo registration without each caller duplicating the
|
|
44
|
+
* same scan logic.
|
|
45
|
+
*/
|
|
46
|
+
export const findDuplicateServiceId = (services) => {
|
|
47
|
+
const seen = new Set();
|
|
48
|
+
for (const candidate of services) {
|
|
49
|
+
if (seen.has(candidate.id)) {
|
|
50
|
+
return candidate.id;
|
|
51
|
+
}
|
|
52
|
+
seen.add(candidate.id);
|
|
53
|
+
}
|
|
54
|
+
return undefined;
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAiE5C,MAAM,YAAY,GAAG,CACnB,WAA4C,EACpC,EAAE,CAAC,CAAC,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAE9E,MAAM,kBAAkB,GAAG,CACzB,GAAqC,EACrC,WAA4C,EACzC,EAAE;IACL,MAAM,EAAE,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IACrC,OAAO,GAAG,CAAC,UAAU,EAAE,CAAC,EAAE,CAAM,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CACzB,GAAqC,EACrC,WAA4C,EACnC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;AAE7E,iFAAiF;AACjF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,UAAkD,EACnC,EAAE,CACjB,CAAC,CAAC,WAA4C,EAAE,EAAE;IAChD,MAAM,EAAE,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,aAAa,CAAC,YAAY,EAAE,8BAA8B,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,kBAAkB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACrC,CAAC,CAAkB,CAAC;AAEtB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAI,EAAU,EAAE,IAAoB,EAAc,EAAE,CACzE,MAAM,CAAC,MAAM,CAAC;IACZ,GAAG,IAAI;IACP,IAAI,CAAC,GAAiB;QACpB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,IAAI,mBAAmB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IACD,EAAE;IACF,IAAI,EAAE,SAAkB;CACzB,CAAC,CAAC;AAEL,0EAA0E;AAC1E,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAc,EAAuB,EAAE;IAC/D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,CAAC,GAAG,KAAyC,CAAC;IACpD,OAAO,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;AAC1D,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,QAA2C,EACvB,EAAE;IACtB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,SAAS,IAAI,QAAQ,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YAC3B,OAAO,SAAS,CAAC,EAAE,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC"}
|
package/dist/topo.d.ts
CHANGED
|
@@ -2,17 +2,24 @@
|
|
|
2
2
|
* Application entry point — scans module exports to build a topology graph.
|
|
3
3
|
*/
|
|
4
4
|
import type { AnyEvent } from './event.js';
|
|
5
|
+
import type { AnyService } from './service.js';
|
|
5
6
|
import type { AnyTrail } from './trail.js';
|
|
6
7
|
export interface Topo {
|
|
7
8
|
readonly name: string;
|
|
8
9
|
readonly trails: ReadonlyMap<string, AnyTrail>;
|
|
9
10
|
readonly events: ReadonlyMap<string, AnyEvent>;
|
|
11
|
+
readonly services: ReadonlyMap<string, AnyService>;
|
|
10
12
|
readonly count: number;
|
|
13
|
+
readonly serviceCount: number;
|
|
11
14
|
get(id: string): AnyTrail | undefined;
|
|
15
|
+
getService(id: string): AnyService | undefined;
|
|
12
16
|
has(id: string): boolean;
|
|
17
|
+
hasService(id: string): boolean;
|
|
13
18
|
ids(): string[];
|
|
19
|
+
serviceIds(): string[];
|
|
14
20
|
list(): AnyTrail[];
|
|
15
21
|
listEvents(): AnyEvent[];
|
|
22
|
+
listServices(): AnyService[];
|
|
16
23
|
}
|
|
17
24
|
export declare const topo: (name: string, ...modules: Record<string, unknown>[]) => Topo;
|
|
18
25
|
//# sourceMappingURL=topo.d.ts.map
|
package/dist/topo.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"topo.d.ts","sourceRoot":"","sources":["../src/topo.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAM3C,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC/C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC/C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IACtC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,GAAG,IAAI,MAAM,EAAE,CAAC;IAChB,IAAI,IAAI,QAAQ,EAAE,CAAC;IACnB,UAAU,IAAI,QAAQ,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"topo.d.ts","sourceRoot":"","sources":["../src/topo.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAM3C,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC/C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACnD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IACtC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IAC/C,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,GAAG,IAAI,MAAM,EAAE,CAAC;IAChB,UAAU,IAAI,MAAM,EAAE,CAAC;IACvB,IAAI,IAAI,QAAQ,EAAE,CAAC;IACnB,UAAU,IAAI,QAAQ,EAAE,CAAC;IACzB,YAAY,IAAI,UAAU,EAAE,CAAC;CAC9B;AAsHD,eAAO,MAAM,IAAI,GACf,MAAM,MAAM,EACZ,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KACpC,IAUF,CAAC"}
|