@surface/custom-element
Version:
Provides support of directives and data binding on custom elements.
119 lines (102 loc) • 2.57 kB
TypeScript
/* eslint-disable import/exports-last */
import type { IExpression, IPattern } from "@surface/expression";
import type ObservablePath from "./observable-path";
export type AttributeDescritor =
{
key: string,
value: string,
};
export type BindDescritor =
{
key: string,
observables: ObservablePath[],
type: "oneway" | "twoway" | "interpolation",
value: IExpression,
};
export type BranchDescriptor =
{
expression: Expression,
fragment: FragmentDescriptor,
observables: ObservablePath[],
};
export type CommentDescriptor =
{
type: "comment",
value: string,
};
export type ChoiceStatementDescriptor =
{
branches: BranchDescriptor[],
type: "choice-statement",
};
export type ElementDescriptor =
{
attributes: AttributeDescritor[],
binds: BindDescritor[],
childs: Descriptor[],
directives: DirectiveDescritor[],
events: EventDescritor[],
tag: string,
type: "element",
};
export type EventDescritor =
{
key: string,
value: IExpression,
};
export type EventDescritor =
{
key: string,
value: IExpression,
};
export type FragmentDescriptor =
{
childs: Descriptor[],
type: "fragment",
};
export type KeyValueObservable =
{
key: ObservablePath[],
value: ObservablePath[],
};
export type InjectionStatementDescriptor =
{
fragment: FragmentDescriptor,
key: IExpression,
observables: KeyValueObservable,
type: "injection-statement",
value: IPattern,
};
export type LoopStatementDescriptor =
{
fragment: FragmentDescriptor,
left: IPattern,
observables: ObservablePath[],
operator: "in" | "of",
right: IExpression,
type: "loop-statement",
};
export type PlaceholderStatementDescriptor =
{
fragment: FragmentDescriptor,
key: IExpression,
observables: KeyValueObservable,
type: "placeholder-statement",
value: IExpression,
};
export type TextDescriptor =
{
observables: ObservablePath[],
type: "text",
value: IExpression,
};
type Descriptor =
| ChoiceStatementDescriptor
| CommentDescriptor
| ElementDescriptor
| FragmentDescriptor
| InjectionStatementDescriptor
| LoopStatementDescriptor
| PlaceholderStatementDescriptor
| TextDescriptor;
export default Descriptor;