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")