Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion dist/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ export { MultiLevelMap } from './util/multi-level-map.js';
export { EventEnvelope } from './models/event-envelope.js';
export { AsyncHttpRequest } from './models/async-http-request.js';
export { AppException } from './models/app-exception.js';
export { Composable, preload } from './models/composable.js';
export { Composable, Validator, Infer, preload } from './models/composable.js';
export { ObjectStreamIO, ObjectStreamWriter, ObjectStreamReader } from './system/object-stream.js';
export { AppConfig, ConfigReader } from './util/config-reader.js';
export { TemplateLoader } from './util/template-loader.js';
Expand Down
2 changes: 1 addition & 1 deletion dist/index.js.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

31 changes: 31 additions & 0 deletions dist/models/composable.d.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,20 @@
import { EventEnvelope } from "./event-envelope.js";
/**
* Minimal library-agnostic validator protocol.
*
* Any object exposing a `parse(value) => T` method that throws on invalid input
* satisfies this interface. Zod schemas satisfy it natively. TypeBox users can
* wrap a schema with a small adapter:
*
* const v: Validator<T> = { parse: (x) => { if (!Check(schema, x)) throw new Error(...); return x as T; } };
*/
export interface Validator<T = unknown> {
parse(value: unknown): T;
}
/**
* Type helper: extract the parsed type of a Validator (akin to z.infer).
*/
export type Infer<V> = V extends Validator<infer T> ? T : never;
export interface Composable {
/**
* Annotation for the initialize() method to tell the system to preload this composable function:
Expand All @@ -25,6 +41,21 @@ export interface Composable {
* @param evt is the incoming event containing headers and body (payload)
*/
handleEvent(evt: EventEnvelope): Promise<string | boolean | number | object | EventEnvelope | null>;
/**
* Optional input schema. When set, the event body is validated BEFORE
* handleEvent() is invoked. Validation failure throws AppException(400).
* The parsed (and potentially coerced) value replaces evt.getBody().
*/
inputSchema?: Validator;
/**
* Optional output schema. When set, the handler's resolved return value
* is validated AFTER handleEvent() completes. Validation failure is
* reported as AppException(500). Skipped for interceptors (their return
* value is not forwarded anyway).
*
* If the handler returns an EventEnvelope, the envelope's body is validated.
*/
outputSchema?: Validator;
}
/**
* Annotation for a composable class
Expand Down
2 changes: 1 addition & 1 deletion dist/models/composable.js.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 13 additions & 1 deletion dist/system/function-registry.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dist/system/function-registry.js.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

45 changes: 42 additions & 3 deletions dist/system/platform.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dist/system/platform.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ export { MultiLevelMap } from './util/multi-level-map.js';
export { EventEnvelope } from './models/event-envelope.js';
export { AsyncHttpRequest } from './models/async-http-request.js';
export { AppException } from './models/app-exception.js';
export { Composable, preload } from './models/composable.js';
export { Composable, Validator, Infer, preload } from './models/composable.js';
export { ObjectStreamIO, ObjectStreamWriter, ObjectStreamReader } from './system/object-stream.js';
export { AppConfig, ConfigReader } from './util/config-reader.js';
export { TemplateLoader } from './util/template-loader.js';
Expand Down
Loading