Nodefony 10.0.0-beta.5
Framework Node.js fullstack — HTTP & WebSocket, même contexte

Référence d'API — nodefony — config

stable

Documentation › Référence d’API › nodefony › config

Générée depuis les déclarations de types publiées de nodefony 10.0.0-beta.5 : exactement ce que reçoit une application qui l’installe. Cette page n’existe dans aucun dépôt — pour la corriger, on corrige le TSDoc du code.

nodefony#

import { … } from "nodefony" — 86 symboles.

Fonctions (35)#

aggregateProvenance#

function aggregateProvenance(provenance: Record<string, string> | null, key: string): string

L’origine d’une clé du CATALOGUE, agrégée depuis la provenance par feuille.

appConfigJsonSchema#

function appConfigJsonSchema(): unknown

JSON Schema introspectable de la config d’application — destiné au panneau de config Studio (/nodefony/config, carte de l’app). Documenté via les .describe() du schéma (rôle + défaut de chaque champ).

applyEnvShortcuts#

function applyEnvShortcuts(options: Record<string, unknown>, schema: unknown, env: Record<string, string>): IAppliedEnvShortcut[]

Pose sur les options d’un module la valeur de chaque raccourci présent dans l’environnement — AVANT la validation Zod du module, qui reste seule juge : une valeur fausse y est refusée et arrête le démarrage.

applyResolvedPath#

function applyResolvedPath(target: Record<string, unknown>, path: string[], value: unknown, raw?: string, schema?: unknown): boolean

Pose value dans target au path donné, en résolvant chaque segment contre les clés EXISTANTES (insensible à la casse). N’altère QUE des chemins déjà présents dans la config (= champs ayant un défaut) — un chemin inconnu n’est pas créé (évite une clé fantôme à la mauvaise casse que le Zod ignorerait silencieusement) : la fonction renvoie alors false pour signalement.

collectEnvShortcuts#

function collectEnvShortcuts(schema: unknown): IEnvShortcut[]

Les raccourcis d’environnement que déclare un JSON Schema de configuration.

computeConfigProvenance#

function computeConfigProvenance(resolved: Record<string, unknown>, defaults: Record<string, unknown>, envPaths?: ReadonlySet<string>): Record<string, ConfigOrigin>

Calcule l’origine de chaque valeur feuille de la config résolue d’un module.

defineConfig#

function defineConfig<E = Record<string, unknown>>(input: ConfigInput<E>): AppConfigDescriptor

Builder unique de la config d’application.

defineEnv#

function defineEnv<M extends Record<string, z.ZodType>>(catalog: M, source?: Record<string, string>): { readonly [K in keyof M]: z.infer<M[K]>; }

Lit + valide un catalogue de variables d’environnement, une fois, au boot.

deriveStoreBackend#

function deriveStoreBackend(store: unknown): string

Déduit le nom court du backend d’un store à partir de la classe concrète de son instance (convention de nommage <Backend>XxxStore → drizzle, mongoose, redis, memory, file). Sert à retrouver le backend RÉEL d’un adapter posé au container quand la brique a été résolue en "auto" (l’adapter court-circuite la fabrique nommée). Classe non reconnue → nom de classe brut (honnête).

durableStoreRemedy#

function durableStoreRemedy(connectivity: boolean | IStoreConnectivity): string

Le REMÈDE à nommer quand une brique durable se retrouve en mémoire.

envBoolean#

function envBoolean(opts: BoolOpts & { optional: true; default?: undefined; }): z.ZodType<boolean>
function envBoolean(opts?: BoolOpts): z.ZodType<boolean>

Variable d’env BOOLEAN 12-factor : 1/true/yes/on → true, 0/false/no/off → false (insensible à la casse). Absente → default (défaut false). Valeur hors de ces ensembles → erreur au boot (typo détectée, ex. tru). optional:true sans default → absente = undefined.

envEnum#

function envEnum<const T extends readonly [ string, ...string[] ]>(values: T, opts: EnumOpts<T[number]> & { optional: true; }): z.ZodType<T[number]>
function envEnum<const T extends readonly [ string, ...string[] ]>(values: T, opts?: EnumOpts<T[number]>): z.ZodType<T[number]>

