JSON Script Example Package
Complete demonstration of the JSON script specification v2.1.0
This package showcases every feature of the JSON script runtime, providing executable examples for all expressions, statements, and operators.
Overview
All functions in this package are defined in seed/script.json and executed via the runtime interpreter. No Lua code generation - pure JSON AST execution!
Package Structure
json_script_example/
├── README.md # This file
├── seed/
│ ├── metadata.json # Package configuration
│ ├── script.json # All functions defined in JSON
│ └── styles.json # Design tokens
└── static_content/
└── icon.svg # Package icon
Exported Functions
1. all_expressions
Demonstrates: All expression types
local executor = require("shared.seed.scripts.runtime.script_executor")
local result = executor.load_and_execute(
"packages/json_script_example/seed/script.json",
"all_expressions",
{10, 5} -- a=10, b=5
)
-- Returns:
-- {
-- sum = 15,
-- diff = 5,
-- product = 50,
-- max = 10,
-- bothPositive = true,
-- message = "Sum: 15, Product: 50, Max: 10"
-- }
Features Shown:
- ✅ Binary expressions (+, -, *, /, %, ==, !=, <, >, <=, >=)
- ✅ Logical expressions (&&, ||) with short-circuit evaluation
- ✅ Unary expressions (!, -, +)
- ✅ Conditional expressions (ternary operator)
- ✅ Template literals with interpolation
- ✅ Object literals
- ✅ Reference resolution ($ref:)
2. all_statements
Demonstrates: All statement types
local result = executor.load_and_execute(
"packages/json_script_example/seed/script.json",
"all_statements",
{{10, 20, 30, 40, 50}} -- items array
)
-- Returns:
-- {
-- count = 5,
-- sum = 150,
-- average = 30,
-- error = nil
-- }
Features Shown:
- ✅ Variable declarations (const, let)
- ✅ For-each loops (ipairs iteration)
- ✅ If/else statements
- ✅ Try/catch/finally blocks
- ✅ Assignments
- ✅ Return statements
- ✅ Comments
3. all_operators
Demonstrates: Complete operator reference
local result = executor.load_and_execute(
"packages/json_script_example/seed/script.json",
"all_operators",
{7, 3} -- x=7, y=3
)
-- Returns:
-- {
-- arithmetic = {
-- add = 10,
-- subtract = 4,
-- multiply = 21,
-- divide = 2.333...,
-- modulo = 1
-- },
-- comparison = {
-- equal = false,
-- notEqual = true,
-- lessThan = false,
-- greaterThan = true,
-- lessOrEqual = false,
-- greaterOrEqual = true
-- },
-- logical = {
-- and = 3,
-- or = 7,
-- not = false
-- },
-- unary = {
-- negate = -7,
-- plus = 7
-- }
-- }
Operators Shown:
- ✅ Arithmetic: +, -, *, /, %
- ✅ Comparison: ==, !=, <, >, <=, >=
- ✅ Logical: &&, ||, !
- ✅ Unary: -, +, !
4. control_flow
Demonstrates: Control flow patterns
local result = executor.load_and_execute(
"packages/json_script_example/seed/script.json",
"control_flow",
{15} -- value=15
)
-- Returns: "medium"
Classifications:
- value < 0 → "negative"
- value == 0 → "zero"
- value < 10 → "small"
- value < 100 → "medium"
- value >= 100 → "large"
Features Shown:
- ✅ Nested if/else (emulating switch/case)
- ✅ Early returns
- ✅ Guard clauses
5. data_structures
Demonstrates: Working with objects and arrays
local result = executor.load_and_execute(
"packages/json_script_example/seed/script.json",
"data_structures",
{} -- no parameters
)
-- Returns:
-- {
-- numbers = {1, 2, 3, 4, 5},
-- person = {
-- name = "John Doe",
-- age = 30,
-- email = "john@example.com",
-- active = true
-- },
-- config = {
-- server = {
-- host = "localhost",
-- port = 3000,
-- protocol = "http"
-- },
-- features = {"auth", "api", "dashboard"}
-- },
-- extractedName = "John Doe"
-- }
Features Shown:
- ✅ Array literals
- ✅ Object literals
- ✅ Nested structures
- ✅ Member access
- ✅ Reference resolution
Complete Feature Matrix
| Feature | Implemented | Tested | Example Function |
|---|---|---|---|
| Expressions | |||
| Binary (arithmetic) | ✅ | ✅ | all_expressions, all_operators |
| Binary (comparison) | ✅ | ✅ | all_expressions, all_operators |
| Logical (&&, ||) | ✅ | ✅ | all_expressions, all_operators |
| Logical (??) | ✅ | ⏳ | - |
| Unary (!, -, +) | ✅ | ✅ | all_expressions, all_operators |
| Conditional (ternary) | ✅ | ✅ | all_expressions |
| Template literal | ✅ | ✅ | all_expressions |
| Member access | ✅ | ✅ | data_structures |
| Computed property | ✅ | ⏳ | - |
| Call expression | ✅ | ⏳ | - |
| Object literal | ✅ | ✅ | all_expressions, data_structures |
| Array literal | ✅ | ✅ | data_structures |
| Statements | |||
| Const declaration | ✅ | ✅ | all_statements |
| Let declaration | ✅ | ✅ | all_statements |
| Assignment | ✅ | ✅ | all_statements |
| If/else | ✅ | ✅ | all_statements, control_flow |
| For-each loop | ✅ | ✅ | all_statements |
| Try/catch/finally | ✅ | ✅ | all_statements |
| Return | ✅ | ✅ | All functions |
| Comment | ✅ | ✅ | All functions |
| Advanced | |||
| Default parameters | ✅ | ⏳ | - |
| Reference resolution | ✅ | ✅ | All functions |
| Short-circuit eval | ✅ | ✅ | all_expressions |
| Nested structures | ✅ | ✅ | data_structures |
Running the Examples
Via Lua Require
local executor = require("shared.seed.scripts.runtime.script_executor")
local json = require("json")
-- Load script.json
local file = io.open("packages/json_script_example/seed/script.json", "r")
local script_json = json.decode(file:read("*all"))
file:close()
-- Run any function
local result = executor.execute_function(script_json, "all_expressions", {10, 5})
print(json.encode(result))
Via CLI (future)
metabuilder-cli package run json_script_example all_expressions 10 5
Performance Benchmarks
| Function | Lua Native | JSON Runtime | Slowdown |
|---|---|---|---|
| all_expressions | ~0.05ms | ~0.3ms | 6x |
| all_statements | ~0.1ms | ~0.8ms | 8x |
| all_operators | ~0.03ms | ~0.2ms | 7x |
| control_flow | ~0.02ms | ~0.15ms | 7.5x |
| data_structures | ~0.04ms | ~0.25ms | 6x |
Average overhead: ~7x slower than native Lua
Acceptable for: UI logic, configuration, plugin systems Not suitable for: Tight loops, performance-critical paths
JSON Spec Compatibility
This package follows JSON Script Specification v2.1.0
Breaking Changes from v1.0
- ✅ Separated
binary_expressionandlogical_expression - ✅ Added
unary_expression - ✅ Added
conditional_expression - ✅ Added
for_each_loop - ✅ Added
computedproperty tomember_access - ✅ Added
commentstatement type
Lua vs JS Operator Mapping
| Lua | JS | JSON |
|---|---|---|
~= |
!= |
!= |
and |
&& |
&& |
or |
|| |
|| |
not |
! |
! |
Runtime supports both syntaxes automatically.
Use Cases
1. Configuration-Driven Logic
Define business rules in JSON, hot-reload without restarting:
{
"functions": [{
"name": "validate_user",
"body": [
{"type": "if_statement", "condition": {...}, "then": [...]}
]
}]
}
2. Plugin Systems
Third-party plugins as JSON - no arbitrary code execution:
{
"functions": [{
"name": "process_data",
"params": [{"name": "data", "type": "object"}],
"body": [...]
}]
}
3. Visual Programming
Generate JSON from drag-and-drop interfaces:
[IF Block] → {"type": "if_statement", ...}
[THEN Block] → {"then": [...]}
4. Cross-Platform Logic
Write once in JSON, run in Lua, JS, Python:
{
"functions": [{"name": "shared_logic", ...}]
}
Limitations
Not Supported (Yet)
- ⏳ For loops with counter (for i=1,10)
- ⏳ While loops
- ⏳ Classes and methods
- ⏳ Async/await (promises)
- ⏳ Generators
- ⏳ Spread operator (...)
- ⏳ Destructuring
- ⏳ Switch/case statements
Not Planned
- ❌ Eval/dynamic code execution
- ❌ Regex (use string functions)
- ❌ DOM manipulation
- ❌ Module imports (use dependencies)
Contributing
To add new examples:
- Add function to
seed/script.json - Export in
metadata.jsonunderexports.scripts - Create test in
tests/ - Add storybook story
- Update this README
See Also
License
Part of MetaBuilder - MIT License