@arki/journal 0.1.1 → 0.2.1

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/dist/dot.js CHANGED
@@ -1,9 +1,10 @@
1
+ import { driven, driver, sliceOf } from '@arki/dot/feature';
1
2
  import { DotPluginError, plugin, service } from '@arki/dot/plugin';
2
3
  import { debugWorker } from './debug.js';
3
4
  import { JournalError } from './errors.js';
4
- import { bindEffect, bindTap } from './handlers.js';
5
+ import { givenServices } from './handlers.js';
5
6
  export const JOURNAL_ACTION_META_SCHEMA = '@arki/journal/action-meta@1';
6
- export const JOURNAL_PLUGIN_ERROR_CODES = { badSlice: 'JOURNAL_PLUGIN_E001' };
7
+ export const JOURNAL_PLUGIN_ERROR_CODES = { badSlice: 'ARKI_JOURNAL_PLUGIN_E001' };
7
8
  function effectAction(effect) {
8
9
  return {
9
10
  id: `${effect.name}.run`,
@@ -15,14 +16,14 @@ function effectAction(effect) {
15
16
  };
16
17
  }
17
18
  /**
18
- * Declare a feature's projections and effects as a boot-time slice
19
- * (`defineFeature(..., { use: [journalHandlers({ projections, effects })] })`).
20
- * The payload lands under `journal` in the feature's slice token, where
21
- * `journal({ j, tables, features })` collects it.
19
+ * Declare a feature's projections, effects and taps
20
+ * (`feature('orders', { use: [journalHandlers({ projections, effects })] })`).
21
+ * `journal({ j, tables })` reads them from the feature value and composes the journal.
22
22
  *
23
23
  * An effect with needs (`j.effect(name, entity, { mailer: need<Mailer>() }, on)`) gets
24
- * them from the booted services of this feature, by name. The feature must declare
25
- * each one in its own `needs`: the slice's `resolve` does not type-check otherwise.
24
+ * them from the booted services of this feature, by name, when `journalWorker()` runs it.
25
+ * The feature must declare each one in its own `needs`: the slice's `resolve` does not
26
+ * type-check otherwise, and throws at the feature's boot when the types were bypassed.
26
27
  * Two features may use the same need name for two different services.
27
28
  *
28
29
  * Actions: one per effect. Projections add none: they run inside the write, not
@@ -33,12 +34,17 @@ export function journalHandlers(handlers) {
33
34
  return {
34
35
  key: 'journal',
35
36
  actions: effects.map(effect => effectAction(effect)),
37
+ handlers: { projections, effects, taps },
36
38
  // The kernel hands the feature's services over untyped, so they are read by name here.
37
- resolve: (services) => ({
38
- projections,
39
- effects: effects.map(effect => bindEffect(effect, isServices(services) ? services : {})),
40
- taps: taps.map(tap => bindTap(tap, isServices(services) ? services : {})),
41
- }),
39
+ resolve: (services) => {
40
+ const given = isServices(services) ? services : {};
41
+ // Checked at the feature's boot, so a missing service never waits for the first job.
42
+ for (const effect of effects)
43
+ givenServices('effect', effect, given);
44
+ for (const tap of taps)
45
+ givenServices('tap', tap, given);
46
+ return { services: given };
47
+ },
42
48
  };
43
49
  }
44
50
  const isServices = (value) => typeof value === 'object' && value !== null;
@@ -48,80 +54,74 @@ const isHandler = (value) => typeof value === 'object' &&
48
54
  typeof value.name === 'string' &&
49
55
  'run' in value &&
50
56
  typeof value.run === 'function';
51
- /** The kernel hands services over untyped, so the slice shape is checked here, once, at boot. */
52
- function isJournalHandlers(value) {
57
+ const isHandlerList = (value) => Array.isArray(value) && value.every(item => isHandler(item));
58
+ /** A slice's static `handlers` are read untyped from the feature, so their shape is checked here. */
59
+ function isJournalDeclarations(value) {
53
60
  return (typeof value === 'object' &&
54
61
  value !== null &&
55
62
  'projections' in value &&
56
- Array.isArray(value.projections) &&
57
- value.projections.every(item => isHandler(item)) &&
63
+ isHandlerList(value.projections) &&
58
64
  'effects' in value &&
59
- Array.isArray(value.effects) &&
60
- value.effects.every(item => isHandler(item)) &&
65
+ isHandlerList(value.effects) &&
61
66
  'taps' in value &&
62
- Array.isArray(value.taps) &&
63
- value.taps.every(item => isHandler(item)));
67
+ isHandlerList(value.taps));
68
+ }
69
+ function badSlice(feature, what) {
70
+ return new DotPluginError({
71
+ code: JOURNAL_PLUGIN_ERROR_CODES.badSlice,
72
+ message: `[journal] feature "${feature.name}" has a \`journal\` slice whose ${what}.`,
73
+ remediation: 'Declare the slice with journalHandlers({ projections, effects, taps }) from @arki/journal/dot.',
74
+ docsUrl: 'https://github.com/arki-labs/arki/blob/HEAD/packages/journal/docs/agent-guide.md#dot-boot-errors',
75
+ });
64
76
  }
65
77
  /**
66
78
  * Throws when another handler of this kind already has the name, and names the
67
- * feature tokens that hold the two. `j.compose` makes the same check, but it gets
79
+ * features that hold the two. `j.compose` makes the same check, but it gets
68
80
  * one flat list and cannot say which feature a handler came from.
69
81
  */
70
82
  function claimName(kind, owners, name, feature) {
71
- const owner = owners.get(name);
83
+ const owner = owners.get(`${kind}:${name}`);
72
84
  if (owner !== undefined) {
73
- const where = owner === feature ? `feature "${feature}", twice` : `features "${owner}" and "${feature}"`;
85
+ const where = owner === feature ? `feature "${feature.name}", twice` : `features "${owner.name}" and "${feature.name}"`;
74
86
  throw new JournalError('BAD_DEFINITION', kind, name, `journal: duplicate ${kind} name "${name}" (${where})`);
75
87
  }
76
- owners.set(name, feature);
88
+ owners.set(`${kind}:${name}`, feature);
77
89
  }
78
90
  /**
79
- * Read each feature's `journal` slice from the booted services, in feature order.
80
- * Refuses a projection name or an effect name that is listed twice.
91
+ * Read each feature's `journal` slice declarations, in feature order. Refuses a name
92
+ * that is listed twice. `owners` maps `effect:<name>` and `tap:<name>` (and
93
+ * `projection:<name>`) to the feature that lists it.
81
94
  */
82
- function collectHandlers(features, services) {
95
+ function readDeclarations(features) {
83
96
  const projections = [];
84
97
  const effects = [];
85
98
  const taps = [];
86
- const projectionOwners = new Map();
87
- const effectOwners = new Map();
88
- const tapOwners = new Map();
99
+ const owners = new Map();
89
100
  for (const feature of features) {
90
- const slices = services[feature.key];
91
- const slice = typeof slices === 'object' && slices !== null && 'journal' in slices ? slices.journal : undefined;
101
+ const slice = feature.use.find(item => item.key === 'journal');
92
102
  if (slice === undefined) {
93
- debugWorker.debug('[journal] feature "{featureKey}" did not contribute a journal slice', {
94
- featureKey: feature.key,
103
+ debugWorker.debug('[journal] feature "{featureName}" did not contribute a journal slice', {
104
+ featureName: feature.name,
95
105
  });
96
106
  continue;
97
107
  }
98
- if (!isJournalHandlers(slice)) {
99
- throw new DotPluginError({
100
- code: JOURNAL_PLUGIN_ERROR_CODES.badSlice,
101
- message: `[journal] feature token "${feature.key}" holds a \`journal\` slice that is not lists of projections, effects and taps.`,
102
- remediation: 'Declare the slice with journalHandlers({ projections, effects, taps }) from @arki/journal/dot.',
103
- docsUrl: 'https://github.com/arki-labs/arki/blob/HEAD/packages/journal/docs/agent-guide.md#dot-boot-errors',
104
- });
105
- }
106
- for (const { name } of slice.projections)
107
- claimName('projection', projectionOwners, name, feature.key);
108
- for (const { name } of slice.effects)
109
- claimName('effect', effectOwners, name, feature.key);
110
- for (const { name } of slice.taps)
111
- claimName('tap', tapOwners, name, feature.key);
112
- projections.push(...slice.projections);
113
- effects.push(...slice.effects);
114
- taps.push(...slice.taps);
108
+ const declared = 'handlers' in slice ? slice.handlers : undefined;
109
+ if (!isJournalDeclarations(declared))
110
+ throw badSlice(feature, 'handlers are not lists of projections, effects and taps');
111
+ for (const { name } of declared.projections)
112
+ claimName('projection', owners, name, feature);
113
+ for (const { name } of declared.effects)
114
+ claimName('effect', owners, name, feature);
115
+ for (const { name } of declared.taps)
116
+ claimName('tap', owners, name, feature);
117
+ projections.push(...declared.projections);
118
+ effects.push(...declared.effects);
119
+ taps.push(...declared.taps);
115
120
  }
116
- return { projections, effects, taps };
121
+ return { declarations: { projections, effects, taps }, owners };
117
122
  }
118
- export function journal(options) {
119
- let composed;
120
- let worker;
121
- // Each feature token is a need, so the kernel boots the features first and refuses a missing one.
122
- const featureNeeds = 'features' in options ? options.features.map(feature => [feature.key, feature]) : [];
123
+ function journalPlugin(build) {
123
124
  const needs = {
124
- ...Object.fromEntries(featureNeeds),
125
125
  db: service(),
126
126
  };
127
127
  return plugin({
@@ -131,29 +131,58 @@ export function journal(options) {
131
131
  ctx.registerService('journal', 'custom');
132
132
  ctx.declareProvides('journal');
133
133
  },
134
- boot(services) {
135
- composed =
136
- 'journal' in options
137
- ? options.journal
138
- : options.j.compose({ tables: options.tables, ...collectHandlers(options.features, services) });
139
- return { journal: composed };
140
- },
141
- async start({ db }) {
142
- if (options.worker === false)
143
- return;
144
- worker = composed?.worker(db, {
145
- pollMs: options.pollMs,
146
- batchSize: options.batchSize,
147
- leaseSeconds: options.leaseSeconds,
148
- listen: options.listen,
149
- taps: options.taps,
150
- });
151
- await worker?.start();
152
- },
153
- async stop() {
154
- await worker?.stop();
155
- worker = undefined;
156
- },
134
+ boot: () => ({ journal: build() }),
135
+ });
136
+ }
137
+ export function journal(options) {
138
+ if ('journal' in options) {
139
+ const composed = options.journal;
140
+ return journalPlugin(() => composed);
141
+ }
142
+ const { j, tables } = options;
143
+ return driven(features => journalPlugin(() =>
144
+ // `'worker'`: the effects' services exist only once the features boot, after this journal.
145
+ j.compose({ tables, ...readDeclarations(features).declarations, services: 'worker' })));
146
+ }
147
+ /** The services a feature's `journal` slice published at its boot. */
148
+ function sliceServices(ctx, feature) {
149
+ const payload = sliceOf(ctx, feature).journal;
150
+ if (typeof payload !== 'object' || payload === null || !('services' in payload) || !isServices(payload.services))
151
+ throw badSlice(feature, 'boot payload holds no services; it was not made by journalHandlers');
152
+ return payload.services;
153
+ }
154
+ /**
155
+ * The driving part, for `.serve()`: one worker between `start` and `stop`, for the
156
+ * journal that `journal(...)` published. Each effect and tap of a feature gets the
157
+ * services of that feature. A process that serves no worker still writes: its jobs
158
+ * wait for a process that does.
159
+ */
160
+ export function journalWorker(options = {}) {
161
+ return driver(features => {
162
+ let worker;
163
+ return plugin({
164
+ name: 'journal-worker',
165
+ needs: { db: service(), journal: service() },
166
+ boot(ctx) {
167
+ const { owners } = readDeclarations(features);
168
+ const byFeature = new Map();
169
+ // Every owner listed a `journal` slice, so each has a slice record.
170
+ for (const feature of new Set(owners.values()))
171
+ byFeature.set(feature, sliceServices(ctx, feature));
172
+ const services = ({ kind, name }) => {
173
+ const owner = owners.get(`${kind}:${name}`);
174
+ return (owner === undefined ? undefined : byFeature.get(owner)) ?? {};
175
+ };
176
+ // Built at boot, not at start: a missing service fails the boot.
177
+ worker = ctx.journal.worker(ctx.db, { ...options, services });
178
+ },
179
+ async start() {
180
+ await worker?.start();
181
+ },
182
+ async stop() {
183
+ await worker?.stop();
184
+ },
185
+ });
157
186
  });
158
187
  }
159
188
  //# sourceMappingURL=dot.js.map
package/dist/dot.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"dot.js","sourceRoot":"","sources":["../src/dot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dot.js","sourceRoot":"","sources":["../src/dot.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { AnyEntity, DbHandle, Effect, EffectHandlers, EffectSchedule, Need, Needs, Projection, ProjectionHandlers, ProjectionOptions, Services, Tap, TapHandlers } from './types.js';
1
+ import type { AnyEntity, DbHandle, Effect, EffectHandlers, EffectSchedule, HandlerServices, Need, Needs, Projection, ProjectionHandlers, ProjectionOptions, Services, Tap, TapHandlers } from './types.js';
2
2
  export declare function defineProjection<E extends AnyEntity<Meta>, Meta, Tx extends DbHandle>(name: string, entity: E | readonly E[], on: NoInfer<ProjectionHandlers<E, Meta, Tx>>, opts?: ProjectionOptions): Projection<Meta, Tx>;
3
3
  /** Declare one thing an effect needs: `j.effect('order-mail', order, { mailer: need<Mailer>() }, { ... })`. */
4
4
  export declare const need: <T>() => Need<T>;
@@ -14,13 +14,33 @@ export declare function tapFor<Meta, AppDb>(): {
14
14
  <E extends AnyEntity<Meta>>(name: string, entity: E | readonly E[], on: NoInfer<TapHandlers<E, Meta, AppDb>>): Tap<Meta, AppDb>;
15
15
  <E extends AnyEntity<Meta>, N extends Needs>(name: string, entity: E | readonly E[], needs: N, on: NoInfer<TapHandlers<E, Meta, AppDb, N>>): Tap<Meta, AppDb, N>;
16
16
  };
17
+ /**
18
+ * The value of each need of one handler, read from `services` by name. `services` may hold more.
19
+ * Throws when one is missing: without this check the handler would start, and fail on `undefined`.
20
+ */
21
+ export declare function givenServices(kind: 'effect' | 'tap', handler: {
22
+ readonly name: string;
23
+ readonly needs: Needs;
24
+ }, services: Services): Services;
17
25
  /** Give one tap its services, as `bindEffect` does for an effect. */
18
26
  export declare function bindTap<Meta, AppDb>(tap: Tap<Meta, AppDb, Needs>, services: Services): Tap<Meta, AppDb>;
19
27
  /**
20
28
  * Give one effect its services. The result needs nothing more, so the worker can run it.
21
29
  * `services` may hold more than this effect needs: each need is read by its name.
22
30
  * This is the only place a need meets its value. `j.compose` calls it with the app's
23
- * `services`; the Dot bridge calls it with the services of the feature that lists the effect.
31
+ * `services`; a worker calls it with the services it was given (`HandlerServices`).
24
32
  */
25
33
  export declare function bindEffect<Meta, AppDb, Run>(effect: Effect<Meta, AppDb, Run, Needs>, services: Services): Effect<Meta, AppDb, Run>;
34
+ /**
35
+ * The effects and taps as they run: each bound to its services from `services`.
36
+ * A handler `j.compose` already bound needs nothing, so it gets nothing. Throws on the first
37
+ * missing service, so a worker refuses to start instead of failing job after job.
38
+ */
39
+ export declare function bindHandlers<Meta, AppDb, Run>(handlers: {
40
+ readonly effects: readonly Effect<Meta, AppDb, Run, Needs>[];
41
+ readonly taps: readonly Tap<Meta, AppDb, Needs>[];
42
+ }, services: HandlerServices | undefined): {
43
+ readonly effects: readonly Effect<Meta, AppDb, Run>[];
44
+ readonly taps: readonly Tap<Meta, AppDb>[];
45
+ };
26
46
  //# sourceMappingURL=handlers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"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"}
package/dist/handlers.js CHANGED
@@ -101,30 +101,44 @@ export function tapFor() {
101
101
  }
102
102
  return tap;
103
103
  }
104
- /** Give one tap its services, as `bindEffect` does for an effect. */
105
- export function bindTap(tap, services) {
104
+ /**
105
+ * The value of each need of one handler, read from `services` by name. `services` may hold more.
106
+ * Throws when one is missing: without this check the handler would start, and fail on `undefined`.
107
+ */
108
+ export function givenServices(kind, handler, services) {
106
109
  const given = {};
107
- for (const key of Object.keys(tap.needs)) {
110
+ for (const key of Object.keys(handler.needs)) {
108
111
  if (!Object.hasOwn(services, key) || services[key] === undefined)
109
- throw new JournalError('BAD_DEFINITION', 'tap', tap.name, `journal: tap "${tap.name}" needs "${key}", but no service with that name was given; pass it as j.compose({ services: { ${key} } }), or in a Dot app add it to the \`needs\` of the feature that lists this tap`);
112
+ throw new JournalError('BAD_DEFINITION', kind, handler.name, `journal: ${kind} "${handler.name}" needs "${key}", but no service with that name was given; pass it as j.compose({ services: { ${key} } }), or in a Dot app add it to the \`needs\` of the feature that lists this ${kind}`);
110
113
  given[key] = services[key];
111
114
  }
115
+ return given;
116
+ }
117
+ /** Give one tap its services, as `bindEffect` does for an effect. */
118
+ export function bindTap(tap, services) {
119
+ const given = givenServices('tap', tap, services);
112
120
  return { ...tap, needs: {}, run: (event, ctx) => tap.run(event, { ...given, ...ctx }) };
113
121
  }
114
122
  /**
115
123
  * Give one effect its services. The result needs nothing more, so the worker can run it.
116
124
  * `services` may hold more than this effect needs: each need is read by its name.
117
125
  * This is the only place a need meets its value. `j.compose` calls it with the app's
118
- * `services`; the Dot bridge calls it with the services of the feature that lists the effect.
126
+ * `services`; a worker calls it with the services it was given (`HandlerServices`).
119
127
  */
120
128
  export function bindEffect(effect, services) {
121
- const given = {};
122
- for (const key of Object.keys(effect.needs)) {
123
- // Without this check the effect would start, and every job would fail on `undefined`.
124
- if (!Object.hasOwn(services, key) || services[key] === undefined)
125
- throw new JournalError('BAD_DEFINITION', 'effect', effect.name, `journal: effect "${effect.name}" needs "${key}", but no service with that name was given; pass it as j.compose({ services: { ${key} } }), or in a Dot app add it to the \`needs\` of the feature that lists this effect`);
126
- given[key] = services[key];
127
- }
129
+ const given = givenServices('effect', effect, services);
128
130
  return withSchedule({ ...effect, needs: {}, run: (event, ctx) => effect.run(event, { ...given, ...ctx }) }, effect.schedule);
129
131
  }
132
+ /**
133
+ * The effects and taps as they run: each bound to its services from `services`.
134
+ * A handler `j.compose` already bound needs nothing, so it gets nothing. Throws on the first
135
+ * missing service, so a worker refuses to start instead of failing job after job.
136
+ */
137
+ export function bindHandlers(handlers, services) {
138
+ const of = (kind, name) => services?.({ kind, name }) ?? {};
139
+ return {
140
+ effects: handlers.effects.map(effect => bindEffect(effect, of('effect', effect.name))),
141
+ taps: handlers.taps.map(tap => bindTap(tap, of('tap', tap.name))),
142
+ };
143
+ }
130
144
  //# sourceMappingURL=handlers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  export { initJournal } from './journal.js';
2
2
  export { need } from './handlers.js';
3
- export type { Command, CommandContext, CommandRunner, Journal, JournalDefinitions, ReplayResult, RootCommandRunner, RunOptions, CallOptions, VerifyResult, ForgetResult, NextEvents, WriteInput, WriteOptions, WriteResult, } from './api.js';
3
+ export type { Command, CommandAuthorize, CommandContext, CommandOptions, CommandRunner, Journal, JournalDefinitions, ReplayResult, RootCommandRunner, RunOptions, CallOptions, VerifyResult, ForgetResult, NextEvents, WriteInput, WriteOptions, WriteResult, } from './api.js';
4
4
  export { CommandError, JournalError, isCommandError, isJournalError } from './errors.js';
5
5
  export type { CommandErrorCode, JournalErrorCode } from './errors.js';
6
6
  export type { GuaranteedCreateKeys, EntityBuilder, OnReducerRow, OnOnlyEntityBuilder } from './entity.js';
7
- export type { AnyEntity, AnyEventDef, CreateReducer, DbHandle, Effect, EffectContext, EffectHandlers, EntityDef, EntityId, EntityIdOf, EntityInfo, EntityTable, EventDef, EventOptions, Upcaster, UpcasterSteps, ProjectionOptions, Tap, TapContext, TapHandlers, Unlisten, WakeListener, CommandHookContext, EffectHookContext, EventsOf, IdTable, KeyColumn, Need, Needed, Needs, ReducerValues, OnReducer, Patch, Pending, PendingOf, Projection, ProjectionHandlers, Recorded, RecordedOf, Reducers, ReducerRow, RootDb, Row, Services, ServicesFor, TransactionSource, JournalWorker, StrandedJobs, } from './types.js';
7
+ export type { AnyEntity, AnyEventDef, CreateReducer, DbHandle, Effect, EffectContext, EffectHandlers, EntityDef, EntityId, EntityIdOf, EntityInfo, EntityTable, EventDef, EventOptions, Upcaster, UpcasterSteps, ProjectionOptions, Tap, TapContext, TapHandlers, Unlisten, WakeListener, CommandHookContext, EffectHookContext, EventsOf, IdTable, KeyColumn, Need, Needed, Needs, ReducerValues, OnReducer, Patch, Pending, PendingOf, Projection, ProjectionHandlers, Recorded, RecordedOf, Reducers, ReducerRow, RootDb, Row, Services, ServicesFor, HandlerRef, HandlerServices, TransactionSource, JournalWorker, StrandedJobs, } from './types.js';
8
8
  export type { JournalTables } from './pg.js';
9
9
  export type { Around, HookPoint } from './hooks.js';
10
10
  export { listenOnPool } from './listen.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,YAAY,EACV,OAAO,EACP,cAAc,EACd,aAAa,EACb,OAAO,EACP,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,UAAU,EACV,YAAY,EACZ,WAAW,GACZ,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzF,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACtE,YAAY,EAAE,oBAAoB,EAAE,aAAa,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC1G,YAAY,EACV,SAAS,EACT,WAAW,EACX,aAAa,EACb,QAAQ,EACR,MAAM,EACN,aAAa,EACb,cAAc,EACd,SAAS,EACT,QAAQ,EACR,UAAU,EACV,UAAU,EACV,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,iBAAiB,EACjB,GAAG,EACH,UAAU,EACV,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,QAAQ,EACR,OAAO,EACP,SAAS,EACT,IAAI,EACJ,MAAM,EACN,KAAK,EACL,aAAa,EACb,SAAS,EACT,KAAK,EACL,OAAO,EACP,SAAS,EACT,UAAU,EACV,kBAAkB,EAClB,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,UAAU,EACV,MAAM,EACN,GAAG,EACH,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,YAAY,EACV,OAAO,EACP,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,aAAa,EACb,OAAO,EACP,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,UAAU,EACV,YAAY,EACZ,WAAW,GACZ,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzF,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACtE,YAAY,EAAE,oBAAoB,EAAE,aAAa,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC1G,YAAY,EACV,SAAS,EACT,WAAW,EACX,aAAa,EACb,QAAQ,EACR,MAAM,EACN,aAAa,EACb,cAAc,EACd,SAAS,EACT,QAAQ,EACR,UAAU,EACV,UAAU,EACV,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,iBAAiB,EACjB,GAAG,EACH,UAAU,EACV,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,QAAQ,EACR,OAAO,EACP,SAAS,EACT,IAAI,EACJ,MAAM,EACN,KAAK,EACL,aAAa,EACb,SAAS,EACT,KAAK,EACL,OAAO,EACP,SAAS,EACT,UAAU,EACV,kBAAkB,EAClB,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,UAAU,EACV,MAAM,EACN,GAAG,EACH,QAAQ,EACR,WAAW,EACX,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAkBrC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAuDzF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAoBrC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAyDzF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../src/journal.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAW,kBAAkB,EAAqB,MAAM,UAAU,CAAC;AAG/E,OAAO,KAAK,EAGV,QAAQ,EAOR,MAAM,EAGN,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAkCpB;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW;;KAnBR,IAAI,SAAS,CAAC,CAAC,SAAS;;;;SAoBjC,EAAE,SAAS,iBAAiB,CAAC,EAAE,CAAC;;;aApBvB,IAAI,SAAS,CAAC,CAAC,SAAS;;;;aAsB/B,KAAK,SAAS,MAAM;;;iBAtBb,IAAI,SAAS,CAAC,CAAC,SAAS;;;;;;SAwBjC,KAAK,SAAS,MAAM;;;aAxBX,IAAI,SAAS,CAAC,CAAC,SAAS;;;;aA0B/B,EAAE,SAAS,iBAAiB,CAAC,EAAE,CAAC;;;iBA1BzB,IAAI,SAAS,CAAC,CAAC,SAAS;;;;;;CA4BtC,CAAC"}
1
+ {"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../src/journal.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAW,kBAAkB,EAAqB,MAAM,UAAU,CAAC;AAG/E,OAAO,KAAK,EAGV,QAAQ,EAQR,MAAM,EAGN,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAkCpB;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW;;KAnBR,IAAI,SAAS,CAAC,CAAC,SAAS;;;;SAoBjC,EAAE,SAAS,iBAAiB,CAAC,EAAE,CAAC;;;aApBvB,IAAI,SAAS,CAAC,CAAC,SAAS;;;;aAsB/B,KAAK,SAAS,MAAM;;;iBAtBb,IAAI,SAAS,CAAC,CAAC,SAAS;;;;;;SAwBjC,KAAK,SAAS,MAAM;;;aAxBX,IAAI,SAAS,CAAC,CAAC,SAAS;;;;aA0B/B,EAAE,SAAS,iBAAiB,CAAC,EAAE,CAAC;;;iBA1BzB,IAAI,SAAS,CAAC,CAAC,SAAS;;;;;;CA4BtC,CAAC"}
package/dist/journal.js CHANGED
@@ -11,7 +11,7 @@ import { createCommandRunner } from './command.js';
11
11
  import { defineEntity } from './entity.js';
12
12
  import { JournalError } from './errors.js';
13
13
  import { defineEvent } from './event.js';
14
- import { bindEffect, bindTap, defineProjection, effectFor, tapFor } from './handlers.js';
14
+ import { bindEffect, bindHandlers, bindTap, defineProjection, effectFor, tapFor } from './handlers.js';
15
15
  import { createHistory } from './history.js';
16
16
  import { createHookPoint } from './hooks.js';
17
17
  import { createAdmin, createCatchUp, createDrain, createStrandedJobs, createTapDispatch, createWorkers, } from './worker.js';
@@ -61,13 +61,17 @@ function createInit(metaSchema) {
61
61
  return {
62
62
  event: defineEvent,
63
63
  entity,
64
- command: (name, input, handler) => ({ name, input, handler }),
64
+ command: (name, input, handler, options) => options?.authorize === undefined
65
+ ? { name, input, handler }
66
+ : { name, input, handler, authorize: options.authorize },
65
67
  projection: (name, entity, on, opts) => defineProjection(name, entity, on, opts),
66
68
  effect: effectFor(),
67
69
  tap: tapFor(),
68
70
  compose: config => {
69
- const effects = (config.effects ?? []).map(effect => bindEffect(effect, config.services ?? {}));
70
- const taps = (config.taps ?? []).map(tap => bindTap(tap, config.services ?? {}));
71
+ // `'worker'`: the handlers keep their needs, and each worker or drain gives the services.
72
+ const services = config.services === 'worker' ? undefined : (config.services ?? {});
73
+ const effects = (config.effects ?? []).map(effect => services === undefined ? effect : bindEffect(effect, services));
74
+ const taps = (config.taps ?? []).map(tap => (services === undefined ? tap : bindTap(tap, services)));
71
75
  return createJournal(metaSchema, config.tables, config.projections ?? [], effects, taps);
72
76
  },
73
77
  };
@@ -81,7 +85,9 @@ function assertUniqueNames(kind, handlers) {
81
85
  seen.add(name);
82
86
  }
83
87
  }
84
- function createJournal(metaSchema, tables, projections, effects, taps = []) {
88
+ function createJournal(metaSchema, tables, projections,
89
+ /** An effect or a tap may still have needs (`services: 'worker'`): only the worker runs them, with its `services`. */
90
+ effects, taps = []) {
85
91
  assertUniqueNames('tap', taps);
86
92
  const eventsSchema = getTableConfig(tables.events).schema;
87
93
  const wakeChannel = eventsSchema === undefined ? 'journal_wake' : `${eventsSchema}_journal_wake`;
@@ -128,6 +134,7 @@ function createJournal(metaSchema, tables, projections, effects, taps = []) {
128
134
  drain: (db, opts) => journal.drain(db, opts),
129
135
  catchUp: (db, opts) => journal.catchUp(db, opts),
130
136
  dispatch,
137
+ checkServices: services => void bindHandlers({ effects, taps }, services),
131
138
  tapNames: taps.map(tap => tap.name),
132
139
  });
133
140
  const strandedJobs = createStrandedJobs({ tables, effectNames: effects.map(effect => effect.name) });
@@ -1 +1 @@
1
- {"version":3,"file":"journal.js","sourceRoot":"","sources":["../src/journal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"journal.js","sourceRoot":"","sources":["../src/journal.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -303,6 +303,18 @@ export type Needed<N extends Needs> = {
303
303
  };
304
304
  /** Real services by name, as an app or a Dot feature hands them over. */
305
305
  export type Services = Readonly<Record<string, unknown>>;
306
+ /** Names one effect or one tap. Effect names and tap names are two separate sets. */
307
+ export type HandlerRef = {
308
+ readonly kind: 'effect' | 'tap';
309
+ readonly name: string;
310
+ };
311
+ /**
312
+ * The services of each effect and tap, given where they run instead of where the journal
313
+ * is composed: `j.compose({ ..., services: 'worker' })`, then `journal.worker(db, { services })`.
314
+ * One function, so each handler can get its own services: two Dot features may use one need
315
+ * name for two different services.
316
+ */
317
+ export type HandlerServices = (handler: HandlerRef) => Services;
306
318
  type UnionToIntersection<U> = (U extends unknown ? (member: U) => void : never) extends (all: infer I) => void ? I : never;
307
319
  /** The needs of each effect in a union. An effect that needs nothing adds nothing. */
308
320
  type DeclaredNeeds<E> = E extends {