Skip to content

Commit

Permalink
feat: node compatibility (#33)
Browse files Browse the repository at this point in the history
* test: enable node testing

* fix: issue 19

* test: pretty formatted test expectations

* refactor: clean up namespace imports

---------

Co-authored-by: Timo Kramer <fw-git@timokramer.de>
  • Loading branch information
jsmassa and TimoKramer authored Mar 6, 2023
1 parent a7821bd commit c5a871d
Show file tree
Hide file tree
Showing 16 changed files with 315 additions and 131 deletions.
29 changes: 6 additions & 23 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,41 +3,24 @@ version: 2.1
orbs:
tools: replikativ/clj-tools@0

jobs:
build:
executor: tools/clojurecli
steps:
- attach_workspace:
at: /home/circleci
- run:
name: Clean
command: clojure -T:build clean
- run:
name: Build
command: clojure -T:build jar
no_output_timeout: 5m
- persist_to_workspace:
root: /home/circleci/
paths:
- .m2
- .npm
- replikativ

workflows:
build_test_and_deploy:
jobs:
- tools/setup:
context: dockerhub-deploy
setup_cljs: false
- tools/unittest:
context: dockerhub-deploy
requires:
- tools/setup
- tools/cljstest:
context: docker-deploy
requires:
- tools/build
- tools/format:
context: dockerhub-deploy
requires:
- tools/setup
- build:
- tools/build:
context: dockerhub-deploy
requires:
- tools/setup
Expand All @@ -51,7 +34,7 @@ workflows:
requires:
- tools/unittest
- tools/format
- build
- tools/build
- tools/release:
context:
- dockerhub-deploy
Expand Down
2 changes: 2 additions & 0 deletions .clj-kondo/config.edn
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
{:lint-as {datalog.parser.type/deftrecord clojure.core/defrecord
datalog.parser.impl.util/forv clojure.core/for}}
8 changes: 7 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@ pom.xml.asc
.hg/
*.iml
/.idea
.clj-kondo/
.cache
.cpcache/
.lsp/
.cljs_node_repl/
node_modules/
out/
package-lock.json
package.json

9 changes: 9 additions & 0 deletions bin/run-cljstests
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
set -o errexit
set -o pipefail

echo "Running tests for node"
[ -d "node_modules/ws" ] || npm install ws
clojure -M:test unit-node

#echo "Running tests for browser"
#clojure -M:test unit-browser
2 changes: 1 addition & 1 deletion bin/run-unittests
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
#!/usr/bin/env bash

clojure -M:test "$@"
clojure -M:test --focus unit "$@"
4 changes: 3 additions & 1 deletion deps.edn
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
:extra-deps {com.clojure-goes-fast/clj-async-profiler {:mvn/version "0.4.1"}
criterium/criterium {:mvn/version "0.4.5"}}}
:test {:main-opts ["-m" "kaocha.runner"]
:extra-deps {lambdaisland/kaocha {:mvn/version "1.71.1119"}}
:extra-deps {org.clojure/clojurescript {:mvn/version "1.11.60"}
lambdaisland/kaocha {:mvn/version "1.71.1119"}
lambdaisland/kaocha-cljs {:mvn/version "1.4.130"}}
:extra-paths ["perf" "test"]}
:build {:deps {io.github.seancorfield/build-clj {:git/tag "v0.8.2"
:git/sha "0ffdb4c"}
Expand Down
1 change: 0 additions & 1 deletion perf/datalog/parser_perf.clj
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
(ns datalog.parser-perf
(:require [clojure.test :refer [deftest]]
[datalog.parser :as parser]
[datalog.parser.test.util]
[criterium.core :as cc]
[clj-async-profiler.core :as prof]))

Expand Down
26 changes: 12 additions & 14 deletions src/datalog/parser/impl.cljc
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
(ns datalog.parser.impl
(ns datalog.parser.impl
(:require [clojure.set :as set]
[datalog.parser.type :as t]
[datalog.parser.util :refer [postwalk]]
[datalog.parser.type :as t #?@(:cljs [:refer [Not And Or Aggregate SrcVar RulesVar RuleExpr
RuleVars Variable ReturnMaps MappingKey]])]
[datalog.parser.impl.proto :as p]
[datalog.parser.impl.util :as util
#?(:cljs :refer-macros :clj :refer) [raise forv]]
#?(:cljs [datalog.parser.type :refer
[Not And Or Aggregate SrcVar RulesVar RuleExpr
RuleVars Variable ReturnMaps MappingKey]]))
#?(:cljs :refer-macros :clj :refer) [raise forv]])
(:refer-clojure :rename {distinct? core-distinct?})
#?(:clj
(:import [datalog.parser.type
Not And Or Aggregate SrcVar RulesVar RuleExpr RuleVars Variable ReturnMaps MappingKey])))
Not And Or Aggregate SrcVar RulesVar RuleExpr
RuleVars Variable ReturnMaps MappingKey])))

#?(:clj (set! *warn-on-reflection* true))

