Skip to content

Function: createExtensionNamespace()

Makaio Framework


Makaio Framework / bus-core / createExtensionNamespace

createExtensionNamespace<N, Schemas, Ext>(extensionName, config): ExtensionNamespace<Trim<N>, SubjectRecordFromSchemaRecord<Schemas>, { [KeyType in PropertyKey]: AllPropertiesOfUnion<FilterablePayload<SubjectRecordFromSchemaRecord<Schemas>[keyof Schemas & string]>>[KeyType] }, Ext, Schemas>

Defined in: ../../../packages/bus-core/src/create-extension-namespace.ts:68

Creates an extension namespace with typed subject definitions.

Thin wrapper around MakaioBus.registerNamespace that:

  • Automatically prepends ‘extension:’ to the domain name
  • Provides extension point for extension-specific metadata via declaration merging
  • Preserves type-safe filtering capabilities

N extends string

Schemas extends SchemaRecord

Ext extends ExtensionNamespaceExtensions = ExtensionNamespaceExtensions

N

Extension name (e.g., ‘terminal’ becomes ‘extension:terminal’)

ExtensionNamespaceConfig<Schemas, Ext>

Namespace configuration with schemas and optional extensions

ExtensionNamespace<Trim<N>, SubjectRecordFromSchemaRecord<Schemas>, { [KeyType in PropertyKey]: AllPropertiesOfUnion<FilterablePayload<SubjectRecordFromSchemaRecord<Schemas>[keyof Schemas & string]>>[KeyType] }, Ext, Schemas>

Extension namespace with typed subjects and extensions

// Basic usage (bus-only)
const TerminalExtension = createExtensionNamespace('terminal', {
schemas: {
spawn: { request: z.object({ cwd: z.string() }), response: z.object({ terminalId: z.string() }) },
output: z.object({ terminalId: z.string(), data: z.string() }),
},
});
// With custom extension (after importing extension package)
const MyExtension = createExtensionNamespace('my-extension', {
schemas: { ... },
extensions: {
customMetadata: { version: '1.0.0' },
},
});