@lediv/html
v0.1.0
Published
HTML parser, serializer, and template evaluator for Lediv
Maintainers
Readme
@lediv/html
HTML parser, serializer, and template evaluator for Lediv. Parses component-aware HTML, resolves component trees, evaluates template expressions, and serializes back to HTML strings.
Install
npm install @lediv/htmlParse and serialize
import { parseRaw, serializeNode, escapeText, escapeAttr } from '@lediv/html';
const nodes = parseRaw('<p class="intro">Hello</p>');
const html = nodes.map(serializeNode).join('');parseRaw returns an array of AnyNode (from domhandler). serializeNode converts a single node back to an HTML string. escapeText and escapeAttr are available for safe string embedding.
Build a page from source
import { buildPageFromSource, buildPageFromSourceDetailed } from '@lediv/html';
const html = buildPageFromSource(pageSource, {
readComponent(name) {
return fs.readFileSync(`components/${name}.html`, 'utf-8');
},
});
const result = buildPageFromSourceDetailed(pageSource, {
readComponent(name) { ... },
context: { page: '/' },
});buildPageFromSource returns the final HTML string. buildPageFromSourceDetailed returns { html, mountScripts } where mountScripts is an array of MountRuntimeScript objects describing inline mount code for each component.
Template logic
import { extractLogic, evaluateLogic, buildScope, resolveAttributes } from '@lediv/html';
const logic = extractLogic(node);
const scope = buildScope(variables, data);
const attrs = resolveAttributes(element, scope);
evaluateLogic(logic, scope);Expressions
import { splitTextExpressions } from '@lediv/html';
const parts = splitTextExpressions('Hello {{ name }}!');Splits a text string into literal and expression parts for template rendering.
Mount scripts
import { analyzeMountScript, buildMountRuntimeScript, getMountScopeKeys } from '@lediv/html';
const analysis = analyzeMountScript(scriptSource);
const runtime = buildMountRuntimeScript(analysis, scope);
const keys = getMountScopeKeys(analysis);Re-exported types and utilities
import { ElementType } from '@lediv/html';
import { Element, isDocument, isText } from '@lediv/html';
import type { AnyNode } from '@lediv/html';
import type { HtmlLogic, TextPart, ComponentReader, MountRuntimeScript } from '@lediv/html';
import { BuildPageError } from '@lediv/html';
import type { BuildPageFromSourceResult, BuildPageErrorCode } from '@lediv/html';
import type { ComponentVariable, Scope } from '@lediv/html';License
MIT
