@arki/dot 0.1.0 → 0.1.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.
Files changed (52) hide show
  1. package/README.md +36 -31
  2. package/dist/define-app.d.ts +58 -16
  3. package/dist/define-app.d.ts.map +1 -1
  4. package/dist/define-app.js +23 -13
  5. package/dist/define-app.js.map +1 -1
  6. package/dist/index.d.ts +7 -5
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +6 -4
  9. package/dist/index.js.map +1 -1
  10. package/dist/kernel/app-instance.d.ts +3 -3
  11. package/dist/kernel/app-instance.d.ts.map +1 -1
  12. package/dist/kernel/app-instance.js +265 -159
  13. package/dist/kernel/app-instance.js.map +1 -1
  14. package/dist/lifecycle.d.ts +11 -9
  15. package/dist/lifecycle.d.ts.map +1 -1
  16. package/dist/lifecycle.js +15 -9
  17. package/dist/lifecycle.js.map +1 -1
  18. package/dist/pip-contract.d.ts +254 -149
  19. package/dist/pip-contract.d.ts.map +1 -1
  20. package/dist/pip-contract.js +185 -41
  21. package/dist/pip-contract.js.map +1 -1
  22. package/dist/pip.d.ts +9 -12
  23. package/dist/pip.d.ts.map +1 -1
  24. package/dist/pip.js +8 -11
  25. package/dist/pip.js.map +1 -1
  26. package/dist/test-harness.d.ts +13 -10
  27. package/dist/test-harness.d.ts.map +1 -1
  28. package/dist/test-harness.js +12 -12
  29. package/dist/test-harness.js.map +1 -1
  30. package/package.json +10 -4
  31. package/src/cli/discover.ts +223 -0
  32. package/src/cli/error-codes.ts +74 -0
  33. package/src/cli/files.ts +120 -0
  34. package/src/cli/index.ts +539 -0
  35. package/src/cli/json.ts +49 -0
  36. package/src/cli/new.ts +420 -0
  37. package/src/cli/observability-probe.ts +51 -0
  38. package/src/cli/render-doctor.ts +199 -0
  39. package/src/cli/render-explain.ts +161 -0
  40. package/src/define-app.ts +310 -0
  41. package/src/diagnostics.ts +91 -0
  42. package/src/index.ts +89 -0
  43. package/src/kernel/app-instance.ts +1341 -0
  44. package/src/kernel/otel.ts +265 -0
  45. package/src/lifecycle-observer.ts +100 -0
  46. package/src/lifecycle.ts +121 -0
  47. package/src/manifest.ts +94 -0
  48. package/src/pip-contract.ts +477 -0
  49. package/src/pip.ts +84 -0
  50. package/src/test-harness.ts +72 -0
  51. package/src/timeline.ts +137 -0
  52. package/templates/app-minimal/AGENTS.md.tmpl +2 -2
package/README.md CHANGED
@@ -59,35 +59,34 @@ bun add @arki/dot
59
59
  ## Quick start
60
60
 
