Home

Awesome

Babel plugin DataScript Build Status

Plugin for precompile static DataScript query to Mori structs. Also plugin checks query in compile-time with Datascript parse-query API.

Example

Input:

var Datalog = Datalog.Q`[:find  ?e ?email
                          :in    $ [[?n ?email]]
                          :where [?e :name ?n]]`;

Output:

import { mori as _mori } from 'datascript-mori';
var Datalog = _mori.vector(_mori.keyword('find'), _mori.symbol('?e'), _mori.symbol('?email'), _mori.keyword('in'), _mori.symbol('$'), _mori.vector(_mori.vector(_mori.symbol('?n'), _mori.symbol('?email'))), _mori.keyword('where'), _mori.vector(_mori.symbol('?e'), _mori.keyword('name'), _mori.symbol('?n')));

Options

Why?

Datalog query is a ClojureScript data structures, not a string. In JS API Datalog query is a string which convert to CLJS data structures in runtime Babel-plugin transfers this convertaion in compile-time. Conversion in compile-time has two advantages:

var q1 = Datalog`[ :find (sum ?heads)
             :with ?monster
             :in   [[?monster ?heads]]`;

This code doesnt compile because in EDN string missing closing bracket ]. Also query with tag Datalog.Q and Datalog.Pull checks with parse-query and parse-pull API.

var q1 = Datalog.Q`[:find ?e :with ?f :where [?e]]`;;

This code doesnt compile because in query variable ?f is unknown.