json-transmute
Version:
Transmute javscript object data into common denominator formats defined via JSON
2,967 lines (2,953 loc) • 45.9 kB
Plain Text
> json-transmute@0.1.10 test /var/www/public/json-transmute
> mocha
Scope Modifiers
@path Reserved Key
[
{
"val": "Product.shipping.options",
"pattern": "Product.shipping.options",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "@path",
"pattern": "@path",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.shipping.options",
"pattern": "Product.shipping.options",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "cheapestShippingCost",
"pattern": "cheapestShippingCost",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "economy.cost",
"pattern": "economy.cost",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "expeditedShippingOptions",
"pattern": "expeditedShippingOptions",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "nextDay",
"pattern": "'nextDay'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "nextDay",
"pattern": "nextDay",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
✓ should update scope for sibling elements
[
{
"val": "Product.shipping.options",
"pattern": "Product.shipping.options",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "@path",
"pattern": "@path",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.shipping.options",
"pattern": "Product.shipping.options",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "cheapestShippingCost",
"pattern": "cheapestShippingCost",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "economy.cost",
"pattern": "economy.cost",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "expeditedShippingOptions",
"pattern": "expeditedShippingOptions",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "nextDay",
"pattern": "'nextDay'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "nextDay",
"pattern": "nextDay",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
✓ should update scope for child elements
@root Reserved Key
[
{
"val": "Product.shipping.options",
"pattern": "Product.shipping.options",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "@root",
"pattern": "@root",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.shipping.options",
"pattern": "Product.shipping.options",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "cheapestShippingCost",
"pattern": "cheapestShippingCost",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "economy.cost",
"pattern": "^economy.cost",
"opts": [],
"filters": [],
"type": "lookup",
"root": true
}
]
[
{
"val": "expeditedShippingCosts",
"pattern": "expeditedShippingCosts",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "nextDay",
"pattern": "'nextDay'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "nextDay.cost",
"pattern": "^nextDay.cost",
"opts": [],
"filters": [],
"type": "lookup",
"root": true
}
]
✓ should update root scope for sibling elements
[
{
"val": "Product.shipping.options",
"pattern": "Product.shipping.options",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "@root",
"pattern": "@root",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.shipping.options",
"pattern": "Product.shipping.options",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "cheapestShippingCost",
"pattern": "cheapestShippingCost",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "economy.cost",
"pattern": "^economy.cost",
"opts": [],
"filters": [],
"type": "lookup",
"root": true
}
]
[
{
"val": "expeditedShippingCosts",
"pattern": "expeditedShippingCosts",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "nextDay",
"pattern": "'nextDay'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "nextDay.cost",
"pattern": "^nextDay.cost",
"opts": [],
"filters": [],
"type": "lookup",
"root": true
}
]
✓ should update root scope for child elements
[] Bracket Reserved Key Pattern
[
{
"val": "variantColors",
"pattern": "variantColors[Product.variants]",
"opts": [
"Product.variants"
],
"filters": [],
"type": "array",
"root": false
}
]
[
{
"val": "Product.variants",
"pattern": "Product.variants",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "color",
"pattern": "'color'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "color",
"pattern": "color",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "color",
"pattern": "'color'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "color",
"pattern": "color",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "color",
"pattern": "'color'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "color",
"pattern": "color",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
✓ should update child scope
[
{
"val": "variantColors",
"pattern": "variantColors[Product.variants]",
"opts": [
"Product.variants"
],
"filters": [],
"type": "array",
"root": false
}
]
[
{
"val": "Product.variants",
"pattern": "Product.variants",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "color",
"pattern": "'color'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "color",
"pattern": "color",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "color",
"pattern": "'color'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "color",
"pattern": "color",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "color",
"pattern": "'color'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "color",
"pattern": "color",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
✓ should define result value as array
{} Braces Reserved Key Pattern
[
{
"val": " variant ",
"pattern": "{{' variant ' | trim | trim}}",
"opts": [],
"filters": [
{
"val": "trim",
"opts": [],
"type": "filter"
},
{
"val": "trim",
"opts": [],
"type": "filter"
}
],
"type": "static",
"root": false
}
]
[
{
"val": "color",
"pattern": "'color'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "color",
"pattern": "color",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
{}
1) should update child scope
[
{
"val": " variant ",
"pattern": "{{' variant ' | trim | trim}}",
"opts": [],
"filters": [
{
"val": "trim",
"opts": [],
"type": "filter"
},
{
"val": "trim",
"opts": [],
"type": "filter"
}
],
"type": "static",
"root": false
}
]
[
{
"val": "color",
"pattern": "'color'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "color",
"pattern": "color",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
2) should define result value as object
Filters
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "25",
"pattern": "'25' | add('1')",
"opts": [],
"filters": [
{
"val": "add",
"opts": [
"'1'"
],
"type": "filter"
}
],
"type": "static",
"root": false
}
]
[
{
"val": "1",
"pattern": "'1'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
✓ should add one or more values to a piped value
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "10",
"pattern": "'10' | and('true', 'yes')",
"opts": [],
"filters": [
{
"val": "and",
"opts": [
"'true'",
"'yes'"
],
"type": "filter"
}
],
"type": "static",
"root": false
}
]
[
{
"val": "true",
"pattern": "'true'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "yes",
"pattern": "'yes'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
✓ should return the boolean AND result of a piped value and one or more additional parameter values
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "true",
"pattern": "'true' | bool",
"opts": [],
"filters": [
{
"val": "bool",
"opts": [],
"type": "filter"
}
],
"type": "static",
"root": false
}
]
✓ should boolean format a piped value
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "acme",
"pattern": "'acme' | concat(' ','super',' ','soaker')",
"opts": [],
"filters": [
{
"val": "concat",
"opts": [
"' '",
"'super'",
"' '",
"'soaker'"
],
"type": "filter"
}
],
"type": "static",
"root": false
}
]
[
{
"val": " ",
"pattern": "' '",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "super",
"pattern": "'super'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": " ",
"pattern": "' '",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "soaker",
"pattern": "'soaker'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
✓ should return a string catenation of a piped value combined with one or more additional parameter values
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "acme super soaker",
"pattern": "'acme super soaker' | count",
"opts": [],
"filters": [
{
"val": "count",
"opts": [],
"type": "filter"
}
],
"type": "static",
"root": false
}
]
✓ should count the number of keys, values, or characters in a piped object, array, or string
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "04/11/2017",
"pattern": "'04/11/2017' | date",
"opts": [],
"filters": [
{
"val": "date",
"opts": [],
"type": "filter"
}
],
"type": "static",
"root": false
}
]
✓ should date format a piped value where x1 is one of: "unix", "javascript", "json"
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "1",
"pattern": "'1' | decrement",
"opts": [],
"filters": [
{
"val": "decrement",
"opts": [],
"type": "filter"
}
],
"type": "static",
"root": false
}
]
✓ should reduce piped value by 1
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "false",
"pattern": "'false' | default('ok')",
"opts": [],
"filters": [
{
"val": "default",
"opts": [
"'ok'"
],
"type": "filter"
}
],
"type": "static",
"root": false
}
]
[
{
"val": "ok",
"pattern": "'ok'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
✓ should return x1 if the piped value is falsey
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "10",
"pattern": "'10' | divide('2', '5')",
"opts": [],
"filters": [
{
"val": "divide",
"opts": [
"'2'",
"'5'"
],
"type": "filter"
}
],
"type": "static",
"root": false
}
]
[
{
"val": "2",
"pattern": "'2'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "5",
"pattern": "'5'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
✓ should divide a piped value by one or more additional parameter values
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "1",
"pattern": "'1' | eq('1')",
"opts": [],
"filters": [
{
"val": "eq",
"opts": [
"'1'"
],
"type": "filter"
}
],
"type": "static",
"root": false
}
]
[
{
"val": "1",
"pattern": "'1'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
✓ should return true if piped value == x1
[
{
"val": "filter1",
"pattern": "filter1",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.variants",
"pattern": "Product.variants | filter('stock', '>', '0')",
"opts": [],
"filters": [
{
"val": "filter",
"opts": [
"'stock'",
"'>'",
"'0'"
],
"type": "filter"
}
],
"type": "lookup",
"root": false
}
]
[
{
"val": "stock",
"pattern": "'stock'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": ">",
"pattern": "'>'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "0",
"pattern": "'0'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "filter2",
"pattern": "filter2",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.variants",
"pattern": "Product.variants | filter('stock', '>=', '0')",
"opts": [],
"filters": [
{
"val": "filter",
"opts": [
"'stock'",
"'>='",
"'0'"
],
"type": "filter"
}
],
"type": "lookup",
"root": false
}
]
[
{
"val": "stock",
"pattern": "'stock'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": ">=",
"pattern": "'>='",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "0",
"pattern": "'0'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "filter3",
"pattern": "filter3",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.variants",
"pattern": "Product.variants | filter('stock', '=', '0')",
"opts": [],
"filters": [
{
"val": "filter",
"opts": [
"'stock'",
"'='",
"'0'"
],
"type": "filter"
}
],
"type": "lookup",
"root": false
}
]
[
{
"val": "stock",
"pattern": "'stock'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "=",
"pattern": "'='",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "0",
"pattern": "'0'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "filter4",
"pattern": "filter4",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.variants",
"pattern": "Product.variants | filter('stock', '<', '3')",
"opts": [],
"filters": [
{
"val": "filter",
"opts": [
"'stock'",
"'<'",
"'3'"
],
"type": "filter"
}
],
"type": "lookup",
"root": false
}
]
[
{
"val": "stock",
"pattern": "'stock'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "<",
"pattern": "'<'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "3",
"pattern": "'3'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "filter6",
"pattern": "filter6",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.variants",
"pattern": "Product.variants | filter('stock', '<=', '3')",
"opts": [],
"filters": [
{
"val": "filter",
"opts": [
"'stock'",
"'<='",
"'3'"
],
"type": "filter"
}
],
"type": "lookup",
"root": false
}
]
[
{
"val": "stock",
"pattern": "'stock'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "<=",
"pattern": "'<='",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "3",
"pattern": "'3'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
✓ should filter a piped array of objects to include only those elements having a key x1 value that is tested as x2 (">", ">=", "=", "<=", "!=") relative to x3
#float()
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "1",
"pattern": "'1' | float",
"opts": [],
"filters": [
{
"val": "float",
"opts": [],
"type": "filter"
}
],
"type": "static",
"root": false
}
]
✓ should float format a piped value with precision x1 (or 2 if x1 is not specified)
#get()
[
{
"val": "filter1",
"pattern": "filter1",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.variants",
"pattern": "Product.variants | get('2')",
"opts": [],
"filters": [
{
"val": "get",
"opts": [
"'2'"
],
"type": "filter"
}
],
"type": "lookup",
"root": false
}
]
[
{
"val": "2",
"pattern": "'2'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "filter2",
"pattern": "filter2",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.title",
"pattern": "Product.title | get('2')",
"opts": [],
"filters": [
{
"val": "get",
"opts": [
"'2'"
],
"type": "filter"
}
],
"type": "lookup",
"root": false
}
]
[
{
"val": "2",
"pattern": "'2'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "filter3",
"pattern": "filter3",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product",
"pattern": "Product | get('tags')",
"opts": [],
"filters": [
{
"val": "get",
"opts": [
"'tags'"
],
"type": "filter"
}
],
"type": "lookup",
"root": false
}
]
[
{
"val": "tags",
"pattern": "'tags'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
✓ should return element x1 from a piped array, object, or string
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "1",
"pattern": "'1' | gt('0')",
"opts": [],
"filters": [
{
"val": "gt",
"opts": [
"'0'"
],
"type": "filter"
}
],
"type": "static",
"root": false
}
]
[
{
"val": "0",
"pattern": "'0'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
✓ should return true if piped value is greater than value x1
[
{
"val": "filter1",
"pattern": "filter1",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.shipping.options",
"pattern": "Product.shipping.options | hash",
"opts": [],
"filters": [
{
"val": "hash",
"opts": [],
"type": "filter"
}
],
"type": "lookup",
"root": false
}
]
[
{
"val": "filter2",
"pattern": "filter2",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.shipping.options",
"pattern": "Product.shipping.options | hash",
"opts": [],
"filters": [
{
"val": "hash",
"opts": [],
"type": "filter"
}
],
"type": "lookup",
"root": false
}
]
✓ should return an consistent md5 hash string
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "yes",
"pattern": "'yes' | if('win', 'lose')",
"opts": [],
"filters": [
{
"val": "if",
"opts": [
"'win'",
"'lose'"
],
"type": "filter"
}
],
"type": "static",
"root": false
}
]
[
{
"val": "win",
"pattern": "'win'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "lose",
"pattern": "'lose'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
✓ should return x1 if piped value is true, otherwise returns x2
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "0",
"pattern": "'0' | increment",
"opts": [],
"filters": [
{
"val": "increment",
"opts": [],
"type": "filter"
}
],
"type": "static",
"root": false
}
]
✓ should increment piped value by 1
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "010",
"pattern": "'010' | int",
"opts": [],
"filters": [
{
"val": "int",
"opts": [],
"type": "filter"
}
],
"type": "static",
"root": false
}
]
✓ should integer format a piped value
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.variants",
"pattern": "Product.variants | pluck('color') | join",
"opts": [],
"filters": [
{
"val": "pluck",
"opts": [
"'color'"
],
"type": "filter"
},
{
"val": "join",
"opts": [],
"type": "filter"
}
],
"type": "lookup",
"root": false
}
]
[
{
"val": "color",
"pattern": "'color'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
✓ should join array elements from a piped value together into a string delimited by x1 (or `,` if x1 is not specified)
#lt()
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "1",
"pattern": "'1' | lt('2')",
"opts": [],
"filters": [
{
"val": "lt",
"opts": [
"'2'"
],
"type": "filter"
}
],
"type": "static",
"root": false
}
]
[
{
"val": "2",
"pattern": "'2'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
✓ should return true if piped value is less than value x1
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "ACME",
"pattern": "'ACME' | lowercase",
"opts": [],
"filters": [
{
"val": "lowercase",
"opts": [],
"type": "filter"
}
],
"type": "static",
"root": false
}
]
✓ should return `.toLowerCase()` of the piped string
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "1",
"pattern": "'1' | multiply('2', '5')",
"opts": [],
"filters": [
{
"val": "multiply",
"opts": [
"'2'",
"'5'"
],
"type": "filter"
}
],
"type": "static",
"root": false
}
]
[
{
"val": "2",
"pattern": "'2'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "5",
"pattern": "'5'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
✓ should multiply a piped value with one or more additional parameter values
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "not",
"pattern": "not('true')",
"opts": [
"'true'"
],
"filters": [],
"type": "filter",
"root": false
}
]
[
{
"val": "true",
"pattern": "'true'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
✓ should return the boolean opposite of x1
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "true",
"pattern": "'true' | or('false') | bool",
"opts": [],
"filters": [
{
"val": "or",
"opts": [
"'false'"
],
"type": "filter"
},
{
"val": "bool",
"opts": [],
"type": "filter"
}
],
"type": "static",
"root": false
}
]
[
{
"val": "false",
"pattern": "'false'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
✓ should return the boolean OR result of a piped value and one or more additional parameter values
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.variants",
"pattern": "Product.variants | pluck('color')",
"opts": [],
"filters": [
{
"val": "pluck",
"opts": [
"'color'"
],
"type": "filter"
}
],
"type": "lookup",
"root": false
}
]
[
{
"val": "color",
"pattern": "'color'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
✓ should return an array of key values from a piped array of objects having x1 as a key
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.variants",
"pattern": "Product.variants | pop",
"opts": [],
"filters": [
{
"val": "pop",
"opts": [],
"type": "filter"
}
],
"type": "lookup",
"root": false
}
]
✓ should return the last element of an array
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.shipping.options",
"pattern": "Product.shipping.options | prune('nextDay', 'secondDay')",
"opts": [],
"filters": [
{
"val": "prune",
"opts": [
"'nextDay'",
"'secondDay'"
],
"type": "filter"
}
],
"type": "lookup",
"root": false
}
]
[
{
"val": "nextDay",
"pattern": "'nextDay'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "secondDay",
"pattern": "'secondDay'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
✓ should include only those key / value pairs specified as parameters
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "1",
"pattern": "'1' | array | push('2')",
"opts": [],
"filters": [
{
"val": "array",
"opts": [],
"type": "filter"
},
{
"val": "push",
"opts": [
"'2'"
],
"type": "filter"
}
],
"type": "static",
"root": false
}
]
[
{
"val": "2",
"pattern": "'2'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
✓ should add one or more additional elements to a piped array, and ensure piped value is in array format.
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "ACME super soakers are the worst",
"pattern": "'ACME super soakers are the worst' | replace('worst', 'best')",
"opts": [],
"filters": [
{
"val": "replace",
"opts": [
"'worst'",
"'best'"
],
"type": "filter"
}
],
"type": "static",
"root": false
}
]
[
{
"val": "worst",
"pattern": "'worst'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "best",
"pattern": "'best'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
✓ should return `.replace(x1, x2)` of the piped string
[
{
"val": "filter0",
"pattern": "filter0",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.variants",
"pattern": "Product.variants",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "filter1",
"pattern": "filter1",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.variants",
"pattern": "Product.variants | reduce('stock', 'largest')",
"opts": [],
"filters": [
{
"val": "reduce",
"opts": [
"'stock'",
"'largest'"
],
"type": "filter"
}
],
"type": "lookup",
"root": false
}
]
[
{
"val": "stock",
"pattern": "'stock'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "largest",
"pattern": "'largest'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "filter2",
"pattern": "filter2",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.variants",
"pattern": "Product.variants | pluck('color') | reduce('longest')",
"opts": [],
"filters": [
{
"val": "pluck",
"opts": [
"'color'"
],
"type": "filter"
},
{
"val": "reduce",
"opts": [
"'longest'"
],
"type": "filter"
}
],
"type": "lookup",
"root": false
}
]
[
{
"val": "color",
"pattern": "'color'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "longest",
"pattern": "'longest'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "filter3",
"pattern": "filter3",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.variants",
"pattern": "Product.variants | pluck('color') | reduce('shortest')",
"opts": [],
"filters": [
{
"val": "pluck",
"opts": [
"'color'"
],
"type": "filter"
},
{
"val": "reduce",
"opts": [
"'shortest'"
],
"type": "filter"
}
],
"type": "lookup",
"root": false
}
]
[
{
"val": "color",
"pattern": "'color'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "shortest",
"pattern": "'shortest'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "filter4",
"pattern": "filter4",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.variants",
"pattern": "Product.variants | reduce('stock', 'smallest')",
"opts": [],
"filters": [
{
"val": "reduce",
"opts": [
"'stock'",
"'smallest'"
],
"type": "filter"
}
],
"type": "lookup",
"root": false
}
]
[
{
"val": "stock",
"pattern": "'stock'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "smallest",
"pattern": "'smallest'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
✓ should reduce array of piped values to a single element where element key x1 has the "largest", "longest", "shortest", "smallest" (specified by x2) value. Elements must have a `.length` property for "longest" and "shortest" x2 values. Omit parameter x1 for non-object array elements (e.g. strings)
#set()
[
{
"val": "filter1",
"pattern": "filter1",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.variants",
"pattern": "Product.variants | set('2', '2') | get('2')",
"opts": [],
"filters": [
{
"val": "set",
"opts": [
"'2'",
"'2'"
],
"type": "filter"
},
{
"val": "get",
"opts": [
"'2'"
],
"type": "filter"
}
],
"type": "lookup",
"root": false
}
]
[
{
"val": "2",
"pattern": "'2'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "2",
"pattern": "'2'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "2",
"pattern": "'2'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "filter2",
"pattern": "filter2",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.title",
"pattern": "Product.title | set('2', '2') | get('2')",
"opts": [],
"filters": [
{
"val": "set",
"opts": [
"'2'",
"'2'"
],
"type": "filter"
},
{
"val": "get",
"opts": [
"'2'"
],
"type": "filter"
}
],
"type": "lookup",
"root": false
}
]
[
{
"val": "2",
"pattern": "'2'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "2",
"pattern": "'2'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "2",
"pattern": "'2'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "filter3",
"pattern": "filter3",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product",
"pattern": "Product | set('tags', '2') | get('tags')",
"opts": [],
"filters": [
{
"val": "set",
"opts": [
"'tags'",
"'2'"
],
"type": "filter"
},
{
"val": "get",
"opts": [
"'tags'"
],
"type": "filter"
}
],
"type": "lookup",
"root": false
}
]
[
{
"val": "tags",
"pattern": "'tags'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "2",
"pattern": "'2'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "tags",
"pattern": "'tags'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
✓ should return element x1 from a piped array, object, or string
[
{
"val": "filter1",
"pattern": "filter1",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.variants",
"pattern": "Product.variants | slice('2', '3')",
"opts": [],
"filters": [
{
"val": "slice",
"opts": [
"'2'",
"'3'"
],
"type": "filter"
}
],
"type": "lookup",
"root": false
}
]
[
{
"val": "2",
"pattern": "'2'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "3",
"pattern": "'3'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "filter2",
"pattern": "filter2",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.tags",
"pattern": "Product.tags | slice('0', '4')",
"opts": [],
"filters": [
{
"val": "slice",
"opts": [
"'0'",
"'4'"
],
"type": "filter"
}
],
"type": "lookup",
"root": false
}
]
[
{
"val": "0",
"pattern": "'0'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "4",
"pattern": "'4'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
✓ should return `.slice()` of the pipped array or string
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.tags",
"pattern": "Product.tags | split",
"opts": [],
"filters": [
{
"val": "split",
"opts": [],
"type": "filter"
}
],
"type": "lookup",
"root": false
}
]
✓ should return `.split()` of the pipped string
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "25",
"pattern": "'25' | subtract('1')",
"opts": [],
"filters": [
{
"val": "subtract",
"opts": [
"'1'"
],
"type": "filter"
}
],
"type": "static",
"root": false
}
]
[
{
"val": "1",
"pattern": "'1'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
✓ should subtract one or more values from a piped value
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": " hello ",
"pattern": "' hello ' | trim",
"opts": [],
"filters": [
{
"val": "trim",
"opts": [],
"type": "filter"
}
],
"type": "static",
"root": false
}
]
✓ should return `.trim()` of the piped string
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "acme",
"pattern": "'acme' | uppercase",
"opts": [],
"filters": [
{
"val": "uppercase",
"opts": [],
"type": "filter"
}
],
"type": "static",
"root": false
}
]
✓ should return `.toUpperCase()` of the piped string
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.shipping.options",
"pattern": "Product.shipping.options | values",
"opts": [],
"filters": [
{
"val": "values",
"opts": [],
"type": "filter"
}
],
"type": "lookup",
"root": false
}
]
✓ should format piped value as an array. Objects are converted to an array of key values
References
[
{
"val": "filter1",
"pattern": "filter1",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.shipping",
"pattern": "Product.shipping",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "filter2",
"pattern": "filter2",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "Product.shipping",
"pattern": "Product.shipping",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
✓ should ensure objects are passed by value, not by reference
[
{
"val": "filter",
"pattern": "filter",
"opts": [],
"filters": [],
"type": "lookup",
"root": false
}
]
[
{
"val": "does.not.exist",
"pattern": "does.not.exist | default('1') | int | add(also.does.not.exist | default('2') | int | divide(definitely.not.defined | default('2') | int))",
"opts": [],
"filters": [
{
"val": "default",
"opts": [
"'1'"
],
"type": "filter"
},
{
"val": "int",
"opts": [],
"type": "filter"
},
{
"val": "add",
"opts": [
"also.does.not.exist|default('2')|int|divide(definitely.not.defined | default('2') | int)"
],
"type": "filter"
}
],
"type": "lookup",
"root": false
}
]
[
{
"val": "1",
"pattern": "'1'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "also.does.not.exist",
"pattern": "also.does.not.exist|default('2')|int|divide(definitely.not.defined | default('2') | int)",
"opts": [],
"filters": [
{
"val": "default",
"opts": [
"'2'"
],
"type": "filter"
},
{
"val": "int",
"opts": [],
"type": "filter"
},
{
"val": "divide",
"opts": [
"definitely.not.defined|default('2')|int"
],
"type": "filter"
}
],
"type": "lookup",
"root": false
}
]
[
{
"val": "2",
"pattern": "'2'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
[
{
"val": "definitely.not.defined",
"pattern": "definitely.not.defined|default('2')|int",
"opts": [],
"filters": [
{
"val": "default",
"opts": [
"'2'"
],
"type": "filter"
},
{
"val": "int",
"opts": [],
"type": "filter"
}
],
"type": "lookup",
"root": false
}
]
[
{
"val": "2",
"pattern": "'2'",
"opts": [],
"filters": [],
"type": "static",
"root": false
}
]
✓ should handle undefined references gracefully
45 passing (433ms)
2 failing
1) Scope Modifiers {} Braces Reserved Key Pattern should update child scope:
TypeError: Cannot read property 'color' of undefined
at Context.<anonymous> (test/test.js:84:34)
2) Scope Modifiers {} Braces Reserved Key Pattern should define result value as object:
AssertionError: expected undefined to be an object
at Context.<anonymous> (test/test.js:88:42)