🚨 Shai-Hulud Strikes Again:834 Packages Compromised.Technical Analysis →
Socket
Book a DemoInstallSign in
Socket

@vtfk/sjablong

Package Overview
Dependencies
Maintainers
0
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@vtfk/sjablong

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

latest
Source
npmnpm
Version
1.0.2
Version published
Maintainers
0
Created
Source

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

KeyDescriptionRequiredExample
labelName/title of the fieldNoFirstname
pathThe path in the data object it should be replaced withYesname.firstname
descriptionDescription of the fieldNoFirstname of the recipient
requiredShould the field be required?Notrue
defaultThe default value of the fieldNoBob
previewIf replacePlacehold's preview option is trueNoBob

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);

FAQs

Package last updated on 16 Jan 2025

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