@titan-design/style-profile 0.0.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -57,6 +57,10 @@ Each format also has its own generator (`generateEslintExport`, `generateRuffExp
57
57
  on). The rule builders in `eslint-rules` (`buildNamingConventionRule`,
58
58
  `buildFunctionLengthRule`, `buildFileNamingRule`, `buildJsdocRules`, `buildImportOrderRule`)
59
59
  return single `[ruleName, config]` pairs for callers that assemble their own ESLint config.
60
+ `buildNamingConvention` returns the naming rule plus `skippedRules`: profile naming values
61
+ are mapped to typescript-eslint formats (`UPPER_SNAKE_CASE` and `SCREAMING_SNAKE` become
62
+ `UPPER_CASE`), and a value with no typescript-eslint format, such as `kebab-case`, is left
63
+ out of the rule and reported there with a reason instead of making ESLint reject the config.
60
64
 
61
65
  ## Provenance
62
66
 
package/dist/index.d.ts CHANGED
@@ -577,6 +577,19 @@ declare function generateEslintExport(profile: Profile): GeneratedFile;
577
577
 
578
578
  declare function toEslintSeverity(confidence: number, thresholds: SeverityThresholds): Severity | null;
579
579
  declare function severityRank(s: Severity): number;
580
+ /** Same shape as style-checker's SkippedRule, so a consumer can forward it unchanged. */
581
+ interface EslintSkippedRule {
582
+ tool: "eslint";
583
+ rule: string;
584
+ plugin: string;
585
+ reason: string;
586
+ }
587
+ interface NamingConventionResult {
588
+ rule: [string, unknown] | null;
589
+ skippedRules: EslintSkippedRule[];
590
+ }
591
+ declare function toTsEslintFormat(convention: string): string | null;
592
+ declare function buildNamingConvention(profile: Profile): NamingConventionResult;
580
593
  declare function buildNamingConventionRule(profile: Profile): [string, unknown] | null;
581
594
  declare function buildImportOrderRule(profile: Profile): [string, unknown] | null;
582
595
  declare function buildFunctionLengthRule(profile: Profile): [string, unknown] | null;
@@ -614,4 +627,4 @@ declare function getRulesForCategory(profile: Profile, category: string): RuleEn
614
627
  declare function getRulesByCategory(profile: Profile): Map<string, RuleEntry[]>;
615
628
  declare function detectLanguages(profile: Profile): string[];
616
629
 
617
- export { DEFAULT_SEVERITY_THRESHOLDS, ExampleSchema, type ExportFormat, type ExtractedRule, type Fixability, FixabilitySchema, type GeneratedFile, PROFILE_CATEGORIES, type Profile, type ProfileCategory, ProfileSchema, type RuleEntry, SCHEMA_VERSION, SUPPORTED_FORMATS, type Severity, type SeverityThresholds, type Stability, StabilitySchema, type StyleRule, StyleRuleSchema, buildFileNamingRule, buildFunctionLengthRule, buildImportOrderRule, buildJsdocRules, buildNamingConventionRule, detectLanguages, exportProfile, extractAllRules, generateClaudeRules, generateEditorConfigExport, generateEslintExport, generateHooksConfig, generateMarkdownExport, generateRuffExport, generateSkillFiles, getRulesByCategory, getRulesForCategory, getTopRules, migrateProfile, readProfile, registerMigration, severityRank, toEslintSeverity, validateProfile, writeProfile };
630
+ export { DEFAULT_SEVERITY_THRESHOLDS, type EslintSkippedRule, ExampleSchema, type ExportFormat, type ExtractedRule, type Fixability, FixabilitySchema, type GeneratedFile, type NamingConventionResult, PROFILE_CATEGORIES, type Profile, type ProfileCategory, ProfileSchema, type RuleEntry, SCHEMA_VERSION, SUPPORTED_FORMATS, type Severity, type SeverityThresholds, type Stability, StabilitySchema, type StyleRule, StyleRuleSchema, buildFileNamingRule, buildFunctionLengthRule, buildImportOrderRule, buildJsdocRules, buildNamingConvention, buildNamingConventionRule, detectLanguages, exportProfile, extractAllRules, generateClaudeRules, generateEditorConfigExport, generateEslintExport, generateHooksConfig, generateMarkdownExport, generateRuffExport, generateSkillFiles, getRulesByCategory, getRulesForCategory, getTopRules, migrateProfile, readProfile, registerMigration, severityRank, toEslintSeverity, toTsEslintFormat, validateProfile, writeProfile };
package/dist/index.js CHANGED
@@ -432,33 +432,57 @@ function eslintExtensionOptions(rule) {
432
432
  const eslintExt = rule.extensions?.eslint;
433
433
  return eslintExt && typeof eslintExt === "object" && "options" in eslintExt && Array.isArray(eslintExt.options) ? eslintExt.options : void 0;
434
434
  }
435
- function namingSelectors(rule, selectorName) {
435
+ var NAMING_RULE = "@typescript-eslint/naming-convention";
436
+ var TS_ESLINT_FORMATS = {
437
+ camelCase: "camelCase",
438
+ strictCamelCase: "strictCamelCase",
439
+ PascalCase: "PascalCase",
440
+ StrictPascalCase: "StrictPascalCase",
441
+ snake_case: "snake_case",
442
+ UPPER_CASE: "UPPER_CASE",
443
+ UPPER_SNAKE_CASE: "UPPER_CASE",
444
+ SCREAMING_SNAKE: "UPPER_CASE",
445
+ SCREAMING_SNAKE_CASE: "UPPER_CASE"
446
+ };
447
+ function toTsEslintFormat(convention) {
448
+ return TS_ESLINT_FORMATS[convention] ?? null;
449
+ }
450
+ function skippedNaming(key, convention) {
451
+ return {
452
+ tool: "eslint",
453
+ rule: NAMING_RULE,
454
+ plugin: "@typescript-eslint",
455
+ reason: `naming.${key} convention ${JSON.stringify(convention)} has no typescript-eslint naming-convention format`
456
+ };
457
+ }
458
+ function namingSelectors(key, rule, selectorName, skipped) {
436
459
  const eslintOptions = eslintExtensionOptions(rule);
437
460
  if (eslintOptions) return eslintOptions;
438
- if (typeof rule.convention === "string") {
439
- return [{ selector: selectorName, format: [rule.convention] }];
440
- }
461
+ const format = typeof rule.convention === "string" ? toTsEslintFormat(rule.convention) : null;
462
+ if (format) return [{ selector: selectorName, format: [format] }];
463
+ skipped.push(skippedNaming(key, rule.convention));
441
464
  return [];
442
465
  }
443
- function buildNamingConventionRule(profile) {
466
+ function buildNamingConvention(profile) {
444
467
  const thresholds = profile.severityThresholds;
445
- const naming = profile.naming;
446
- if (!naming) return null;
447
468
  const selectors = [];
469
+ const skippedRules = [];
448
470
  let maxSeverity = null;
449
- for (const [key, rule] of Object.entries(naming)) {
450
- if (key === "files") continue;
471
+ for (const [key, rule] of Object.entries(profile.naming ?? {})) {
451
472
  const selectorName = NAMING_SELECTORS[key];
452
473
  if (!selectorName) continue;
453
474
  const severity = toEslintSeverity(rule.confidence, thresholds);
454
475
  if (!severity) continue;
455
- if (!maxSeverity || severityRank(severity) > severityRank(maxSeverity)) {
456
- maxSeverity = severity;
457
- }
458
- selectors.push(...namingSelectors(rule, selectorName));
476
+ const ruleSelectors = namingSelectors(key, rule, selectorName, skippedRules);
477
+ if (ruleSelectors.length === 0) continue;
478
+ selectors.push(...ruleSelectors);
479
+ if (!maxSeverity || severityRank(severity) > severityRank(maxSeverity)) maxSeverity = severity;
459
480
  }
460
- if (selectors.length === 0 || !maxSeverity) return null;
461
- return ["@typescript-eslint/naming-convention", [maxSeverity, ...selectors]];
481
+ if (selectors.length === 0 || !maxSeverity) return { rule: null, skippedRules };
482
+ return { rule: [NAMING_RULE, [maxSeverity, ...selectors]], skippedRules };
483
+ }
484
+ function buildNamingConventionRule(profile) {
485
+ return buildNamingConvention(profile).rule;
462
486
  }
463
487
  function buildImportOrderRule(profile) {
464
488
  const importOrder = profile.structure?.importOrder;
@@ -949,6 +973,7 @@ export {
949
973
  buildFunctionLengthRule,
950
974
  buildImportOrderRule,
951
975
  buildJsdocRules,
976
+ buildNamingConvention,
952
977
  buildNamingConventionRule,
953
978
  detectLanguages,
954
979
  exportProfile,
@@ -968,6 +993,7 @@ export {
968
993
  registerMigration,
969
994
  severityRank,
970
995
  toEslintSeverity,
996
+ toTsEslintFormat,
971
997
  validateProfile,
972
998
  writeProfile
973
999
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/schema/style-rule.ts","../src/schema/profile.ts","../src/io.ts","../src/migrations/registry.ts","../src/migrations/migrate-profile.ts","../src/exporters/template-helpers.ts","../src/exporters/templates.ts","../src/exporters/skill.ts","../src/exporters/claude-rules.ts","../src/exporters/hooks.ts","../src/exporters/eslint-rules.ts","../src/exporters/eslint.ts","../src/exporters/ruff.ts","../src/exporters/markdown.ts","../src/exporters/editorconfig.ts","../src/exporters/export-index.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport const ExampleSchema = z.object({\n good: z.string().optional(),\n bad: z.string().optional(),\n source: z.string().optional(),\n});\n\nexport const StabilitySchema = z.enum([\"high\", \"medium\", \"low\"]);\n\nexport const FixabilitySchema = z.enum([\n \"safe\",\n \"maybe-incorrect\",\n \"requires-input\",\n \"not-fixable\",\n]);\n\nexport const StyleRuleSchema = z.object({\n convention: z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.array(z.string()),\n ]),\n confidence: z.number().min(0).max(1),\n stability: StabilitySchema.optional(),\n fixability: FixabilitySchema.optional(),\n description: z.string().optional(),\n examples: z.array(ExampleSchema).optional(),\n extensions: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type StyleRule = z.infer<typeof StyleRuleSchema>;\nexport type Stability = z.infer<typeof StabilitySchema>;\nexport type Fixability = z.infer<typeof FixabilitySchema>;\n","import { z } from \"zod\";\nimport { StyleRuleSchema } from \"./style-rule.js\";\n\nexport const SCHEMA_VERSION = \"1.0.0\";\n\nconst CategorySchema = z.record(z.string(), StyleRuleSchema);\n\nconst IdiomSchema = z.object({\n name: z.string(),\n description: z.string(),\n frequency: z.number(),\n confidence: z.number().min(0).max(1),\n example: z.string().optional(),\n});\n\nconst AntiPatternSchema = z.object({\n pattern: z.string(),\n reason: z.string(),\n deprecated: z.boolean().optional(),\n});\n\nconst OverrideSchema = z.object({\n files: z.array(z.string()),\n naming: CategorySchema.optional(),\n structure: CategorySchema.optional(),\n documentation: CategorySchema.optional(),\n errorHandling: CategorySchema.optional(),\n formatting: CategorySchema.optional(),\n patterns: CategorySchema.optional(),\n});\n\nconst SeverityThresholdsSchema = z.object({\n error: z.number().min(0).max(1),\n warn: z.number().min(0).max(1),\n info: z.number().min(0).max(1),\n});\n\nexport const DEFAULT_SEVERITY_THRESHOLDS = {\n error: 0.85,\n warn: 0.60,\n info: 0.40,\n} as const;\n\nexport const ProfileSchema = z.object({\n $schema: z.string().optional(),\n schemaVersion: z.string(),\n author: z.string(),\n generated: z.string(),\n sources: z.array(z.string()),\n\n naming: CategorySchema,\n structure: CategorySchema,\n documentation: CategorySchema,\n errorHandling: CategorySchema,\n formatting: CategorySchema,\n patterns: CategorySchema,\n\n idioms: z.object({\n detected: z.array(IdiomSchema),\n }),\n\n antiPatterns: z.object({\n acknowledged: z.array(AntiPatternSchema),\n }),\n\n overrides: z.array(OverrideSchema),\n\n severityThresholds: SeverityThresholdsSchema.default(DEFAULT_SEVERITY_THRESHOLDS),\n});\n\nexport type Profile = z.infer<typeof ProfileSchema>;\nexport type SeverityThresholds = z.infer<typeof SeverityThresholdsSchema>;\n\nexport const PROFILE_CATEGORIES = [\n \"naming\",\n \"structure\",\n \"documentation\",\n \"errorHandling\",\n \"formatting\",\n \"patterns\",\n] as const;\n\nexport type ProfileCategory = (typeof PROFILE_CATEGORIES)[number];\n\nexport type Severity = \"error\" | \"warn\" | \"info\" | \"off\";\n","import * as fs from \"node:fs/promises\";\nimport { ProfileSchema, type Profile } from \"./schema/profile.js\";\n\nexport async function readProfile(filePath: string): Promise<Profile> {\n const raw = await fs.readFile(filePath, \"utf-8\");\n const json: unknown = JSON.parse(raw);\n return ProfileSchema.parse(json);\n}\n\nexport async function writeProfile(\n filePath: string,\n profile: unknown,\n): Promise<void> {\n const validated = ProfileSchema.parse(profile);\n await fs.writeFile(filePath, JSON.stringify(validated, null, 2) + \"\\n\");\n}\n\nexport function validateProfile(data: unknown) {\n return ProfileSchema.safeParse(data);\n}\n","export interface Migration {\n from: string;\n to: string;\n migrate: (profile: Record<string, unknown>) => Record<string, unknown>;\n}\n\nconst migrations: Migration[] = [];\n\nexport function registerMigration(migration: Migration): void {\n migrations.push(migration);\n migrations.sort((a, b) => a.from.localeCompare(b.from));\n}\n\nexport function getMigrations(): ReadonlyArray<Migration> {\n return migrations;\n}\n\nexport function clearMigrations(): void {\n migrations.length = 0;\n}\n","import { SCHEMA_VERSION } from \"../schema/profile.js\";\nimport { getMigrations, registerMigration, clearMigrations } from \"./registry.js\";\n\nexport { registerMigration, clearMigrations };\n\nexport function migrateProfile(\n profile: Record<string, unknown>,\n): Record<string, unknown> {\n let current = { ...profile };\n const version = current.schemaVersion as string;\n\n if (version === SCHEMA_VERSION) {\n return current;\n }\n\n const migrations = getMigrations();\n let currentVersion = version;\n\n for (const migration of migrations) {\n if (migration.from === currentVersion) {\n current = migration.migrate(current);\n currentVersion = migration.to;\n }\n }\n\n if (currentVersion !== SCHEMA_VERSION) {\n throw new Error(\n `No migration path from version ${version} to ${SCHEMA_VERSION}`,\n );\n }\n\n return current;\n}\n","import { PROFILE_CATEGORIES, type Profile } from \"../schema/profile.js\";\n\nexport interface RuleEntry {\n category: string;\n name: string;\n convention: unknown;\n confidence: number;\n stability?: string;\n description?: string;\n examples?: Array<{ good?: string; bad?: string; source?: string }>;\n extensions?: Record<string, unknown>;\n}\n\nexport type ExtractedRule = RuleEntry;\n\nexport function extractAllRules(profile: Profile): RuleEntry[] {\n const rules: RuleEntry[] = [];\n\n for (const category of PROFILE_CATEGORIES) {\n const section = profile[category];\n if (!section || typeof section !== \"object\") continue;\n\n for (const [name, rule] of Object.entries(section)) {\n if (!rule || typeof rule !== \"object\") continue;\n rules.push({\n category,\n name,\n convention: rule.convention,\n confidence: rule.confidence,\n stability: rule.stability,\n description: rule.description,\n examples: rule.examples,\n extensions: rule.extensions,\n });\n }\n }\n\n return rules;\n}\n\nexport function getTopRules(\n profile: Profile,\n count: number = 8,\n): RuleEntry[] {\n const errorThreshold = profile.severityThresholds?.error ?? 0.85;\n return extractAllRules(profile)\n .filter((r) => r.confidence >= errorThreshold)\n .sort((a, b) => b.confidence - a.confidence)\n .slice(0, count);\n}\n\nexport function getRulesForCategory(\n profile: Profile,\n category: string,\n): RuleEntry[] {\n return extractAllRules(profile).filter((r) => r.category === category);\n}\n\nexport function getRulesByCategory(\n profile: Profile,\n): Map<string, RuleEntry[]> {\n const grouped = new Map<string, RuleEntry[]>();\n for (const rule of extractAllRules(profile)) {\n const existing = grouped.get(rule.category) ?? [];\n existing.push(rule);\n grouped.set(rule.category, existing);\n }\n return grouped;\n}\n\nconst byConfidence = (a: RuleEntry, b: RuleEntry) =>\n b.confidence - a.confidence;\n\nexport function getRulesByTier(profile: Profile): {\n critical: RuleEntry[];\n strong: RuleEntry[];\n preferred: RuleEntry[];\n} {\n const allRules = extractAllRules(profile);\n const errorThreshold = profile.severityThresholds?.error ?? 0.85;\n const warnThreshold = profile.severityThresholds?.warn ?? 0.60;\n const infoThreshold = profile.severityThresholds?.info ?? 0.40;\n\n const critical: RuleEntry[] = [];\n const strong: RuleEntry[] = [];\n const preferred: RuleEntry[] = [];\n\n for (const rule of allRules) {\n if (rule.confidence >= errorThreshold) {\n critical.push(rule);\n } else if (rule.confidence >= warnThreshold) {\n strong.push(rule);\n } else if (rule.confidence >= infoThreshold) {\n preferred.push(rule);\n }\n }\n\n critical.sort(byConfidence);\n strong.sort(byConfidence);\n preferred.sort(byConfidence);\n\n return { critical, strong, preferred };\n}\n\nexport function readableConvention(rule: RuleEntry): string {\n if (\n typeof rule.convention === \"boolean\" ||\n typeof rule.convention === \"number\"\n ) {\n return rule.description ?? JSON.stringify(rule.convention);\n }\n if (Array.isArray(rule.convention)) {\n return rule.convention.join(\" → \");\n }\n return String(rule.convention);\n}\n\nexport function detectLanguages(profile: Profile): string[] {\n const langs: string[] = [];\n const hasTypescriptSignals =\n Object.keys(profile.naming).length > 0 ||\n Object.keys(profile.structure).length > 0;\n if (hasTypescriptSignals) langs.push(\"typescript\");\n return langs.length > 0 ? langs : [\"typescript\"];\n}\n","import Handlebars from \"handlebars\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\n// tsup bundles into dist/index.js while tests load src/exporters, so the package root sits at different depths.\nfunction findPackageRoot(start: string): string {\n let dir = start;\n while (!existsSync(join(dir, \"package.json\"))) {\n const parent = dirname(dir);\n if (parent === dir) throw new Error(`style-profile package root not found above ${start}`);\n dir = parent;\n }\n return dir;\n}\n\nexport function loadTemplate(name: string): Handlebars.TemplateDelegate {\n const root = findPackageRoot(dirname(fileURLToPath(import.meta.url)));\n const source = readFileSync(join(root, \"templates\", name), \"utf-8\");\n return Handlebars.compile(source);\n}\n","import type { Profile } from \"../schema/profile.js\";\nimport type { GeneratedFile } from \"./types.js\";\nimport {\n getRulesByTier,\n readableConvention,\n detectLanguages,\n} from \"./template-helpers.js\";\nimport type { RuleEntry } from \"./template-helpers.js\";\nimport { loadTemplate } from \"./templates.js\";\n\nfunction buildTieredRulesContext(profile: Profile) {\n const tiers = getRulesByTier(profile);\n\n const mapRule = (r: RuleEntry) => ({\n name: `${r.category}.${r.name}`,\n readableConvention: readableConvention(r),\n confidencePercent: (r.confidence * 100).toFixed(0),\n });\n\n return {\n criticalRules: tiers.critical.map(mapRule),\n strongRules: tiers.strong.map(mapRule),\n preferredRules: tiers.preferred.map(mapRule),\n };\n}\n\nfunction buildNamingContext(profile: Profile) {\n const section = profile.naming;\n return Object.entries(section).map(([name, rule]) => ({\n label: name.charAt(0).toUpperCase() + name.slice(1),\n convention:\n typeof rule.convention === \"string\"\n ? rule.convention\n : JSON.stringify(rule.convention),\n confidencePercent: (rule.confidence * 100).toFixed(0),\n stability: rule.stability,\n fixability: rule.fixability,\n description: rule.description,\n examples: rule.examples,\n }));\n}\n\nfunction buildPatternsContext(profile: Profile) {\n const section = profile.patterns;\n const patternRules = Object.entries(section).map(([name, rule]) => ({\n name,\n strength:\n typeof rule.convention === \"string\" ? rule.convention : \"detected\",\n confidencePercent: (rule.confidence * 100).toFixed(0),\n description: rule.description,\n fixability: rule.fixability,\n examples: rule.examples,\n }));\n\n const preferredPatterns = profile.structure?.preferredPatterns;\n let preferredList: string[] | undefined;\n if (preferredPatterns && Array.isArray(preferredPatterns.convention)) {\n preferredList = preferredPatterns.convention as string[];\n }\n\n return { patterns: patternRules, preferredPatterns: preferredList };\n}\n\nfunction buildIdiomsContext(profile: Profile) {\n return profile.idioms.detected.map((idiom) => ({\n name: idiom.name,\n description: idiom.description,\n example: idiom.example,\n }));\n}\n\nfunction buildAntiPatternsContext(profile: Profile) {\n return profile.antiPatterns.acknowledged.map((ap) => ({\n pattern: ap.pattern,\n reason: ap.reason,\n }));\n}\n\nfunction buildLanguageContext(profile: Profile, lang: string) {\n const tiers = getRulesByTier(profile);\n const mapRule = (r: RuleEntry) => ({\n category: r.category,\n name: r.name,\n convention:\n typeof r.convention === \"string\"\n ? r.convention\n : JSON.stringify(r.convention),\n confidencePercent: (r.confidence * 100).toFixed(0),\n readableConvention: readableConvention(r),\n description: r.description,\n });\n\n return {\n language: lang.charAt(0).toUpperCase() + lang.slice(1),\n criticalRules: tiers.critical.map(mapRule),\n strongRules: tiers.strong.map(mapRule),\n preferredRules: tiers.preferred.map(mapRule),\n };\n}\n\nfunction renderSkillFile(profile: Profile, languages: string[]): GeneratedFile {\n const skillTemplate = loadTemplate(\"skill.md.hbs\");\n const idioms = buildIdiomsContext(profile);\n const antiPatterns = buildAntiPatternsContext(profile);\n return {\n path: \"skill.md\",\n content: skillTemplate({\n author: profile.author,\n ...buildTieredRulesContext(profile),\n languages,\n idioms: idioms.length > 0 ? idioms : undefined,\n antiPatterns: antiPatterns.length > 0 ? antiPatterns : undefined,\n }),\n };\n}\n\nexport function generateSkillFiles(profile: Profile): GeneratedFile[] {\n const files: GeneratedFile[] = [];\n const languages = detectLanguages(profile);\n\n files.push(renderSkillFile(profile, languages));\n\n const namingTemplate = loadTemplate(\"naming.md.hbs\");\n files.push({\n path: \"references/naming.md\",\n content: namingTemplate({ rules: buildNamingContext(profile) }),\n });\n\n const patternsTemplate = loadTemplate(\"patterns.md.hbs\");\n files.push({\n path: \"references/patterns.md\",\n content: patternsTemplate(buildPatternsContext(profile)),\n });\n\n const langTemplate = loadTemplate(\"per-language.md.hbs\");\n for (const lang of languages) {\n files.push({\n path: `references/per-language/${lang}.md`,\n content: langTemplate(buildLanguageContext(profile, lang)),\n });\n }\n\n return files;\n}\n","import type { Profile } from \"../schema/profile.js\";\nimport { extractAllRules, type RuleEntry } from \"./template-helpers.js\";\nimport type { GeneratedFile } from \"./types.js\";\n\nfunction formatFrontmatter(globs: string[], description: string): string {\n return [\n \"---\",\n `description: \"${description}\"`,\n `globs: \"${globs.join(\", \")}\"`,\n \"alwaysApply: false\",\n \"---\",\n \"\",\n ].join(\"\\n\");\n}\n\nfunction formatRuleLine(\n category: string,\n name: string,\n convention: unknown,\n description?: string,\n): string {\n const value =\n typeof convention === \"string\"\n ? convention\n : JSON.stringify(convention);\n const desc = description ? ` -- ${description}` : \"\";\n return `- **${category}.${name}**: \\`${value}\\`${desc}`;\n}\n\nfunction formatBody(author: string, rules: RuleEntry[]): string {\n return [\n `# ${author}'s TypeScript Style`,\n \"\",\n ...rules\n .sort((a, b) => b.confidence - a.confidence)\n .map((r) =>\n formatRuleLine(r.category, r.name, r.convention, r.description),\n ),\n ].join(\"\\n\");\n}\n\nexport function generateClaudeRules(profile: Profile): GeneratedFile[] {\n const files: GeneratedFile[] = [];\n const allRules = extractAllRules(profile);\n const infoThreshold = profile.severityThresholds?.info ?? 0.40;\n\n const eligibleRules = allRules.filter(\n (r) => r.confidence >= infoThreshold,\n );\n\n if (eligibleRules.length > 0) {\n const frontmatter = formatFrontmatter(\n [\"**/*.ts\", \"**/*.tsx\"],\n `${profile.author}'s TypeScript coding style preferences`,\n );\n\n files.push({\n path: \".claude/rules/typescript.md\",\n content: frontmatter + formatBody(profile.author, eligibleRules) + \"\\n\",\n });\n }\n\n return files;\n}\n","import type { Profile } from \"../schema/profile.js\";\n\ninterface ClaudeHook {\n event: \"PreToolUse\" | \"PostToolUse\";\n matcher: string;\n command: string;\n}\n\ninterface ClaudeSettingsHooks {\n hooks: ClaudeHook[];\n}\n\nexport function generateHooksConfig(\n _profile: Profile,\n): ClaudeSettingsHooks {\n return {\n hooks: [\n {\n event: \"PostToolUse\",\n matcher: \"Write\",\n command: \"codewatch diff --fix $TOOL_INPUT_FILE_PATH\",\n },\n {\n event: \"PostToolUse\",\n matcher: \"Edit\",\n command: \"codewatch diff --fix $TOOL_INPUT_FILE_PATH\",\n },\n ],\n };\n}\n","import type { Profile, SeverityThresholds, Severity } from \"../schema/profile.js\";\nimport type { StyleRule } from \"../schema/style-rule.js\";\n\nexport function toEslintSeverity(\n confidence: number,\n thresholds: SeverityThresholds,\n): Severity | null {\n if (confidence >= thresholds.error) return \"error\";\n if (confidence >= thresholds.warn) return \"warn\";\n if (confidence >= thresholds.info) return \"info\";\n return null;\n}\n\nexport function severityRank(s: Severity): number {\n return s === \"error\" ? 3 : s === \"warn\" ? 2 : 1;\n}\n\nconst NAMING_SELECTORS: Record<string, string> = {\n variables: \"variable\",\n functions: \"function\",\n types: \"typeLike\",\n constants: \"variable\",\n};\n\nfunction eslintExtensionOptions(rule: StyleRule): unknown[] | undefined {\n const eslintExt = rule.extensions?.eslint;\n return eslintExt &&\n typeof eslintExt === \"object\" &&\n \"options\" in eslintExt &&\n Array.isArray((eslintExt as Record<string, unknown>).options)\n ? ((eslintExt as Record<string, unknown>).options as unknown[])\n : undefined;\n}\n\nfunction namingSelectors(rule: StyleRule, selectorName: string): unknown[] {\n const eslintOptions = eslintExtensionOptions(rule);\n if (eslintOptions) return eslintOptions;\n if (typeof rule.convention === \"string\") {\n return [{ selector: selectorName, format: [rule.convention] }];\n }\n return [];\n}\n\nexport function buildNamingConventionRule(\n profile: Profile,\n): [string, unknown] | null {\n const thresholds = profile.severityThresholds;\n const naming = profile.naming;\n if (!naming) return null;\n\n const selectors: unknown[] = [];\n let maxSeverity: Severity | null = null;\n\n for (const [key, rule] of Object.entries(naming)) {\n if (key === \"files\") continue;\n const selectorName = NAMING_SELECTORS[key];\n if (!selectorName) continue;\n\n const severity = toEslintSeverity(rule.confidence, thresholds);\n if (!severity) continue;\n if (!maxSeverity || severityRank(severity) > severityRank(maxSeverity)) {\n maxSeverity = severity;\n }\n\n selectors.push(...namingSelectors(rule, selectorName));\n }\n\n if (selectors.length === 0 || !maxSeverity) return null;\n return [\"@typescript-eslint/naming-convention\", [maxSeverity, ...selectors]];\n}\n\nexport function buildImportOrderRule(\n profile: Profile,\n): [string, unknown] | null {\n const importOrder = profile.structure?.importOrder;\n if (!importOrder) return null;\n const severity = toEslintSeverity(importOrder.confidence, profile.severityThresholds);\n if (!severity) return null;\n\n const convention = Array.isArray(importOrder.convention)\n ? importOrder.convention\n : [\"builtin\", \"external\", \"internal\", \"relative\"];\n\n return [\n \"perfectionist/sort-imports\",\n [\n severity,\n {\n type: \"natural\",\n groups: convention,\n },\n ],\n ];\n}\n\nexport function buildFunctionLengthRule(\n profile: Profile,\n): [string, unknown] | null {\n const maxLines = profile.structure?.functionMaxLines;\n if (!maxLines) return null;\n const severity = toEslintSeverity(maxLines.confidence, profile.severityThresholds);\n if (!severity) return null;\n if (typeof maxLines.convention !== \"number\") return null;\n\n return [\"max-lines-per-function\", [severity, { max: maxLines.convention }]];\n}\n\nexport function buildFileNamingRule(\n profile: Profile,\n): [string, unknown] | null {\n const files = profile.naming?.files;\n if (!files) return null;\n const severity = toEslintSeverity(files.confidence, profile.severityThresholds);\n if (!severity) return null;\n if (typeof files.convention !== \"string\") return null;\n\n const caseMap: Record<string, string> = {\n \"kebab-case\": \"kebabCase\",\n camelCase: \"camelCase\",\n PascalCase: \"pascalCase\",\n snake_case: \"snakeCase\",\n };\n\n return [\n \"unicorn/filename-case\",\n [severity, { case: { [caseMap[files.convention] ?? \"kebabCase\"]: true } }],\n ];\n}\n\nexport function buildJsdocRules(\n profile: Profile,\n): Array<[string, unknown]> {\n const rules: Array<[string, unknown]> = [];\n const docs = profile.documentation;\n if (!docs) return rules;\n\n const functionDocs = docs.functionDocs;\n if (!functionDocs) return rules;\n\n const severity = toEslintSeverity(functionDocs.confidence, profile.severityThresholds);\n if (!severity) return rules;\n\n if (functionDocs.convention === \"jsdoc-selective\") {\n rules.push([\"jsdoc/require-jsdoc\", [severity, { publicOnly: true }]]);\n } else if (functionDocs.convention === \"jsdoc-all\") {\n rules.push([\"jsdoc/require-jsdoc\", [severity]]);\n }\n\n return rules;\n}\n","import {\n PROFILE_CATEGORIES,\n type Profile,\n type SeverityThresholds,\n} from \"../schema/profile.js\";\nimport type { StyleRule } from \"../schema/style-rule.js\";\nimport type { GeneratedFile } from \"./types.js\";\nimport {\n toEslintSeverity,\n buildImportOrderRule,\n} from \"./eslint-rules.js\";\n\ninterface EslintRuleEntry {\n plugin: string;\n rule: string;\n severity: \"error\" | \"warn\" | \"off\";\n options?: unknown[];\n}\n\nfunction extensionEntry(\n rule: StyleRule,\n thresholds: SeverityThresholds,\n): EslintRuleEntry | null {\n const ext = rule.extensions?.eslint as\n | { rule: string; options?: unknown[] }\n | undefined;\n if (!ext) return null;\n\n const sev = toEslintSeverity(rule.confidence, thresholds);\n if (sev === null) return null;\n\n const plugin = ext.rule.includes(\"/\")\n ? ext.rule.split(\"/\").slice(0, -1).join(\"/\")\n : \"\";\n\n return {\n plugin,\n rule: ext.rule,\n severity: sev === \"info\" ? \"warn\" : sev,\n options: ext.options,\n };\n}\n\nfunction collectEslintExtensions(profile: Profile): EslintRuleEntry[] {\n const entries: EslintRuleEntry[] = [];\n\n for (const category of PROFILE_CATEGORIES) {\n const section = profile[category];\n if (!section) continue;\n\n for (const [, rule] of Object.entries(section)) {\n const entry = extensionEntry(rule, profile.severityThresholds);\n if (entry) entries.push(entry);\n }\n }\n\n return entries;\n}\n\nfunction addImportOrderRule(profile: Profile, entries: EslintRuleEntry[]): void {\n const result = buildImportOrderRule(profile);\n if (!result) return;\n\n const [ruleName, ruleConfig] = result;\n const configArray = ruleConfig as unknown[];\n const severity = configArray[0] as string;\n if (severity === \"info\") return;\n\n entries.push({\n plugin: \"perfectionist\",\n rule: ruleName,\n severity: severity as \"error\" | \"warn\",\n options: [configArray[1]],\n });\n}\n\nfunction detectRequiredPlugins(entries: EslintRuleEntry[]): Set<string> {\n const plugins = new Set<string>();\n for (const entry of entries) {\n if (entry.plugin.includes(\"@typescript-eslint\")) {\n plugins.add(\"@typescript-eslint\");\n }\n if (entry.plugin === \"perfectionist\") {\n plugins.add(\"perfectionist\");\n }\n if (entry.plugin.includes(\"unicorn\")) {\n plugins.add(\"unicorn\");\n }\n if (entry.plugin.includes(\"jsdoc\")) {\n plugins.add(\"jsdoc\");\n }\n }\n return plugins;\n}\n\nfunction generateImportStatements(plugins: Set<string>): string[] {\n const imports: string[] = [];\n if (plugins.has(\"@typescript-eslint\")) {\n imports.push(`import tseslint from \"@typescript-eslint/eslint-plugin\";`);\n imports.push(`import tsparser from \"@typescript-eslint/parser\";`);\n }\n if (plugins.has(\"perfectionist\")) {\n imports.push(`import perfectionist from \"eslint-plugin-perfectionist\";`);\n }\n if (plugins.has(\"unicorn\")) {\n imports.push(`import unicorn from \"eslint-plugin-unicorn\";`);\n }\n if (plugins.has(\"jsdoc\")) {\n imports.push(`import jsdoc from \"eslint-plugin-jsdoc\";`);\n }\n return imports;\n}\n\nfunction buildRulesObject(\n entries: EslintRuleEntry[],\n): Record<string, unknown> {\n const rules: Record<string, unknown> = {};\n for (const entry of entries) {\n if (entry.options && entry.options.length > 0) {\n rules[entry.rule] = [entry.severity, ...entry.options];\n } else {\n rules[entry.rule] = entry.severity;\n }\n }\n return rules;\n}\n\nexport function generateEslintExport(profile: Profile): GeneratedFile {\n const entries = collectEslintExtensions(profile);\n addImportOrderRule(profile, entries);\n\n const plugins = detectRequiredPlugins(entries);\n const imports = generateImportStatements(plugins);\n const rules = buildRulesObject(entries);\n\n const header = [\n `// Generated by codewatch for ${profile.author}`,\n `// Date: ${profile.generated}`,\n `// Do not edit manually - regenerate with: codewatch export --format eslint`,\n \"\",\n ].join(\"\\n\");\n\n const content = [\n header,\n ...imports,\n \"\",\n `export default ${JSON.stringify({ rules }, null, 2)};`,\n \"\",\n ].join(\"\\n\");\n\n return { path: \"eslint.config.js\", content };\n}\n","import type { Profile } from \"../schema/profile.js\";\nimport type { StyleRule } from \"../schema/style-rule.js\";\nimport type { GeneratedFile } from \"./types.js\";\n\ninterface RuffLintSubsections {\n mccabe?: { maxComplexity: number };\n pydocstyle?: { convention: string };\n isort?: { sectionOrder: string[] };\n}\n\ninterface RuffLint extends RuffLintSubsections {\n select: string[];\n ignore: string[];\n fixable: string[];\n}\n\ninterface RuffConfig {\n lineLength?: number;\n lint: RuffLint;\n}\n\ninterface RuffAccumulator extends RuffLintSubsections {\n select: Set<string>;\n}\n\nconst CATEGORY_KEYS = [\n \"naming\",\n \"structure\",\n \"documentation\",\n \"errorHandling\",\n \"formatting\",\n \"patterns\",\n] as const;\n\nfunction addExtensionCodes(rule: StyleRule, select: Set<string>): void {\n if (!rule.extensions?.ruff) return;\n const ext = rule.extensions.ruff as { codes?: string[] };\n if (!ext.codes) return;\n for (const code of ext.codes) {\n select.add(code.replace(/\\d+$/, \"\"));\n }\n}\n\nfunction applyFunctionMaxLines(\n category: string,\n name: string,\n rule: StyleRule,\n acc: RuffAccumulator,\n): void {\n if (category !== \"structure\" || name !== \"functionMaxLines\") return;\n acc.select.add(\"C90\");\n if (typeof rule.convention === \"number\") {\n acc.mccabe = { maxComplexity: rule.convention };\n }\n}\n\nfunction applyRule(\n category: string,\n name: string,\n rule: StyleRule,\n acc: RuffAccumulator,\n): void {\n addExtensionCodes(rule, acc.select);\n\n if (category === \"naming\") {\n acc.select.add(\"N\");\n }\n\n if (category === \"structure\" && name === \"importOrder\") {\n acc.select.add(\"I\");\n if (Array.isArray(rule.convention)) {\n acc.isort = { sectionOrder: rule.convention as string[] };\n }\n }\n\n if (category === \"documentation\" && name === \"functionDocs\") {\n acc.select.add(\"D\");\n if (typeof rule.convention === \"string\") {\n acc.pydocstyle = { convention: rule.convention };\n }\n }\n\n applyFunctionMaxLines(category, name, rule, acc);\n}\n\nfunction lineLengthOf(profile: Profile): number | undefined {\n const lineLengthRule = profile.formatting?.lineLength;\n if (lineLengthRule && typeof lineLengthRule.convention === \"number\") {\n return lineLengthRule.convention;\n }\n return undefined;\n}\n\nfunction buildRuffConfig(profile: Profile): RuffConfig {\n const thresholds = profile.severityThresholds;\n const acc: RuffAccumulator = { select: new Set<string>() };\n const fixable = new Set<string>([\"ALL\"]);\n\n for (const category of CATEGORY_KEYS) {\n const section = profile[category];\n if (!section) continue;\n\n for (const [name, rule] of Object.entries(\n section as Record<string, StyleRule>,\n )) {\n if (rule.confidence < thresholds.info) continue;\n applyRule(category, name, rule, acc);\n }\n }\n\n return {\n lineLength: lineLengthOf(profile),\n lint: {\n select: [...acc.select].sort(),\n ignore: [],\n fixable: [...fixable],\n mccabe: acc.mccabe,\n pydocstyle: acc.pydocstyle,\n isort: acc.isort,\n },\n };\n}\n\nfunction toTomlArray(items: string[]): string {\n return `[${items.map((s) => `\"${s}\"`).join(\", \")}]`;\n}\n\nfunction serializeLintTable(lint: RuffLint): string[] {\n const lines: string[] = [\"[lint]\"];\n if (lint.select.length > 0) {\n lines.push(`select = ${toTomlArray(lint.select)}`);\n }\n if (lint.ignore.length > 0) {\n lines.push(`ignore = ${toTomlArray(lint.ignore)}`);\n }\n if (lint.fixable.length > 0) {\n lines.push(`fixable = ${toTomlArray(lint.fixable)}`);\n }\n lines.push(\"\");\n return lines;\n}\n\nfunction serializeLintSubtables(lint: RuffLintSubsections): string[] {\n const lines: string[] = [];\n\n if (lint.mccabe) {\n lines.push(\"[lint.mccabe]\");\n lines.push(`max-complexity = ${lint.mccabe.maxComplexity}`);\n lines.push(\"\");\n }\n\n if (lint.pydocstyle) {\n lines.push(\"[lint.pydocstyle]\");\n lines.push(`convention = \"${lint.pydocstyle.convention}\"`);\n lines.push(\"\");\n }\n\n if (lint.isort) {\n lines.push(\"[lint.isort]\");\n lines.push(`section-order = ${toTomlArray(lint.isort.sectionOrder)}`);\n lines.push(\"\");\n }\n\n return lines;\n}\n\nfunction serializeToToml(config: RuffConfig): string {\n const lines: string[] = [];\n\n if (config.lineLength !== undefined) {\n lines.push(`line-length = ${config.lineLength}`);\n lines.push(\"\");\n }\n\n lines.push(...serializeLintTable(config.lint));\n lines.push(...serializeLintSubtables(config.lint));\n\n return lines.join(\"\\n\");\n}\n\nexport function generateRuffExport(profile: Profile): GeneratedFile {\n const config = buildRuffConfig(profile);\n\n const header = [\n `# Generated by codewatch for ${profile.author}`,\n `# Date: ${profile.generated}`,\n `# Do not edit manually - regenerate with: codewatch export --format ruff`,\n \"\",\n ].join(\"\\n\");\n\n return {\n path: \"ruff.toml\",\n content: header + serializeToToml(config),\n };\n}\n","import type { Profile } from \"../schema/profile.js\";\nimport type { GeneratedFile } from \"./types.js\";\nimport {\n extractAllRules,\n type RuleEntry,\n} from \"./template-helpers.js\";\n\nfunction capitalize(str: string): string {\n const spaced = str.replace(/([A-Z])/g, \" $1\");\n return spaced.charAt(0).toUpperCase() + spaced.slice(1);\n}\n\nfunction formatConvention(convention: unknown): string {\n if (typeof convention === \"string\") return convention;\n if (typeof convention === \"number\") return String(convention);\n if (typeof convention === \"boolean\") return String(convention);\n return JSON.stringify(convention);\n}\n\nfunction groupByCategory(rules: RuleEntry[]): Map<string, RuleEntry[]> {\n const byCategory = new Map<string, RuleEntry[]>();\n for (const rule of rules) {\n const existing = byCategory.get(rule.category) ?? [];\n existing.push(rule);\n byCategory.set(rule.category, existing);\n }\n return byCategory;\n}\n\nfunction exampleLines(examples: NonNullable<RuleEntry[\"examples\"]>): string[] {\n const lines: string[] = [];\n for (const example of examples) {\n if (example.good) {\n lines.push(\"```typescript\");\n lines.push(\"// Preferred\");\n lines.push(example.good);\n lines.push(\"```\");\n lines.push(\"\");\n }\n if (example.bad) {\n lines.push(\"```typescript\");\n lines.push(\"// Avoid\");\n lines.push(example.bad);\n lines.push(\"```\");\n lines.push(\"\");\n }\n }\n return lines;\n}\n\nfunction ruleLines(rule: RuleEntry): string[] {\n const lines: string[] = [];\n const confPct = (rule.confidence * 100).toFixed(0);\n const value = formatConvention(rule.convention);\n\n lines.push(`### ${capitalize(rule.name)}`);\n lines.push(\"\");\n lines.push(\n `**Convention**: \\`${value}\\` | **Confidence**: ${confPct}%${rule.stability ? ` | **Stability**: ${rule.stability}` : \"\"}`,\n );\n lines.push(\"\");\n\n if (rule.description) {\n lines.push(rule.description);\n lines.push(\"\");\n }\n\n if (rule.examples && rule.examples.length > 0) {\n lines.push(...exampleLines(rule.examples));\n }\n\n return lines;\n}\n\nexport function generateMarkdownExport(profile: Profile): GeneratedFile {\n const allRules = extractAllRules(profile);\n const byCategory = groupByCategory(allRules);\n const lines: string[] = [];\n\n lines.push(`# ${profile.author}'s Code Style Guide`);\n lines.push(\"\");\n lines.push(`> Generated by codewatch on ${profile.generated}`);\n lines.push(\n `> Sources: ${profile.sources.length > 0 ? profile.sources.join(\", \") : \"N/A\"}`,\n );\n lines.push(\"\");\n\n for (const [category, rules] of byCategory) {\n lines.push(`## ${capitalize(category)}`);\n lines.push(\"\");\n\n const sorted = [...rules].sort((a, b) => b.confidence - a.confidence);\n for (const rule of sorted) {\n lines.push(...ruleLines(rule));\n }\n }\n\n return {\n path: \"style-guide.md\",\n content: lines.join(\"\\n\"),\n };\n}\n","import type { Profile } from \"../schema/profile.js\";\nimport type { StyleRule } from \"../schema/style-rule.js\";\nimport type { GeneratedFile } from \"./types.js\";\n\nfunction getConvention<T>(\n section: Record<string, StyleRule>,\n key: string,\n): T | undefined {\n const rule = section[key];\n if (!rule) return undefined;\n return rule.convention as T;\n}\n\nfunction indentAndNewlineLines(formatting: Record<string, StyleRule>): string[] {\n const lines: string[] = [];\n\n const indentStyle = getConvention<string>(formatting, \"indentStyle\");\n if (indentStyle) {\n const value =\n indentStyle === \"spaces\"\n ? \"space\"\n : indentStyle === \"tabs\"\n ? \"tab\"\n : indentStyle;\n lines.push(`indent_style = ${value}`);\n }\n\n const indentSize = getConvention<number>(formatting, \"indentSize\");\n if (indentSize !== undefined) {\n lines.push(`indent_size = ${indentSize}`);\n }\n\n const trailingNewline = getConvention<boolean>(\n formatting,\n \"trailingNewline\",\n );\n if (trailingNewline !== undefined) {\n lines.push(`insert_final_newline = ${trailingNewline}`);\n }\n\n return lines;\n}\n\nexport function generateEditorConfigExport(\n profile: Profile,\n): GeneratedFile {\n const formatting = profile.formatting;\n const lines: string[] = [];\n\n lines.push(\"# Generated by codewatch\");\n lines.push(\"root = true\");\n lines.push(\"\");\n lines.push(\"[*]\");\n lines.push(...indentAndNewlineLines(formatting));\n\n lines.push(\"end_of_line = lf\");\n lines.push(\"charset = utf-8\");\n lines.push(\"trim_trailing_whitespace = true\");\n\n const lineLength = getConvention<number>(formatting, \"lineLength\");\n if (lineLength !== undefined) {\n lines.push(`max_line_length = ${lineLength}`);\n }\n\n lines.push(\"\");\n\n return {\n path: \".editorconfig\",\n content: lines.join(\"\\n\"),\n };\n}\n","import type { Profile } from \"../schema/profile.js\";\nimport type { GeneratedFile } from \"./types.js\";\nimport { generateSkillFiles } from \"./skill.js\";\nimport { generateClaudeRules } from \"./claude-rules.js\";\nimport { generateHooksConfig } from \"./hooks.js\";\nimport { generateEslintExport } from \"./eslint.js\";\nimport { generateRuffExport } from \"./ruff.js\";\nimport { generateMarkdownExport } from \"./markdown.js\";\nimport { generateEditorConfigExport } from \"./editorconfig.js\";\n\nexport type ExportFormat =\n | \"skill\"\n | \"claude-rules\"\n | \"hooks\"\n | \"eslint\"\n | \"ruff\"\n | \"markdown\"\n | \"editorconfig\";\n\nexport const SUPPORTED_FORMATS: ExportFormat[] = [\n \"skill\",\n \"claude-rules\",\n \"hooks\",\n \"eslint\",\n \"ruff\",\n \"markdown\",\n \"editorconfig\",\n];\n\nfunction hooksFiles(profile: Profile): GeneratedFile[] {\n const config = generateHooksConfig(profile);\n return [\n {\n path: \".claude/settings.json\",\n content: JSON.stringify(config, null, 2),\n },\n ];\n}\n\nexport function exportProfile(\n profile: Profile,\n format: ExportFormat,\n): GeneratedFile[] {\n switch (format) {\n case \"skill\":\n return generateSkillFiles(profile);\n case \"claude-rules\":\n return generateClaudeRules(profile);\n case \"hooks\":\n return hooksFiles(profile);\n case \"eslint\":\n return [generateEslintExport(profile)];\n case \"ruff\":\n return [generateRuffExport(profile)];\n case \"markdown\":\n return [generateMarkdownExport(profile)];\n case \"editorconfig\":\n return [generateEditorConfigExport(profile)];\n default:\n throw new Error(\n `Unsupported export format: \"${format as string}\". Supported formats: ${SUPPORTED_FORMATS.join(\", \")}`,\n );\n }\n}\n"],"mappings":"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","names":["z","z","migrations"]}
1
+ {"version":3,"sources":["../src/schema/style-rule.ts","../src/schema/profile.ts","../src/io.ts","../src/migrations/registry.ts","../src/migrations/migrate-profile.ts","../src/exporters/template-helpers.ts","../src/exporters/templates.ts","../src/exporters/skill.ts","../src/exporters/claude-rules.ts","../src/exporters/hooks.ts","../src/exporters/eslint-rules.ts","../src/exporters/eslint.ts","../src/exporters/ruff.ts","../src/exporters/markdown.ts","../src/exporters/editorconfig.ts","../src/exporters/export-index.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport const ExampleSchema = z.object({\n good: z.string().optional(),\n bad: z.string().optional(),\n source: z.string().optional(),\n});\n\nexport const StabilitySchema = z.enum([\"high\", \"medium\", \"low\"]);\n\nexport const FixabilitySchema = z.enum([\n \"safe\",\n \"maybe-incorrect\",\n \"requires-input\",\n \"not-fixable\",\n]);\n\nexport const StyleRuleSchema = z.object({\n convention: z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.array(z.string()),\n ]),\n confidence: z.number().min(0).max(1),\n stability: StabilitySchema.optional(),\n fixability: FixabilitySchema.optional(),\n description: z.string().optional(),\n examples: z.array(ExampleSchema).optional(),\n extensions: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type StyleRule = z.infer<typeof StyleRuleSchema>;\nexport type Stability = z.infer<typeof StabilitySchema>;\nexport type Fixability = z.infer<typeof FixabilitySchema>;\n","import { z } from \"zod\";\nimport { StyleRuleSchema } from \"./style-rule.js\";\n\nexport const SCHEMA_VERSION = \"1.0.0\";\n\nconst CategorySchema = z.record(z.string(), StyleRuleSchema);\n\nconst IdiomSchema = z.object({\n name: z.string(),\n description: z.string(),\n frequency: z.number(),\n confidence: z.number().min(0).max(1),\n example: z.string().optional(),\n});\n\nconst AntiPatternSchema = z.object({\n pattern: z.string(),\n reason: z.string(),\n deprecated: z.boolean().optional(),\n});\n\nconst OverrideSchema = z.object({\n files: z.array(z.string()),\n naming: CategorySchema.optional(),\n structure: CategorySchema.optional(),\n documentation: CategorySchema.optional(),\n errorHandling: CategorySchema.optional(),\n formatting: CategorySchema.optional(),\n patterns: CategorySchema.optional(),\n});\n\nconst SeverityThresholdsSchema = z.object({\n error: z.number().min(0).max(1),\n warn: z.number().min(0).max(1),\n info: z.number().min(0).max(1),\n});\n\nexport const DEFAULT_SEVERITY_THRESHOLDS = {\n error: 0.85,\n warn: 0.60,\n info: 0.40,\n} as const;\n\nexport const ProfileSchema = z.object({\n $schema: z.string().optional(),\n schemaVersion: z.string(),\n author: z.string(),\n generated: z.string(),\n sources: z.array(z.string()),\n\n naming: CategorySchema,\n structure: CategorySchema,\n documentation: CategorySchema,\n errorHandling: CategorySchema,\n formatting: CategorySchema,\n patterns: CategorySchema,\n\n idioms: z.object({\n detected: z.array(IdiomSchema),\n }),\n\n antiPatterns: z.object({\n acknowledged: z.array(AntiPatternSchema),\n }),\n\n overrides: z.array(OverrideSchema),\n\n severityThresholds: SeverityThresholdsSchema.default(DEFAULT_SEVERITY_THRESHOLDS),\n});\n\nexport type Profile = z.infer<typeof ProfileSchema>;\nexport type SeverityThresholds = z.infer<typeof SeverityThresholdsSchema>;\n\nexport const PROFILE_CATEGORIES = [\n \"naming\",\n \"structure\",\n \"documentation\",\n \"errorHandling\",\n \"formatting\",\n \"patterns\",\n] as const;\n\nexport type ProfileCategory = (typeof PROFILE_CATEGORIES)[number];\n\nexport type Severity = \"error\" | \"warn\" | \"info\" | \"off\";\n","import * as fs from \"node:fs/promises\";\nimport { ProfileSchema, type Profile } from \"./schema/profile.js\";\n\nexport async function readProfile(filePath: string): Promise<Profile> {\n const raw = await fs.readFile(filePath, \"utf-8\");\n const json: unknown = JSON.parse(raw);\n return ProfileSchema.parse(json);\n}\n\nexport async function writeProfile(\n filePath: string,\n profile: unknown,\n): Promise<void> {\n const validated = ProfileSchema.parse(profile);\n await fs.writeFile(filePath, JSON.stringify(validated, null, 2) + \"\\n\");\n}\n\nexport function validateProfile(data: unknown) {\n return ProfileSchema.safeParse(data);\n}\n","export interface Migration {\n from: string;\n to: string;\n migrate: (profile: Record<string, unknown>) => Record<string, unknown>;\n}\n\nconst migrations: Migration[] = [];\n\nexport function registerMigration(migration: Migration): void {\n migrations.push(migration);\n migrations.sort((a, b) => a.from.localeCompare(b.from));\n}\n\nexport function getMigrations(): ReadonlyArray<Migration> {\n return migrations;\n}\n\nexport function clearMigrations(): void {\n migrations.length = 0;\n}\n","import { SCHEMA_VERSION } from \"../schema/profile.js\";\nimport { getMigrations, registerMigration, clearMigrations } from \"./registry.js\";\n\nexport { registerMigration, clearMigrations };\n\nexport function migrateProfile(\n profile: Record<string, unknown>,\n): Record<string, unknown> {\n let current = { ...profile };\n const version = current.schemaVersion as string;\n\n if (version === SCHEMA_VERSION) {\n return current;\n }\n\n const migrations = getMigrations();\n let currentVersion = version;\n\n for (const migration of migrations) {\n if (migration.from === currentVersion) {\n current = migration.migrate(current);\n currentVersion = migration.to;\n }\n }\n\n if (currentVersion !== SCHEMA_VERSION) {\n throw new Error(\n `No migration path from version ${version} to ${SCHEMA_VERSION}`,\n );\n }\n\n return current;\n}\n","import { PROFILE_CATEGORIES, type Profile } from \"../schema/profile.js\";\n\nexport interface RuleEntry {\n category: string;\n name: string;\n convention: unknown;\n confidence: number;\n stability?: string;\n description?: string;\n examples?: Array<{ good?: string; bad?: string; source?: string }>;\n extensions?: Record<string, unknown>;\n}\n\nexport type ExtractedRule = RuleEntry;\n\nexport function extractAllRules(profile: Profile): RuleEntry[] {\n const rules: RuleEntry[] = [];\n\n for (const category of PROFILE_CATEGORIES) {\n const section = profile[category];\n if (!section || typeof section !== \"object\") continue;\n\n for (const [name, rule] of Object.entries(section)) {\n if (!rule || typeof rule !== \"object\") continue;\n rules.push({\n category,\n name,\n convention: rule.convention,\n confidence: rule.confidence,\n stability: rule.stability,\n description: rule.description,\n examples: rule.examples,\n extensions: rule.extensions,\n });\n }\n }\n\n return rules;\n}\n\nexport function getTopRules(\n profile: Profile,\n count: number = 8,\n): RuleEntry[] {\n const errorThreshold = profile.severityThresholds?.error ?? 0.85;\n return extractAllRules(profile)\n .filter((r) => r.confidence >= errorThreshold)\n .sort((a, b) => b.confidence - a.confidence)\n .slice(0, count);\n}\n\nexport function getRulesForCategory(\n profile: Profile,\n category: string,\n): RuleEntry[] {\n return extractAllRules(profile).filter((r) => r.category === category);\n}\n\nexport function getRulesByCategory(\n profile: Profile,\n): Map<string, RuleEntry[]> {\n const grouped = new Map<string, RuleEntry[]>();\n for (const rule of extractAllRules(profile)) {\n const existing = grouped.get(rule.category) ?? [];\n existing.push(rule);\n grouped.set(rule.category, existing);\n }\n return grouped;\n}\n\nconst byConfidence = (a: RuleEntry, b: RuleEntry) =>\n b.confidence - a.confidence;\n\nexport function getRulesByTier(profile: Profile): {\n critical: RuleEntry[];\n strong: RuleEntry[];\n preferred: RuleEntry[];\n} {\n const allRules = extractAllRules(profile);\n const errorThreshold = profile.severityThresholds?.error ?? 0.85;\n const warnThreshold = profile.severityThresholds?.warn ?? 0.60;\n const infoThreshold = profile.severityThresholds?.info ?? 0.40;\n\n const critical: RuleEntry[] = [];\n const strong: RuleEntry[] = [];\n const preferred: RuleEntry[] = [];\n\n for (const rule of allRules) {\n if (rule.confidence >= errorThreshold) {\n critical.push(rule);\n } else if (rule.confidence >= warnThreshold) {\n strong.push(rule);\n } else if (rule.confidence >= infoThreshold) {\n preferred.push(rule);\n }\n }\n\n critical.sort(byConfidence);\n strong.sort(byConfidence);\n preferred.sort(byConfidence);\n\n return { critical, strong, preferred };\n}\n\nexport function readableConvention(rule: RuleEntry): string {\n if (\n typeof rule.convention === \"boolean\" ||\n typeof rule.convention === \"number\"\n ) {\n return rule.description ?? JSON.stringify(rule.convention);\n }\n if (Array.isArray(rule.convention)) {\n return rule.convention.join(\" → \");\n }\n return String(rule.convention);\n}\n\nexport function detectLanguages(profile: Profile): string[] {\n const langs: string[] = [];\n const hasTypescriptSignals =\n Object.keys(profile.naming).length > 0 ||\n Object.keys(profile.structure).length > 0;\n if (hasTypescriptSignals) langs.push(\"typescript\");\n return langs.length > 0 ? langs : [\"typescript\"];\n}\n","import Handlebars from \"handlebars\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\n// tsup bundles into dist/index.js while tests load src/exporters, so the package root sits at different depths.\nfunction findPackageRoot(start: string): string {\n let dir = start;\n while (!existsSync(join(dir, \"package.json\"))) {\n const parent = dirname(dir);\n if (parent === dir) throw new Error(`style-profile package root not found above ${start}`);\n dir = parent;\n }\n return dir;\n}\n\nexport function loadTemplate(name: string): Handlebars.TemplateDelegate {\n const root = findPackageRoot(dirname(fileURLToPath(import.meta.url)));\n const source = readFileSync(join(root, \"templates\", name), \"utf-8\");\n return Handlebars.compile(source);\n}\n","import type { Profile } from \"../schema/profile.js\";\nimport type { GeneratedFile } from \"./types.js\";\nimport {\n getRulesByTier,\n readableConvention,\n detectLanguages,\n} from \"./template-helpers.js\";\nimport type { RuleEntry } from \"./template-helpers.js\";\nimport { loadTemplate } from \"./templates.js\";\n\nfunction buildTieredRulesContext(profile: Profile) {\n const tiers = getRulesByTier(profile);\n\n const mapRule = (r: RuleEntry) => ({\n name: `${r.category}.${r.name}`,\n readableConvention: readableConvention(r),\n confidencePercent: (r.confidence * 100).toFixed(0),\n });\n\n return {\n criticalRules: tiers.critical.map(mapRule),\n strongRules: tiers.strong.map(mapRule),\n preferredRules: tiers.preferred.map(mapRule),\n };\n}\n\nfunction buildNamingContext(profile: Profile) {\n const section = profile.naming;\n return Object.entries(section).map(([name, rule]) => ({\n label: name.charAt(0).toUpperCase() + name.slice(1),\n convention:\n typeof rule.convention === \"string\"\n ? rule.convention\n : JSON.stringify(rule.convention),\n confidencePercent: (rule.confidence * 100).toFixed(0),\n stability: rule.stability,\n fixability: rule.fixability,\n description: rule.description,\n examples: rule.examples,\n }));\n}\n\nfunction buildPatternsContext(profile: Profile) {\n const section = profile.patterns;\n const patternRules = Object.entries(section).map(([name, rule]) => ({\n name,\n strength:\n typeof rule.convention === \"string\" ? rule.convention : \"detected\",\n confidencePercent: (rule.confidence * 100).toFixed(0),\n description: rule.description,\n fixability: rule.fixability,\n examples: rule.examples,\n }));\n\n const preferredPatterns = profile.structure?.preferredPatterns;\n let preferredList: string[] | undefined;\n if (preferredPatterns && Array.isArray(preferredPatterns.convention)) {\n preferredList = preferredPatterns.convention as string[];\n }\n\n return { patterns: patternRules, preferredPatterns: preferredList };\n}\n\nfunction buildIdiomsContext(profile: Profile) {\n return profile.idioms.detected.map((idiom) => ({\n name: idiom.name,\n description: idiom.description,\n example: idiom.example,\n }));\n}\n\nfunction buildAntiPatternsContext(profile: Profile) {\n return profile.antiPatterns.acknowledged.map((ap) => ({\n pattern: ap.pattern,\n reason: ap.reason,\n }));\n}\n\nfunction buildLanguageContext(profile: Profile, lang: string) {\n const tiers = getRulesByTier(profile);\n const mapRule = (r: RuleEntry) => ({\n category: r.category,\n name: r.name,\n convention:\n typeof r.convention === \"string\"\n ? r.convention\n : JSON.stringify(r.convention),\n confidencePercent: (r.confidence * 100).toFixed(0),\n readableConvention: readableConvention(r),\n description: r.description,\n });\n\n return {\n language: lang.charAt(0).toUpperCase() + lang.slice(1),\n criticalRules: tiers.critical.map(mapRule),\n strongRules: tiers.strong.map(mapRule),\n preferredRules: tiers.preferred.map(mapRule),\n };\n}\n\nfunction renderSkillFile(profile: Profile, languages: string[]): GeneratedFile {\n const skillTemplate = loadTemplate(\"skill.md.hbs\");\n const idioms = buildIdiomsContext(profile);\n const antiPatterns = buildAntiPatternsContext(profile);\n return {\n path: \"skill.md\",\n content: skillTemplate({\n author: profile.author,\n ...buildTieredRulesContext(profile),\n languages,\n idioms: idioms.length > 0 ? idioms : undefined,\n antiPatterns: antiPatterns.length > 0 ? antiPatterns : undefined,\n }),\n };\n}\n\nexport function generateSkillFiles(profile: Profile): GeneratedFile[] {\n const files: GeneratedFile[] = [];\n const languages = detectLanguages(profile);\n\n files.push(renderSkillFile(profile, languages));\n\n const namingTemplate = loadTemplate(\"naming.md.hbs\");\n files.push({\n path: \"references/naming.md\",\n content: namingTemplate({ rules: buildNamingContext(profile) }),\n });\n\n const patternsTemplate = loadTemplate(\"patterns.md.hbs\");\n files.push({\n path: \"references/patterns.md\",\n content: patternsTemplate(buildPatternsContext(profile)),\n });\n\n const langTemplate = loadTemplate(\"per-language.md.hbs\");\n for (const lang of languages) {\n files.push({\n path: `references/per-language/${lang}.md`,\n content: langTemplate(buildLanguageContext(profile, lang)),\n });\n }\n\n return files;\n}\n","import type { Profile } from \"../schema/profile.js\";\nimport { extractAllRules, type RuleEntry } from \"./template-helpers.js\";\nimport type { GeneratedFile } from \"./types.js\";\n\nfunction formatFrontmatter(globs: string[], description: string): string {\n return [\n \"---\",\n `description: \"${description}\"`,\n `globs: \"${globs.join(\", \")}\"`,\n \"alwaysApply: false\",\n \"---\",\n \"\",\n ].join(\"\\n\");\n}\n\nfunction formatRuleLine(\n category: string,\n name: string,\n convention: unknown,\n description?: string,\n): string {\n const value =\n typeof convention === \"string\"\n ? convention\n : JSON.stringify(convention);\n const desc = description ? ` -- ${description}` : \"\";\n return `- **${category}.${name}**: \\`${value}\\`${desc}`;\n}\n\nfunction formatBody(author: string, rules: RuleEntry[]): string {\n return [\n `# ${author}'s TypeScript Style`,\n \"\",\n ...rules\n .sort((a, b) => b.confidence - a.confidence)\n .map((r) =>\n formatRuleLine(r.category, r.name, r.convention, r.description),\n ),\n ].join(\"\\n\");\n}\n\nexport function generateClaudeRules(profile: Profile): GeneratedFile[] {\n const files: GeneratedFile[] = [];\n const allRules = extractAllRules(profile);\n const infoThreshold = profile.severityThresholds?.info ?? 0.40;\n\n const eligibleRules = allRules.filter(\n (r) => r.confidence >= infoThreshold,\n );\n\n if (eligibleRules.length > 0) {\n const frontmatter = formatFrontmatter(\n [\"**/*.ts\", \"**/*.tsx\"],\n `${profile.author}'s TypeScript coding style preferences`,\n );\n\n files.push({\n path: \".claude/rules/typescript.md\",\n content: frontmatter + formatBody(profile.author, eligibleRules) + \"\\n\",\n });\n }\n\n return files;\n}\n","import type { Profile } from \"../schema/profile.js\";\n\ninterface ClaudeHook {\n event: \"PreToolUse\" | \"PostToolUse\";\n matcher: string;\n command: string;\n}\n\ninterface ClaudeSettingsHooks {\n hooks: ClaudeHook[];\n}\n\nexport function generateHooksConfig(\n _profile: Profile,\n): ClaudeSettingsHooks {\n return {\n hooks: [\n {\n event: \"PostToolUse\",\n matcher: \"Write\",\n command: \"codewatch diff --fix $TOOL_INPUT_FILE_PATH\",\n },\n {\n event: \"PostToolUse\",\n matcher: \"Edit\",\n command: \"codewatch diff --fix $TOOL_INPUT_FILE_PATH\",\n },\n ],\n };\n}\n","import type { Profile, SeverityThresholds, Severity } from \"../schema/profile.js\";\nimport type { StyleRule } from \"../schema/style-rule.js\";\n\nexport function toEslintSeverity(\n confidence: number,\n thresholds: SeverityThresholds,\n): Severity | null {\n if (confidence >= thresholds.error) return \"error\";\n if (confidence >= thresholds.warn) return \"warn\";\n if (confidence >= thresholds.info) return \"info\";\n return null;\n}\n\nexport function severityRank(s: Severity): number {\n return s === \"error\" ? 3 : s === \"warn\" ? 2 : 1;\n}\n\nconst NAMING_SELECTORS: Record<string, string> = {\n variables: \"variable\",\n functions: \"function\",\n types: \"typeLike\",\n constants: \"variable\",\n};\n\nfunction eslintExtensionOptions(rule: StyleRule): unknown[] | undefined {\n const eslintExt = rule.extensions?.eslint;\n return eslintExt &&\n typeof eslintExt === \"object\" &&\n \"options\" in eslintExt &&\n Array.isArray((eslintExt as Record<string, unknown>).options)\n ? ((eslintExt as Record<string, unknown>).options as unknown[])\n : undefined;\n}\n\nconst NAMING_RULE = \"@typescript-eslint/naming-convention\";\n\n// Keys are profile vocabulary (style-analyzer emits SCREAMING_SNAKE); values are typescript-eslint's format enum.\nconst TS_ESLINT_FORMATS: Record<string, string> = {\n camelCase: \"camelCase\",\n strictCamelCase: \"strictCamelCase\",\n PascalCase: \"PascalCase\",\n StrictPascalCase: \"StrictPascalCase\",\n snake_case: \"snake_case\",\n UPPER_CASE: \"UPPER_CASE\",\n UPPER_SNAKE_CASE: \"UPPER_CASE\",\n SCREAMING_SNAKE: \"UPPER_CASE\",\n SCREAMING_SNAKE_CASE: \"UPPER_CASE\",\n};\n\n/** Same shape as style-checker's SkippedRule, so a consumer can forward it unchanged. */\nexport interface EslintSkippedRule {\n tool: \"eslint\";\n rule: string;\n plugin: string;\n reason: string;\n}\n\nexport interface NamingConventionResult {\n rule: [string, unknown] | null;\n skippedRules: EslintSkippedRule[];\n}\n\nexport function toTsEslintFormat(convention: string): string | null {\n return TS_ESLINT_FORMATS[convention] ?? null;\n}\n\nfunction skippedNaming(key: string, convention: unknown): EslintSkippedRule {\n return {\n tool: \"eslint\",\n rule: NAMING_RULE,\n plugin: \"@typescript-eslint\",\n reason: `naming.${key} convention ${JSON.stringify(convention)} has no typescript-eslint naming-convention format`,\n };\n}\n\nfunction namingSelectors(\n key: string,\n rule: StyleRule,\n selectorName: string,\n skipped: EslintSkippedRule[],\n): unknown[] {\n const eslintOptions = eslintExtensionOptions(rule);\n if (eslintOptions) return eslintOptions;\n const format = typeof rule.convention === \"string\" ? toTsEslintFormat(rule.convention) : null;\n if (format) return [{ selector: selectorName, format: [format] }];\n skipped.push(skippedNaming(key, rule.convention));\n return [];\n}\n\nexport function buildNamingConvention(profile: Profile): NamingConventionResult {\n const thresholds = profile.severityThresholds;\n const selectors: unknown[] = [];\n const skippedRules: EslintSkippedRule[] = [];\n let maxSeverity: Severity | null = null;\n\n for (const [key, rule] of Object.entries(profile.naming ?? {})) {\n const selectorName = NAMING_SELECTORS[key];\n if (!selectorName) continue;\n const severity = toEslintSeverity(rule.confidence, thresholds);\n if (!severity) continue;\n\n const ruleSelectors = namingSelectors(key, rule, selectorName, skippedRules);\n if (ruleSelectors.length === 0) continue;\n selectors.push(...ruleSelectors);\n if (!maxSeverity || severityRank(severity) > severityRank(maxSeverity)) maxSeverity = severity;\n }\n\n if (selectors.length === 0 || !maxSeverity) return { rule: null, skippedRules };\n return { rule: [NAMING_RULE, [maxSeverity, ...selectors]], skippedRules };\n}\n\nexport function buildNamingConventionRule(\n profile: Profile,\n): [string, unknown] | null {\n return buildNamingConvention(profile).rule;\n}\n\nexport function buildImportOrderRule(\n profile: Profile,\n): [string, unknown] | null {\n const importOrder = profile.structure?.importOrder;\n if (!importOrder) return null;\n const severity = toEslintSeverity(importOrder.confidence, profile.severityThresholds);\n if (!severity) return null;\n\n const convention = Array.isArray(importOrder.convention)\n ? importOrder.convention\n : [\"builtin\", \"external\", \"internal\", \"relative\"];\n\n return [\n \"perfectionist/sort-imports\",\n [\n severity,\n {\n type: \"natural\",\n groups: convention,\n },\n ],\n ];\n}\n\nexport function buildFunctionLengthRule(\n profile: Profile,\n): [string, unknown] | null {\n const maxLines = profile.structure?.functionMaxLines;\n if (!maxLines) return null;\n const severity = toEslintSeverity(maxLines.confidence, profile.severityThresholds);\n if (!severity) return null;\n if (typeof maxLines.convention !== \"number\") return null;\n\n return [\"max-lines-per-function\", [severity, { max: maxLines.convention }]];\n}\n\nexport function buildFileNamingRule(\n profile: Profile,\n): [string, unknown] | null {\n const files = profile.naming?.files;\n if (!files) return null;\n const severity = toEslintSeverity(files.confidence, profile.severityThresholds);\n if (!severity) return null;\n if (typeof files.convention !== \"string\") return null;\n\n const caseMap: Record<string, string> = {\n \"kebab-case\": \"kebabCase\",\n camelCase: \"camelCase\",\n PascalCase: \"pascalCase\",\n snake_case: \"snakeCase\",\n };\n\n return [\n \"unicorn/filename-case\",\n [severity, { case: { [caseMap[files.convention] ?? \"kebabCase\"]: true } }],\n ];\n}\n\nexport function buildJsdocRules(\n profile: Profile,\n): Array<[string, unknown]> {\n const rules: Array<[string, unknown]> = [];\n const docs = profile.documentation;\n if (!docs) return rules;\n\n const functionDocs = docs.functionDocs;\n if (!functionDocs) return rules;\n\n const severity = toEslintSeverity(functionDocs.confidence, profile.severityThresholds);\n if (!severity) return rules;\n\n if (functionDocs.convention === \"jsdoc-selective\") {\n rules.push([\"jsdoc/require-jsdoc\", [severity, { publicOnly: true }]]);\n } else if (functionDocs.convention === \"jsdoc-all\") {\n rules.push([\"jsdoc/require-jsdoc\", [severity]]);\n }\n\n return rules;\n}\n","import {\n PROFILE_CATEGORIES,\n type Profile,\n type SeverityThresholds,\n} from \"../schema/profile.js\";\nimport type { StyleRule } from \"../schema/style-rule.js\";\nimport type { GeneratedFile } from \"./types.js\";\nimport {\n toEslintSeverity,\n buildImportOrderRule,\n} from \"./eslint-rules.js\";\n\ninterface EslintRuleEntry {\n plugin: string;\n rule: string;\n severity: \"error\" | \"warn\" | \"off\";\n options?: unknown[];\n}\n\nfunction extensionEntry(\n rule: StyleRule,\n thresholds: SeverityThresholds,\n): EslintRuleEntry | null {\n const ext = rule.extensions?.eslint as\n | { rule: string; options?: unknown[] }\n | undefined;\n if (!ext) return null;\n\n const sev = toEslintSeverity(rule.confidence, thresholds);\n if (sev === null) return null;\n\n const plugin = ext.rule.includes(\"/\")\n ? ext.rule.split(\"/\").slice(0, -1).join(\"/\")\n : \"\";\n\n return {\n plugin,\n rule: ext.rule,\n severity: sev === \"info\" ? \"warn\" : sev,\n options: ext.options,\n };\n}\n\nfunction collectEslintExtensions(profile: Profile): EslintRuleEntry[] {\n const entries: EslintRuleEntry[] = [];\n\n for (const category of PROFILE_CATEGORIES) {\n const section = profile[category];\n if (!section) continue;\n\n for (const [, rule] of Object.entries(section)) {\n const entry = extensionEntry(rule, profile.severityThresholds);\n if (entry) entries.push(entry);\n }\n }\n\n return entries;\n}\n\nfunction addImportOrderRule(profile: Profile, entries: EslintRuleEntry[]): void {\n const result = buildImportOrderRule(profile);\n if (!result) return;\n\n const [ruleName, ruleConfig] = result;\n const configArray = ruleConfig as unknown[];\n const severity = configArray[0] as string;\n if (severity === \"info\") return;\n\n entries.push({\n plugin: \"perfectionist\",\n rule: ruleName,\n severity: severity as \"error\" | \"warn\",\n options: [configArray[1]],\n });\n}\n\nfunction detectRequiredPlugins(entries: EslintRuleEntry[]): Set<string> {\n const plugins = new Set<string>();\n for (const entry of entries) {\n if (entry.plugin.includes(\"@typescript-eslint\")) {\n plugins.add(\"@typescript-eslint\");\n }\n if (entry.plugin === \"perfectionist\") {\n plugins.add(\"perfectionist\");\n }\n if (entry.plugin.includes(\"unicorn\")) {\n plugins.add(\"unicorn\");\n }\n if (entry.plugin.includes(\"jsdoc\")) {\n plugins.add(\"jsdoc\");\n }\n }\n return plugins;\n}\n\nfunction generateImportStatements(plugins: Set<string>): string[] {\n const imports: string[] = [];\n if (plugins.has(\"@typescript-eslint\")) {\n imports.push(`import tseslint from \"@typescript-eslint/eslint-plugin\";`);\n imports.push(`import tsparser from \"@typescript-eslint/parser\";`);\n }\n if (plugins.has(\"perfectionist\")) {\n imports.push(`import perfectionist from \"eslint-plugin-perfectionist\";`);\n }\n if (plugins.has(\"unicorn\")) {\n imports.push(`import unicorn from \"eslint-plugin-unicorn\";`);\n }\n if (plugins.has(\"jsdoc\")) {\n imports.push(`import jsdoc from \"eslint-plugin-jsdoc\";`);\n }\n return imports;\n}\n\nfunction buildRulesObject(\n entries: EslintRuleEntry[],\n): Record<string, unknown> {\n const rules: Record<string, unknown> = {};\n for (const entry of entries) {\n if (entry.options && entry.options.length > 0) {\n rules[entry.rule] = [entry.severity, ...entry.options];\n } else {\n rules[entry.rule] = entry.severity;\n }\n }\n return rules;\n}\n\nexport function generateEslintExport(profile: Profile): GeneratedFile {\n const entries = collectEslintExtensions(profile);\n addImportOrderRule(profile, entries);\n\n const plugins = detectRequiredPlugins(entries);\n const imports = generateImportStatements(plugins);\n const rules = buildRulesObject(entries);\n\n const header = [\n `// Generated by codewatch for ${profile.author}`,\n `// Date: ${profile.generated}`,\n `// Do not edit manually - regenerate with: codewatch export --format eslint`,\n \"\",\n ].join(\"\\n\");\n\n const content = [\n header,\n ...imports,\n \"\",\n `export default ${JSON.stringify({ rules }, null, 2)};`,\n \"\",\n ].join(\"\\n\");\n\n return { path: \"eslint.config.js\", content };\n}\n","import type { Profile } from \"../schema/profile.js\";\nimport type { StyleRule } from \"../schema/style-rule.js\";\nimport type { GeneratedFile } from \"./types.js\";\n\ninterface RuffLintSubsections {\n mccabe?: { maxComplexity: number };\n pydocstyle?: { convention: string };\n isort?: { sectionOrder: string[] };\n}\n\ninterface RuffLint extends RuffLintSubsections {\n select: string[];\n ignore: string[];\n fixable: string[];\n}\n\ninterface RuffConfig {\n lineLength?: number;\n lint: RuffLint;\n}\n\ninterface RuffAccumulator extends RuffLintSubsections {\n select: Set<string>;\n}\n\nconst CATEGORY_KEYS = [\n \"naming\",\n \"structure\",\n \"documentation\",\n \"errorHandling\",\n \"formatting\",\n \"patterns\",\n] as const;\n\nfunction addExtensionCodes(rule: StyleRule, select: Set<string>): void {\n if (!rule.extensions?.ruff) return;\n const ext = rule.extensions.ruff as { codes?: string[] };\n if (!ext.codes) return;\n for (const code of ext.codes) {\n select.add(code.replace(/\\d+$/, \"\"));\n }\n}\n\nfunction applyFunctionMaxLines(\n category: string,\n name: string,\n rule: StyleRule,\n acc: RuffAccumulator,\n): void {\n if (category !== \"structure\" || name !== \"functionMaxLines\") return;\n acc.select.add(\"C90\");\n if (typeof rule.convention === \"number\") {\n acc.mccabe = { maxComplexity: rule.convention };\n }\n}\n\nfunction applyRule(\n category: string,\n name: string,\n rule: StyleRule,\n acc: RuffAccumulator,\n): void {\n addExtensionCodes(rule, acc.select);\n\n if (category === \"naming\") {\n acc.select.add(\"N\");\n }\n\n if (category === \"structure\" && name === \"importOrder\") {\n acc.select.add(\"I\");\n if (Array.isArray(rule.convention)) {\n acc.isort = { sectionOrder: rule.convention as string[] };\n }\n }\n\n if (category === \"documentation\" && name === \"functionDocs\") {\n acc.select.add(\"D\");\n if (typeof rule.convention === \"string\") {\n acc.pydocstyle = { convention: rule.convention };\n }\n }\n\n applyFunctionMaxLines(category, name, rule, acc);\n}\n\nfunction lineLengthOf(profile: Profile): number | undefined {\n const lineLengthRule = profile.formatting?.lineLength;\n if (lineLengthRule && typeof lineLengthRule.convention === \"number\") {\n return lineLengthRule.convention;\n }\n return undefined;\n}\n\nfunction buildRuffConfig(profile: Profile): RuffConfig {\n const thresholds = profile.severityThresholds;\n const acc: RuffAccumulator = { select: new Set<string>() };\n const fixable = new Set<string>([\"ALL\"]);\n\n for (const category of CATEGORY_KEYS) {\n const section = profile[category];\n if (!section) continue;\n\n for (const [name, rule] of Object.entries(\n section as Record<string, StyleRule>,\n )) {\n if (rule.confidence < thresholds.info) continue;\n applyRule(category, name, rule, acc);\n }\n }\n\n return {\n lineLength: lineLengthOf(profile),\n lint: {\n select: [...acc.select].sort(),\n ignore: [],\n fixable: [...fixable],\n mccabe: acc.mccabe,\n pydocstyle: acc.pydocstyle,\n isort: acc.isort,\n },\n };\n}\n\nfunction toTomlArray(items: string[]): string {\n return `[${items.map((s) => `\"${s}\"`).join(\", \")}]`;\n}\n\nfunction serializeLintTable(lint: RuffLint): string[] {\n const lines: string[] = [\"[lint]\"];\n if (lint.select.length > 0) {\n lines.push(`select = ${toTomlArray(lint.select)}`);\n }\n if (lint.ignore.length > 0) {\n lines.push(`ignore = ${toTomlArray(lint.ignore)}`);\n }\n if (lint.fixable.length > 0) {\n lines.push(`fixable = ${toTomlArray(lint.fixable)}`);\n }\n lines.push(\"\");\n return lines;\n}\n\nfunction serializeLintSubtables(lint: RuffLintSubsections): string[] {\n const lines: string[] = [];\n\n if (lint.mccabe) {\n lines.push(\"[lint.mccabe]\");\n lines.push(`max-complexity = ${lint.mccabe.maxComplexity}`);\n lines.push(\"\");\n }\n\n if (lint.pydocstyle) {\n lines.push(\"[lint.pydocstyle]\");\n lines.push(`convention = \"${lint.pydocstyle.convention}\"`);\n lines.push(\"\");\n }\n\n if (lint.isort) {\n lines.push(\"[lint.isort]\");\n lines.push(`section-order = ${toTomlArray(lint.isort.sectionOrder)}`);\n lines.push(\"\");\n }\n\n return lines;\n}\n\nfunction serializeToToml(config: RuffConfig): string {\n const lines: string[] = [];\n\n if (config.lineLength !== undefined) {\n lines.push(`line-length = ${config.lineLength}`);\n lines.push(\"\");\n }\n\n lines.push(...serializeLintTable(config.lint));\n lines.push(...serializeLintSubtables(config.lint));\n\n return lines.join(\"\\n\");\n}\n\nexport function generateRuffExport(profile: Profile): GeneratedFile {\n const config = buildRuffConfig(profile);\n\n const header = [\n `# Generated by codewatch for ${profile.author}`,\n `# Date: ${profile.generated}`,\n `# Do not edit manually - regenerate with: codewatch export --format ruff`,\n \"\",\n ].join(\"\\n\");\n\n return {\n path: \"ruff.toml\",\n content: header + serializeToToml(config),\n };\n}\n","import type { Profile } from \"../schema/profile.js\";\nimport type { GeneratedFile } from \"./types.js\";\nimport {\n extractAllRules,\n type RuleEntry,\n} from \"./template-helpers.js\";\n\nfunction capitalize(str: string): string {\n const spaced = str.replace(/([A-Z])/g, \" $1\");\n return spaced.charAt(0).toUpperCase() + spaced.slice(1);\n}\n\nfunction formatConvention(convention: unknown): string {\n if (typeof convention === \"string\") return convention;\n if (typeof convention === \"number\") return String(convention);\n if (typeof convention === \"boolean\") return String(convention);\n return JSON.stringify(convention);\n}\n\nfunction groupByCategory(rules: RuleEntry[]): Map<string, RuleEntry[]> {\n const byCategory = new Map<string, RuleEntry[]>();\n for (const rule of rules) {\n const existing = byCategory.get(rule.category) ?? [];\n existing.push(rule);\n byCategory.set(rule.category, existing);\n }\n return byCategory;\n}\n\nfunction exampleLines(examples: NonNullable<RuleEntry[\"examples\"]>): string[] {\n const lines: string[] = [];\n for (const example of examples) {\n if (example.good) {\n lines.push(\"```typescript\");\n lines.push(\"// Preferred\");\n lines.push(example.good);\n lines.push(\"```\");\n lines.push(\"\");\n }\n if (example.bad) {\n lines.push(\"```typescript\");\n lines.push(\"// Avoid\");\n lines.push(example.bad);\n lines.push(\"```\");\n lines.push(\"\");\n }\n }\n return lines;\n}\n\nfunction ruleLines(rule: RuleEntry): string[] {\n const lines: string[] = [];\n const confPct = (rule.confidence * 100).toFixed(0);\n const value = formatConvention(rule.convention);\n\n lines.push(`### ${capitalize(rule.name)}`);\n lines.push(\"\");\n lines.push(\n `**Convention**: \\`${value}\\` | **Confidence**: ${confPct}%${rule.stability ? ` | **Stability**: ${rule.stability}` : \"\"}`,\n );\n lines.push(\"\");\n\n if (rule.description) {\n lines.push(rule.description);\n lines.push(\"\");\n }\n\n if (rule.examples && rule.examples.length > 0) {\n lines.push(...exampleLines(rule.examples));\n }\n\n return lines;\n}\n\nexport function generateMarkdownExport(profile: Profile): GeneratedFile {\n const allRules = extractAllRules(profile);\n const byCategory = groupByCategory(allRules);\n const lines: string[] = [];\n\n lines.push(`# ${profile.author}'s Code Style Guide`);\n lines.push(\"\");\n lines.push(`> Generated by codewatch on ${profile.generated}`);\n lines.push(\n `> Sources: ${profile.sources.length > 0 ? profile.sources.join(\", \") : \"N/A\"}`,\n );\n lines.push(\"\");\n\n for (const [category, rules] of byCategory) {\n lines.push(`## ${capitalize(category)}`);\n lines.push(\"\");\n\n const sorted = [...rules].sort((a, b) => b.confidence - a.confidence);\n for (const rule of sorted) {\n lines.push(...ruleLines(rule));\n }\n }\n\n return {\n path: \"style-guide.md\",\n content: lines.join(\"\\n\"),\n };\n}\n","import type { Profile } from \"../schema/profile.js\";\nimport type { StyleRule } from \"../schema/style-rule.js\";\nimport type { GeneratedFile } from \"./types.js\";\n\nfunction getConvention<T>(\n section: Record<string, StyleRule>,\n key: string,\n): T | undefined {\n const rule = section[key];\n if (!rule) return undefined;\n return rule.convention as T;\n}\n\nfunction indentAndNewlineLines(formatting: Record<string, StyleRule>): string[] {\n const lines: string[] = [];\n\n const indentStyle = getConvention<string>(formatting, \"indentStyle\");\n if (indentStyle) {\n const value =\n indentStyle === \"spaces\"\n ? \"space\"\n : indentStyle === \"tabs\"\n ? \"tab\"\n : indentStyle;\n lines.push(`indent_style = ${value}`);\n }\n\n const indentSize = getConvention<number>(formatting, \"indentSize\");\n if (indentSize !== undefined) {\n lines.push(`indent_size = ${indentSize}`);\n }\n\n const trailingNewline = getConvention<boolean>(\n formatting,\n \"trailingNewline\",\n );\n if (trailingNewline !== undefined) {\n lines.push(`insert_final_newline = ${trailingNewline}`);\n }\n\n return lines;\n}\n\nexport function generateEditorConfigExport(\n profile: Profile,\n): GeneratedFile {\n const formatting = profile.formatting;\n const lines: string[] = [];\n\n lines.push(\"# Generated by codewatch\");\n lines.push(\"root = true\");\n lines.push(\"\");\n lines.push(\"[*]\");\n lines.push(...indentAndNewlineLines(formatting));\n\n lines.push(\"end_of_line = lf\");\n lines.push(\"charset = utf-8\");\n lines.push(\"trim_trailing_whitespace = true\");\n\n const lineLength = getConvention<number>(formatting, \"lineLength\");\n if (lineLength !== undefined) {\n lines.push(`max_line_length = ${lineLength}`);\n }\n\n lines.push(\"\");\n\n return {\n path: \".editorconfig\",\n content: lines.join(\"\\n\"),\n };\n}\n","import type { Profile } from \"../schema/profile.js\";\nimport type { GeneratedFile } from \"./types.js\";\nimport { generateSkillFiles } from \"./skill.js\";\nimport { generateClaudeRules } from \"./claude-rules.js\";\nimport { generateHooksConfig } from \"./hooks.js\";\nimport { generateEslintExport } from \"./eslint.js\";\nimport { generateRuffExport } from \"./ruff.js\";\nimport { generateMarkdownExport } from \"./markdown.js\";\nimport { generateEditorConfigExport } from \"./editorconfig.js\";\n\nexport type ExportFormat =\n | \"skill\"\n | \"claude-rules\"\n | \"hooks\"\n | \"eslint\"\n | \"ruff\"\n | \"markdown\"\n | \"editorconfig\";\n\nexport const SUPPORTED_FORMATS: ExportFormat[] = [\n \"skill\",\n \"claude-rules\",\n \"hooks\",\n \"eslint\",\n \"ruff\",\n \"markdown\",\n \"editorconfig\",\n];\n\nfunction hooksFiles(profile: Profile): GeneratedFile[] {\n const config = generateHooksConfig(profile);\n return [\n {\n path: \".claude/settings.json\",\n content: JSON.stringify(config, null, 2),\n },\n ];\n}\n\nexport function exportProfile(\n profile: Profile,\n format: ExportFormat,\n): GeneratedFile[] {\n switch (format) {\n case \"skill\":\n return generateSkillFiles(profile);\n case \"claude-rules\":\n return generateClaudeRules(profile);\n case \"hooks\":\n return hooksFiles(profile);\n case \"eslint\":\n return [generateEslintExport(profile)];\n case \"ruff\":\n return [generateRuffExport(profile)];\n case \"markdown\":\n return [generateMarkdownExport(profile)];\n case \"editorconfig\":\n return [generateEditorConfigExport(profile)];\n default:\n throw new Error(\n `Unsupported export format: \"${format as string}\". Supported formats: ${SUPPORTED_FORMATS.join(\", \")}`,\n );\n }\n}\n"],"mappings":";AAAA,SAAS,SAAS;AAEX,IAAM,gBAAgB,EAAE,OAAO;AAAA,EACpC,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,KAAK,EAAE,OAAO,EAAE,SAAS;AAAA,EACzB,QAAQ,EAAE,OAAO,EAAE,SAAS;AAC9B,CAAC;AAEM,IAAM,kBAAkB,EAAE,KAAK,CAAC,QAAQ,UAAU,KAAK,CAAC;AAExD,IAAM,mBAAmB,EAAE,KAAK;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAEM,IAAM,kBAAkB,EAAE,OAAO;AAAA,EACtC,YAAY,EAAE,MAAM;AAAA,IAClB,EAAE,OAAO;AAAA,IACT,EAAE,OAAO;AAAA,IACT,EAAE,QAAQ;AAAA,IACV,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EACpB,CAAC;AAAA,EACD,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAAA,EACnC,WAAW,gBAAgB,SAAS;AAAA,EACpC,YAAY,iBAAiB,SAAS;AAAA,EACtC,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,EACjC,UAAU,EAAE,MAAM,aAAa,EAAE,SAAS;AAAA,EAC1C,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,EAAE,SAAS;AACzD,CAAC;;;AC9BD,SAAS,KAAAA,UAAS;AAGX,IAAM,iBAAiB;AAE9B,IAAM,iBAAiBC,GAAE,OAAOA,GAAE,OAAO,GAAG,eAAe;AAE3D,IAAM,cAAcA,GAAE,OAAO;AAAA,EAC3B,MAAMA,GAAE,OAAO;AAAA,EACf,aAAaA,GAAE,OAAO;AAAA,EACtB,WAAWA,GAAE,OAAO;AAAA,EACpB,YAAYA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAAA,EACnC,SAASA,GAAE,OAAO,EAAE,SAAS;AAC/B,CAAC;AAED,IAAM,oBAAoBA,GAAE,OAAO;AAAA,EACjC,SAASA,GAAE,OAAO;AAAA,EAClB,QAAQA,GAAE,OAAO;AAAA,EACjB,YAAYA,GAAE,QAAQ,EAAE,SAAS;AACnC,CAAC;AAED,IAAM,iBAAiBA,GAAE,OAAO;AAAA,EAC9B,OAAOA,GAAE,MAAMA,GAAE,OAAO,CAAC;AAAA,EACzB,QAAQ,eAAe,SAAS;AAAA,EAChC,WAAW,eAAe,SAAS;AAAA,EACnC,eAAe,eAAe,SAAS;AAAA,EACvC,eAAe,eAAe,SAAS;AAAA,EACvC,YAAY,eAAe,SAAS;AAAA,EACpC,UAAU,eAAe,SAAS;AACpC,CAAC;AAED,IAAM,2BAA2BA,GAAE,OAAO;AAAA,EACxC,OAAOA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAAA,EAC9B,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAAA,EAC7B,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAC/B,CAAC;AAEM,IAAM,8BAA8B;AAAA,EACzC,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AACR;AAEO,IAAM,gBAAgBA,GAAE,OAAO;AAAA,EACpC,SAASA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,eAAeA,GAAE,OAAO;AAAA,EACxB,QAAQA,GAAE,OAAO;AAAA,EACjB,WAAWA,GAAE,OAAO;AAAA,EACpB,SAASA,GAAE,MAAMA,GAAE,OAAO,CAAC;AAAA,EAE3B,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,eAAe;AAAA,EACf,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,UAAU;AAAA,EAEV,QAAQA,GAAE,OAAO;AAAA,IACf,UAAUA,GAAE,MAAM,WAAW;AAAA,EAC/B,CAAC;AAAA,EAED,cAAcA,GAAE,OAAO;AAAA,IACrB,cAAcA,GAAE,MAAM,iBAAiB;AAAA,EACzC,CAAC;AAAA,EAED,WAAWA,GAAE,MAAM,cAAc;AAAA,EAEjC,oBAAoB,yBAAyB,QAAQ,2BAA2B;AAClF,CAAC;AAKM,IAAM,qBAAqB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AChFA,YAAY,QAAQ;AAGpB,eAAsB,YAAY,UAAoC;AACpE,QAAM,MAAM,MAAS,YAAS,UAAU,OAAO;AAC/C,QAAM,OAAgB,KAAK,MAAM,GAAG;AACpC,SAAO,cAAc,MAAM,IAAI;AACjC;AAEA,eAAsB,aACpB,UACA,SACe;AACf,QAAM,YAAY,cAAc,MAAM,OAAO;AAC7C,QAAS,aAAU,UAAU,KAAK,UAAU,WAAW,MAAM,CAAC,IAAI,IAAI;AACxE;AAEO,SAAS,gBAAgB,MAAe;AAC7C,SAAO,cAAc,UAAU,IAAI;AACrC;;;ACbA,IAAM,aAA0B,CAAC;AAE1B,SAAS,kBAAkB,WAA4B;AAC5D,aAAW,KAAK,SAAS;AACzB,aAAW,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AACxD;AAEO,SAAS,gBAA0C;AACxD,SAAO;AACT;;;ACVO,SAAS,eACd,SACyB;AACzB,MAAI,UAAU,EAAE,GAAG,QAAQ;AAC3B,QAAM,UAAU,QAAQ;AAExB,MAAI,YAAY,gBAAgB;AAC9B,WAAO;AAAA,EACT;AAEA,QAAMC,cAAa,cAAc;AACjC,MAAI,iBAAiB;AAErB,aAAW,aAAaA,aAAY;AAClC,QAAI,UAAU,SAAS,gBAAgB;AACrC,gBAAU,UAAU,QAAQ,OAAO;AACnC,uBAAiB,UAAU;AAAA,IAC7B;AAAA,EACF;AAEA,MAAI,mBAAmB,gBAAgB;AACrC,UAAM,IAAI;AAAA,MACR,kCAAkC,OAAO,OAAO,cAAc;AAAA,IAChE;AAAA,EACF;AAEA,SAAO;AACT;;;ACjBO,SAAS,gBAAgB,SAA+B;AAC7D,QAAM,QAAqB,CAAC;AAE5B,aAAW,YAAY,oBAAoB;AACzC,UAAM,UAAU,QAAQ,QAAQ;AAChC,QAAI,CAAC,WAAW,OAAO,YAAY,SAAU;AAE7C,eAAW,CAAC,MAAM,IAAI,KAAK,OAAO,QAAQ,OAAO,GAAG;AAClD,UAAI,CAAC,QAAQ,OAAO,SAAS,SAAU;AACvC,YAAM,KAAK;AAAA,QACT;AAAA,QACA;AAAA,QACA,YAAY,KAAK;AAAA,QACjB,YAAY,KAAK;AAAA,QACjB,WAAW,KAAK;AAAA,QAChB,aAAa,KAAK;AAAA,QAClB,UAAU,KAAK;AAAA,QACf,YAAY,KAAK;AAAA,MACnB,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,YACd,SACA,QAAgB,GACH;AACb,QAAM,iBAAiB,QAAQ,oBAAoB,SAAS;AAC5D,SAAO,gBAAgB,OAAO,EAC3B,OAAO,CAAC,MAAM,EAAE,cAAc,cAAc,EAC5C,KAAK,CAAC,GAAG,MAAM,EAAE,aAAa,EAAE,UAAU,EAC1C,MAAM,GAAG,KAAK;AACnB;AAEO,SAAS,oBACd,SACA,UACa;AACb,SAAO,gBAAgB,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,aAAa,QAAQ;AACvE;AAEO,SAAS,mBACd,SAC0B;AAC1B,QAAM,UAAU,oBAAI,IAAyB;AAC7C,aAAW,QAAQ,gBAAgB,OAAO,GAAG;AAC3C,UAAM,WAAW,QAAQ,IAAI,KAAK,QAAQ,KAAK,CAAC;AAChD,aAAS,KAAK,IAAI;AAClB,YAAQ,IAAI,KAAK,UAAU,QAAQ;AAAA,EACrC;AACA,SAAO;AACT;AAEA,IAAM,eAAe,CAAC,GAAc,MAClC,EAAE,aAAa,EAAE;AAEZ,SAAS,eAAe,SAI7B;AACA,QAAM,WAAW,gBAAgB,OAAO;AACxC,QAAM,iBAAiB,QAAQ,oBAAoB,SAAS;AAC5D,QAAM,gBAAgB,QAAQ,oBAAoB,QAAQ;AAC1D,QAAM,gBAAgB,QAAQ,oBAAoB,QAAQ;AAE1D,QAAM,WAAwB,CAAC;AAC/B,QAAM,SAAsB,CAAC;AAC7B,QAAM,YAAyB,CAAC;AAEhC,aAAW,QAAQ,UAAU;AAC3B,QAAI,KAAK,cAAc,gBAAgB;AACrC,eAAS,KAAK,IAAI;AAAA,IACpB,WAAW,KAAK,cAAc,eAAe;AAC3C,aAAO,KAAK,IAAI;AAAA,IAClB,WAAW,KAAK,cAAc,eAAe;AAC3C,gBAAU,KAAK,IAAI;AAAA,IACrB;AAAA,EACF;AAEA,WAAS,KAAK,YAAY;AAC1B,SAAO,KAAK,YAAY;AACxB,YAAU,KAAK,YAAY;AAE3B,SAAO,EAAE,UAAU,QAAQ,UAAU;AACvC;AAEO,SAAS,mBAAmB,MAAyB;AAC1D,MACE,OAAO,KAAK,eAAe,aAC3B,OAAO,KAAK,eAAe,UAC3B;AACA,WAAO,KAAK,eAAe,KAAK,UAAU,KAAK,UAAU;AAAA,EAC3D;AACA,MAAI,MAAM,QAAQ,KAAK,UAAU,GAAG;AAClC,WAAO,KAAK,WAAW,KAAK,UAAK;AAAA,EACnC;AACA,SAAO,OAAO,KAAK,UAAU;AAC/B;AAEO,SAAS,gBAAgB,SAA4B;AAC1D,QAAM,QAAkB,CAAC;AACzB,QAAM,uBACJ,OAAO,KAAK,QAAQ,MAAM,EAAE,SAAS,KACrC,OAAO,KAAK,QAAQ,SAAS,EAAE,SAAS;AAC1C,MAAI,qBAAsB,OAAM,KAAK,YAAY;AACjD,SAAO,MAAM,SAAS,IAAI,QAAQ,CAAC,YAAY;AACjD;;;AC5HA,OAAO,gBAAgB;AACvB,SAAS,YAAY,oBAAoB;AACzC,SAAS,SAAS,YAAY;AAC9B,SAAS,qBAAqB;AAG9B,SAAS,gBAAgB,OAAuB;AAC9C,MAAI,MAAM;AACV,SAAO,CAAC,WAAW,KAAK,KAAK,cAAc,CAAC,GAAG;AAC7C,UAAM,SAAS,QAAQ,GAAG;AAC1B,QAAI,WAAW,IAAK,OAAM,IAAI,MAAM,8CAA8C,KAAK,EAAE;AACzF,UAAM;AAAA,EACR;AACA,SAAO;AACT;AAEO,SAAS,aAAa,MAA2C;AACtE,QAAM,OAAO,gBAAgB,QAAQ,cAAc,YAAY,GAAG,CAAC,CAAC;AACpE,QAAM,SAAS,aAAa,KAAK,MAAM,aAAa,IAAI,GAAG,OAAO;AAClE,SAAO,WAAW,QAAQ,MAAM;AAClC;;;ACVA,SAAS,wBAAwB,SAAkB;AACjD,QAAM,QAAQ,eAAe,OAAO;AAEpC,QAAM,UAAU,CAAC,OAAkB;AAAA,IACjC,MAAM,GAAG,EAAE,QAAQ,IAAI,EAAE,IAAI;AAAA,IAC7B,oBAAoB,mBAAmB,CAAC;AAAA,IACxC,oBAAoB,EAAE,aAAa,KAAK,QAAQ,CAAC;AAAA,EACnD;AAEA,SAAO;AAAA,IACL,eAAe,MAAM,SAAS,IAAI,OAAO;AAAA,IACzC,aAAa,MAAM,OAAO,IAAI,OAAO;AAAA,IACrC,gBAAgB,MAAM,UAAU,IAAI,OAAO;AAAA,EAC7C;AACF;AAEA,SAAS,mBAAmB,SAAkB;AAC5C,QAAM,UAAU,QAAQ;AACxB,SAAO,OAAO,QAAQ,OAAO,EAAE,IAAI,CAAC,CAAC,MAAM,IAAI,OAAO;AAAA,IACpD,OAAO,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC;AAAA,IAClD,YACE,OAAO,KAAK,eAAe,WACvB,KAAK,aACL,KAAK,UAAU,KAAK,UAAU;AAAA,IACpC,oBAAoB,KAAK,aAAa,KAAK,QAAQ,CAAC;AAAA,IACpD,WAAW,KAAK;AAAA,IAChB,YAAY,KAAK;AAAA,IACjB,aAAa,KAAK;AAAA,IAClB,UAAU,KAAK;AAAA,EACjB,EAAE;AACJ;AAEA,SAAS,qBAAqB,SAAkB;AAC9C,QAAM,UAAU,QAAQ;AACxB,QAAM,eAAe,OAAO,QAAQ,OAAO,EAAE,IAAI,CAAC,CAAC,MAAM,IAAI,OAAO;AAAA,IAClE;AAAA,IACA,UACE,OAAO,KAAK,eAAe,WAAW,KAAK,aAAa;AAAA,IAC1D,oBAAoB,KAAK,aAAa,KAAK,QAAQ,CAAC;AAAA,IACpD,aAAa,KAAK;AAAA,IAClB,YAAY,KAAK;AAAA,IACjB,UAAU,KAAK;AAAA,EACjB,EAAE;AAEF,QAAM,oBAAoB,QAAQ,WAAW;AAC7C,MAAI;AACJ,MAAI,qBAAqB,MAAM,QAAQ,kBAAkB,UAAU,GAAG;AACpE,oBAAgB,kBAAkB;AAAA,EACpC;AAEA,SAAO,EAAE,UAAU,cAAc,mBAAmB,cAAc;AACpE;AAEA,SAAS,mBAAmB,SAAkB;AAC5C,SAAO,QAAQ,OAAO,SAAS,IAAI,CAAC,WAAW;AAAA,IAC7C,MAAM,MAAM;AAAA,IACZ,aAAa,MAAM;AAAA,IACnB,SAAS,MAAM;AAAA,EACjB,EAAE;AACJ;AAEA,SAAS,yBAAyB,SAAkB;AAClD,SAAO,QAAQ,aAAa,aAAa,IAAI,CAAC,QAAQ;AAAA,IACpD,SAAS,GAAG;AAAA,IACZ,QAAQ,GAAG;AAAA,EACb,EAAE;AACJ;AAEA,SAAS,qBAAqB,SAAkB,MAAc;AAC5D,QAAM,QAAQ,eAAe,OAAO;AACpC,QAAM,UAAU,CAAC,OAAkB;AAAA,IACjC,UAAU,EAAE;AAAA,IACZ,MAAM,EAAE;AAAA,IACR,YACE,OAAO,EAAE,eAAe,WACpB,EAAE,aACF,KAAK,UAAU,EAAE,UAAU;AAAA,IACjC,oBAAoB,EAAE,aAAa,KAAK,QAAQ,CAAC;AAAA,IACjD,oBAAoB,mBAAmB,CAAC;AAAA,IACxC,aAAa,EAAE;AAAA,EACjB;AAEA,SAAO;AAAA,IACL,UAAU,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC;AAAA,IACrD,eAAe,MAAM,SAAS,IAAI,OAAO;AAAA,IACzC,aAAa,MAAM,OAAO,IAAI,OAAO;AAAA,IACrC,gBAAgB,MAAM,UAAU,IAAI,OAAO;AAAA,EAC7C;AACF;AAEA,SAAS,gBAAgB,SAAkB,WAAoC;AAC7E,QAAM,gBAAgB,aAAa,cAAc;AACjD,QAAM,SAAS,mBAAmB,OAAO;AACzC,QAAM,eAAe,yBAAyB,OAAO;AACrD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS,cAAc;AAAA,MACrB,QAAQ,QAAQ;AAAA,MAChB,GAAG,wBAAwB,OAAO;AAAA,MAClC;AAAA,MACA,QAAQ,OAAO,SAAS,IAAI,SAAS;AAAA,MACrC,cAAc,aAAa,SAAS,IAAI,eAAe;AAAA,IACzD,CAAC;AAAA,EACH;AACF;AAEO,SAAS,mBAAmB,SAAmC;AACpE,QAAM,QAAyB,CAAC;AAChC,QAAM,YAAY,gBAAgB,OAAO;AAEzC,QAAM,KAAK,gBAAgB,SAAS,SAAS,CAAC;AAE9C,QAAM,iBAAiB,aAAa,eAAe;AACnD,QAAM,KAAK;AAAA,IACT,MAAM;AAAA,IACN,SAAS,eAAe,EAAE,OAAO,mBAAmB,OAAO,EAAE,CAAC;AAAA,EAChE,CAAC;AAED,QAAM,mBAAmB,aAAa,iBAAiB;AACvD,QAAM,KAAK;AAAA,IACT,MAAM;AAAA,IACN,SAAS,iBAAiB,qBAAqB,OAAO,CAAC;AAAA,EACzD,CAAC;AAED,QAAM,eAAe,aAAa,qBAAqB;AACvD,aAAW,QAAQ,WAAW;AAC5B,UAAM,KAAK;AAAA,MACT,MAAM,2BAA2B,IAAI;AAAA,MACrC,SAAS,aAAa,qBAAqB,SAAS,IAAI,CAAC;AAAA,IAC3D,CAAC;AAAA,EACH;AAEA,SAAO;AACT;;;AC3IA,SAAS,kBAAkB,OAAiB,aAA6B;AACvE,SAAO;AAAA,IACL;AAAA,IACA,iBAAiB,WAAW;AAAA,IAC5B,WAAW,MAAM,KAAK,IAAI,CAAC;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,SAAS,eACP,UACA,MACA,YACA,aACQ;AACR,QAAM,QACJ,OAAO,eAAe,WAClB,aACA,KAAK,UAAU,UAAU;AAC/B,QAAM,OAAO,cAAc,OAAO,WAAW,KAAK;AAClD,SAAO,OAAO,QAAQ,IAAI,IAAI,SAAS,KAAK,KAAK,IAAI;AACvD;AAEA,SAAS,WAAW,QAAgB,OAA4B;AAC9D,SAAO;AAAA,IACL,KAAK,MAAM;AAAA,IACX;AAAA,IACA,GAAG,MACA,KAAK,CAAC,GAAG,MAAM,EAAE,aAAa,EAAE,UAAU,EAC1C;AAAA,MAAI,CAAC,MACJ,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW;AAAA,IAChE;AAAA,EACJ,EAAE,KAAK,IAAI;AACb;AAEO,SAAS,oBAAoB,SAAmC;AACrE,QAAM,QAAyB,CAAC;AAChC,QAAM,WAAW,gBAAgB,OAAO;AACxC,QAAM,gBAAgB,QAAQ,oBAAoB,QAAQ;AAE1D,QAAM,gBAAgB,SAAS;AAAA,IAC7B,CAAC,MAAM,EAAE,cAAc;AAAA,EACzB;AAEA,MAAI,cAAc,SAAS,GAAG;AAC5B,UAAM,cAAc;AAAA,MAClB,CAAC,WAAW,UAAU;AAAA,MACtB,GAAG,QAAQ,MAAM;AAAA,IACnB;AAEA,UAAM,KAAK;AAAA,MACT,MAAM;AAAA,MACN,SAAS,cAAc,WAAW,QAAQ,QAAQ,aAAa,IAAI;AAAA,IACrE,CAAC;AAAA,EACH;AAEA,SAAO;AACT;;;ACnDO,SAAS,oBACd,UACqB;AACrB,SAAO;AAAA,IACL,OAAO;AAAA,MACL;AAAA,QACE,OAAO;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;;;AC1BO,SAAS,iBACd,YACA,YACiB;AACjB,MAAI,cAAc,WAAW,MAAO,QAAO;AAC3C,MAAI,cAAc,WAAW,KAAM,QAAO;AAC1C,MAAI,cAAc,WAAW,KAAM,QAAO;AAC1C,SAAO;AACT;AAEO,SAAS,aAAa,GAAqB;AAChD,SAAO,MAAM,UAAU,IAAI,MAAM,SAAS,IAAI;AAChD;AAEA,IAAM,mBAA2C;AAAA,EAC/C,WAAW;AAAA,EACX,WAAW;AAAA,EACX,OAAO;AAAA,EACP,WAAW;AACb;AAEA,SAAS,uBAAuB,MAAwC;AACtE,QAAM,YAAY,KAAK,YAAY;AACnC,SAAO,aACL,OAAO,cAAc,YACrB,aAAa,aACb,MAAM,QAAS,UAAsC,OAAO,IACxD,UAAsC,UACxC;AACN;AAEA,IAAM,cAAc;AAGpB,IAAM,oBAA4C;AAAA,EAChD,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAClB,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,sBAAsB;AACxB;AAeO,SAAS,iBAAiB,YAAmC;AAClE,SAAO,kBAAkB,UAAU,KAAK;AAC1C;AAEA,SAAS,cAAc,KAAa,YAAwC;AAC1E,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ,UAAU,GAAG,eAAe,KAAK,UAAU,UAAU,CAAC;AAAA,EAChE;AACF;AAEA,SAAS,gBACP,KACA,MACA,cACA,SACW;AACX,QAAM,gBAAgB,uBAAuB,IAAI;AACjD,MAAI,cAAe,QAAO;AAC1B,QAAM,SAAS,OAAO,KAAK,eAAe,WAAW,iBAAiB,KAAK,UAAU,IAAI;AACzF,MAAI,OAAQ,QAAO,CAAC,EAAE,UAAU,cAAc,QAAQ,CAAC,MAAM,EAAE,CAAC;AAChE,UAAQ,KAAK,cAAc,KAAK,KAAK,UAAU,CAAC;AAChD,SAAO,CAAC;AACV;AAEO,SAAS,sBAAsB,SAA0C;AAC9E,QAAM,aAAa,QAAQ;AAC3B,QAAM,YAAuB,CAAC;AAC9B,QAAM,eAAoC,CAAC;AAC3C,MAAI,cAA+B;AAEnC,aAAW,CAAC,KAAK,IAAI,KAAK,OAAO,QAAQ,QAAQ,UAAU,CAAC,CAAC,GAAG;AAC9D,UAAM,eAAe,iBAAiB,GAAG;AACzC,QAAI,CAAC,aAAc;AACnB,UAAM,WAAW,iBAAiB,KAAK,YAAY,UAAU;AAC7D,QAAI,CAAC,SAAU;AAEf,UAAM,gBAAgB,gBAAgB,KAAK,MAAM,cAAc,YAAY;AAC3E,QAAI,cAAc,WAAW,EAAG;AAChC,cAAU,KAAK,GAAG,aAAa;AAC/B,QAAI,CAAC,eAAe,aAAa,QAAQ,IAAI,aAAa,WAAW,EAAG,eAAc;AAAA,EACxF;AAEA,MAAI,UAAU,WAAW,KAAK,CAAC,YAAa,QAAO,EAAE,MAAM,MAAM,aAAa;AAC9E,SAAO,EAAE,MAAM,CAAC,aAAa,CAAC,aAAa,GAAG,SAAS,CAAC,GAAG,aAAa;AAC1E;AAEO,SAAS,0BACd,SAC0B;AAC1B,SAAO,sBAAsB,OAAO,EAAE;AACxC;AAEO,SAAS,qBACd,SAC0B;AAC1B,QAAM,cAAc,QAAQ,WAAW;AACvC,MAAI,CAAC,YAAa,QAAO;AACzB,QAAM,WAAW,iBAAiB,YAAY,YAAY,QAAQ,kBAAkB;AACpF,MAAI,CAAC,SAAU,QAAO;AAEtB,QAAM,aAAa,MAAM,QAAQ,YAAY,UAAU,IACnD,YAAY,aACZ,CAAC,WAAW,YAAY,YAAY,UAAU;AAElD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,wBACd,SAC0B;AAC1B,QAAM,WAAW,QAAQ,WAAW;AACpC,MAAI,CAAC,SAAU,QAAO;AACtB,QAAM,WAAW,iBAAiB,SAAS,YAAY,QAAQ,kBAAkB;AACjF,MAAI,CAAC,SAAU,QAAO;AACtB,MAAI,OAAO,SAAS,eAAe,SAAU,QAAO;AAEpD,SAAO,CAAC,0BAA0B,CAAC,UAAU,EAAE,KAAK,SAAS,WAAW,CAAC,CAAC;AAC5E;AAEO,SAAS,oBACd,SAC0B;AAC1B,QAAM,QAAQ,QAAQ,QAAQ;AAC9B,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,WAAW,iBAAiB,MAAM,YAAY,QAAQ,kBAAkB;AAC9E,MAAI,CAAC,SAAU,QAAO;AACtB,MAAI,OAAO,MAAM,eAAe,SAAU,QAAO;AAEjD,QAAM,UAAkC;AAAA,IACtC,cAAc;AAAA,IACd,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,YAAY;AAAA,EACd;AAEA,SAAO;AAAA,IACL;AAAA,IACA,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,QAAQ,MAAM,UAAU,KAAK,WAAW,GAAG,KAAK,EAAE,CAAC;AAAA,EAC3E;AACF;AAEO,SAAS,gBACd,SAC0B;AAC1B,QAAM,QAAkC,CAAC;AACzC,QAAM,OAAO,QAAQ;AACrB,MAAI,CAAC,KAAM,QAAO;AAElB,QAAM,eAAe,KAAK;AAC1B,MAAI,CAAC,aAAc,QAAO;AAE1B,QAAM,WAAW,iBAAiB,aAAa,YAAY,QAAQ,kBAAkB;AACrF,MAAI,CAAC,SAAU,QAAO;AAEtB,MAAI,aAAa,eAAe,mBAAmB;AACjD,UAAM,KAAK,CAAC,uBAAuB,CAAC,UAAU,EAAE,YAAY,KAAK,CAAC,CAAC,CAAC;AAAA,EACtE,WAAW,aAAa,eAAe,aAAa;AAClD,UAAM,KAAK,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;AAAA,EAChD;AAEA,SAAO;AACT;;;AChLA,SAAS,eACP,MACA,YACwB;AACxB,QAAM,MAAM,KAAK,YAAY;AAG7B,MAAI,CAAC,IAAK,QAAO;AAEjB,QAAM,MAAM,iBAAiB,KAAK,YAAY,UAAU;AACxD,MAAI,QAAQ,KAAM,QAAO;AAEzB,QAAM,SAAS,IAAI,KAAK,SAAS,GAAG,IAChC,IAAI,KAAK,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG,IACzC;AAEJ,SAAO;AAAA,IACL;AAAA,IACA,MAAM,IAAI;AAAA,IACV,UAAU,QAAQ,SAAS,SAAS;AAAA,IACpC,SAAS,IAAI;AAAA,EACf;AACF;AAEA,SAAS,wBAAwB,SAAqC;AACpE,QAAM,UAA6B,CAAC;AAEpC,aAAW,YAAY,oBAAoB;AACzC,UAAM,UAAU,QAAQ,QAAQ;AAChC,QAAI,CAAC,QAAS;AAEd,eAAW,CAAC,EAAE,IAAI,KAAK,OAAO,QAAQ,OAAO,GAAG;AAC9C,YAAM,QAAQ,eAAe,MAAM,QAAQ,kBAAkB;AAC7D,UAAI,MAAO,SAAQ,KAAK,KAAK;AAAA,IAC/B;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,mBAAmB,SAAkB,SAAkC;AAC9E,QAAM,SAAS,qBAAqB,OAAO;AAC3C,MAAI,CAAC,OAAQ;AAEb,QAAM,CAAC,UAAU,UAAU,IAAI;AAC/B,QAAM,cAAc;AACpB,QAAM,WAAW,YAAY,CAAC;AAC9B,MAAI,aAAa,OAAQ;AAEzB,UAAQ,KAAK;AAAA,IACX,QAAQ;AAAA,IACR,MAAM;AAAA,IACN;AAAA,IACA,SAAS,CAAC,YAAY,CAAC,CAAC;AAAA,EAC1B,CAAC;AACH;AAEA,SAAS,sBAAsB,SAAyC;AACtE,QAAM,UAAU,oBAAI,IAAY;AAChC,aAAW,SAAS,SAAS;AAC3B,QAAI,MAAM,OAAO,SAAS,oBAAoB,GAAG;AAC/C,cAAQ,IAAI,oBAAoB;AAAA,IAClC;AACA,QAAI,MAAM,WAAW,iBAAiB;AACpC,cAAQ,IAAI,eAAe;AAAA,IAC7B;AACA,QAAI,MAAM,OAAO,SAAS,SAAS,GAAG;AACpC,cAAQ,IAAI,SAAS;AAAA,IACvB;AACA,QAAI,MAAM,OAAO,SAAS,OAAO,GAAG;AAClC,cAAQ,IAAI,OAAO;AAAA,IACrB;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,yBAAyB,SAAgC;AAChE,QAAM,UAAoB,CAAC;AAC3B,MAAI,QAAQ,IAAI,oBAAoB,GAAG;AACrC,YAAQ,KAAK,0DAA0D;AACvE,YAAQ,KAAK,mDAAmD;AAAA,EAClE;AACA,MAAI,QAAQ,IAAI,eAAe,GAAG;AAChC,YAAQ,KAAK,0DAA0D;AAAA,EACzE;AACA,MAAI,QAAQ,IAAI,SAAS,GAAG;AAC1B,YAAQ,KAAK,8CAA8C;AAAA,EAC7D;AACA,MAAI,QAAQ,IAAI,OAAO,GAAG;AACxB,YAAQ,KAAK,0CAA0C;AAAA,EACzD;AACA,SAAO;AACT;AAEA,SAAS,iBACP,SACyB;AACzB,QAAM,QAAiC,CAAC;AACxC,aAAW,SAAS,SAAS;AAC3B,QAAI,MAAM,WAAW,MAAM,QAAQ,SAAS,GAAG;AAC7C,YAAM,MAAM,IAAI,IAAI,CAAC,MAAM,UAAU,GAAG,MAAM,OAAO;AAAA,IACvD,OAAO;AACL,YAAM,MAAM,IAAI,IAAI,MAAM;AAAA,IAC5B;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,qBAAqB,SAAiC;AACpE,QAAM,UAAU,wBAAwB,OAAO;AAC/C,qBAAmB,SAAS,OAAO;AAEnC,QAAM,UAAU,sBAAsB,OAAO;AAC7C,QAAM,UAAU,yBAAyB,OAAO;AAChD,QAAM,QAAQ,iBAAiB,OAAO;AAEtC,QAAM,SAAS;AAAA,IACb,iCAAiC,QAAQ,MAAM;AAAA,IAC/C,YAAY,QAAQ,SAAS;AAAA,IAC7B;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AAEX,QAAM,UAAU;AAAA,IACd;AAAA,IACA,GAAG;AAAA,IACH;AAAA,IACA,kBAAkB,KAAK,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;AAAA,IACpD;AAAA,EACF,EAAE,KAAK,IAAI;AAEX,SAAO,EAAE,MAAM,oBAAoB,QAAQ;AAC7C;;;AC9HA,IAAM,gBAAgB;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,SAAS,kBAAkB,MAAiB,QAA2B;AACrE,MAAI,CAAC,KAAK,YAAY,KAAM;AAC5B,QAAM,MAAM,KAAK,WAAW;AAC5B,MAAI,CAAC,IAAI,MAAO;AAChB,aAAW,QAAQ,IAAI,OAAO;AAC5B,WAAO,IAAI,KAAK,QAAQ,QAAQ,EAAE,CAAC;AAAA,EACrC;AACF;AAEA,SAAS,sBACP,UACA,MACA,MACA,KACM;AACN,MAAI,aAAa,eAAe,SAAS,mBAAoB;AAC7D,MAAI,OAAO,IAAI,KAAK;AACpB,MAAI,OAAO,KAAK,eAAe,UAAU;AACvC,QAAI,SAAS,EAAE,eAAe,KAAK,WAAW;AAAA,EAChD;AACF;AAEA,SAAS,UACP,UACA,MACA,MACA,KACM;AACN,oBAAkB,MAAM,IAAI,MAAM;AAElC,MAAI,aAAa,UAAU;AACzB,QAAI,OAAO,IAAI,GAAG;AAAA,EACpB;AAEA,MAAI,aAAa,eAAe,SAAS,eAAe;AACtD,QAAI,OAAO,IAAI,GAAG;AAClB,QAAI,MAAM,QAAQ,KAAK,UAAU,GAAG;AAClC,UAAI,QAAQ,EAAE,cAAc,KAAK,WAAuB;AAAA,IAC1D;AAAA,EACF;AAEA,MAAI,aAAa,mBAAmB,SAAS,gBAAgB;AAC3D,QAAI,OAAO,IAAI,GAAG;AAClB,QAAI,OAAO,KAAK,eAAe,UAAU;AACvC,UAAI,aAAa,EAAE,YAAY,KAAK,WAAW;AAAA,IACjD;AAAA,EACF;AAEA,wBAAsB,UAAU,MAAM,MAAM,GAAG;AACjD;AAEA,SAAS,aAAa,SAAsC;AAC1D,QAAM,iBAAiB,QAAQ,YAAY;AAC3C,MAAI,kBAAkB,OAAO,eAAe,eAAe,UAAU;AACnE,WAAO,eAAe;AAAA,EACxB;AACA,SAAO;AACT;AAEA,SAAS,gBAAgB,SAA8B;AACrD,QAAM,aAAa,QAAQ;AAC3B,QAAM,MAAuB,EAAE,QAAQ,oBAAI,IAAY,EAAE;AACzD,QAAM,UAAU,oBAAI,IAAY,CAAC,KAAK,CAAC;AAEvC,aAAW,YAAY,eAAe;AACpC,UAAM,UAAU,QAAQ,QAAQ;AAChC,QAAI,CAAC,QAAS;AAEd,eAAW,CAAC,MAAM,IAAI,KAAK,OAAO;AAAA,MAChC;AAAA,IACF,GAAG;AACD,UAAI,KAAK,aAAa,WAAW,KAAM;AACvC,gBAAU,UAAU,MAAM,MAAM,GAAG;AAAA,IACrC;AAAA,EACF;AAEA,SAAO;AAAA,IACL,YAAY,aAAa,OAAO;AAAA,IAChC,MAAM;AAAA,MACJ,QAAQ,CAAC,GAAG,IAAI,MAAM,EAAE,KAAK;AAAA,MAC7B,QAAQ,CAAC;AAAA,MACT,SAAS,CAAC,GAAG,OAAO;AAAA,MACpB,QAAQ,IAAI;AAAA,MACZ,YAAY,IAAI;AAAA,MAChB,OAAO,IAAI;AAAA,IACb;AAAA,EACF;AACF;AAEA,SAAS,YAAY,OAAyB;AAC5C,SAAO,IAAI,MAAM,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC;AAClD;AAEA,SAAS,mBAAmB,MAA0B;AACpD,QAAM,QAAkB,CAAC,QAAQ;AACjC,MAAI,KAAK,OAAO,SAAS,GAAG;AAC1B,UAAM,KAAK,YAAY,YAAY,KAAK,MAAM,CAAC,EAAE;AAAA,EACnD;AACA,MAAI,KAAK,OAAO,SAAS,GAAG;AAC1B,UAAM,KAAK,YAAY,YAAY,KAAK,MAAM,CAAC,EAAE;AAAA,EACnD;AACA,MAAI,KAAK,QAAQ,SAAS,GAAG;AAC3B,UAAM,KAAK,aAAa,YAAY,KAAK,OAAO,CAAC,EAAE;AAAA,EACrD;AACA,QAAM,KAAK,EAAE;AACb,SAAO;AACT;AAEA,SAAS,uBAAuB,MAAqC;AACnE,QAAM,QAAkB,CAAC;AAEzB,MAAI,KAAK,QAAQ;AACf,UAAM,KAAK,eAAe;AAC1B,UAAM,KAAK,oBAAoB,KAAK,OAAO,aAAa,EAAE;AAC1D,UAAM,KAAK,EAAE;AAAA,EACf;AAEA,MAAI,KAAK,YAAY;AACnB,UAAM,KAAK,mBAAmB;AAC9B,UAAM,KAAK,iBAAiB,KAAK,WAAW,UAAU,GAAG;AACzD,UAAM,KAAK,EAAE;AAAA,EACf;AAEA,MAAI,KAAK,OAAO;AACd,UAAM,KAAK,cAAc;AACzB,UAAM,KAAK,mBAAmB,YAAY,KAAK,MAAM,YAAY,CAAC,EAAE;AACpE,UAAM,KAAK,EAAE;AAAA,EACf;AAEA,SAAO;AACT;AAEA,SAAS,gBAAgB,QAA4B;AACnD,QAAM,QAAkB,CAAC;AAEzB,MAAI,OAAO,eAAe,QAAW;AACnC,UAAM,KAAK,iBAAiB,OAAO,UAAU,EAAE;AAC/C,UAAM,KAAK,EAAE;AAAA,EACf;AAEA,QAAM,KAAK,GAAG,mBAAmB,OAAO,IAAI,CAAC;AAC7C,QAAM,KAAK,GAAG,uBAAuB,OAAO,IAAI,CAAC;AAEjD,SAAO,MAAM,KAAK,IAAI;AACxB;AAEO,SAAS,mBAAmB,SAAiC;AAClE,QAAM,SAAS,gBAAgB,OAAO;AAEtC,QAAM,SAAS;AAAA,IACb,gCAAgC,QAAQ,MAAM;AAAA,IAC9C,WAAW,QAAQ,SAAS;AAAA,IAC5B;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AAEX,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS,SAAS,gBAAgB,MAAM;AAAA,EAC1C;AACF;;;AC3LA,SAAS,WAAW,KAAqB;AACvC,QAAM,SAAS,IAAI,QAAQ,YAAY,KAAK;AAC5C,SAAO,OAAO,OAAO,CAAC,EAAE,YAAY,IAAI,OAAO,MAAM,CAAC;AACxD;AAEA,SAAS,iBAAiB,YAA6B;AACrD,MAAI,OAAO,eAAe,SAAU,QAAO;AAC3C,MAAI,OAAO,eAAe,SAAU,QAAO,OAAO,UAAU;AAC5D,MAAI,OAAO,eAAe,UAAW,QAAO,OAAO,UAAU;AAC7D,SAAO,KAAK,UAAU,UAAU;AAClC;AAEA,SAAS,gBAAgB,OAA8C;AACrE,QAAM,aAAa,oBAAI,IAAyB;AAChD,aAAW,QAAQ,OAAO;AACxB,UAAM,WAAW,WAAW,IAAI,KAAK,QAAQ,KAAK,CAAC;AACnD,aAAS,KAAK,IAAI;AAClB,eAAW,IAAI,KAAK,UAAU,QAAQ;AAAA,EACxC;AACA,SAAO;AACT;AAEA,SAAS,aAAa,UAAwD;AAC5E,QAAM,QAAkB,CAAC;AACzB,aAAW,WAAW,UAAU;AAC9B,QAAI,QAAQ,MAAM;AAChB,YAAM,KAAK,eAAe;AAC1B,YAAM,KAAK,cAAc;AACzB,YAAM,KAAK,QAAQ,IAAI;AACvB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,EAAE;AAAA,IACf;AACA,QAAI,QAAQ,KAAK;AACf,YAAM,KAAK,eAAe;AAC1B,YAAM,KAAK,UAAU;AACrB,YAAM,KAAK,QAAQ,GAAG;AACtB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,EAAE;AAAA,IACf;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,UAAU,MAA2B;AAC5C,QAAM,QAAkB,CAAC;AACzB,QAAM,WAAW,KAAK,aAAa,KAAK,QAAQ,CAAC;AACjD,QAAM,QAAQ,iBAAiB,KAAK,UAAU;AAE9C,QAAM,KAAK,OAAO,WAAW,KAAK,IAAI,CAAC,EAAE;AACzC,QAAM,KAAK,EAAE;AACb,QAAM;AAAA,IACJ,qBAAqB,KAAK,wBAAwB,OAAO,IAAI,KAAK,YAAY,qBAAqB,KAAK,SAAS,KAAK,EAAE;AAAA,EAC1H;AACA,QAAM,KAAK,EAAE;AAEb,MAAI,KAAK,aAAa;AACpB,UAAM,KAAK,KAAK,WAAW;AAC3B,UAAM,KAAK,EAAE;AAAA,EACf;AAEA,MAAI,KAAK,YAAY,KAAK,SAAS,SAAS,GAAG;AAC7C,UAAM,KAAK,GAAG,aAAa,KAAK,QAAQ,CAAC;AAAA,EAC3C;AAEA,SAAO;AACT;AAEO,SAAS,uBAAuB,SAAiC;AACtE,QAAM,WAAW,gBAAgB,OAAO;AACxC,QAAM,aAAa,gBAAgB,QAAQ;AAC3C,QAAM,QAAkB,CAAC;AAEzB,QAAM,KAAK,KAAK,QAAQ,MAAM,qBAAqB;AACnD,QAAM,KAAK,EAAE;AACb,QAAM,KAAK,+BAA+B,QAAQ,SAAS,EAAE;AAC7D,QAAM;AAAA,IACJ,cAAc,QAAQ,QAAQ,SAAS,IAAI,QAAQ,QAAQ,KAAK,IAAI,IAAI,KAAK;AAAA,EAC/E;AACA,QAAM,KAAK,EAAE;AAEb,aAAW,CAAC,UAAU,KAAK,KAAK,YAAY;AAC1C,UAAM,KAAK,MAAM,WAAW,QAAQ,CAAC,EAAE;AACvC,UAAM,KAAK,EAAE;AAEb,UAAM,SAAS,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,aAAa,EAAE,UAAU;AACpE,eAAW,QAAQ,QAAQ;AACzB,YAAM,KAAK,GAAG,UAAU,IAAI,CAAC;AAAA,IAC/B;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS,MAAM,KAAK,IAAI;AAAA,EAC1B;AACF;;;ACjGA,SAAS,cACP,SACA,KACe;AACf,QAAM,OAAO,QAAQ,GAAG;AACxB,MAAI,CAAC,KAAM,QAAO;AAClB,SAAO,KAAK;AACd;AAEA,SAAS,sBAAsB,YAAiD;AAC9E,QAAM,QAAkB,CAAC;AAEzB,QAAM,cAAc,cAAsB,YAAY,aAAa;AACnE,MAAI,aAAa;AACf,UAAM,QACJ,gBAAgB,WACZ,UACA,gBAAgB,SACd,QACA;AACR,UAAM,KAAK,kBAAkB,KAAK,EAAE;AAAA,EACtC;AAEA,QAAM,aAAa,cAAsB,YAAY,YAAY;AACjE,MAAI,eAAe,QAAW;AAC5B,UAAM,KAAK,iBAAiB,UAAU,EAAE;AAAA,EAC1C;AAEA,QAAM,kBAAkB;AAAA,IACtB;AAAA,IACA;AAAA,EACF;AACA,MAAI,oBAAoB,QAAW;AACjC,UAAM,KAAK,0BAA0B,eAAe,EAAE;AAAA,EACxD;AAEA,SAAO;AACT;AAEO,SAAS,2BACd,SACe;AACf,QAAM,aAAa,QAAQ;AAC3B,QAAM,QAAkB,CAAC;AAEzB,QAAM,KAAK,0BAA0B;AACrC,QAAM,KAAK,aAAa;AACxB,QAAM,KAAK,EAAE;AACb,QAAM,KAAK,KAAK;AAChB,QAAM,KAAK,GAAG,sBAAsB,UAAU,CAAC;AAE/C,QAAM,KAAK,kBAAkB;AAC7B,QAAM,KAAK,iBAAiB;AAC5B,QAAM,KAAK,iCAAiC;AAE5C,QAAM,aAAa,cAAsB,YAAY,YAAY;AACjE,MAAI,eAAe,QAAW;AAC5B,UAAM,KAAK,qBAAqB,UAAU,EAAE;AAAA,EAC9C;AAEA,QAAM,KAAK,EAAE;AAEb,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS,MAAM,KAAK,IAAI;AAAA,EAC1B;AACF;;;ACnDO,IAAM,oBAAoC;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,SAAS,WAAW,SAAmC;AACrD,QAAM,SAAS,oBAAoB,OAAO;AAC1C,SAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,SAAS,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,IACzC;AAAA,EACF;AACF;AAEO,SAAS,cACd,SACA,QACiB;AACjB,UAAQ,QAAQ;AAAA,IACd,KAAK;AACH,aAAO,mBAAmB,OAAO;AAAA,IACnC,KAAK;AACH,aAAO,oBAAoB,OAAO;AAAA,IACpC,KAAK;AACH,aAAO,WAAW,OAAO;AAAA,IAC3B,KAAK;AACH,aAAO,CAAC,qBAAqB,OAAO,CAAC;AAAA,IACvC,KAAK;AACH,aAAO,CAAC,mBAAmB,OAAO,CAAC;AAAA,IACrC,KAAK;AACH,aAAO,CAAC,uBAAuB,OAAO,CAAC;AAAA,IACzC,KAAK;AACH,aAAO,CAAC,2BAA2B,OAAO,CAAC;AAAA,IAC7C;AACE,YAAM,IAAI;AAAA,QACR,+BAA+B,MAAgB,yBAAyB,kBAAkB,KAAK,IAAI,CAAC;AAAA,MACtG;AAAA,EACJ;AACF;","names":["z","z","migrations"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@titan-design/style-profile",
3
- "version": "0.0.0",
3
+ "version": "0.2.0",
4
4
  "description": "Declare one code-style profile and export it as enforcement artifacts: ESLint and ruff configs, EditorConfig, Claude rules, hooks, a skill, and markdown",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -38,6 +38,9 @@
38
38
  "zod": "^4.0.0"
39
39
  },
40
40
  "devDependencies": {
41
+ "@typescript-eslint/eslint-plugin": "^8.46.0",
42
+ "@typescript-eslint/parser": "^8.46.0",
43
+ "eslint": "^9.39.0",
41
44
  "zod": "^4.4.3"
42
45
  },
43
46
  "scripts": {