Skip to content

Framework for complex JSON configuration structures

Notifications You must be signed in to change notification settings

invrs/structured-json

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

97 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Structured JSON

Operators that make complex JSON structures easy to read and write.

Action Operator Key/Value
Assign Value <= Value
Assign Defaults <<, >> Key
Merge <<, >> Value
Mixin $ Key
Conditional Defaults <<?, >>? Key

Install

npm install structured-json

Import

import { build, update } from "structured-json"

Assign

let { stores, products } = build({
  stores: {
    grocery: {
      products: "<= products",
    },
  },
  products: {
    milk: {
      store: "<= stores.grocery",
    },
  },
})

stores.grocery.products // { milk }
products.milk.store // { products }

Assignment supports circular references, but it is up to you to be careful about infinite enumeration.

Merge

let { products } = build({
  organicProducts: {
    eggs: {},
    milk: {},
  },
  veganProducts: {
    kale: {},
    tofu: {},
  },
  products: "<= organicProducts << veganProducts",
})

products
// { eggs: {},
//   milk: {},
//   kale: {},
//   tofu: {} }

Defaults

When used in a key, the merge operator defines a default object for its siblings (>>) or its parent (<<):

let { organicProducts, veganProducts } = build({
  organicProducts: {
    ">>": { organic: true },
    eggs: {},
    milk: {},
  },
  veganProducts: {
    ">>": { vegan: true },
    kale: {},
    tofu: {},
  },
})

organicProducts
// { eggs: { organic },
//   milk: { organic } }

veganProducts
// { kale: { vegan },
//   tofu: { vegan } }

Define defaults for sibling child objects with successive merge operators (">> >>":).

Mixin

A mixin is a variable meant only for referencing, and does not show up in enumeration.

let { products } = build({
  products: {
    $green: {
      color: "green",
    },
    $white: {
      color: "white",
    },
    milk: { "<<": "<= $white" },
    kale: { "<<": "<= $green" },
    tofu: { "<<": "<= $white" },
  },
})

products
// { milk: { color: "white" },
//   kale: { color: "green" },
//   tofu: { color: "white" } }

Conditionals

let { products } = build({
  winter: true,
  products: {
    ">>? winter": {
      local: false,
    },
    ">>": {
      local: true,
    },
    kale: {},
  },
})

products // { kale: { local: false } }

About

Framework for complex JSON configuration structures

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published