{"id":31646052,"url":"https://github.com/codefresh-io/tevale","last_synced_at":"2025-10-07T05:19:37.730Z","repository":{"id":12660119,"uuid":"72342626","full_name":"codefresh-io/tevale","owner":"codefresh-io","description":"Tevale is the tiny evaluator of expressions, which accepts a set of variables (named objects with properties) and an expression, validates its syntax and evaluates the expression.","archived":false,"fork":false,"pushed_at":"2023-07-19T01:06:23.000Z","size":354,"stargazers_count":1,"open_issues_count":5,"forks_count":1,"subscribers_count":21,"default_branch":"master","last_synced_at":"2025-09-28T03:42:09.958Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/codefresh-io.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-10-30T10:27:48.000Z","updated_at":"2021-03-22T11:17:45.000Z","dependencies_parsed_at":"2023-01-13T17:04:06.965Z","dependency_job_id":null,"html_url":"https://github.com/codefresh-io/tevale","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/codefresh-io/tevale","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codefresh-io%2Ftevale","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codefresh-io%2Ftevale/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codefresh-io%2Ftevale/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codefresh-io%2Ftevale/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/codefresh-io","download_url":"https://codeload.github.com/codefresh-io/tevale/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codefresh-io%2Ftevale/sbom","scorecard":{"id":296420,"data":{"date":"2025-08-11","repo":{"name":"github.com/codefresh-io/tevale","commit":"04ffaf176c62ffa4e6d4ff17909665c31c5d662d"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.7,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":0,"reason":"Found 1/19 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 11 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"29 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-cwfw-4gq5-mrqx","Warn: Project is vulnerable to: GHSA-g95f-p29q-9xw4","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-9vvw-cc9w-f27h","Warn: Project is vulnerable to: GHSA-gxpj-cx7g-858c","Warn: Project is vulnerable to: GHSA-w573-4hg7-7wgq","Warn: Project is vulnerable to: GHSA-h6ch-v84p-w6p9","Warn: Project is vulnerable to: GHSA-4gmj-3p3h-gm8h","Warn: Project is vulnerable to: GHSA-qh2h-chj9-jffq","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-282f-qqgm-c34q","Warn: Project is vulnerable to: GHSA-jf85-cpcp-j695","Warn: Project is vulnerable to: GHSA-fvqr-27wr-82fm","Warn: Project is vulnerable to: GHSA-4xc9-xhrj-v574","Warn: Project is vulnerable to: GHSA-x5rq-j2xg-h7qm","Warn: Project is vulnerable to: GHSA-29mw-wpgm-hmr9","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-p6mc-m468-83gw","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-hxm2-r34f-qmc5","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-vh95-rmgr-6w4m","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-w9mr-4mfr-499f","Warn: Project is vulnerable to: GHSA-hj48-42vr-x3v9","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-cf4h-3jhx-xvhq","Warn: Project is vulnerable to: GHSA-j8xg-fqg3-53r7"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-17T19:37:05.998Z","repository_id":12660119,"created_at":"2025-08-17T19:37:05.998Z","updated_at":"2025-08-17T19:37:05.998Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278722757,"owners_count":26034463,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-07T02:00:06.786Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-10-07T05:19:32.865Z","updated_at":"2025-10-07T05:19:37.724Z","avatar_url":"https://github.com/codefresh-io.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tevale\n\n\u003e Tevale is the tiny evaluator of expressions, which accepts a set of variables (named objects with properties) and an expression, validates its syntax and evaluates the expression. \n\nDeveloped in [Codefresh](https://www.codefresh.io).\n\nIts goal is to allow the evaluations of expressions (in a variable context) so as to generate a boolean true/false result.\nIt was designed to be embeded into scripts that contain various entities and require the evaluation of an expression to make a yes/no decision.\n\n### Features\n\n* Validation and evaluation of expressions\n* Supports variables in expressions, including object variables (nesting)\n* Supports popular functions and operators for number and string manipulation\n* Supports string searching and regexp matching functions\n\n### Installation\n\n```bash\n$ npm install cf-expression-evaluator --save\n```\n\n## Usage\n\n```js\nconst tevale = require('tevale');\nconst variables = {\n    \"author\": {\n        \"name\": \"Alon Diamant\",\n        \"homepage\": \"http://www.alondiamant.com\",\n        \"github\": {\n            \"repositories\": 12,\n            \"url\": \"http://www.github.com/advance512\"\n        },\n    },\n    \"company\": {\n        \"name\": \"Codefresh\",\n        \"homepage\": \"http://www.codefresh.io\",\n        \"phoneNumber\": \"+972-99-999-9999\"\n    }\n}\n\nconsole.log(\n    tevale.evaluateExpression(\n        'match(author.name, \"alon\", true) \u0026\u0026 ' +\n        'author.github.repositories \u003e 10 \u0026\u0026 ' +\n        'Number(substring(company.phoneNumber, 1, 4)) / 2 == 486',\n        variables\n    )\n);\n```\n\n## Reference\n\n### Types\n\n|Type|Example|True/False|\n|----|:-----:|:--------:|\n|String|\\\"hello\\\"\u003cbr\u003e'there'|Empty string is false: ''\u003cbr\u003eNon-empty string is true: 'something'\u003cbr\u003eString comparison is lexicographic|\n|Number|5\u003cbr\u003e3.4\u003cbr\u003e1.79E+308|0 is false\u003cbr\u003eany non-0 number is true|\n|Boolean|true\u003cbr\u003efalse|true is true\u003cbr\u003efalse is false|\n|null|Null|always false|\n\n### Variables and Members\n\n  * You can then use the members of each variable.  \n  * To access variables that have a non-standard (i.e. only alphanumeric and _ characters) names, use the Variable() function.\n  * To access variable members that have a non-standard (i.e. only alphanumeric and _ characters) names, use the Member() function.\n\n### Unary Operators\n\n|Operator|Operation|\n|--------|:-------:|\n|-|Negation of numbers|\n|!|Logical NOT|\n\n### Binary Operators\n\n|Operator|Operation|\n|--------|:-------:|\n|+|Add, String Concatenation|\n|-|Subtract|\n|*|Multiply|\n|/|Divide|\n|%|Modulus|\n|\u0026\u0026|Logical AND|\n|\u0026#124;\u0026#124;|Logical OR|\n\n### Comparisons\n\n|Operator|Operation|\n|--------|:-------:|\n|==|Equal|\n|!=|Not equal|\n|\u003e|Greater than|\n|\u003e=|Greater than or equal|\n|\u003c|Less than|\n|\u003e=|Less than or equal|\n\n### Functions\n\n|Function Name|Parameters|Return value|Example|\n|-------------|:--------:|:----------:|:-----:|\n|String|0: number or string|string of input value|String(40) == '40'|\n|Number|0: number or string|number of input value|Number('50') == 50\u003cbr\u003eNumber('hello') is invalid|\n|Boolean|0: number or string|boolean of input value|Boolean('123') == true\u003cbr\u003eBoolean('') == false\u003cbr\u003eBoolean(583) == true\u003cbr\u003eBoolean(0) == false|\n|round|0: number|rounded number|round(1.3) == 1\u003cbr\u003eround(1.95) == 2|\n|floor|0: number|number rounded to floor|floor(1.3) == 1\u003cbr\u003efloor(1.95) == 1|\n|upper|0: string|string in upper case|upper('hello') == 'HELLO'|\n|lower|0: string|string in lower case|lower('BYE BYE') == 'bye bye'|\n|trim|0: string|trimmed string|trim(\\\"   abc   \\\") == \\\"abc\\\"|\n|trimLeft|0: string|left trimmed string|trimLeft(\\\"   abc   \\\") == \\\"abc   \\\"|\n|trimRight|0: string|right trimmed string|trimRight(\\\"   abc   \\\") == \\\"   abc\\\"|\n|replace|0: string - main string\u003cbr\u003e1: string - substring to find\u003cbr\u003e2: string - substring to replace|replace all instances of the substring (1) in the main string (0) with the substring (2)|replace('hello there', 'e', 'a') == 'hallo thara'|\n|substring|0: string - main string\u003cbr\u003e1: string - index to start\u003cbr\u003e2: string - index to end|returns a substring of a string|substring(\\\"hello world\\\", 6, 11) == \\\"world\\\"|\n|length|string|length of a string|length(\\\"gump\\\") == 4|\n|includes|0: string - main string\u003cbr\u003e1: string - string to search for|whether a search string is found inside the main string|includes(\\\"codefresh\\\", \\\"odef\\\") == true|\n|indexOf|0: string - main string\u003cbr\u003e1: string - string to search for|index of a search string if it is found inside the main string|indexOf(\\\"codefresh\\\", \\\"odef\\\") == 1|\n|match|0: string - main string\u003cbr\u003e1: string - regular expression string, [JS style](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions)\u003cbr\u003e2: boolean - ignore case|search for a regular expression inside a string, ignoring or not ignoring case|match(\\\"hello there you\\\", \\\"..ll.\\\", false) == true\u003cbr\u003ematch(\\\"hello there you\\\", \\\"..LL.\\\", false) == false\u003cbr\u003ematch(\\\"hello there you\\\", \\\"hell$\\\", true) == false\u003cbr\u003ematch(\\\"hello there you\\\", \\\"^hell\\\", true) == true\u003cbr\u003ematch(\\\"hello there you\\\", \\\"bye\\\", false) == false|\n|Variable|string|Lookup the value of a variable|Variable('someVariable')|\n|Member|0: string - variable name\u003cbr\u003e1: string - member name|Lookup the value of a member of a variable|Member('someVariable', 'workingDirectory')|\n\n\n## Examples\n\nUsing the variables:\n\n```\nconst exampleVariables = {\n    'somePositiveNumericValue': 123,\n    'someZeroValue': 0,\n    'someNegativeNumericValue': -50,\n    'stringValue': 'hello',\n    'emptyStringValue': '',\n    'longStringValue': 'mA26EKMPupgvp6XYlGAVJZKv6yvaD3aobXMyExvyMBa2Hi9LlJXTUaBveMR9ErHtSfXNHHW5xAKbz2DVfBOqQ8CaSMNMQRBrJRpEpsO7FygKZmKpKHvvtPviOTfyUE0HGhnSPYHb9Hbz1CMxab4T0iQxPLCwrg57Qi0sTW1sJhVSygD9ivCfhJwJmD9PNb8bV0rJJ9aWp84LeaC7PDkj5hAozkrrJVA5hozLSXGZb0A4JLKiPOe9ITvxcIqvPNaMPA2SF4AQasE01TeGyuHQICuAMTGFFAP9y0HJBm7N0XmU',\n    'trueBooleanValue': true,\n    'falseBooleanValue': false,\n    'nullBooleanValue': null,\n    'simpleObjectValue': {\n        'someNumericValue': 123,\n        'someStringValue': 'hello there',\n        'someNullValue': null,\n        'someBooleanValue': false,\n    },\n    'complexObjectValue': {\n        'internalObjectValue': {\n            'someNumericValue': 123,\n            'someStringValue': 'hello there',\n            'someNullValue': null,\n            'someBooleanValue': false,\n        },\n    },\n    'superComplexObjectValue': {\n        'internalObjectValue': {\n            'moreInternalObjectValue': {\n                'someNumericValue': 123,\n                'someStringValue': 'hello there',\n                'someNullValue': null,\n                'someBooleanValue': false,\n            },\n        },\n    },\n    'typicalObjectValue': {\n        'branch_name': 'master',\n        'working_dir': '/tmp/whatever',\n        'success': true,\n    },\n    'emptyObjectValue': {},\n\n    'author': {\n        'name': 'Alon Diamant',\n        'homepage': 'http://www.alondiamant.com',\n        'github': {\n            'repositories': 12,\n            'url': 'http://www.github.com/advance512',\n        },\n    },\n    'company': {\n        'name': 'Codefresh',\n        'homepage': 'http://www.codefresh.io',\n        'phoneNumber': '+972-99-999-9999',\n    },\n};\n```\n\nThe result for the following expressions is:\n\n\n| Expression        | Result or Error Message           |\n| ------------- |:-------------:|\n|''|false|\n|'null'|false|\n|'false'|false|\n|'1234'|true|\n|'-1234'|true|\n|'0000000'|false|\n|'\"\"'|false|\n|'\"asdasd\"'|true|\n|''asdasd''|true|\n|'`asdasd`'|Unexpected \"`\" at character 0|\n|'somePositiveNumericValue'|true|\n|'someZeroValue'|false|\n|'someNegativeNumericValue'|true|\n|'stringValue'|true|\n|'emptyStringValue'|false|\n|'longStringValue'|true|\n|'trueBooleanValue'|true|\n|'falseBooleanValue'|false|\n|'!falseBooleanValue'|true|\n|'nullBooleanValue'|false|\n|'invalidIdentifer'|Invalid identifier: 'invalidIdentifer'|\n|'somePositiveNumericValue \u003e someZeroValue'|true|\n|'somePositiveNumericValue \u003c someZeroValue'|false|\n|'somePositiveNumericValue \u003e= someZeroValue'|true|\n|'somePositiveNumericValue \u003c= someZeroValue'|false|\n|'somePositiveNumericValue \u003e= somePositiveNumericValue'|true|\n|'somePositiveNumericValue \u003c= somePositiveNumericValue'|true|\n|'longStringValue \u003e emptyStringValue'|true|\n|'longStringValue \u003c emptyStringValue'|false|\n|'longStringValue == longStringValue'|true|\n|'longStringValue === longStringValue'|Invalid binary operator: ===|\n|'longStringValue \u003e stringValue'|true|\n|'longStringValue \u003c stringValue'|false|\n|'simpleObjectValue.someNumericValue == 123'|true|\n|'simpleObjectValue.someNumericValue'|true|\n|'simpleObjectValue.someNullValue'|false|\n|'simpleObjectValue.someBooleanValue'|false|\n|'simpleObjectValue.someBooleanValue == false'|true|\n|'complexObjectValue.internalObjectValue.someNumericValue == 123'|true|\n|'complexObjectValue.internalObjectValue.someNumericValue'|true|\n|'complexObjectValue.internalObjectValue.someNullValue'|false|\n|'complexObjectValue.internalObjectValue.someBooleanValue'|false|\n|'complexObjectValue.internalObjectValue.someBooleanValue == false'|true|\n|'superComplexObjectValue.internalObjectValue.moreInternalObjectValue.someNumericValue == 123'|true|\n|'superComplexObjectValue.internalObjectValue.moreInternalObjectValue.someNumericValue'|true|\n|'superComplexObjectValue.internalObjectValue.moreInternalObjectValue.someNullValue'|false|\n|'superComplexObjectValue.internalObjectValue.moreInternalObjectValue.someBooleanValue'|false|\n|'superComplexObjectValue.internalObjectValue.moreInternalObjectValue.someBooleanValue == false'|true|\n|'typicalObjectValue.branch_name == \"master\"'|true|\n|'typicalObjectValue.working_dir == \"/var/tmp\"'|false|\n|'!!typicalObjectValue.success'|true|\n|'typicalObjectValue.success == true'|true|\n|'typicalObjectValue.nonExistant'|Undefined identifier member: 'nonExistant'|\n|'typicalObjectValue'|Cannot evaluate object variable directly|\n|'emptyObjectValue.someBooleanValue == false'|Undefined identifier member: 'someBooleanValue'|\n|'emptyObjectValue.someBooleanValue'|Undefined identifier member: 'someBooleanValue'|\n|'emptyObjectValue'|Cannot evaluate object variable directly|\n|'superComplexObjectValue.'|Unexpected  at character 24|\n|'superComplexObjectValue..'|Unexpected . at character 24|\n|'superComplexObjectValue.internalObjectValue'|Cannot evaluate object variable directly|\n|'superComplexObjectValue.internalObjectValue.'|Unexpected  at character 44|\n|'superComplexObjectValue.internalObjectValue.moreInternalObjectValue'|Cannot evaluate object variable directly|\n|'superComplexObjectValue.internalObjectValue.moreInternalObjectValue.'|Unexpected  at character 68|\n|'superComplexObjectValue.internalObjectValue.moreInternalObjectValue.nonExistant'|Undefined identifier member: 'nonExistant'|\n|'superComplexObjectValue.internal Object Value.moreInternalObjectValue.someNumericValue'|Cannot handle compound expressions.|\n|'superComplexObjectValue.internalObject.Value.moreInternalObjectValue.someNumericValue'|Undefined identifier member: 'internalObject'|\n|'somePositiveNumericValue \u003e null'|The operator \u003e cannot be used with number,null. It can only be used with the types: number,string|\n|'somePositiveNumericValue \u003c stringValue'|The operator \u003c cannot be used with number,string. It can only be used with the types: number,string|\n|'somePositiveNumericValue \u003e true'|The operator \u003e cannot be used with number,boolean. It can only be used with the types: number,string|\n|'somePositiveNumericValue \u003e simpleObjectValue'|The operator \u003e cannot be used with number,object. It can only be used with the types: number,string|\n|'complexObjectValue \u003e simpleObjectValue'|The operator \u003e cannot be used with object,object. It can only be used with the types: number,string|\n|'false \u003e null'|The operator \u003e cannot be used with boolean,null. It can only be used with the types: number,string|\n|'false \u003e true'|The operator \u003e cannot be used with boolean,boolean. It can only be used with the types: number,string|\n|'someStringValue \u003e null'|Invalid identifier: 'someStringValue'|\n|'internalObjectValue.someNumericValue \u003e null'|Invalid identifier: 'internalObjectValue'|\n|'typicalObjectValue.working_dir \u003e 82'|The operator \u003e cannot be used with string,number. It can only be used with the types: number,string|\n|'typicalObjectValue.working_dir \u003e complexObjectValue.internalObjectValue.someNumericValue'|The operator \u003e cannot be used with string,number. It can only be used with the types: number,string|\n|'(somePositiveNumericValue \u003e someZeroValue)'|true|\n|'(somePositiveNumericValue \u003e= someZeroValue) \u0026\u0026 true'|true|\n|'(longStringValue \u003e emptyStringValue) \u0026\u0026 (longStringValue \u003e= emptyStringValue)'|true|\n|'((longStringValue \u003e emptyStringValue) \u0026\u0026 (longStringValue \u003e= emptyStringValue))'|true|\n|'(longStringValue \u003e emptyStringValue \u0026\u0026 (longStringValue \u003e= emptyStringValue))'|true|\n|'60 \u003e 35 \u0026\u0026 (50 \u003e 22 \u0026\u0026 ((90 \u003e 33) \u0026\u0026 ((26 \u003e 10) \u0026\u0026 15 \u003e 30)) \u0026#124;\u0026#124; (80 \u003e 32))'|true|\n|'60 \u003e 35 \u0026\u0026 (50 \u003e 22 \u0026\u0026 ((90 \u003e 33) \u0026\u0026 ((26 \u003e 10) \u0026\u0026 15 \u003e 30)) \u0026#124;\u0026#124; (80 \u003c 32))'|false|\n|'60 \u003e 35 \u0026\u0026 (50 \u003e 22 \u0026\u0026 ((90 \u003e 33) \u0026\u0026 ((26 \u003e 10) \u0026\u0026 15 \u003e 30)) \u0026#124;\u0026#124; (somePositiveNumericValue \u003e 32))'|true|\n|'60 \u003e 35 \u0026\u0026 (50 \u003e 22 \u0026\u0026 ((90 \u003e 33) \u0026\u0026 ((26 \u003e 10) \u0026\u0026 15 \u003e 30)) \u0026#124;\u0026#124; (somePositiveNumericValue \u003c 32))'|false|\n|'somePositiveNumericValue / someZeroValue'|Division of 123 by 0|\n|'somePositiveNumericValue % someZeroValue'|Modulo of 123 by 0|\n|'somePositiveNumericValue / somePositiveNumericValue'|true|\n|'9007199254740991 * 9007199254740991'|true|\n|'1.231 * 5.2342'|true|\n|'+true'|The operator + cannot be used with boolean. It can only be used with the types: number|\n|'+234'|true|\n|'~234'|Invalid unary operator: ~|\n|'555+true'|The operator + cannot be used with number,boolean. It can only be used with the types: number,string|\n|'23423-223'|true|\n|'123-123'|false|\n|'!true'|false|\n|'!!true'|true|\n|'!!!!!!!!!!true'|true|\n|'!33'|false|\n|'!!33'|true|\n|'!0'|true|\n|'!!0'|false|\n|'55 % 10 == 5'|true|\n|'1.79E+308 * 1.79E+308'|Numeric overflow|\n|'15 \u0026#124; 33'|Invalid binary operator: \u0026#124;|\n|'5555 @ 33333'|Unexpected \"@\" at character 5|\n|'5555 $ 33333'|Cannot handle compound expressions.|\n|'5555 \\ 33333'|Unexpected \"\\\" at character 5|\n|'5555 : 33333'|Unexpected \":\" at character 5|\n|'5555 :::: 33333'|Unexpected \":\" at character 5|\n|'stringValue / 5'|The operator / cannot be used with string,number. It can only be used with the types: number|\n|'stringValue / stringValue'|The operator / cannot be used with string,string. It can only be used with the types: number|\n|'stringValue + 5'|The operator + cannot be used with string,number. It can only be used with the types: number,string|\n|'stringValue + 5'|The operator + cannot be used with string,number. It can only be used with the types: number,string|\n|'this'|keyword 'this' not supported.|\n|'5 \u003e 2 ? 4 : 1'|Trinary operator (?:) currently not supported.|\n|'[1, 2, 3]'|Array literals ([1, 2, 3]) currently not supported.|\n|'upper(stringValue)'|true|\n|'substring(stringValue, 2, 4)'|true|\n|'substring(stringValue, 20, 40)'|false|\n|'upper()'|Expected 1 arguments for function 'upper'.|\n|'lower(123)'|Invalid argument #0 of type number for function 'lower': expected string|\n|'lower(\"asd\", 3, 5)'|Expected 1 arguments for function 'lower'.|\n|'trim(null)'|Invalid argument #0 of type null for function 'trim': expected string|\n|'Number(false)'|Invalid argument #0 of type boolean for function 'Number': expected number,string|\n|'hello(false)'|Unknown function: 'hello'|\n|'123(false)'|Cannot handle compound expressions.|\n|'String(\"123\")'|true|\n|'String(123)'|true|\n|'String(\"0\")'|true|\n|'String(0)'|true|\n|'Number(\"123\")'|true|\n|'Number(123)'|true|\n|'Number(\"0\")'|false|\n|'Number(0)'|false|\n|'Number(\"hello there\")'|Error converting value 'hello there' to number|\n|'Boolean(\"123\")'|true|\n|'Boolean(123)'|true|\n|'Boolean(\"0\")'|true|\n|'Boolean(0)'|false|\n|'Boolean(\"hello there\")'|true|\n|'Boolean(\"\")'|false|\n|'Boolean(Number(String(0)))'|false|\n|'Boolean(Number(String(1)))'|true|\n|'round(\"asd\")'|Invalid argument #0 of type string for function 'round': expected number|\n|'round(\"13\")'|Invalid argument #0 of type string for function 'round': expected number|\n|'round(13)'|true|\n|'round(13) == round(13.1222)'|true|\n|'round(13) != round(13.9922)'|true|\n|'round(13) == floor(13.9922)'|true|\n|'floor(13E8)'|true|\n|'floor(1359 / 342)'|true|\n|'upper(\"alon\") == \"ALON\"'|true|\n|'upper(\"asd\") != \"ALON\"'|true|\n|'upper(\"asd\") != 333'|The operator != cannot be used with string,number. It can only be used with the types: number,string,boolean|\n|'lower(\"DIAMANT\") == \"diamant\"'|true|\n|'lower(\"asd\") != \"ALON\"'|true|\n|'lower(\"ASD\") == \"asd\"'|true|\n|'trim(\"   ASD   \") == \"ASD\"'|true|\n|'trim(lower(\"   ASD   \")) == \"asd\"'|true|\n|'lower(trim(\"   ASD   \")) == \"asd\"'|true|\n|'trimLeft(\"   ASD   \") == \"ASD   \"'|true|\n|'trimRight(\"   ASD   \") == \"   ASD\"'|true|\n|'replace(\"test me and you\", \"me\", \"her\") == \"test her and you\"'|true|\n|'replace(\"test ME and you\", \"me\", \"her\") == \"test ME and you\"'|true|\n|'replace(\"test ME and you\", 123, \"her\") == \"test ME and you\"'|Invalid argument #1 of type number for function 'replace': expected string|\n|'replace(\"test ME and you\", 123) == \"test ME and you\"'|Expected 3 arguments for function 'replace'.|\n|'replace(\"test ME and you\", 123, 234, \"her\") == \"test ME and you\"'|Expected 3 arguments for function 'replace'.|\n|'substring(\"test ME and you\", 0, 4) == \"test\"'|true|\n|'substring(\"test ME and you\", 4, 8) == \" ME \"'|true|\n|'substring(\"test ME and you\", 4, null) == \" ME and you\"'|Invalid argument #2 of type null for function 'substring': expected number|\n|'substring(\"test ME and you\", 4, -1) == \" ME and you\"'|true|\n|'length(\"hello\") == 5'|true|\n|'length(12345) == 5'|Invalid argument #0 of type number for function 'length': expected string|\n|'includes(\"team\", \"i\")'|false|\n|'includes(\"team\", \"ea\")'|true|\n|'includes(\"team\", 456)'|Invalid argument #1 of type number for function 'includes': expected string|\n|'indexOf(\"team\", \"i\") == -1'|true|\n|'indexOf(\"team\", \"ea\") == 1'|true|\n|'indexOf(\"team\", 456)'|Invalid argument #1 of type number for function 'indexOf': expected string|\n|'indexOf(234234, \"234\")'|Invalid argument #0 of type number for function 'indexOf': expected string|\n|'indexOf(String(999234234.23423), \"234\")'|true|\n|'match(\"hello there you\", \"..ll.\", false)'|true|\n|'match(\"hello there you\", \"..LL.\", false)'|false|\n|'match(\"hello there you\", \"hell$\", true)'|false|\n|'match(\"hello there you\", \"^hell\", true)'|true|\n|'match(\"hello there you\", \"bye\", false)'|false|\n|'match(\"hello there you\", 123, false)'|Invalid argument #1 of type number for function 'match': expected string|\n|'match(457457, 123, false)'|Invalid argument #0 of type number for function 'match': expected string|\n|'match(\"hello there you\", \"^hell\", null)'|Invalid argument #2 of type null for function 'match': expected boolean|\n|'match(123, false)'|Expected 3 arguments for function 'match'.|\n|'match()'|Expected 3 arguments for function 'match'.|\n|'match(   lower(String(round(99.234234)) + \" is the number to call\") + \" in case of emergencies\",    \"100\",    true) == (   99 * 2000 \u003e 99 * 999 \u0026\u0026    trueBooleanValue \u0026\u0026    somePositiveNumericValue \u003c someNegativeNumericValue) '|true|\n|'match(author.name, \"alon\", true) \u0026\u0026 author.github.repositories \u003e 10 \u0026\u0026 Number(substring(company.phoneNumber, 1, 4)) / 2 == 486'|true|\n|'hello there.testVariable == 567'|Cannot handle compound expressions.|\n|'hello there.badly-named-variable == 890'|Cannot handle compound expressions.|\n|'Variable(\"hello there\").testVariable == 567'|Invalid identifier: 'hello there'|\n|'Member(Variable(\"hello there\"), \"badly-named-variable\") == 890'|Invalid identifier: 'hello there'|\n|'Variable(\"author\").name == \"Alon Diamant\"'|true|\n|'Member(author.github, \"repositories\") == 12'|true|\n|'author.toString'|Undefined identifier member: 'toString'|\n|'author.eval(\"\")'|Invalid function name type: 'MemberExpression'|\n\n### Available gulp tasks\n\n* `gulp lint` - runs eslint\n* `gulp test:unit` - runs mocha unit tests\n* `gulp coverage` - runs unit tests and generates coverage report\n* `gulp test:integration` - runs karma tests\n* `gulp test` - runs unit and integration tests and generates code coverage report\n* `gulp` - default task, runs lint and test\n\n## Running tests\n\nInstall dev dependencies and run the test:\n\n```sh\n$ npm install -d \u0026\u0026 gulp\n```\n\n## Author\n\n**Alon Diamant (advance512)**\n\n* [github/advance512](https://github.com/advance512)\n* [Homepage](http://www.alondiamant.com)\n\n## License\n\nCopyright © 2016, [Codefresh](https://codefresh.io).\nReleased under the [MIT license](https://github.com/codefresh-io/cf-expression-evaluator/blob/master/LICENSE).\n\n***\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodefresh-io%2Ftevale","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodefresh-io%2Ftevale","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodefresh-io%2Ftevale/lists"}