Plugin for precompile static DataScript query to Mori structs. Also plugin checks query in compile-time with Datascript parse-query API.
var Datalog = Datalog.Q`[:find ?e ?email
:in $ [[?n ?email]]
:where [?e :name ?n]]`;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')));- library: datascript-mori or mori. Used for automatic add
importin file with queries. By defaultdatascript-mori - tag: Tag used for marking DataScript query(plugin use TemplateTagLiteral from Ecmascript 2015). By default
Datalog. Also plugin reserved all tag likeTAG.ANYTHING(i.eDatalog.Pull,Datalog.Qetc.) - cache: If
cacheistruethen for dynamic queries will be usedmemoized_parsefromdatascript-mori. By defaultfalse. Not allowed to use withlibrary=mori.
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