feat: centralize application framework primitives
Quality / quality (ubuntu-latest) (push) Failing after 14m38s
Quality / quality (windows-latest) (push) Canceled after 0s

This commit is contained in:
2026-08-22 23:07:46 +05:30
parent 96e082b943
commit a3ddd39b7b
73 changed files with 1429 additions and 84 deletions
+16 -3
View File
@@ -330,6 +330,19 @@ export interface AppConfig {
profiles?: Record<string, Partial<Omit<AppConfig, "profiles">>>;
}
/** User-authored configuration; retained as an explicit name for API clarity. */
export type AppConfigInput = AppConfig;
/** Configuration after profile/layer resolution. Required input fields stay required. */
export type ResolvedAppConfig<T extends AppConfig = AppConfig> = Omit<
AppConfig,
"extends" | "profiles"
> &
Omit<T, "extends" | "profiles"> & {
readonly extends?: undefined;
readonly profiles?: undefined;
};
const CONFIG_NAMES = ["wrnexus.config.ts", "wrnexus.config.js", "wrnexus.config.mjs"];
/**
@@ -474,7 +487,7 @@ export async function loadRawConfig(appRoot: string): Promise<AppConfig> {
}
/** Load `wrnexus.config.*`, applying the active profile's overrides. */
export async function loadAppConfig(appRoot: string, profile?: string): Promise<AppConfig> {
export async function loadAppConfig(appRoot: string, profile?: string): Promise<ResolvedAppConfig> {
const active = profile ?? resolveProfile();
// Configuration modules commonly read DATABASE_URL and other settings during
// module evaluation. Load the profile cascade before importing the module so
@@ -494,7 +507,7 @@ export async function loadAppConfig(appRoot: string, profile?: string): Promise<
`Invalid wrnexus.config: ${errors.map((issue) => `${issue.path}: ${issue.message}`).join("; ")}`,
);
}
return merged;
return merged as ResolvedAppConfig;
}
/**
@@ -573,7 +586,7 @@ export interface ConfigIssue {
message: string;
}
export function defineConfig(config: AppConfig): AppConfig {
export function defineConfig<const T extends AppConfig>(config: T): T {
return config;
}
+2
View File
@@ -9,6 +9,8 @@
export type {
AppConfig,
AppConfigInput,
ResolvedAppConfig,
BuildConfig,
ConfigIssue,
DevToolbarConfig,