interface SchematicOptions

Options handed to every schematic.

Properties

readonly
runtime: TargetRuntime

The project's runtime target, so a schematic can shape platform-specific output.

readonly
plugins: ReadonlySet<string>

The @setu-ts packages detected in the target project.

readonly
now: () => number

Wall-clock milliseconds, injected so timestamped output (the migration schematic) is deterministic under test.

Since 0.1.0
readonly
optional
modules: readonly string[]

The domain modules already present under src/modules/, sorted.

Gathered by the command layer (utils/module-scanner.ts) so the module schematic can render an aggregate barrel listing every module while staying a pure function — the same route SchematicOptions.plugins takes for the detected plugin set.

Read by the module schematic only, exactly as now is read only by migration and plugins only by the gated schematics.

OPTIONAL purely for backward compatibility: setu generate always supplies it, but this interface is published, and a custom schematic's own test constructs one — making it required would break that test's compile with no deprecation path available (§9.2 assumes a replacement API, and there is none for an added field). Treat an absent value as "no modules yet".

readonly
optional
legacyModules: readonly string[]

Pre-module-declaration directories that retain the old controller/service barrel exports until their application converts to MODULES.

Optional for the same public-interface compatibility reason as modules. A missing value means there are no legacy directories to preserve.

Since 0.1.0
readonly
optional
artifacts: Readonly<Record<string, readonly string[]>>

The generated artifacts already present in the project, keyed by the schematic name that emits them ({ 'health-indicator': ['external-api'] }).

Gathered by the command layer (utils/artifact-scanner.ts) so a wired schematic can render a barrel listing every artifact of its family while staying a pure function — the same route SchematicOptions.modules takes for domain modules.

Kept separate from modules rather than folded into it because the two admission rules genuinely differ: a module is a DIRECTORY that must hold both a controller and a service, while these families are FILES identified by a suffix.

OPTIONAL for the same reason modules is: this interface is published, a custom schematic's own test constructs one, and there is no deprecation path for making an added field required. Treat an absent value as "no artifacts yet".

readonly
optional
migrations: readonly string[]

The migrations already present, oldest first.

Optional on the M58 modules precedent — a required field would break a custom schematic's own test with no deprecation path.

Usage

import { type SchematicOptions } from "cli/src/index.ts";