Variable d’env ENUM (ensemble fermé). Valeur hors liste → erreur au boot. Le type littéral est préservé (env.X typé sur l’union exacte).

envNumber#

function envNumber(opts: NumOpts & { optional: true; }): z.ZodType<number>
function envNumber(opts?: NumOpts): z.ZodType<number>

Variable d’env NUMBER (coercée). Valeur non numérique → erreur au boot.

envString#

function envString(opts: StrOpts & { optional: true; }): z.ZodType<string>
function envString(opts?: StrOpts): z.ZodType<string>

Variable d’env STRING. Avec default → toujours présente ; optional:true → string | undefined ; sinon requise (absente → erreur au boot).

envVarPlacement#

function envVarPlacement(meta: Pick<NamedEnvVarMeta, "name" | "sensitive" | "placement">): EnvVarPlacement

Où la variable se pose en production. La déclaration (placement) fait foi ; sans elle, un secret va au gestionnaire de secrets et le reste aux variables du déploiement. Seule source de cette décision pour la notice .env.example.

extractJsonSchemaDefaults#

function extractJsonSchemaDefaults(jsonSchema: unknown): Record<string, unknown>

Reconstruit l’objet des défauts d’un module depuis son JSON Schema (z.toJSONSchema, retourné par Module.configSchema()) — utile quand le schéma Zod n’est pas accessible (côté data plane admin). Walk récursif des properties : prend default quand présent (y compris pour un objet entier), sinon descend.

flattenConfigSchema#

function flattenConfigSchema(schema: unknown): ISchemaLeaf[]

Aplatit un JSON Schema de module en catalogue de réglages assignables.

getConfigReactivity#

function getConfigReactivity(path: string): Reactivity

Réactivité d’un champ par son chemin dot-notation ; boot par défaut (sûr).

getEnvCatalog#

function getEnvCatalog(env: unknown): readonly NamedEnvVarMeta[]

Catalogue introspectable des variables déclarées par defineEnv, lu sur l’objet env retourné. Source unique pour générer .env.example (anti-dérive).

isConfigDescriptor#

function isConfigDescriptor(value: unknown): value is AppConfigDescriptor

Garde de type : value est-il un descripteur produit par defineConfig ? Utilisé par le Kernel (loadApp, Lot 4) pour distinguer une app moderne (export default defineConfig(…)) d’une config objet legacy.

isSensitiveEnvVar#

function isSensitiveEnvVar(meta: Pick<NamedEnvVarMeta, "name" | "sensitive">): boolean

La variable porte-t-elle un SECRET ? La déclaration (sensitive) fait foi ; sans elle, le nom décide, par la même règle que la rédaction des journaux (pathLooksSecret). Seule source de cette décision pour la notice .env.example et pour nodefony env.

overlayConfig#

function overlayConfig<N extends string>(packageName: N, overlay: OverlayOf<N>): void

Pose un calque de configuration sur la requête courante.

parseDatabaseUrl#

function parseDatabaseUrl(url: string): IInfraDatabase

Parse l’URL du infra database : scheme → famille + dialecte.

parseNfEnvOverrides#

function parseNfEnvOverrides(env: NodeJS.ProcessEnv): NfEnvOverride[]

Scanne env et extrait tous les overrides NF__<MODULE>__<CHEMIN…>.

readResolvedPath#

function readResolvedPath(target: Record<string, unknown>, path: string[]): unknown

Relit la valeur posée à path — la SYMÉTRIQUE de applyResolvedPath.

readStoreConnector#

function readStoreConnector(store: unknown): string

Lit le connecteur ORM d’un store depuis son instance (getter public connector), pour le registre des stores — jumeau de readStoreLocation.

readStoreLocation#

function readStoreLocation(store: unknown): string

Lit l’emplacement PHYSIQUE d’un store depuis son instance (getter public location), pour l’écran Studio « Stores » — répond à « où mes données sont-elles écrites ? ». Un store fichier (passkeys, TOTP, sessions) expose le chemin de son fichier/dossier ; un store memory ou un backend réseau (drizzle/redis/mongoose) n’expose rien → undefined (l’UI dérive « en mémoire » ou renvoie à l’infra).

renderEnvExample#

