From 74a79a79d99880d21625ec6e63f0b8bf7319bcca Mon Sep 17 00:00:00 2001
From: Eike Kettner <eike.kettner@posteo.de>
Date: Sun, 21 Feb 2021 12:04:48 +0100
Subject: [PATCH] Initial project setup

---
 build.sbt                                     | 25 +++++++++++++++++--
 .../src/main/scala/docspell/query/Query.scala |  3 +++
 .../scala/docspell/query/QueryParser.scala    | 13 ++++++++++
 project/Dependencies.scala                    | 11 ++++++++
 project/plugins.sbt                           |  2 ++
 5 files changed, 52 insertions(+), 2 deletions(-)
 create mode 100644 modules/query/src/main/scala/docspell/query/Query.scala
 create mode 100644 modules/query/src/main/scala/docspell/query/QueryParser.scala

diff --git a/build.sbt b/build.sbt
index 2c9db4f1..3063a246 100644
--- a/build.sbt
+++ b/build.sbt
@@ -264,6 +264,24 @@ ${lines.map(_._1).mkString(",\n")}
   )
   .dependsOn(common)
 
+val query =
+  crossProject(JSPlatform, JVMPlatform)
+    .crossType(CrossType.Pure)
+    .in(file("modules/query"))
+    .settings(sharedSettings)
+    .settings(testSettings)
+    .settings(
+      name := "docspell-query",
+      libraryDependencies +=
+        Dependencies.catsParseJS.value
+    )
+    .jvmSettings(
+      libraryDependencies +=
+        Dependencies.scalaJsStubs
+    )
+val queryJVM = query.jvm
+val queryJS  = query.js
+
 val store = project
   .in(file("modules/store"))
   .disablePlugins(RevolverPlugin)
@@ -284,7 +302,7 @@ val store = project
         Dependencies.calevCore ++
         Dependencies.calevFs2
   )
-  .dependsOn(common)
+  .dependsOn(common, queryJVM)
 
 val extract = project
   .in(file("modules/extract"))
@@ -425,6 +443,7 @@ val webapp = project
     openapiSpec := (restapi / Compile / resourceDirectory).value / "docspell-openapi.yml",
     openapiElmConfig := ElmConfig().withJson(ElmJson.decodePipeline)
   )
+  .dependsOn(queryJS)
 
 // --- Application(s)
 
@@ -594,7 +613,9 @@ val root = project
     backend,
     webapp,
     restapi,
-    restserver
+    restserver,
+    queryJVM,
+    queryJS
   )
 
 // --- Helpers
diff --git a/modules/query/src/main/scala/docspell/query/Query.scala b/modules/query/src/main/scala/docspell/query/Query.scala
new file mode 100644
index 00000000..5f6f3b0f
--- /dev/null
+++ b/modules/query/src/main/scala/docspell/query/Query.scala
@@ -0,0 +1,3 @@
+package docspell.query
+
+case class Query(raw: String)
diff --git a/modules/query/src/main/scala/docspell/query/QueryParser.scala b/modules/query/src/main/scala/docspell/query/QueryParser.scala
new file mode 100644
index 00000000..0f6278d9
--- /dev/null
+++ b/modules/query/src/main/scala/docspell/query/QueryParser.scala
@@ -0,0 +1,13 @@
+package docspell.query
+
+import scala.scalajs.js.annotation._
+
+@JSExportTopLevel("DsQueryParser")
+object QueryParser {
+
+  @JSExport
+  def parse(input: String): Either[String, Query] = {
+    Right(Query("parsed: " + input))
+
+  }
+}
diff --git a/project/Dependencies.scala b/project/Dependencies.scala
index a512e9ba..0ce02040 100644
--- a/project/Dependencies.scala
+++ b/project/Dependencies.scala
@@ -1,6 +1,7 @@
 package docspell.build
 
 import sbt._
+import org.portablescala.sbtplatformdeps.PlatformDepsPlugin.autoImport._
 
 object Dependencies {
 
@@ -8,6 +9,7 @@ object Dependencies {
   val BetterMonadicForVersion = "0.3.1"
   val BitpeaceVersion         = "0.6.0"
   val CalevVersion            = "0.4.1"
+  val CatsParseVersion        = "0.3.1"
   val CirceVersion            = "0.13.0"
   val ClipboardJsVersion      = "2.0.6"
   val DoobieVersion           = "0.10.0"
@@ -41,6 +43,15 @@ object Dependencies {
   val JQueryVersion           = "3.5.1"
   val ViewerJSVersion         = "0.5.8"
 
+  val catsParse = Seq(
+    "org.typelevel" %% "cats-parse" % CatsParseVersion
+  )
+  val catsParseJS =
+    Def.setting("org.typelevel" %%% "cats-parse" % CatsParseVersion)
+
+  val scalaJsStubs =
+    "org.scala-js" %% "scalajs-stubs" % "1.0.0" % "provided"
+
   val kittens = Seq(
     "org.typelevel" %% "kittens" % KittensVersion
   )
diff --git a/project/plugins.sbt b/project/plugins.sbt
index 958f4d6d..a3b25d78 100644
--- a/project/plugins.sbt
+++ b/project/plugins.sbt
@@ -7,5 +7,7 @@ addSbtPlugin("com.typesafe.sbt" % "sbt-ghpages" % "0.6.3")
 addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "1.0.0")
 addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.8.0")
 addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1")
+addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "1.0.0")
+addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.5.0")
 addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.4.2")
 addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "3.9.5")