New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@brecert/ytl

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@brecert/ytl

A small tagged template dsl inspired by KDL and htm that transforms through hyperscript functions

  • 0.1.3
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
1
Maintainers
1
Weekly downloads
 
Created
Source

ytl

ytl is a small htm like dsl for writing markup in javascript.

It uses javascript's tagged templates to to allow for interpolation of values.

Syntax

The syntax is fairly simple, and is meant to be easier to type than htm.

// this is a comment
// nodes
div {}

// you can have multiple root nodes
// attributes can be interpolated into for both the key and value
// attributes with no values are possible
div key="value" ${key}=${value} draggable {}

// strings can be used as a value for keys as well
div "this is a key"="foo" {}

// nodes can contain children
// strings can be used as a value
label {
  img {}
  "hello world"
  input {}
}

// attributes can be spread
div ...${props} {}

// children can be spread as well
div {
  ...${children}
}

// components are possible
// where `Button` is a component reference
${Button} type="submit" {}

Features

  • no transpiler or build step necessary
  • < 450 bytes (brotli compressed)

Usage

Since ytl is a generic library, we need to tell it what to "compile" our templates to. You can bind ytl to any function of the form h(type, props, ...children) (hyperscript). This function can return anything - ytl never looks at the return value.

Here's an example h() function that returns tree nodes:

function h(type, props, ...children) {
  return { type, props, children };
}

To use our custom h() function, we need to create our own ytml tag function by binding ytl to our h() function:

import ytl from '@brecert/ytl';
const ytml = ytl.bind(h);

Now we have an ytml() template tag that can be used to produce objects in the format we created above.

Here's the whole thing for clarity:

import ytl from '@brecert/ytl';
function h(type, props, ...children) {
  return { type, props, children };
}
const ytml = ytl.bind(h);
console.log( ytml`h1 id=hello { "Hello world!" }` );
// [{
//   type: 'h1',
//   props: { id: 'hello' },
//   children: ['Hello world!']
// }]

Credits

Many thanks to htm. This project is heavily based on it, including this readme.

Keywords

FAQs

Package last updated on 27 Jan 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc