diff --git a/packages/json_script_example/seed/math_utils.json b/packages/json_script_example/seed/math_utils.json new file mode 100644 index 000000000..5cff20488 --- /dev/null +++ b/packages/json_script_example/seed/math_utils.json @@ -0,0 +1,197 @@ +{ + "schema_version": "2.1.0", + "package": "json_script_example", + "description": "Math utility functions", + + "exports": { + "functions": ["add", "subtract", "multiply", "divide", "clamp"], + "constants": ["PI", "E"] + }, + + "constants": [ + { + "id": "pi_const", + "name": "PI", + "value": 3.14159265359, + "type": "number", + "exported": true + }, + { + "id": "e_const", + "name": "E", + "value": 2.71828182846, + "type": "number", + "exported": true + } + ], + + "functions": [ + { + "id": "add_fn", + "name": "add", + "description": "Add two numbers", + "exported": true, + "params": [ + {"name": "a", "type": "number"}, + {"name": "b", "type": "number"} + ], + "returnType": "number", + "body": [ + { + "type": "return", + "value": { + "type": "binary_expression", + "left": "$ref:params.a", + "operator": "+", + "right": "$ref:params.b" + } + } + ] + }, + { + "id": "subtract_fn", + "name": "subtract", + "description": "Subtract two numbers", + "exported": true, + "params": [ + {"name": "a", "type": "number"}, + {"name": "b", "type": "number"} + ], + "returnType": "number", + "body": [ + { + "type": "return", + "value": { + "type": "binary_expression", + "left": "$ref:params.a", + "operator": "-", + "right": "$ref:params.b" + } + } + ] + }, + { + "id": "multiply_fn", + "name": "multiply", + "description": "Multiply two numbers", + "exported": true, + "params": [ + {"name": "a", "type": "number"}, + {"name": "b", "type": "number"} + ], + "returnType": "number", + "body": [ + { + "type": "return", + "value": { + "type": "binary_expression", + "left": "$ref:params.a", + "operator": "*", + "right": "$ref:params.b" + } + } + ] + }, + { + "id": "divide_fn", + "name": "divide", + "description": "Divide two numbers", + "exported": true, + "params": [ + {"name": "a", "type": "number"}, + {"name": "b", "type": "number"} + ], + "returnType": "number", + "body": [ + { + "type": "comment", + "text": "Check for division by zero" + }, + { + "type": "if_statement", + "condition": { + "type": "binary_expression", + "left": "$ref:params.b", + "operator": "==", + "right": 0 + }, + "then": [ + { + "type": "return", + "value": null + } + ] + }, + { + "type": "return", + "value": { + "type": "binary_expression", + "left": "$ref:params.a", + "operator": "/", + "right": "$ref:params.b" + } + } + ] + }, + { + "id": "clamp_fn", + "name": "clamp", + "description": "Clamp a value between min and max", + "exported": true, + "params": [ + {"name": "value", "type": "number"}, + {"name": "min", "type": "number"}, + {"name": "max", "type": "number"} + ], + "returnType": "number", + "body": [ + { + "type": "comment", + "text": "If value < min, return min" + }, + { + "type": "if_statement", + "condition": { + "type": "binary_expression", + "left": "$ref:params.value", + "operator": "<", + "right": "$ref:params.min" + }, + "then": [ + { + "type": "return", + "value": "$ref:params.min" + } + ] + }, + { + "type": "comment", + "text": "If value > max, return max" + }, + { + "type": "if_statement", + "condition": { + "type": "binary_expression", + "left": "$ref:params.value", + "operator": ">", + "right": "$ref:params.max" + }, + "then": [ + { + "type": "return", + "value": "$ref:params.max" + } + ] + }, + { + "type": "comment", + "text": "Otherwise return value" + }, + { + "type": "return", + "value": "$ref:params.value" + } + ] + } + ] +} diff --git a/packages/json_script_example/seed/validation.json b/packages/json_script_example/seed/validation.json new file mode 100644 index 000000000..9e04904dc --- /dev/null +++ b/packages/json_script_example/seed/validation.json @@ -0,0 +1,136 @@ +{ + "schema_version": "2.1.0", + "package": "json_script_example", + "description": "Validation utility functions", + + "exports": { + "functions": ["isEmail", "isNotEmpty", "validateRange"] + }, + + "functions": [ + { + "id": "is_email_fn", + "name": "isEmail", + "description": "Check if string is a valid email", + "exported": true, + "params": [ + {"name": "email", "type": "string"} + ], + "returnType": "boolean", + "body": [ + { + "type": "comment", + "text": "Basic email validation - contains @ and domain" + }, + { + "type": "const_declaration", + "name": "hasAt", + "value": { + "type": "binary_expression", + "left": { + "type": "call_expression", + "callee": "$ref:imports.string.indexOf", + "args": ["$ref:params.email", "@"] + }, + "operator": ">", + "right": 0 + } + }, + { + "type": "const_declaration", + "name": "hasDot", + "value": { + "type": "binary_expression", + "left": { + "type": "call_expression", + "callee": "$ref:imports.string.lastIndexOf", + "args": ["$ref:params.email", "."] + }, + "operator": ">", + "right": { + "type": "call_expression", + "callee": "$ref:imports.string.indexOf", + "args": ["$ref:params.email", "@"] + } + } + }, + { + "type": "return", + "value": { + "type": "logical_expression", + "left": "$ref:local.hasAt", + "operator": "&&", + "right": "$ref:local.hasDot" + } + } + ] + }, + { + "id": "is_not_empty_fn", + "name": "isNotEmpty", + "description": "Check if string is not empty after trimming", + "exported": true, + "params": [ + {"name": "str", "type": "string"} + ], + "returnType": "boolean", + "body": [ + { + "type": "const_declaration", + "name": "trimmed", + "value": { + "type": "call_expression", + "callee": "$ref:imports.string.trim", + "args": ["$ref:params.str"] + } + }, + { + "type": "return", + "value": { + "type": "binary_expression", + "left": { + "type": "member_access", + "object": "$ref:local.trimmed", + "property": "length" + }, + "operator": ">", + "right": 0 + } + } + ] + }, + { + "id": "validate_range_fn", + "name": "validateRange", + "description": "Check if number is within range", + "exported": true, + "params": [ + {"name": "value", "type": "number"}, + {"name": "min", "type": "number"}, + {"name": "max", "type": "number"} + ], + "returnType": "boolean", + "body": [ + { + "type": "return", + "value": { + "type": "logical_expression", + "left": { + "type": "binary_expression", + "left": "$ref:params.value", + "operator": ">=", + "right": "$ref:params.min" + }, + "operator": "&&", + "right": { + "type": "binary_expression", + "left": "$ref:params.value", + "operator": "<=", + "right": "$ref:params.max" + } + } + } + ] + } + ] +}