Curvea

Advanced

Resolver Internals

The resolver is responsible for turning parsed templates into resolved HTML fragments.

Main file:

src/resolver/resolveComponents.js

Related files:

src/resolver/applyVariables.js
src/resolver/applyLoops.js
src/resolver/applyConditionals.js

Main page resolver

resolvePage(pageAst)

This function:

  1. creates an asset collection
  2. creates the page scope
  3. resolves the page template
  4. renders the layout if @use is present
  5. transforms built-ins
  6. returns resolved HTML, styles, scripts, and used built-ins

Scope creation

Page scope includes:

  • global template scope
  • page-local data
  • page
  • site
  • loaded data from @load
  • collection convenience value when available

Resolution order

Template resolution happens in this order:

  1. raw code directives
  2. loops
  3. conditionals
  4. components
  5. variables

Components

Component resolution requires explicit imports.

The resolver builds an import map from:

@import Hero
@import sections/*

Then it scans for uppercase-starting component tags.

Layouts

Layouts are loaded from:

src/layouts/<Name>.csc

The declared layout name must match the expected name.

Built-ins

Built-in tags such as Icon are skipped during component import validation when enabled, then transformed later.

Data loading

resolveLoadDirectives() loads JSON data from src/data.

It supports:

  • single JSON files
  • JSON folders as arrays
  • wildcard folder maps