Skip to content

typeetfunc/babel-plugin-datascript

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.)
  • cache: If cache is true then for dynamic queries will be used memoized_parse from datascript-mori. By default false. Not allowed to use with library=mori.

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

About

Babel plugin for compile and check DataScript query

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published