0.3.0 • Published 7 years ago

freemarker-to-json2.js v0.3.0

Weekly downloads
-
License
MIT
Repository
github
Last release
7 years ago

freemarker-to-json2.js

This module take a yaml file or a json file and convert it to a freemarker file that output the data as valid json format.

Example:

Convert this

name: paul
id: 1
favorite: 
  - type: food
    value: ramen
  - type: drink
    value: milk-tea

or

{
  "name": "paul",
  "id": 1,
  "favorite": [{
    "type": "food",
    "value": "ramen"
  }, {
    "type": "drink",
    "value": "milk-tea"
  }]
}

to

{
  "name": ${get(name)},
  
  "id": ${get(id)},
  
  "favorite": 
  <@arrayFrame favorite; item>{
    "type": ${get(item, 'type')},

    "value": ${get(item, 'value')}
  }</@arrayFrame>
}

which the get, arrayFrame is just a convenient way to transform ftl data to valid json.

<#-- A simple helper to convert ftl data to valid json value -->
<#function value input="">
  <#if input?is_number>
    <#return input?c>

  <#elseif input?is_boolean>
    <#return input?string>

  <#elseif input?is_string>
    <#return '"' + input?js_string + '"'>

  <#elseif input?is_date>
    <#return '"' + input?string["yyyy/MM/dd HH:mm:ss"] + '"'>

  </#if>
</#function>

<#-- A lodash.get alike helper -->
<#function get object="" path="" default='""'>
    <#if object?is_hash && path != "">
        <#local childs = path?split(".")>
        <#list childs as child>
            <#if object[child]??>
                <#local object = object[child]>
            <#else>
                <#return default>
            </#if>
        </#list>
    </#if>

    <#return value(object)>
</#function>

<#-- A simple helper to wrap freemarker `#list` with json array -->
<#macro arrayFrame items=[]>
    <#compress>
    [
        <#list items as item>
            <#nested item><#if item_has_next>,</#if>
        </#list>
    ]
  </#compress>
</#macro>

Usage

const transform = require('freemarker-to-json2')

transform('input.yaml', 'output.ftl')
  .then(result => console.log(result)) // same as output.ftl

Test

npm test