rtmpl

Reactive tagged template literals.

  • rtmpl

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
rtmpl
231.3.0a year agoa year agoMinified + gzip package size for rtmpl in KB

Readme

rtmpl
!ci-badgeci-link !version-badgeversion-link !license-badgelicense-link
Reactive tagged template literals.

Installation

npm install rtmpl --save

Usage

The concept of this library arose from the requirement to dynamically generate the text output of CLI applications. However, this may not be the only reasonable usage scenario. Therefore, this library contains only the conceptual core in the form of the so-called template nodes. These nodes can be nested within each other in a tree structure and are observable.
To learn how to generate the text output of CLI applications using this library, please refer to the README of project @rtmpl/terminal.

Types

TemplateNode

class TemplateNode<TValue> {
  static create<TValue>(
    template: TemplateStringsArray,
    ...children: (TemplateNode<TValue> | TValue)[]
  ): TemplateNode<TValue>;

  subscribe(observer: TemplateNodeObserver<TValue>): () => void;

  update(
    template: TemplateStringsArray,
    ...children: (TemplateNode<TValue> | TValue)[]
  ): this;

  on(event: 'observe' | 'unobserve', listener: () => void): () => void;
}

type TemplateNodeObserver<TValue> = (
  template: TemplateStringsArray,
  ...values: TValue[]
) => void;

TemplateNodeList

class TemplateNodeList<TValue> {
  static join<TValue>(
    itemNodes: readonly (TemplateNode<TValue> | TValue)[],
    options?: TemplateNodeListOptions<TValue>
  ): [
    template: TemplateStringsArray,
    ...children: (TemplateNode<TValue> | TValue)[]
  ];

  readonly node: TemplateNode<TValue>;

  constructor(options?: TemplateNodeListOptions<TValue>);

  add(
    template: TemplateStringsArray,
    ...children: (TemplateNode<TValue> | TValue)[]
  ): TemplateNode<TValue>;

  delete(itemNode: TemplateNode<TValue>): void;
}

interface TemplateNodeListOptions<TValue> {
  readonly separator?: TemplateNode<TValue> | NonNullable<TValue>;
}

Copyright 2021 Clemens Akens. All rights reserved. MIT license.