import generatedArtifact from '../../runtime/override-artifacts.json'; import generatedRuntimeMap from '../../runtime/token-to-css-var.json'; import type { Platform, Preset } from '../types'; import type { InputDefinition, ManagedTargetDefinition, OverrideArtifactRevision, OverrideCatalogQueries, OverrideRuntimeData, PrimitiveValueArtifact, RecipeDefinition, RuleDefinition, RuntimeMap, SelectionDefinition, SourceSetDefinition, TargetMetadataCatalog, TokenPath, } from './contracts'; import { walkShippedPresetExpressions } from './presetWalker'; interface GeneratedCatalogData { readonly inputs: readonly InputDefinition[]; readonly sourceSets: readonly SourceSetDefinition[]; readonly selections: readonly SelectionDefinition[]; readonly recipes: readonly RecipeDefinition[]; readonly managedTargets: readonly ManagedTargetDefinition[]; } export interface RuntimeFontFamily { readonly faces: Readonly>; readonly byPlatform: Readonly>>>; } export interface RuntimeFontCatalog { readonly presetFamilies: Readonly>; readonly families: Readonly>; } interface GeneratedOverrideArtifact { readonly formatVersion: number; readonly primitives: PrimitiveValueArtifact; readonly targets: TargetMetadataCatalog; readonly catalogs: GeneratedCatalogData; readonly rules: readonly RuleDefinition[]; readonly fonts: RuntimeFontCatalog; readonly revision: OverrideArtifactRevision; } const artifact = generatedArtifact as unknown as GeneratedOverrideArtifact; if (artifact.formatVersion !== 2) { throw new Error( `Unsupported private override artifact format: ${String(artifact.formatVersion)}`, ); } function byId(entries: readonly T[]): ReadonlyMap { return new Map(entries.map((entry) => [entry.id, entry])); } const inputs = byId(artifact.catalogs.inputs); const sourceSets = byId(artifact.catalogs.sourceSets); const selections = byId(artifact.catalogs.selections); const recipes = byId(artifact.catalogs.recipes); export const overrideCatalogs: OverrideCatalogQueries = { getInput: (id) => inputs.get(id), getSourceSet: (id) => sourceSets.get(id), getSelection: (id) => selections.get(id), getRecipe: (id) => recipes.get(id), listInputs: () => artifact.catalogs.inputs, listSelections: () => artifact.catalogs.selections, listManagedTargets: () => artifact.catalogs.managedTargets, }; export const overrideFontCatalog: RuntimeFontCatalog = artifact.fonts; export const overrideRuntimeMap: RuntimeMap = generatedRuntimeMap; export const overrideRuntimeData: OverrideRuntimeData = { expressions: walkShippedPresetExpressions(), primitives: artifact.primitives, targets: artifact.targets, catalogs: overrideCatalogs, rules: artifact.rules, revision: artifact.revision, };