61
61
  ```ts
62
- import { defineApp, defineDotPip } from '@arki/dot';
62
+ import { defineApp, pip, service } from '@arki/dot';
63
63
 
64
- const billingPip = defineDotPip({
64
+ const billingPip = pip({
65
65
  name: 'billing',
66
66
  version: '1.0.0',
67
+ needs: { db: service<Db>() }, // typed injection — destructure in hooks
67
68
  configure(ctx) {
68
69
  // Validate config, register schemas, no I/O.
69
70
  },
70
- async boot(ctx) {
71
- // Open connections, register providers.
72
- return { stripe: makeStripeClient() };
71
+ async boot({ db }) {
72
+ // Open connections. The return value IS what this pip provides.
73
+ return { stripe: makeStripeClient(db) };
73
74
  },
74
- async start(ctx) {
75
+ async start({ stripe }) {
75
76
  // Begin processing — workers, subscriptions, schedulers.
76
77
  },
77
- async stop() {
78
+ async stop({ stripe }) {
78
79
  // Stop processing — drain workers, unsubscribe.
79
80
  },
80
- async dispose() {
81
+ async dispose({ stripe }) {
81
82
  // Close connections, free resources.
82
83
  },
83
84
  });
84
85
 
85
- const app = defineApp('acme')
86
- .use(billingPip);
87
-
88
- await app.configure();
89
- await app.boot();
90
- await app.start();
86
+ const app = await defineApp('acme')
87
+ .use(dbPip) // providers before consumers — enforced at compile time
88
+ .use(billingPip)
89
+ .start();
91
90
 
92
91
  // app.manifest, app.diagnostics — agent-friendly envelopes.
93
92
 
@@ -97,20 +96,26 @@ await app.dispose();
97
96
 
98
97
  ## Pip authoring
99
98
 
100
- `defineDotPip(config)` accepts five lifecycle hooks. Each receives a
101
- phase-specific context with services contributed by earlier pips:
102
-
103
- | Hook | Purpose |
104
- | ----------- | ---------------------------------------------------------------- |
105
- | `configure` | Validate static config; declare schemas, routes, services. No I/O. |
106
- | `boot` | Open connections; register providers; return a typed kit. |
107
- | `start` | Begin processing (workers, subscribers, schedulers). |
108
- | `stop` | Stop processing in reverse dependency order. |
109
- | `dispose` | Free resources after `stop`. |
110
-
111
- Pips can declare dependencies on others by name. The kernel computes a
112
- topological order and runs hooks deterministically same input, same order,
113
- every time.
99
+ `pip(config)` accepts a `needs` shape plus five lifecycle hooks. Hook
100
+ contexts carry the needed services (typed, under your local aliases) and
101
+ `$`-prefixed kernel keys (`$app`, `$pip`, `$config`):
102
+
103
+ | Hook | Purpose |
104
+ | ----------- | ------------------------------------------------------------------- |
105
+ | `configure` | Validate static config; declare schemas, routes, services. No I/O. |
106
+ | `boot` | Open connections; the returned record is what the pip provides. |
107
+ | `start` | Begin processing (workers, subscribers, schedulers). |
108
+ | `stop` | Stop processing in reverse declaration order. |
109
+ | `dispose` | Free resources after `stop`. |
110
+
111
+ Wiring is compile-time checked: `.use(pip)` fails to typecheck when the
112
+ pip's needs aren't satisfied by earlier `.use()` calls, or when its
113
+ provides collide with an existing wire key. `rename(pip, { db: 'reportsDb' })`
114
+ mounts a second instance of an adapter without collision; `token<T>()('key')`
115
+ shares a service contract across packages; `lazy(() => open(), { dispose })`
116
+ defers an expensive open until first `get()` — never-touched services never
117
+ initialize, and the kernel auto-disposes initialized ones. Declaration
118
+ order is boot order — same input, same order, every time.
114
119
 
115
120
  ## Lifecycle
116
121
 
@@ -124,9 +129,9 @@ defined ──configure()──▶ configured ──boot()──▶ booted ─
124
129
  ```
125
130
 
126
131
  `boot()` runs `configure()` implicitly if you skipped it. `start()` runs
127
- `boot()` implicitly. `stop()` and `dispose()` always run in reverse dependency
128
- order, even when an earlier hook failed — failure isolation is part of the
129
- contract.
132
+ `boot()` implicitly. `stop()` and `dispose()` always run in reverse
133
+ declaration order, even when an earlier hook failed — failure isolation is
134
+ part of the contract.
130
135
 
131
136
  ## CLI
132
137
 
