Changelog - 2026-10-17
Auto artifacts and artifact groups
New FeatureIn one line. On Bun, configs.artifacts: AutoArtifacts replaces the generated _artifacts.ts, its scripts and its freshness check, and a shared package declares one typed group per domain that applications borrow instead of importing every class.
What changed
@venizia/ignis-boot/auto. Its default export is the application's own index. From source, a Bun plugin scanssrcwhen artifacts are registered; a binary built withIgnisArtifactsPlugin.create()carries the list and never scans.IgnisArtifactsPlugin(@venizia/ignis-boot/bun). The plugin forBun.build. A build without it fails withCould not resolve: "ignis:artifacts"instead of shipping a binary with missing classes.ArtifactGroup.define({ folder })(@venizia/ignis-kernel, re-exported by@venizia/ignis). A shared package declares a group per domain, once; its content is every decorated class under that directory, found by the plugin. Applications borrow groups by importing them - typed, so a typo is a compile error.TArtifactIndexInputaccepts a group. A group's kind fields are typedneverand reading one throws.- The scanner follows re-exports (
followReexports), so a decorator re-exported by a framework or a kit counts with no flag, and reports every decorated class it leaves out (skipped, with the reason). SOURCE_MODULESaccepts the kernel's sub-paths (@venizia/ignis-kernel/metadata), which the CLI also benefits from.
Who is affected
- Applications on Bun that use a generated index. Optional. Replace
GeneratedArtifactswithAutoArtifacts, addIgnisArtifactsPlugin.create()to the binary build, delete_artifacts.tsand itsgenerate/checkscripts. - Monorepos that hand-list classes borrowed from a shared package. Optional. Declare
ArtifactGroup.define({ folder })per domain in the shared package and borrow the groups. Single classes from another domain stay listed explicitly. - Code that walks
configs.artifactsand reads the kinds of each entry. Pass an entry withisArtifactGroup: truethrough untouched; reading its kinds throws. - Node applications. No change:
ignis-artifacts generatestays.
Details
typescript
import AutoArtifacts from '@venizia/ignis-boot/auto';
import { CategoryRepository, InventoryArtifacts } from '@acme/core';
export const configs: IApplicationConfigs = {
artifacts: [AutoArtifacts, InventoryArtifacts, { repositories: [CategoryRepository] }],
};- A dependency is never scanned wholesale: an application gets only what it names.
- Checked against a monorepo of 18 backend services and 3 frontends: the auto scan found exactly the classes of every committed index (backend) and of every hand-written import list (frontend), in about 1.5 s for all 18 services.
Files: packages/boot/src/bun/plugin.ts, packages/boot/src/bun/auto.ts, packages/kernel/src/base/applications/artifact-group.ts