Skip to content

Commit

Permalink
refactor(parse/insertExpressions): convert to ts
Browse files Browse the repository at this point in the history
  • Loading branch information
marcalexiei committed May 29, 2020
1 parent 2285135 commit 3f9ab28
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 6 deletions.
20 changes: 18 additions & 2 deletions src/parse/templateElements.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,14 @@ import TemplateElementType from 'config/types';
/**
* This file contains all definition of abstract syntax for ractive template returned
* by converters functions.
*
* @todo change name to abstract something?
*
* @see https://github.com/ractivejs/template-spec
*
* @todo consider to add an enum to store key value
*
* t -> type
* x -> expresion
*/

export interface SimpleTemplateElement {
Expand All @@ -31,8 +37,18 @@ export interface BrackedTemplateElement {
x: ReferenceTemplateElement;
}

export interface ExpressionTempleteElement {
// function name or param dinamic names
r: string[];

// body of the function function name and reference param
// are replaced by _{index}
s: string;
}

export type TemplateDefinition =
| SimpleTemplateElement
| ValueTemplateElement
| ReferenceTemplateElement
| BrackedTemplateElement;
| BrackedTemplateElement
| ExpressionTempleteElement;
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
import { fromExpression } from './createFunction';
import { isArray, isObject } from 'utils/is';
import { keys } from 'utils/object';
import { ExpressionTempleteElement, TemplateDefinition } from 'parse/templateElements';

export default function insertExpressions(obj, expr) {
type ExpressionRegistry = {
[key: string]: Function;
};

export default function insertExpressions(obj: TemplateDefinition, expr: ExpressionRegistry): void {
keys(obj).forEach(key => {
if (isExpression(key, obj)) return addTo(obj, expr);

Expand All @@ -11,15 +16,15 @@ export default function insertExpressions(obj, expr) {
});
}

function isExpression(key, obj) {
function isExpression(key: string, obj: any): obj is ExpressionTempleteElement {
return key === 's' && isArray(obj.r);
}

function addTo(obj, expr) {
function addTo(obj: ExpressionTempleteElement, expr: ExpressionRegistry): void {
const { s, r } = obj;
if (!expr[s]) expr[s] = fromExpression(s, r.length);
}

function hasChildren(ref) {
function hasChildren(ref: unknown): boolean {
return isArray(ref) || isObject(ref);
}

0 comments on commit 3f9ab28

Please sign in to comment.