@orria-labs/runtime
v1.0.0
Published
Core runtime, discovery, registry, codegen and CLI for Orria Runtime
Readme
@orria-labs/runtime
Core runtime для Orria Runtime: declarations, discovery, registry, runtime, codegen, bootstrap helpers и CLI orria-runtime.
- npm:
https://www.npmjs.com/package/@orria-labs/runtime
Что экспортирует пакет
- declarations:
defineAction,defineQuery,defineWorkflow,defineEvent - bootstrap:
createApplication,defineTransportAdapter - discovery/registry/runtime:
discoverManifest,createRegistry,getRegistryEntry,createRuntime - codegen:
generateCoreArtifacts - helpers:
createConfig,createDatabase,defineDatabaseAdapter - internals для adapters:
importFreshModule,isOrriaTempModulePath,createPollingFileWatcher
Основная модель
Пакет строит приложение вокруг typed bus:
ctx.action.*ctx.query.*ctx.workflow.*ctx.event.*
Bus-тип выводится из generated manifest, поэтому bootstrap обычно не требует явного createApplication<...>().
Bootstrap
import { createApplication } from "@orria-labs/runtime";
import { config } from "./config.ts";
import { database } from "./database.ts";
import { manifest } from "./generated/core/index.ts";
const app = await createApplication({
config,
database,
manifest,
setGlobalCtx: true,
});createApplication(...) создаёт:
app.ctxapp.registryapp.runtimeapp.adapter
Runtime pipeline
- input/payload schema парсится перед вызовом handler
- output schema парсится после handler
- global middleware и declaration middleware исполняются единым pipeline
eventпубликуется вeventTransportи локально fan-out’ится в подписанныеworkflow
По умолчанию используется LocalEventTransport, но можно передать свой eventTransport в createApplication(...).
Bus metadata и unsafe
const method = app.ctx.action.user.create;
await method({ email: "[email protected]" });
await method.unsafe({ email: "[email protected]" });
method.$key;
method.$kind;
method.$definition;
method.$schema.input;
method.$schema.returns;- обычный вызов использует runtime schema parsing
.unsafe(...)пропускает schema parsing и работает с handler-level типами
Discovery и codegen
discoverManifest(...) ищет declarations по шаблонам:
src/modules/**/*.action.tssrc/modules/**/*.query.tssrc/modules/**/*.workflow.tssrc/modules/**/*.event.ts
generateCoreArtifacts(...) пишет:
src/generated/core/manifest.tssrc/generated/core/bus.d.tssrc/generated/core/index.ts
CLI
orria-runtime
orria-runtime help
orria-runtime version
orria-runtime generate --root . --modules src/modules --out src/generated/core
orria-runtime init --dir my-app --name my-app --adapters http,cli,crongenerate после core codegen автоматически запускает codegen всех установленных @orria-labs/* adapters.
Database helpers
Для минимального случая:
import { createDatabase } from "@orria-labs/runtime";
export const database = createDatabase(() => dbClient);Для типизированного multi-region доступа:
import { defineDatabaseAdapter } from "@orria-labs/runtime";
export const database = defineDatabaseAdapter({
default: "primary",
clients: {
primary: primaryClient,
eu: euClient,
},
});Когда использовать напрямую
- когда вы собираете transport adapter поверх core API
- когда нужен отдельный build-time codegen
- когда нужна runtime orchestration без HTTP/CLI/cron слоя
Ограничение
В core по-прежнему нет durable queue / outbox слоя. Актуальный backlog описан в ../../docs/TECH_DEBT.md.
