GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - typeetfunc/babel-plugin-datascript: Babel plugin for compile and check DataScript query

BranchesTags
Open more actions menu

Latest commit

 

History

29 Commits
29 Commits

Folders and files

NameName
Last commit message
Last commit date
src
src
 
 
test
test
 
 
.babelrc
.babelrc
 
 
.eslintignore
.eslintignore
 
 
.eslintrc
.eslintrc
 
 
.gitignore
.gitignore
 
 
.npmignore
.npmignore
 
 
.travis.yml
.travis.yml
 
 
README.md
README.md
 
 
package.json
package.json
 
 

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

www.npmjs.com/package/babel-plugin-datascript

Resources

Readme
Activity

Stars

5 stars

Watchers

1 watching

Forks

0 forks
Report repository

Releases

Packages

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.