diff --git a/packages/rstack/src/fmt/config.ts b/packages/rstack/src/fmt/config.ts new file mode 100644 index 0000000..8f782c5 --- /dev/null +++ b/packages/rstack/src/fmt/config.ts @@ -0,0 +1,15 @@ +import type { FmtConfig, ResolvedFmtConfig } from './types.ts'; + +/** Splits a flat config into project-level formatting options and rules. */ +const normalizeFmtConfig = (config: FmtConfig | undefined, rootPath: string): ResolvedFmtConfig => { + const { ignorePatterns = [], overrides = [], ...baseOptions } = config ?? {}; + + return { + rootPath, + baseOptions, + overrides, + ignorePatterns, + }; +}; + +export { normalizeFmtConfig }; diff --git a/packages/rstack/src/fmt/types.ts b/packages/rstack/src/fmt/types.ts index 1aca60d..b1c89af 100644 --- a/packages/rstack/src/fmt/types.ts +++ b/packages/rstack/src/fmt/types.ts @@ -1,4 +1,4 @@ -import type { Config as PrettierConfig } from 'prettier'; +import type { Config as PrettierConfig, Options as PrettierOptions } from 'prettier'; interface FmtConfig extends PrettierConfig { /** Gitignore-compatible patterns relative to the Rstack config root. */ @@ -7,4 +7,16 @@ interface FmtConfig extends PrettierConfig { type FmtConfigDefinition = FmtConfig | (() => FmtConfig | Promise); -export type { FmtConfig, FmtConfigDefinition }; +/** Internal project config before per-file rules are applied. */ +interface ResolvedFmtConfig { + /** Root for relative patterns and plugin paths. */ + rootPath: string; + /** Shared Prettier options before per-file overrides. */ + baseOptions: PrettierOptions; + /** Per-file override rules. */ + overrides: NonNullable; + /** Root-relative ignore patterns. */ + ignorePatterns: string[]; +} + +export type { FmtConfig, FmtConfigDefinition, ResolvedFmtConfig };