{"id":15538313,"url":"https://github.com/ali77gh/chap","last_synced_at":"2025-04-09T21:20:28.243Z","repository":{"id":194577091,"uuid":"691035574","full_name":"ali77gh/Chap","owner":"ali77gh","description":"Simple Programming Language for fun. ","archived":false,"fork":false,"pushed_at":"2024-06-14T12:10:49.000Z","size":281,"stargazers_count":207,"open_issues_count":0,"forks_count":4,"subscribers_count":2,"default_branch":"stable","last_synced_at":"2024-10-30T06:58:47.055Z","etag":null,"topics":["interpreter","programming-language","wasm"],"latest_commit_sha":null,"homepage":"https://ali77gh.github.io/ChapApp/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ali77gh.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-09-13T11:27:03.000Z","updated_at":"2024-10-18T13:45:50.000Z","dependencies_parsed_at":"2023-09-14T05:42:13.886Z","dependency_job_id":"9c4831fa-b16d-440d-be1d-8b99dbf7952d","html_url":"https://github.com/ali77gh/Chap","commit_stats":{"total_commits":135,"total_committers":6,"mean_commits":22.5,"dds":0.03703703703703709,"last_synced_commit":"aab5fa7c7d3401f941f6ca0e4c02e102f09199af"},"previous_names":["ali77gh/chap"],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ali77gh%2FChap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ali77gh%2FChap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ali77gh%2FChap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ali77gh%2FChap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ali77gh","download_url":"https://codeload.github.com/ali77gh/Chap/tar.gz/refs/heads/stable","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248112307,"owners_count":21049632,"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","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":["interpreter","programming-language","wasm"],"created_at":"2024-10-02T12:03:02.972Z","updated_at":"2025-04-09T21:20:28.221Z","avatar_url":"https://github.com/ali77gh.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Chap\n\n\u003cimg src=\"./Logo.png\" width=\"130\"\u003e\u003c/img\u003e\n\n[![forthebadge made-with-rust](http://ForTheBadge.com/images/badges/made-with-rust.svg)](https://www.rust-lang.org/)\\\n[![Rust](https://github.com/ali77gh/Chap/actions/workflows/rust.yml/badge.svg?branch=stable)](https://github.com/ali77gh/Chap/actions/workflows/rust.yml)\n[![GitHub license](https://badgen.net/github/license/ali77gh/chap)](https://github.com/ali77gh/chap/blob/master/LICENSE)\n\nChap is an easy to learn, dynamic, interpretive, and keyword-less language written in Rust.\n\nRemember, Chap is not a tool! its Art.\n\nSyntax is something between [Lisp](https://en.wikipedia.org/wiki/Lisp_(programming_language)), [Assembly](https://en.wikipedia.org/wiki/Assembly_language) and [PHP](https://www.php.net/).\n\n\u003ca href=\"https://ali77gh.github.io/ChapApp\"\u003e\n    \u003cimg src=\"WebIDEButton.png\" width=300\u003e\n\u003c/a\u003e\n\n[ChapApp](https://github.com/ali77gh/chapAPP) the WebIDE (WASM).\n\n## Table of content\n\n1. [Why was it named 'Chap'?](#name)\n1. [Features](#features)\n1. [Keywords](#keywords)\n1. [Syntax](#syntax)\n1. [Operators](#operators)\n1. [ControlFlow](#control-flow)\n1. [Samples](#samples)\n1. [Data Types](#datatypes)\n1. [Memory Management](#memory-management)\n1. [Installation](#installation)\n1. [How to use](#how-to-use)\n1. [Builtin function](#builtin-functions)\n\n## Name\n\nRust or راست in persian means right and Chap or چپ means left.\n\nIf you code in rust(right) too much, you gradually become capitalist after a while. So you need to write some chap(left) to escape from the matrix.\n\nChap unlocks **Two-Dimensional** Full Stack Development. Front⬆️End, Back⬇️End, Rust➡️End, Chap⬅️End.\n\n## Features\n\n1. Easy to learn.\n2. Cross platform (It runs on Linux, MacOS, Windows, Web(WASM))\n\n## Keywords\n\nWhat makes a programming language hard to learn?\n\n```chp\n\"Keywords\"\n```\n\n| Language | Keywords  | Difficulty level |\n|----------|-----------|------------------|\n| C#       | 102       | 5/5              |\n| Java     | 48        | 4/5              |\n| Python   | 35        | 3/5              |\n| Lua      | 22        | 2/5              |\n| Chap     | 0         | 0/5              |\n\nThere are no keywords in Chap.\n\n## Syntax\n\nA normal line of code in chap has 3 chunks separated with -\u003e operator:\n\n```chp\nchunk1 -\u003e chunk2 -\u003e chunk3\n```\n\n| Chunk 1      | Chunk 2        | Chunk 3         |\n|--------------|---------------|-----------------|\n| input params | function name | output variable |\n\n```chp\nparam1, param2 -\u003e function_name -\u003e $output_variable\n```\n\nFor example:\n\n```chp\n1, 2 -\u003e add -\u003e $sum\n```\n\n1 and 2 separated by \",\" are input params.\\\nThese input params are moving to \"add\" function.\\\nFinally $sum is a variable that holds the add result in it.\n\nNote: \"add\" is not a keyword, it's a builtin function.\n\n## Ok but why?\n\nEnglish language is a **\"left to right\"** (aka LTR) language, and programming languages should follow the same rule, right?\n\nWrong:\n\n```javascript\n// c base languages:\nresult = send(sqrt(1 + 2).toString());\n   ↑       ↑    ↑     ↑       ↑\n   5       4    2     1       3\n```\n\nBut chap:\n\n```chp\n// chap\n1,2 -\u003e add -\u003e sqrt -\u003e to_string -\u003e send -\u003e $result\n        ↑       ↑         ↑          ↑        ↑\n        1       2         3          4        5\n```\n\nThis is actually left to right like normal english.\n\nNote: \"Chain\" syntax is added in version 2.0.0\n\n## Syntax Rules\n\nMake a comment with // and anything you write on the right side will be ignored by compiler.\n\n```chp\n1, 2 -\u003e add -\u003e $sum // this is a comment\n```\n\nYou can write many lines of code in one line by separating lines by \";\"\n\n```chp\n1 -\u003e $a; $a, 2-\u003e sum -\u003e $b; $b -\u003e print -\u003e $_\n```\n\nInput params are separated by comma character \",\".\n\nInput params can be:\n\n 1. Variable\n 1. String with \" character around like: \"hello world\"\n 1. Int just a number: 5\n 1. Float just a normal form of floating point number 3.14\n 1. Bool is a boolean value which is a true or false\n 1. Tags start with @. [(more on control flow)](#control-flow)\n\n```chp\n$a, \"hello\", 5, 3.14, false -\u003e function_name -\u003e $output_var\n```\n\nFunction names are not case-sensitive.\n\nFunction names are not sensitive about anything else:\n\n```chp\n// to_string = ToString = TOSTRING = to string = t o s t r_i_n_g\n```\n\nVariables should start with $ which is known as the most loved feature of PHP.\n\nVariable name rules:\n\n```chp\n$12 // Ok\n$sp a ce // OK\n$#^3 // Ok\n$a,b // comma not allowed\n$really? // question mark at the end not allowed\n$rea?lly // OK\n$some-\u003ething // \"-\u003e\" is not allowed \n```\n\n## Short syntax features\n\nIf a function has no output variable you can remove chunk3:\n\n```chp\n\"hello world\" -\u003e print\n    ↑              ↑         ↑\n   input         function   removed chunk3\n```\n\nIf a function has no input param you can remove chunk1:\n\n```chp\n              input -\u003e $user_input\n ↑              ↑         ↑\nnothing      function    output\n```\n\nRemoving chunk2 (function name) means assigning a variable:\n\n```chp\n1 -\u003e $variable\n// it's actually short for:\n// 1 -\u003e assign -\u003e $variable\n```\n\nIf a function has no input param and output_var you just write function name:\n\n```chp\nexit\n```\n\nIf a function has output var but you removed chunk3 the result of function will get printed:\n\n```chp\n1, 2 -\u003e add\n// it's short for:\n// 1, 2 -\u003e add -\u003e print\n```\n\nIf you just write some params. chap will print them:\n\n```chp\n1, 2\n// result: 1, 2\n\n// or\n$a\n// prints whatever $a is\n```\n\nAs you can guess, we have the world's smallest hello world:\n\n```chp\n\"Hello World\"\n```\n\nI wish I could remove double quotes too :)\n\n## Chain syntax (aka pipe)\n\nSometimes you have a collection of function calls like this:\n\n```chp\n1, 2 -\u003e add -\u003e $tmp1\n$tmp1 -\u003e sqrt -\u003e $tmp2\n$tmp2 -\u003e print\n```\n\nAs you can see, output of a function call is input of the next function call.\n\nIn this case, you can use piping syntax to write functions next to each other and get rid of temp variables:\n\n```chp\n1, 2 -\u003e add -\u003e sqrt -\u003e print\n```\n\n## Parentheses\n\nYou can't use Piping when one of the functions has more than one param.\n\n```chp\n1,2 -\u003e add -\u003e add -\u003e print\n               ↑\n               This needs two input params\n```\n\nIn this case you can use Parentheses:\n\n```chp\n(1,2 -\u003e add), (3 -\u003e sqrt) -\u003e add -\u003e print\n```\n\nThis converts two:\n\n```chp\n1,2 -\u003e add -\u003e $TMP1\n3 -\u003e sqrt -\u003e $TMP2\n$TMP1, $TMP2 -\u003e add -\u003e print\n```\n\n## Operators\n\nThere is one operator -\u003e which moves data from left to right and it is language logo.\n\nWhy are operators bad?\\\nBecause they behave different with different types.\nLook at this python example:\n\n```python\nnumber = input(\"Enter a number:\")\nresult = number * 5 # multiply number by 5\nprint(number, \"* 5 =\", result)\n```\n\nFollowing code has a bug and the result will be:\n\n```python\nEnter a number: 3\n3 * 5 = 33333\n# no runtime error\n```\n\nWhy? Because Python uses the same operator for math.multiply and strings.repeat.\n\nSo * operator **\"IS NOT A TYPE SAFE\"** operator and it will **\"DO UNEXPECTED THINGS\"** when your forget to pass the right type to it and it will happen without throwing runtime errors (which is bad).\n\nSame code in Chap:\n\n```chp\ninput -\u003e $number\n$number, 5 -\u003e multiply -\u003e $result \n$result\n// error in line 2: multiply function works only with numbers int and float\n```\n\nRuntime errors are much better than logical errors, and in chap we have the repeat function:\n\n```chp\n\"foo \", 3 -\u003e repeat\n// foo foo foo \n```\n\nIn many languages \"+\" operator has the same problem:\n\n```python\n# Python\ndef add(a, b):\n    a + b # concat or add? both?\n\nadd(\"1\", \"2\") # 12\nadd(1, 2) # 3\n```\n\n```chp\n// Chap:\n\"1\", \"2\" -\u003e concat // 12\n1, 2 -\u003e concat // 12 // you can concat integers safely\n1, 2 -\u003e add // 3\n\"1\", \"2\" -\u003e add // runtime error\n```\n\n## Debugger\n\nYou can put a ? at the end of function name to debug that line:\n\n```chp\n1 -\u003e $a\n2 -\u003e $b\n$a, $b -\u003e add? -\u003e $c\n// result 1, 2 -\u003e add -\u003e 3\n```\n\nChap also has a function called \"dump\" which prints every variable you have.\n\n## Control Flow\n\nYou can create a tag like this:\n\n```chp\n@tag_name\n```\n\nAnd you can jump to it:\n\n```chp\n@tag_name -\u003e jump\n// or\n@tag_name, true -\u003e jump_if\n// or\n@tag_name, 1, 1 -\u003e jump_if_equal\n// or\n@tag_name, 1, 0 -\u003e jump_if_not_equal\n```\n\n## loop\n\nJumping backward makes loops:\n\n```chp\n@l\n    \"Hello until your battery dies\"\n@l -\u003e jump\n```\n\n## if\n\n```chp\n@i, 1, 1 -\u003e jump_if_equal\n    \"this will not print\"\n@i\n```\n\nNote: Indention is not necessary\n\n## Array\n\nInitialize:\n\n```chp\n[1 2 3 4] -\u003e $myArray\n```\n\nInsert:\n\n```chp\n$myArray, 5 -\u003e insert\n```\n\nPop:\n\n```chp\n$myArray-\u003e pop -\u003e $last_item\n```\n\nGet item by index:\n\n```chp\n$myArray, 1 -\u003e get -\u003e $first_item\n// arrays index start from 1\n```\n\n## Samples\n\nNote: You can test and tweak samples at [ChapApp](https://ali77gh.github.io/ChapApp/).\n\n## hello_world.chp\n\n```chp\n\"Hello world\"\n```\n\n```sh\nHello world\n```\n\n## counter.chp\n\n```chp\n0 -\u003e $counter\n@l\n    $counter -\u003e increase\n@l, $counter, 100 -\u003e jump_if_not_equal\n$counter\n```\n\n```sh\n100\n```\n\n## number_guess_game.chp\n\n```chp\n1,10 -\u003e random_number -\u003e $answer\n@loop\n    input -\u003e $guess\n    $guess -\u003e to_int -\u003e $guess\n    @win, $answer, $guess -\u003e jump_if_equal\n    \"wrong\"\n@loop -\u003e jump\n\n@win\n\"you win\"\n```\n\n```sh\n1\nwrong\n2\nwrong\n3\nyou win\n```\n\n## christmas_tree.chp\n\n```chp\n // Editable\n0 -\u003e $counter\n@loop\n    $counter -\u003e increase\n\n    $counter, 2 -\u003e multiply -\u003e $stars_size\n    10, $counter -\u003e minus -\u003e $space_size\n\n    \"*\", $stars_size -\u003e repeat -\u003e $stars\n    \" \", $space_size -\u003e repeat -\u003e $spaces\n\n    $spaces, $stars -\u003e cat\n@loop, $counter, 10 -\u003e jump if not equal\n```\n\n```sh\n         **\n        ****\n       ******\n      ********\n     **********\n    ************\n   **************\n  ****************\n ******************\n********************\n```\n\n## christmas_tree_with_trunk.chp\n\n```chp\n\n // Editable\n0 -\u003e $counter\n@loop\n    $counter -\u003e increase\n\n    $counter, 1 -\u003e multiply -\u003e $stars_size\n    19, $counter -\u003e minus -\u003e $space_size\n\n    \" * \", $stars_size -\u003e repeat -\u003e $stars\n    \" \", $space_size -\u003e repeat -\u003e $spaces\n\n    $spaces, $stars -\u003e cat\n\n    \"`*-\", $stars_size -\u003e repeat -\u003e $stars\n    \" \", $space_size -\u003e repeat -\u003e $spaces\n\n    $spaces, $stars -\u003e cat\n@loop, $counter, 10 -\u003e jump if not equal\n\n3 -\u003e $c\n@loop\n    $c-\u003e increase\n\n    $c, 2 -\u003e multiply -\u003e $stars_size\n    22, $c-\u003e minus -\u003e $space_size\n\n\n    \"*\", $stars_size -\u003e repeat -\u003e $stars\n    \" \", $space_size -\u003e repeat -\u003e $spaces\n\n    $spaces, $stars -\u003e cat\n\n@loop, $c, 7 -\u003e jump if not equal\n\n```\n\n```sh\n\n                   * \n                  `*-\n                  *  * \n                 `*-`*-\n                 *  *  * \n                `*-`*-`*-\n                *  *  *  * \n               `*-`*-`*-`*-\n               *  *  *  *  * \n              `*-`*-`*-`*-`*-\n              *  *  *  *  *  * \n             `*-`*-`*-`*-`*-`*-\n             *  *  *  *  *  *  * \n            `*-`*-`*-`*-`*-`*-`*-\n            *  *  *  *  *  *  *  * \n           `*-`*-`*-`*-`*-`*-`*-`*-\n           *  *  *  *  *  *  *  *  * \n          `*-`*-`*-`*-`*-`*-`*-`*-`*-\n          *  *  *  *  *  *  *  *  *  * \n         `*-`*-`*-`*-`*-`*-`*-`*-`*-`*-\n                  ********\n                 **********\n                ************\n               **************\n\n```\n\n## DataTypes\n\n```chp\n1 -\u003e type_of\nint\n\n3.14 -\u003e type of\nfloat\n\n\"ali\" -\u003e TypeOf\nstring\n\ntrue -\u003e type      \nboolean\n\n-\u003e [1 2 3] -\u003e type      \nlist\n```\n\n## Memory Management\n\nYour OS will free memory after process is done!\n\n## Installation\n\n### Download release\n\n[link](https://github.com/ali77gh/Chap/releases)\n\n### Build from source\n\n```bash\ngit clone https://github.com/ali77gh/Chap\ncargo build --release\nsudo cp ./target/release/chap /usr/bin\n```\n\n## How To Use\n\n### REPL (Run Execute Print Loop)\n\n[./repl/mod.rs](https://github.com/ali77gh/Chap/blob/master/src/repl/mod.rs)\n\n```bash\n❯ chap\n-\u003e \"hello world\"\nhello world\n-\u003e \n```\n\n### File_executor\n\n[./file_executor/mod.rs](https://github.com/ali77gh/Chap/blob/master/src/file_executor/mod.rs)\n\n```bash\n❯ chap number_guess_game.chp \n1\nwrong\n2\nwrong\n3\nyou win answer was: 3\n```\n\n### Use As lib\n\n[./lib.rs](https://github.com/ali77gh/Chap/blob/master/src/lib.rs)\n\n```bash\ncargo add chap # this include eval function\n```\n\nor\n\n```bash\ncargo build --release --lib\n```\n\n## Release Note version 2.0.0\n\n- [x] Arrays\n- [x] fix: 'random' module will not work on WASM\n- [x] eval function\n- [x] [ChapApp](https://github.com/ali77gh/ChapApp)\n- [x] Piping syntax (1, 2 -\u003e add -\u003e toString -\u003e print)\n- [x] Parentheses (1, 2 -\u003e add), (2, 3 -\u003e add) -\u003e concat -\u003e $var // 35\n- [x] New debugger syntax 1,2 -\u003e add? -\u003e $sum\n\n## Stars\n\n[![Stargazers over time](https://starchart.cc/ali77gh/chap.svg)](https://starchart.cc/ali77gh/chap)\n\n## Builtin Functions\n\n[runtime/builtin_function](https://github.com/ali77gh/Chap/tree/master/src/runtime/builtin_function)\\\nChap has 49 builtin function(version 2.0.0) (less than Java's keywords)\n\n| Names                   | Input params      | output   | description                                                 |\n|-------------------------|-------------------|----------|-------------------------------------------------------------|\n| assign                  | any               | any      | put a value or variable in other variable  1 -\u003e $a          |\n| std_out, print, show    | any, any, any,... | any      | prints params to console                                    |\n| std_in, input           | nothing           | string   | read user input from console                                |\n| exit, quit, kill, end   | nothing           | nothing  |  ends execution                                             |\n| jump                    | @tag              | nothing  | moves executor curser to closest tag with specified name     |\n| jump_if                 | @tag, bool        | nothing  | jumps to tag if 1st param is true                           |\n| jump_if_not             | @tag, bool        | nothing  | jumps to tag if 1st param is false                          |\n| jump_if_equal, jeq      | @tag, any, any    | nothing  | jumps to tag if 2th and 3th params are equal                |\n| jump_if_not_equal, jneq | @tag, any, any    | nothing  | jumps to tag if 2th and 3th params are not equal            |\n| new_tag                 | @tag              | nothing  | creates tag (you can call this just by writing tag name     |\n| add                     | num, num          | num      | adds two numbers     1 + 2 = 3 or 1.5 + 1 = 2.5             |\n| add_many, add_all       | num, num, num,... | num      | adds many numbers    1 + 2 + 3 = 6                          |\n| minus                   | num, num          | num      | minus two numbers    3 - 2  = 1                             |\n| multiply                | num, num          | num      | minus two numbers    3 * 2  = 6                             |\n| divide                  | num, num          | num      | divide two numbers   3 / 2  = 1.5                           |\n| modulus, mod            | num, num          | num      | divide remaining     3 / 2  = 1                             |\n| power, pow              | num, num          | num      | power                3 ** 2  = 9                            |\n| square_root, sqrt       | num               | num      | square root          9 -\u003e sqrt -\u003e 3                         |\n| increase, inc           | $num              | nothing  | adds one to variable short form of: $a,1 -\u003e add -\u003e $a       |\n| decrease, dec           | $num              | nothing  | minus one from variable short form of: $a,1 -\u003e minus -\u003e $a  |\n| equal, eq               | any, any          | bool     | true if 1st and 2nd are equal and false if they are not     |\n| not_equal, neq          | any, any          | bool     | true if 1st and 2nd are not equal and false if they are     |\n| and                     | bool, bool        | bool     | and logical gate                                            |\n| or                      | bool, bool        | bool     | or logical gate                                             |\n| not                     | bool              | bool     | not logical gate                                            |\n| greater_than, gt        | num, num          | bool     | true if 1st param is bigger than 2nd param 3,2 -\u003e true      |\n| less_than, lt           | num, num          | bool     | true if 1st param is less than 2nd param   3,2 -\u003e false     |\n| concat, cat             | any, any          | string   | convert inputs to string and concat them \"al\",\"i\" -\u003e \"ali\"  |\n| repeat                  | any, int          | string   | convert inputs to string and repeat \"a\",3 -\u003e \"aaa\"          |\n| length, len             | any               | int      | convert input to string and returns length 456 -\u003e 3         |\n| contains, has           | any               | bool     | convert inputs to string and returns 1st contains 2nd 11,1-\u003etrue |\n| slice, sub_string       | any, int, int     | string   | \"hello\", 1, 3 -\u003e \"el\"                                       |\n| insert                  | array, any        | nothing  | insert an item to list                                      |\n| get                     | array, int        | any      | get nth item of list second param is index of item          |\n| pop                     | array             | any      | remove last item of list and returns it                     |\n| last                    | array             | any      | return lsat item of list (without removing it)              |\n| has                     | array, any        | bool     | check if an item exist in a list                            |\n| remove                  | array, any        | nothing  | removes a given item from list                              |\n| remove_at               | array, int        | nothing  | removes item at index of second param                       |\n| index_of                | array, any        | int      | search for an item on list and returns index                |\n| to_string               | any               | string   | convert input to string        1 -\u003e \"1\"                     |\n| to_float                | string            | float    | convert input to float  \"1.5\" -\u003e 1.5 ; \"a\"-\u003eerror           |\n| to_int                  | string            | int      | convert input to int    \"1\" -\u003e 1 ; \"a\"-\u003eerror               |\n| dump, dump_memory       | nothing           | nothing  | prints all variables with values                            |\n| type_of, type           | any               | str      | prints type of param   1 -\u003e int; \"s\" -\u003e string              |\n| now_sec, now, unixtime  | nothing           | float    | unix time standard in seconds                               |\n| wait_mil, wait_millis   | int               | nothing  | delay code execution for 1st milliseconds                   |\n| wait_sec, wait_sec      | int               | nothing  | delay code execution for 1st seconds                        |\n| wait_min, wait_minute   | int               | nothing  | delay code execution for 1st minutes                        |\n| wait_hour,wait_hour     | int               | nothing  | delay code execution for 1st hours                          |\n| wait_hour,wait_hour     | int               | nothing  | delay code execution for 1st hours                          |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fali77gh%2Fchap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fali77gh%2Fchap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fali77gh%2Fchap/lists"}