0.2.0 • Published 8 years ago

babel-plugin-datascript v0.2.0

Weekly downloads
12
License
-
Repository
github
Last release
8 years ago

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

  • library: datascript-mori or mori. Used for automatic add import in file with queries. By default datascript-mori
  • tag: Tag used for marking DataScript query(plugin use TemplateTagLiteral from Ecmascript 2015). By default Datalog. Also plugin reserved all tag like TAG.ANYTHING (i.e Datalog.Pull, Datalog.Q etc.)

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:

  • check query during compilation. Example:

    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.

  • minimize runtime overhead of parse string to EDN in runtime