Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

are/tesl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

11 Commits

Repository files navigation

Tesl

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.

Syntax

(.
 (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.

Usage

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!

Webpack quickstart example

index.js

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!

src/index.tisp

(.
 (use v2)
 (print "Hello world")
)

webpack.config.js

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!

Contribution

You are welcome to open an issue or send me a pull request. I will be more than happy to collaborate!

License

MIT

About

Typed, embedded scripting language

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /