Tesl is a scripting language embedded in JavaScript designed for creating reactive front-end apps, but usable in any JavaScript environment. Strongly inspired by LISP and Elm.
(.
(use v2 web data)
(print "Hello world!")
(prog "#app"
(data.object
:key "hello"
)
(html.div
(html.b (state :key) " world!")
(html.button "Change"
(dom.listen :click (fun [e:Event]:void
(@ state :key "bye")
))
)
)
)
)
Tesl has only few syntax structures:
Name | Example | Notes |
---|---|---|
string |
"hello world" |
String are only available using " double quotes. |
number |
512 , 2.12 |
There are no negative numbers. You need an appropriate command. |
kind |
:string |
Used in type declaration, but also as an atom or key. |
arguments |
[x:number y:number] |
Used mainly in function declaration. |
command |
(print 1337) |
Building block of the whole language. Execution time depends on the function outside. |
Tesl doesn't come with a standard library, so you need to write one yourself or use the one created by me - hello-tesl
.
Import tesl
into your project, provide it with your StdLib
and you are ready to execute your programs!
const { Tesl } = require('tesl')
const { createV2, data, web } = require('hello-tesl') // standard library
const program = require('./src/index.tisp') // we import a text file using 'raw-loader'
function createContext() {
const context = new Tesl()
const v2 = createV2(filename => {
return require(`./src/${filename}.tisp`)
}, createContext) // we need this, so our flavor of Tesl can import and execute other files
context.provide('v2', v2) // we provide different libraries
context.provide('web', web)
context.provide('data', data)
return context // we must return the instance of Tesl
}
let ctx = createContext()
ctx.execute(program) // let's go!
(.
(use v2)
(print "Hello world")
)
module.exports = {
entry: './index.js',
output: {
filename: './bundle.js'
},
resolve: {
extensions: ['.tisp', '.js']
},
module: {
loaders: [
{ test: /\.tisp$/, loader: 'raw-loader' }
]
}
}
Do webpack-dev-server
, then open localhost:8080
in the browser and you should now see "hello world"
printed in the browser console!
You are welcome to open an issue or send me a pull request. I will be more than happy to collaborate!
MIT