npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@vtfk/sjablong

v1.0.1

Published

A system for replacing and/or validating replacement-fields in text

Downloads

2

Readme

Sjablong

Templating engine with the combined powers of handlebars, front-matter, JSON Schema and Sjablong-fields

What can Sjablong do?

  • Replace placeholders in text (Sjablong-fields, mustache or handlebars-expressions)
  • Generate JSON Schema from Sjablong-fields and validate data against it
  • Have default values for the template by front-matter or Sjablong-fields
  • Convert Markup to HTML

Sjablong-fields

A Sjablong-field starts with [[ and ends with ]]
Inbetween the tags you define keyvalue-pair in the format key="value"
The only required key in a Sjablong-field is path. This it path in the data it should be replaced with. The Sjablong-fields can be used to generate a JSONSchema to validate the data with.

Field examples

| Key | Description | Required | Example | | ------------- | ------------- | ------------- | ------------- | | label | Name/title of the field | No | Firstname | | path | The path in the data object it should be replaced with | Yes | name.firstname | | description | Description of the field | No | Firstname of the recipient | | required | Should the field be required? | No | true | | default | The default value of the field | No | Bob | | preview | If replacePlacehold's preview option is true | No | Bob |

Examples

Sjablong-felt on a single line

[[label="fornavn":path="name.firstname"]]

Sjablong-felt with multiline default value

[[label="test":path="test":default="Line1\nLine2\nLine3"]]

Sjablong-felt on multiple lines (It is not necessary to indent the pairs)

[[
  label="Firstname"
  path="name.firstname"
]]

Sjablong-felt on multiple lines with more fields

[[
  label="fornavn"
  path="name.firstname"
  descriptione="First name of the recipient"
  required="true"
  default="Bob"
  preview="Bob"
]]

Functions

replacePlaceholder

const template = `[[path=firstName:preview="Preview user":default="Wilson"]]`

/*
  Example: Replaces the placeholder with firstName data
  Returns: Bob
*/
const data = { firstName: 'Bob'}
const replaced = replacePlaceholders(templateText, data);

/*
  Example: Replaces the placeholder with default data
  Returns: Wilson
*/
const data = {}
const replaced = replacePlaceholders(templateText, data);

/*
  Example: Replaces the placeholder with preview data
  Returns: Preview user
*/
const template = `[[path=firstName:preview="Preview user"]]`
const data = {}
const replaced = replacePlaceholders(templateText, data, { preview: true });

/*
  Example: Replaces sjablong and mustache-field
  Returns: Bob Bobson
*/
const template = `[[path=firstName]] {{lastName}}`
const data = { firstName: 'Bob', lastName: 'Bobson' }
const replaced = replacePlaceholders(templateText, data);

generateSchema

Retreives all Sjablong-fields from a template and generates a JSON schema from it. The schema can then be used to validate data before replacing placeholders.

/*
  Example: Generates a json schema from a template
  Returns:
  {
    "properties": {
      "firstName": {
        "type": "string",
        "preview": "Preview user"
      }
    }
  }
*/
const template = `[[path=firstName:preview="Preview user"]]`
const schema = Sjablong.generateSchema(template);

/*
  Example: Generates a json schema from a template making all fields required
  Returns:
  {
    "properties": {
      "firstName": {
        "type": "string",
        "required": true
      },
      {
        "age": {
          "type: "number",
          "required": true
        }
      }
    }
  }
*/
const template = `[[path=firstName]][[path=age:type=number]]`
const schema = Sjablong.generateSchema(template, { requireAll: true, });
/*
  Example: Generates a json schema where subproperties of required field are also required
  Returns:
  {
    "properties": {
      "firstName": {
        "type": "string",
        "required": true
      },
      {
        "address": {
          "properties": {
            "city: {
              "type": "string",
              "required": true
            }
          }
        }
      }
    }
  }
*/
const template = `[[path=firstName]][[path=address.city:type=string]]`
const schema = Sjablong.generateSchema(template, { requireAll: true, });
/*
  Example: Flattens a JSON schema, nice feature to auto generate inputs for a schema
  Returns:
  [
    {
      "path": "firstName",
      "type": "string"
    },
    {
      "name": "city"
      "path": "address.city",
      "type:" "string"
    }
  ]
*/
const template = `[[path=firstName]][[path=address.city:type=string]]`
const schema = Sjablong.generateSchema(template);
const flatten = Sjablong.flattenSchema(schema);
/*
  Example: Validates data against a schema
  Result: This will fail because address.city does not exist in the data
*/
const data = { firstName: 'Brede Skuldre' }
const template = `[[path=firstName]][[path=address.city:type=string:required=true]]`
const schema = Sjablong.generateSchema(template);
Sjablong.validateData(schema, data);
/*
  Example: Validates data against a schema
  Result: This will fail because address.city is not of the correct data type
*/
const data = { firstName: 'Brede Skuldre', address: { city: 5 } }
const template = `[[path=firstName]][[path=address.city:type=string]]`
const schema = Sjablong.generateSchema(template);
Sjablong.validateData(schema, data);