function renderEnvExample(catalog: readonly NamedEnvVarMeta[], opts?: { header?: string; }): string

Rend le contenu complet de .env.example depuis le catalogue.

resolveAutoStore#

function resolveAutoStore(kind: StoreKind, infra: IInfra, available: readonly string[], fallback?: string, connectivity?: boolean | IStoreConnectivity): IAutoStoreResolution

Résout la sentinelle "auto" d’une brique en nom de backend, borné aux backends RÉELLEMENT enregistrés (available = listXStores() du registre — reflète l’auto-register des adapters chargés). Couverture partielle d’une infra (ex. brique durable sur redis) → repli fallback avec raison ANNONCÉE, jamais d’échec : le principe « fallback annoncé, pas de dégradation silencieuse » vit dans la raison retournée, que l’appelant DOIT logger.

resolveInfra#

function resolveInfra(env?: InfraEnvSource): IInfra

Résout les 3 infra déclarée depuis l’environnement. Fonction PURE (aucun kernel) : consommée par le Kernel (1 fois, mémoïsé), par le contexte defineConfig (ctx.infra) et par les builders de config des modules adapters (drizzle/mongoose/redis) dans leur couche env.

sqliteFilenameFromUrl#

function sqliteFilenameFromUrl(url: string): string

Fichier SQLite d’une URL sqlite: du infra database. Formes acceptées : sqlite::memory:, sqlite:./relatif.db, sqlite:/abs.db, sqlite:///abs.db. URL vide après le scheme → :memory:.

use#

function use<N extends KnownModule>(name: N, config?: ConfigOf<N>, opts?: UseOptions): ModuleEntryInput

Construit une entrée de manifeste modules avec config colocalisée + typée.

useConfig#

function useConfig<N extends string>(packageName: N): Readonly<ConfigOf<N>>

Lit la configuration d’un module telle que la voit la requête courante.

validateAppConfig#

function validateAppConfig(options: unknown): void

Valide la config app résolue ; lève une erreur au message agrégé si invalide.

withResolvedPath#

function withResolvedPath(target: Record<string, unknown>, path: string[], value: unknown): Record<string, unknown> | null

Variante « copie sur écriture » de applyResolvedPath : rend une NOUVELLE config où path vaut value, sans jamais écrire dans target.

Constantes (5)#

AUTO_STORE#

const AUTO_STORE = "auto"

Sentinelle des champs store : « laisser le framework choisir selon l’infra déclarée ».

EMPTY_INFRA#

const EMPTY_INFRA: IInfra

Infra vide (rien de déclaré) — fallback sûr quand le kernel est absent (tests).

appConfigSchema#