@@ -1,11 +1,17 @@
1
1
  /**
2
- * Public entry point for the new DOT kernel.
2
+ * Public entry point for the DOT kernel (v2).
3
3
  *
4
4
  * `defineApp(name)` returns a `DotAppBuilder` that accumulates pips via
5
5
  * `.use(pip)`, then transitions through the 5-hook lifecycle:
6
6
  *
7
7
  * defineApp -> use* -> configure() -> boot() -> start() -> stop() -> dispose()
8
8
  *
9
+ * `.use()` is compile-time guarded: a pip whose `needs` are not satisfied
10
+ * by services provided so far — or whose provides collide with existing
11
+ * wire keys — fails to typecheck at the call site ("Expected 2 arguments,
12
+ * but got 1", with the diagnostic embedded in the expected second
13
+ * argument's type). Declaration order IS boot order.
14
+ *
9
15
  * Most callers don't need to call `configure()` explicitly — `boot()` runs it
10
16
  * implicitly. `boot()` is also implicit when starting from `defined` via
11
17
  * `start()`.
@@ -16,18 +22,49 @@ import type { DotDiagnosticsSnapshot } from './diagnostics.js';
16
22
  import type { DotLifecycleObserver } from './lifecycle-observer.js';
17
23
  import type { DotLifecycleState } from './lifecycle.js';
18
24
  import type { DotAppManifest } from './manifest.js';
19
- import type { DotPip } from './pip-contract.js';
25
+ import type { EmptyShape, Pip, ServiceRecord } from './pip-contract.js';
26
+ type MissingKeys<TAvail, TNeeds> = {
27
+ readonly [K in Exclude<keyof TNeeds, keyof TAvail>]: TNeeds[K];
28
+ };
29
+ type MismatchedKeys<TAvail, TNeeds> = {
30
+ readonly [K in keyof TAvail & keyof TNeeds as TAvail[K] extends TNeeds[K] ? never : K]: {
31
+ readonly provided: TAvail[K];
32
+ readonly needed: TNeeds[K];
33
+ };
34
+ };
35
+ type NeedsError<TAvail extends ServiceRecord, TNeeds extends ServiceRecord> = {
36
+ readonly 'DOT: pip needs services no earlier .use() provides': {
37
+ readonly missing: MissingKeys<TAvail, TNeeds>;
38
+ readonly mismatched: MismatchedKeys<TAvail, TNeeds>;
39
+ };
40
+ };
41
+ type CollisionError<TAvail, TProvides> = {
42
+ readonly 'DOT: pip provides wire keys already provided (use rename())': keyof TAvail & keyof TProvides;
43
+ };
44
+ /**
45
+ * A pip whose `boot` always throws infers `TProvides = never`, which would
46
+ * poison both the collision check (`keyof never` matches everything) and
47
+ * the accumulated record (`TAvail & never` = `never`). Such a pip provides
48
+ * nothing — normalize to the empty shape.
49
+ */
50
+ type NormalizeProvides<TP extends ServiceRecord> = [TP] extends [never] ? EmptyShape : TP;
51
+ /**
52
+ * Rest-tuple guard. Satisfied → `[]` (call `.use(pip)` with one argument).
53
+ * Violated → a required second argument of an unconstructible error type,
54
+ * so the call site fails with the diagnostic embedded in the expected type.
55
+ */
56
+ export type UseGuard<TAvail extends ServiceRecord, TNeeds extends ServiceRecord, TProvides extends ServiceRecord> = [TAvail] extends [TNeeds] ? [keyof TAvail & keyof TProvides] extends [never] ? [] : [error: CollisionError<TAvail, TProvides>] : [error: NeedsError<TAvail, TNeeds>];
20
57
  /**
21
58
  * Public DotApp surface. The internal `DotAppImpl` implements this; consumers
22
59
  * see only these members.
23
60
  */