Expand Down Expand Up @@ -431,18 +429,18 @@
"Parse pagination limit"
[limit]
(when limit
(if (= (type (first limit)) java.lang.Long)
(if (integer? (first limit))
(first limit)
(raise "Cannot parse :limit, expected java.lang.Long"
(raise "Cannot parse :limit, expected integer"
{:error :parser/limit, :limit limit}))))

(defn parse-offset
"Parse pagination offset"
[offset]
(when offset
(if (= (type (first offset)) java.lang.Long)
(if (integer? (first offset))
(first offset)
(raise "Cannot parse :offset, expected java.lang.Long"
(raise "Cannot parse :offset, expected integer"
{:error :parser/offset, :offset offset}))))

(defn parse-return-maps
Expand Down Expand Up @@ -515,7 +513,7 @@
(recur (update parsed key (fnil conj []) q) key qs))
parsed))))

(defn assert-valid [q form {:keys [find] :as mform}]
(defn assert-valid [q form {:keys [find] :as _mform}]
(let [find-vars (t/collect-vars #{} (:qfind q))
with-vars (set (:qwith q))
in-vars (t/collect-vars #{} (:qin q))
Expand Down Expand Up @@ -560,7 +558,7 @@

(let [rule-exprs (collect-type RuleExpr (:qwhere q))
rules-vars (collect-type RulesVar (:qin q))]
(when (and (not (empty? rule-exprs))
(when (and (seq rule-exprs)
(empty? rules-vars))
(raise "Missing rules var '%' in :in"
{:error :parser/query, :form form}))))
13 changes: 9 additions & 4 deletions src/datalog/parser/impl/proto.cljc
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,15 @@
(defprotocol IFindElements
(find-elements [this]))

(extend-type #?(:clj Object :cljs object)
Traversable
(-traversable? [_] false))

(extend-type nil
Traversable
(-traversable? [_] false))

#?(:clj (extend-protocol Traversable
Object (-traversable? [_] false))

:cljs (extend-protocol Traversable
boolean (-traversable? [_] false)
number (-traversable? [_] false)
object (-traversable? [_] false)
string (-traversable? [_] false)))
23 changes: 7 additions & 16 deletions src/datalog/parser/impl/util.cljc
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
(ns ^:no-doc datalog.parser.impl.util
(:require [datalog.parser.impl.proto :as proto]
[datalog.parser.util :as util]
[clojure.string :as str])
(:refer-clojure :exclude [seqable?]))

Expand All @@ -27,8 +26,9 @@
(defn- reverse-attr? [v]
(str/starts-with? v "_"))

(defn #?@(:clj [^Boolean reverse-ref?]
:cljs [^boolean reverse-ref?]) [attr]
(defn reverse-ref?
#?@(:clj [^Boolean [attr]]
:cljs [^boolean [attr]])
(-> attr decompose-ref second reverse-attr?))

(defn- invert-name [s]
Expand All @@ -44,22 +44,13 @@
(defn prefixed-symbol? [sym prefix]
(and (symbol? sym) (= (first (name sym)) prefix)))

(defn- #?@(:clj [^Boolean seqable?]
:cljs [^boolean seqable?])
[x]
(defn- seqable?
#?@(:clj [^Boolean [x]]
:cljs [^boolean [x]])
(and (not (string? x))
#?(:cljs (or (cljs.core/seqable? x)
(array? x))
:clj (clojure.core/seqable? x)
;; was
#_(or (seq? x)
(instance? clojure.lang.Seqable x)
(nil? x)
(instance? Iterable x)
(-> x .getClass .isArray)
(instance? java.util.Map x)))))


:clj (clojure.core/seqable? x))))

(defn collect
([pred form] (collect pred form []))
Expand Down
2 changes: 1 addition & 1 deletion src/datalog/parser/pull.cljc
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@

(defrecord PullPattern [specs]
IPullSpecComponent
(-as-spec [this]
(-as-spec [_this]
(let [init (PullSpec. false (transient {}))
spec (reduce aggregate-specs init specs)]
[:subpattern (update spec :attrs persistent!)])))
Expand Down
5 changes: 2 additions & 3 deletions test/datalog/parser/impl_test.cljc
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,8 @@
(:require #?(:cljs [cljs.test :refer-macros [is are deftest testing]]
:clj [clojure.test :refer [is are deftest testing]])
[datalog.parser.impl :as dp]
[datalog.parser.type :as t]
[datalog.parser.test.util])
(:import [clojure.lang ExceptionInfo]))
[datalog.parser.type :as t])
#?(:clj (:import [clojure.lang ExceptionInfo])))

(deftest bindings
(are [form res] (= (dp/parse-binding form) res)
Expand Down
4 changes: 2 additions & 2 deletions test/datalog/parser/pull_test.cljc
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
(ns datalog.parser.pull-test
(:require [datalog.parser.pull :as dpp]
#?(:cljs [cljs.test :as t :refer-macros [is are deftest testing]]
:clj [clojure.test :as t :refer [is are deftest testing]])))
#?(:cljs [cljs.test :as t :refer-macros [is deftest testing]]
:clj [clojure.test :as t :refer [is deftest testing]])))

#?(:cljs
(def Throwable js/Error))
Expand Down
16 changes: 0 additions & 16 deletions test/datalog/parser/test/util.cljc

This file was deleted.

Loading

0 comments on commit c5a871d

Please sign in to comment.