const appConfigSchema: z.ZodObject<{ modules: z.ZodOptional<z.ZodArray<z.ZodUnknown>>; locale: z.ZodOptional<z.ZodString>; templating: z.ZodOptional<z.ZodString>; orm: z.ZodOptional<z.ZodString>; packageManager: z.ZodOptional<z.ZodEnum<{ bun: "bun"; npm: "npm"; pnpm: "pnpm"; yarn: "yarn"; }>>; domain: z.ZodOptional<z.ZodString>; domainAlias: z.ZodOptional<z.ZodArray<z.ZodString>>; domainCheck: z.Z …

Schéma de la config app résolue. Exposé pour l’introspection (Studio : z.toJSONSchema(appConfigSchema) → panneau de config + formulaire éditable).

configReactivity#

const configReactivity: { readonly "log.active": "hot"; readonly "log.debug": "hot"; readonly "log.requestFormat": "hot"; }

Champs applicables À CHAUD (chemin en dot-notation). Tout champ absent est boot.

defaultAppConfig#

const defaultAppConfig: ResolvedAppConfig

Configuration framework par défaut, fusionnée sous la config de l’app au boot. Ne JAMAIS muter à l’exécution (le merge extend(true, {}, defaultAppConfig, …) clone ; l’invariant d’immutabilité est couvert par test).

Interfaces (29)#

AppConfigDescriptor#

interface AppConfigDescriptor

Descripteur de config retourné par defineConfig. Opaque : le Kernel appelle resolve(ctx) au boot pour obtenir la config fusionnée + validée.

AppConfigInput#

interface AppConfigInput

Forme de la configuration d’une application Nodefony, telle qu’écrite par l’utilisateur dans nodefony.config.ts. Tous les champs sont optionnels : ce que l’app n’écrit pas vient de defaultAppConfig (deep-merge au resolve).

AppMeta#

interface AppMeta

Métadonnées d’identité de l’application (affichées dans la CLI et les logs d’init).

ConfigContext#

interface ConfigContext<E = Record<string, unknown>>

Contexte passé à la forme fonction de defineConfig — permet de différencier la config par environnement SANS fichier config.<env>.ts parallèle (D3).

EnvVarMeta#

interface EnvVarMeta

Métadonnées INTROSPECTABLES d’une variable du catalogue — capturées à la déclaration (le défaut serait sinon piégé dans la closure z.preprocess). Portées par le schéma Zod (clé non-énumérable) puis agrégées par defineEnv sur l’objet env retourné → alimentent la génération de .env.example.

HttpServerConfig#

interface HttpServerConfig

Serveur HTTP plain.

HttpsServerConfig#

interface HttpsServerConfig

Serveur HTTPS (+ WSS hérité).

IAppliedEnvShortcut#

interface IAppliedEnvShortcut

Un raccourci appliqué, pour le journal du démarrage.

IAutoStoreResolution#

interface IAutoStoreResolution

Choix d’un backend pour "auto" + provenance lisible (log de boot, Studio).

IConfigFieldMeta#

interface IConfigFieldMeta

Métadonnées Nodefony d’un champ de config Zod, au-delà de la description.

IEnvShortcut#

interface IEnvShortcut

Un raccourci déclaré sur un champ de configuration.

IInfra#

interface IInfra

L’infra déclarée — null = non déclarée.

IInfraCache#

interface IInfraCache

Infra cache résolu depuis NF_REDIS_URL/REDIS_URL.

IInfraDatabase#

interface IInfraDatabase

Infra database résolu depuis NF_DATABASE_URL/DATABASE_URL.

IInfraLogs#

interface IInfraLogs

Infra logs (relecture backplane) — les DEUX URLs peuvent être présentes.

ISchemaLeaf#

interface ISchemaLeaf

IStoreResolution#

interface IStoreResolution

Résolution EFFECTIVE d’une brique de persistance, capturée au boot par le consommateur (au moment exact où il pose son store au container) et retenue dans le registre du Kernel (IKernel.registerStoreResolution). C’est la VÉRITÉ vécue — y compris les replis annoncés du lot 4 (session → "files" en dev) — pas une re-dérivation à la volée. Alimente l’écran Studio « Stores ».

LogConfig#

interface LogConfig

Observabilité — Syslog Nodefony + log backplane.

LogDestinationConfig#

interface LogDestinationConfig

Destination prod queryable du log backplane (Loki / OpenSearch).

LogFileConfig#

interface LogFileConfig

Sortie fichier du Syslog.

LokiDestinationConfig#

interface LokiDestinationConfig extends LogDestinationConfig

Destination Grafana Loki : une LogDestinationConfig plus son sélecteur.

ModuleEntryInput#

interface ModuleEntryInput

Entrée détaillée du manifeste modules (forme objet). Une string nue équivaut à { name, policy: "optional" }.

NamedEnvVarMeta#

interface NamedEnvVarMeta extends EnvVarMeta

EnvVarMeta + le nom de la variable (clé du catalogue).

NfEnvOverride#

interface NfEnvOverride

Un override d’environnement résolu (issu d’une variable NF__…).

NodefonyModuleConfig#

interface NodefonyModuleConfig

Registre AUGMENTABLE des configs par module — vide par défaut, enrichi par chaque module via declaration merging sur le package nodefony :

NodefonyModuleOverlay#

interface NodefonyModuleOverlay

Registre AUGMENTABLE des calques acceptés par module — la forme de la liste blanche, déclarée par chaque module comme NodefonyModuleConfig :

OpenSearchDestinationConfig#

interface OpenSearchDestinationConfig extends LogDestinationConfig

Destination OpenSearch : une LogDestinationConfig plus son index.

ServersConfig#

interface ServersConfig

Serveurs réseau HTTP/HTTPS/WS/WSS (un seul domaine, pas de vhost).

UseOptions#

interface UseOptions

Options de chargement passées à use (3ᵉ argument).

Types (17)#

AppConfig#

type AppConfig = z.infer<typeof appConfigSchema>

Type inféré de la config app (source unique TS ↔ runtime).

ConfigInput#

type ConfigInput<E = Record<string, unknown>> = AppConfigInput | (ctx: ConfigContext<E>) => AppConfigInput

Entrée de defineConfig : soit un objet de config, soit une fonction (ctx) => objet pour différencier par environnement (D3).

ConfigOf#

type ConfigOf<N extends KnownModule> = N extends keyof NodefonyModuleConfig ? NodefonyModuleConfig[N] : Record<string, unknown>

Type de la config d’un module N : sa forme enregistrée dans NodefonyModuleConfig si elle existe, sinon un objet libre (le module n’a pas (encore) publié son type de config — toujours utilisable).

ConfigOrigin#

type ConfigOrigin = "default" | "app" | "env"

Origine d’une valeur de configuration résolue.

DatabaseFamily#

type DatabaseFamily = "sql" | "mongo"

Famille du infra database — pilote le choix de l’adapter (drizzle/mongoose).

EnvVarKind#

type EnvVarKind = "string" | "number" | "boolean" | "enum"

Nature coercée d’une variable d’env du catalogue.

EnvVarPlacement#

type EnvVarPlacement = "platform" | "secrets" | "workstation"

Où une variable se pose en PRODUCTION — la colonne « où la poser » de la notice.

IStoreConnectivity#

type IStoreConnectivity = { readonly allowed: true; } | { readonly allowed: false; readonly cause: "no-external-services" | "schema-work"; }

Un run peut-il confier ses briques auto à un backend CONNECTÉ — et sinon, pourquoi ? La cause fait la phrase : accuser externalServices une commande qui l’a déclaré, mais qui travaille le schéma, enverrait corriger ce qui va.

InfraEnvSource#

type InfraEnvSource = Record<string, string>

Source d’environnement (forme de process.env) — injectable pour les tests.

InfraSqlDialect#

type InfraSqlDialect = "sqlite" | "postgres" | "mysql"

Dialecte SQL déduit du scheme de l’URL du infra database.

KnownModule#

type KnownModule = "@nodefony/http" | "@nodefony/framework" | "@nodefony/security" | "@nodefony/user" | "@nodefony/frontend" | "@nodefony/studio" | "@nodefony/documentation" | "@nodefony/realtime" | "@nodefony/redis" | "@nodefony/drizzle" | "@nodefony/mongoose" | (string & {})

Noms de modules connus du framework — proposés à l’autocomplétion tout en acceptant n’importe quel module tiers (astuce string & {} : conserve les littéraux connus dans la complétion sans fermer le type aux strings arbitraires).

ModuleManifestInput#

type ModuleManifestInput = ReadonlyArray<KnownModule | ModuleEntryInput>

Manifeste ORDONNÉ des modules de l’application (position = ordre de chargement). policy/when filtrent, ne réordonnent jamais.

OverlayOf#

type OverlayOf<N extends string> = N extends keyof NodefonyModuleOverlay ? NodefonyModuleOverlay[N] : never

Calque accepté par le module N — never s’il n’en déclare pas.

Reactivity#

type Reactivity = "hot" | "boot"

Réactivité d’un champ de config.

ResolvedAppConfig#

type ResolvedAppConfig = AppConfigInput

Configuration résolue : AppConfigInput après deep-merge avec les défauts framework et validation Zod. Même forme structurelle (le merge remplit les valeurs ; le Kernel lit défensivement avec ses propres fallbacks résiduels).

StoreKind#

type StoreKind = "durable" | "ephemeral" | "session"

Nature de la donnée d’une brique — pilote l’ordre de préférence des backends : - durable (tokens, passkeys, audit, webhooks, user) → infra database. - ephemeral (idempotence) → infra cache, sinon database. - session → cache, sinon database, sinon fallback fichier.

StoreProvenance#

type StoreProvenance = "infra" | "explicit"

Catégorie de provenance d’un store résolu (dérivée de la valeur configurée).


← Toutes les références d’API