24
- export type DotApp<TServices extends Record<string, unknown>> = {
61
+ export type DotApp<TServices extends ServiceRecord> = {
25
62
  /** App name (passed to `defineApp`). */
26
63
  readonly name: string;
27
64
  /** Current lifecycle state. */
28
65
  readonly state: DotLifecycleState;
29
66
  /**
30
- * Services published by booted pips, merged into a single record.
67
+ * Services published by booted pips, keyed by wire key.
31
68
  * Empty before `boot()` succeeds.
32
69
  */
33
70
  readonly services: TServices;
@@ -68,7 +105,7 @@ export type DotApp<TServices extends Record<string, unknown>> = {
68
105
  * Intermediate type after `configure()` but before `boot()`.
69
106
  * Exposes the manifest and diagnostics already, but no `services` yet.
70
107
  */
71
- export type DotAppConfigured<TServices extends Record<string, unknown>> = {
108
+ export type DotAppConfigured<TServices extends ServiceRecord> = {
72
109
  readonly name: string;
73
110
  readonly state: DotLifecycleState;
74
111
  readonly manifest: DotAppManifest;
@@ -84,18 +121,22 @@ export type DotAppConfigured<TServices extends Record<string, unknown>> = {
84
121
  /**
85
122
  * Builder produced by `defineApp(name)`.
86
123
  *
87
- * `.use(pip)` is type-tracking: services published by the pip are
88
- * merged into `TServices` for the next builder.
124
+ * `.use(pip)` is type-tracking in both directions: the pip's `needs` must
125
+ * be satisfied by the services accumulated so far, and its `provides`
126
+ * merge into the accumulated record for the next `.use()`.
89
127
  */
90
- export type DotAppBuilder<TServices extends Record<string, unknown>> = {
91
- /** Register a pip. Returns a new builder with merged services. */
92
- use<TNew extends Record<string, unknown>>(pip: DotPip<TNew>): DotAppBuilder<TServices & TNew>;
128
+ export type DotAppBuilder<TAvail extends ServiceRecord> = {
129
+ /**
130
+ * Register a pip. Compile error when the pip's needs are unsatisfied
131
+ * or its provides collide with existing wire keys.
132
+ */
133
+ use<TNeeds extends ServiceRecord, TProvides extends ServiceRecord>(pip: Pip<TNeeds, TProvides>, ...guard: UseGuard<TAvail, TNeeds, NormalizeProvides<TProvides>>): DotAppBuilder<TAvail & NormalizeProvides<TProvides>>;
93
134
  /** Run the configure phase synchronously. Throws on configure failure. */
94
- configure(): DotAppConfigured<TServices>;
135
+ configure(): DotAppConfigured<TAvail>;
95
136
  /** Run configure + boot. Throws on configure or boot failure. */
96
- boot(): Promise<DotApp<TServices>>;
137
+ boot(): Promise<DotApp<TAvail>>;
97
138
  /** Convenience: configure + boot + start. */
98
- start(): Promise<DotApp<TServices>>;
139
+ start(): Promise<DotApp<TAvail>>;
99
140
  };
100
141
  /**
101
142
  * Create a new DOT app builder.
@@ -103,7 +144,7 @@ export type DotAppBuilder<TServices extends Record<string, unknown>> = {
103
144
  * @example
104
145
  * const app = await defineApp('my-app')
105
146
  * .use(dbPip)
106
- * .use(authPip)
147
+ * .use(billingPip) // billing's needs must be satisfied by now
107
148
  * .boot();
108
149
  *
109
150
  * await app.start();
@@ -111,7 +152,7 @@ export type DotAppBuilder<TServices extends Record<string, unknown>> = {
111
152
  * // ...
112
153
  * await app.dispose();
113
154
  */
114
- export declare function defineApp<TServices extends Record<string, unknown> = Record<string, never>>(name: string, options?: {
155
+ export declare function defineApp(name: string, options?: {
115
156
  version?: string;
116
157
  config?: Readonly<Record<string, unknown>>;
117
158
  /**
@@ -121,5 +162,6 @@ export declare function defineApp<TServices extends Record<string, unknown> = Re
121
162
  * `configured.subscribe(...)` or `app.subscribe(...)`.
122
163
  */
123
164
  observers?: readonly DotLifecycleObserver[];
124
- }): DotAppBuilder<TServices>;
165
+ }): DotAppBuilder<EmptyShape>;
166
+ export {};
125
167
  //# sourceMappingURL=define-app.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"define-app.d.ts","sourceRoot":"","sources":["../src/define-app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"define-app.d.ts","sourceRoot":"","sources":["../src/define-app.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,17 @@
1
1
  /**
2
- * Public entry point for the new DOT kernel.
2
+ * Public entry point for the DOT kernel (v2).
3
3
  *
4
4
  * `defineApp(name)` returns a `DotAppBuilder` that accumulates pips via
5
5
  * `.use(pip)`, then transitions through the 5-hook lifecycle:
6
6
  *
7
7
  * defineApp -> use* -> configure() -> boot() -> start() -> stop() -> dispose()
8
8
  *
9
+ * `.use()` is compile-time guarded: a pip whose `needs` are not satisfied
10
+ * by services provided so far — or whose provides collide with existing
11
+ * wire keys — fails to typecheck at the call site ("Expected 2 arguments,
12
+ * but got 1", with the diagnostic embedded in the expected second
13
+ * argument's type). Declaration order IS boot order.
14
+ *
9
15
  * Most callers don't need to call `configure()` explicitly — `boot()` runs it
10
16
  * implicitly. `boot()` is also implicit when starting from `defined` via
11
17
  * `start()`.
@@ -20,7 +26,7 @@ import { renderTimeline } from './timeline.js';
20
26
  * @example
21
27
  * const app = await defineApp('my-app')
22
28
  * .use(dbPip)
23
- * .use(authPip)
29
+ * .use(billingPip) // billing's needs must be satisfied by now
24
30
  * .boot();
25
31
  *
26
32
  * await app.start();
@@ -48,8 +54,11 @@ function buildImpl(state) {
48
54
  });
49
55
  }
50
56
  function makeBuilder(state) {
51
- return {
52
- use(pip) {
57
+ // The `use` implementation is signature-erased (the guard exists purely
58
+ // at the type level); the single cast below is the same kernel boundary
59
+ // v1 crossed in its wrapApp helper.
60
+ const impl = {
61
+ use(pip, ..._guard) {
53
62
  const nextState = {
54
63
  ...state,
55
64
  pips: [...state.pips, pip],
@@ -57,21 +66,22 @@ function makeBuilder(state) {
57
66
  return makeBuilder(nextState);
58
67
  },
59
68
  configure() {
60
- const impl = buildImpl(state);
61
- impl.runConfigure();
62
- return wrapConfigured(impl);
69
+ const appImpl = buildImpl(state);
70
+ appImpl.runConfigure();
71
+ return wrapConfigured(appImpl);
63
72
  },
64
73
  async boot() {
65
- const impl = buildImpl(state);
66
- await impl.boot();
67
- return wrapApp(impl);
74
+ const appImpl = buildImpl(state);
75
+ await appImpl.boot();
76
+ return wrapApp(appImpl);
68
77
  },
69
78
  async start() {
70
- const impl = buildImpl(state);
71
- await impl.start();
72
- return wrapApp(impl);
79
+ const appImpl = buildImpl(state);
80
+ await appImpl.start();
81
+ return wrapApp(appImpl);
73
82
  },
74
83
  };
84
+ return impl;
75
85
  }
76
86
  function wrapApp(impl) {
77
87
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"define-app.js","sourceRoot":"","sources":["../src/define-app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"define-app.js","sourceRoot":"","sources":["../src/define-app.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,15 +2,17 @@
2
2
  * @arki/dot — TypeScript-first application composition framework
3
3
  *
4
4
  * Public surface:
5
- * - `defineApp(name)` — the modern entry point for composing applications.
6
- * - `defineDotPip(config)` — define lifecycle-aware pips.
5
+ * - `defineApp(name)` — the entry point for composing applications.
6
+ * - `pip(config)` — author lifecycle-aware pips with typed needs/provides.
7
+ * - `service<T>()` / `token<T>()(key)` — service witnesses for DI wiring.
8
+ * - `rename(pip, map)` — mount-time multi-instance primitive.
7
9
  * - Lifecycle / manifest / diagnostics types.
8
10
  * - `testApp` / `bootTestApp` — test harnesses for pip authors.
9
11
  */
10
12
  export { defineApp } from './define-app.js';
11
- export type { DotApp, DotAppBuilder, DotAppConfigured } from './define-app.js';
12
- export { defineDotPip, DotPipError } from './pip-contract.js';
13
- export type { DotPip, DotBootContext, DotBootResult, DotConfigureContext, DotDisposeContext, DotManifestContext, DotManifestContribution, DotStartContext, DotStopContext, } from './pip-contract.js';
13
+ export type { DotApp, DotAppBuilder, DotAppConfigured, UseGuard } from './define-app.js';
14
+ export { isLazy, lazy, lazyOf, pip, provide, rename, service, token, DotPipError } from './pip-contract.js';
15
+ export type { AnyPip, CtxOf, DotConfigureContext, EmptyShape, KernelCtx, Lazy, LazyService, NeedsShape, Pip, PipNeeds, PipProvides, RenamedProvides, Service, ServiceRecord, Token, WireNeeds, } from './pip-contract.js';
14
16
  export { DotLifecycleError, DotLifecycleErrorCode, DOT_LIFECYCLE_HOOKS, } from './lifecycle.js';
15
17
  export type { DotLifecycleHook, DotLifecycleState, DotLifecyclePipFailure, DotLifecycleErrorCodeValue, } from './lifecycle.js';
16
18
  export type { DotAppManifest, PipManifest, RouteManifest, ServiceManifest, LifecycleManifest, DependencyEdge, DependencyEdgeKind, ServiceKind, RouteTransport, } from './manifest.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE/E,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC9D,YAAY,EACV,MAAM,EACN,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,EACf,cAAc,GACf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,cAAc,EACd,WAAW,EACX,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,cAAc,GACf,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,sBAAsB,EACtB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACzD,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIxD,YAAY,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEzF,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC5G,YAAY,EACV,MAAM,EACN,KAAK,EACL,mBAAmB,EACnB,UAAU,EACV,SAAS,EACT,IAAI,EACJ,WAAW,EACX,UAAU,EACV,GAAG,EACH,QAAQ,EACR,WAAW,EACX,eAAe,EACf,OAAO,EACP,aAAa,EACb,KAAK,EACL,SAAS,GACV,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,cAAc,EACd,WAAW,EACX,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,cAAc,GACf,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,sBAAsB,EACtB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACzD,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIxD,YAAY,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC"}
package/dist/index.js CHANGED
@@ -2,14 +2,16 @@
2
2
  * @arki/dot — TypeScript-first application composition framework
3
3
  *
4
4
  * Public surface:
5
- * - `defineApp(name)` — the modern entry point for composing applications.
6
- * - `defineDotPip(config)` — define lifecycle-aware pips.
5
+ * - `defineApp(name)` — the entry point for composing applications.
6
+ * - `pip(config)` — author lifecycle-aware pips with typed needs/provides.
7
+ * - `service<T>()` / `token<T>()(key)` — service witnesses for DI wiring.
8
+ * - `rename(pip, map)` — mount-time multi-instance primitive.
7
9
  * - Lifecycle / manifest / diagnostics types.
8
10
  * - `testApp` / `bootTestApp` — test harnesses for pip authors.
9
11
  */
10
- // #region New kernel — public surface (Task 9a)
12
+ // #region Kernel — public surface
11
13
  export { defineApp } from './define-app.js';
12
- export { defineDotPip, DotPipError } from './pip-contract.js';
14
+ export { isLazy, lazy, lazyOf, pip, provide, rename, service, token, DotPipError } from './pip-contract.js';
13
15
  export { DotLifecycleError, DotLifecycleErrorCode, DOT_LIFECYCLE_HOOKS, } from './lifecycle.js';
14
16
  export { renderTimeline } from './timeline.js';
15
17
  export { testApp, bootTestApp } from './test-harness.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,gDAAgD;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAa9D,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAuCxB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMzD,aAAa"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,kCAAkC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAoB5G,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAuCxB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMzD,aAAa"}
@@ -8,11 +8,11 @@ import type { DotDiagnosticsSnapshot } from '../diagnostics.js';
8
8
  import type { DotLifecycleObserver } from '../lifecycle-observer.js';
9
9
  import type { DotLifecycleState } from '../lifecycle.js';
10
10
  import type { DotAppManifest } from '../manifest.js';
11
- import type { AnyDotPip } from '../pip-contract.js';
11
+ import type { AnyPip } from '../pip-contract.js';
12
12
  export type DotAppInternalConfig = {
13
13
  appName: string;
14
14
  appVersion?: string;
15
- pips: readonly AnyDotPip[];
15
+ pips: readonly AnyPip[];
16
16
  /** Runtime config bag passed to every `boot` hook. */
17
17
  config?: Readonly<Record<string, unknown>>;
18
18
  /**
@@ -58,5 +58,5 @@ export declare class DotAppImpl {
58
58
  }
59
59
  /** Re-export `ServiceKind` and `RouteTransport` for the kernel's internal use. */
60
60
  export { type RouteTransport, type ServiceKind } from '../manifest.js';
61
- export { type DotPip } from '../pip-contract.js';
61
+ export { type Pip } from '../pip-contract.js';
62
62
  //# sourceMappingURL=app-instance.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-instance.d.ts","sourceRoot":"","sources":["../../src/kernel/app-instance.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAEV,sBAAsB,EAKvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAqB,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACxF,OAAO,KAAK,EAA4C,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACnG,OAAO,KAAK,EAGV,cAAc,EAKf,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EACV,SAAS,EAOV,MAAM,oBAAoB,CAAC;AA0D5B,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,SAAS,SAAS,EAAE,CAAC;IAC3B,sDAAsD;IACtD,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3C;;;;OAIG;IACH,SAAS,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;CAC7C,CAAC;AAEF;;;GAGG;AACH,qBAAa,UAAU;;gBAkDT,MAAM,EAAE,oBAAoB;IAkCxC;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,IAAI;IAuIrD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,KAAK,IAAI,iBAAiB,CAE7B;IAED,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEtC;IAED,IAAI,QAAQ,IAAI,cAAc,CAE7B;IAED,IAAI,WAAW,IAAI,sBAAsB,CAExC;IAED;;;;OAIG;IACH,YAAY,IAAI,IAAI;IAmKpB,oDAAoD;IAC9C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiJ3B,yDAAyD;IACnD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAuH5B,mDAAmD;IAC7C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAsH3B,sDAAsD;IAChD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CA4R/B;AA0BD,kFAAkF;AAElF,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"app-instance.d.ts","sourceRoot":"","sources":["../../src/kernel/app-instance.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAEV,sBAAsB,EAKvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAqB,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACxF,OAAO,KAAK,EAA4C,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACnG,OAAO,KAAK,EAEV,cAAc,EAKf,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,EAA4C,MAAM,oBAAoB,CAAC;AAkE3F,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,sDAAsD;IACtD,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3C;;;;OAIG;IACH,SAAS,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;CAC7C,CAAC;AAEF;;;GAGG;AACH,qBAAa,UAAU;;gBAwDT,MAAM,EAAE,oBAAoB;IAyCxC;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,IAAI;IAuIrD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,KAAK,IAAI,iBAAiB,CAE7B;IAED,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEtC;IAED,IAAI,QAAQ,IAAI,cAAc,CAE7B;IAED,IAAI,WAAW,IAAI,sBAAsB,CAExC;IAED;;;;OAIG;IACH,YAAY,IAAI,IAAI;IAgKpB,oDAAoD;IAC9C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA6P3B,yDAAyD;IACnD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmH5B,mDAAmD;IAC7C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkH3B,sDAAsD;IAChD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAkS/B;AA0BD,kFAAkF;AAElF,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,oBAAoB,CAAC"}