Skip to content

Commit 8f936a0

Browse files
authored
Merge pull request #27 from filosganga/support-scalajs
feat: add scalajs support
2 parents b409c61 + b99089c commit 8f936a0

File tree

21 files changed

+529
-78
lines changed

21 files changed

+529
-78
lines changed

.github/workflows/ci.yml

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,21 @@ jobs:
2626
strategy:
2727
matrix:
2828
os: [ubuntu-latest]
29-
scala: [2.13.6, 3.0.0, 2.12.14]
30-
29+
scala: [2.13.6, 3.2.0, 2.12.14]
30+
java: [temurin@11]
3131
runs-on: ${{ matrix.os }}
3232
steps:
3333
- name: Checkout current branch (full)
3434
uses: actions/checkout@v2
3535
with:
3636
fetch-depth: 0
3737

38-
- name: Setup Java and Scala
39-
uses: olafurpg/setup-scala@v10
38+
- name: Setup Java (temurin@11)
39+
if: matrix.java == 'temurin@11'
40+
uses: actions/setup-java@v2
4041
with:
41-
java-version: ${{ matrix.java }}
42+
distribution: temurin
43+
java-version: 11
4244

4345
- name: Cache sbt
4446
uses: actions/cache@v2
@@ -53,15 +55,15 @@ jobs:
5355
key: ${{ runner.os }}-sbt-cache-v2-${{ hashFiles('**/*.sbt') }}-${{ hashFiles('project/build.properties') }}
5456

5557
- name: Check that workflows are up to date
56-
run: sbt --client '++${{ matrix.scala }}; githubWorkflowCheck'
58+
run: sbt ++${{ matrix.scala }} githubWorkflowCheck
5759

58-
- run: sbt --client '++${{ matrix.scala }}; ci'
60+
- run: sbt ++${{ matrix.scala }} ci
5961

6062
- if: matrix.scala == '2.13.6'
61-
run: sbt --client '++${{ matrix.scala }}; docs/mdoc'
63+
run: sbt ++${{ matrix.scala }} docs/mdoc
6264

6365
- name: Compress target directories
64-
run: tar cf targets.tar target modules/core/target project/target
66+
run: tar cf targets.tar target modules/core/js/target modules/core/jvm/target project/target
6567

6668
- name: Upload target directories
6769
uses: actions/upload-artifact@v2
@@ -77,18 +79,20 @@ jobs:
7779
matrix:
7880
os: [ubuntu-latest]
7981
scala: [2.13.6]
80-
82+
java: [temurin@11]
8183
runs-on: ${{ matrix.os }}
8284
steps:
8385
- name: Checkout current branch (full)
8486
uses: actions/checkout@v2
8587
with:
8688
fetch-depth: 0
8789

88-
- name: Setup Java and Scala
89-
uses: olafurpg/setup-scala@v10
90+
- name: Setup Java (temurin@11)
91+
if: matrix.java == 'temurin@11'
92+
uses: actions/setup-java@v2
9093
with:
91-
java-version: ${{ matrix.java }}
94+
distribution: temurin
95+
java-version: 11
9296

9397
- name: Cache sbt
9498
uses: actions/cache@v2
@@ -112,12 +116,12 @@ jobs:
112116
tar xf targets.tar
113117
rm targets.tar
114118
115-
- name: Download target directories (3.0.0)
119+
- name: Download target directories (3.2.0)
116120
uses: actions/download-artifact@v2
117121
with:
118-
name: target-${{ matrix.os }}-3.0.0-${{ matrix.java }}
122+
name: target-${{ matrix.os }}-3.2.0-${{ matrix.java }}
119123

120-
- name: Inflate target directories (3.0.0)
124+
- name: Inflate target directories (3.2.0)
121125
run: |
122126
tar xf targets.tar
123127
rm targets.tar
@@ -135,7 +139,7 @@ jobs:
135139
- name: Import signing key
136140
run: echo $PGP_SECRET | base64 -d | gpg --import
137141

138-
- run: sbt --client '++${{ matrix.scala }}; release'
142+
- run: sbt ++${{ matrix.scala }} release
139143

140144
docs:
141145
name: Deploy docs
@@ -145,7 +149,7 @@ jobs:
145149
matrix:
146150
os: [ubuntu-latest]
147151
scala: [2.13.6]
148-
152+
java: [temurin@11]
149153
runs-on: ${{ matrix.os }}
150154
steps:
151155
- name: Download target directories (2.13.6)
@@ -158,12 +162,12 @@ jobs:
158162
tar xf targets.tar
159163
rm targets.tar
160164
161-
- name: Download target directories (3.0.0)
165+
- name: Download target directories (3.2.0)
162166
uses: actions/download-artifact@v2
163167
with:
164-
name: target-${{ matrix.os }}-3.0.0-${{ matrix.java }}
168+
name: target-${{ matrix.os }}-3.2.0-${{ matrix.java }}
165169

166-
- name: Inflate target directories (3.0.0)
170+
- name: Inflate target directories (3.2.0)
167171
run: |
168172
tar xf targets.tar
169173
rm targets.tar
@@ -182,4 +186,4 @@ jobs:
182186
uses: peaceiris/actions-gh-pages@v3
183187
with:
184188
publish_dir: ./target/website
185-
github_token: ${{ secrets.GITHUB_TOKEN }}
189+
github_token: ${{ secrets.GITHUB_TOKEN }}

.github/workflows/clean.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,4 @@ jobs:
5656
printf "Deleting '%s' #%d, %'d bytes\n" $name ${ARTCOUNT[$name]} $size
5757
ghapi -X DELETE $REPO/actions/artifacts/$id
5858
done
59-
done
59+
done

build.sbt

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,43 +17,57 @@ Global / excludeLintKeys += scmInfo
1717
val Scala213 = "2.13.6"
1818
ThisBuild / spiewakMainBranches := Seq("main")
1919

20-
ThisBuild / crossScalaVersions := Seq(Scala213, "3.0.0", "2.12.14")
20+
ThisBuild / crossScalaVersions := Seq(Scala213, "3.2.0", "2.12.14")
2121
ThisBuild / versionIntroduced := Map("3.0.0" -> "0.3.0")
2222
ThisBuild / scalaVersion := (ThisBuild / crossScalaVersions).value.head
2323
ThisBuild / initialCommands := """
2424
|import cats._, data._, syntax.all._
2525
|import dynosaur._
2626
""".stripMargin
27-
ThisBuild / testFrameworks += new TestFramework("munit.Framework")
28-
29-
def dep(org: String, prefix: String, version: String)(modules: String*)(
30-
testModules: String*
31-
) =
32-
modules.map(m => org %% (prefix ++ m) % version) ++
33-
testModules.map(m => org %% (prefix ++ m) % version % Test)
3427

3528
lazy val root = project
3629
.in(file("."))
3730
.enablePlugins(NoPublishPlugin, SonatypeCiReleasePlugin)
38-
.aggregate(core)
31+
.aggregate(core.js, core.jvm)
3932

40-
lazy val core = project
33+
lazy val core = crossProject(JSPlatform, JVMPlatform)
34+
.crossType(CrossType.Full)
4135
.in(file("modules/core"))
4236
.settings(
4337
name := "dynosaur-core",
4438
scalafmtOnCompile := true,
45-
libraryDependencies ++=
46-
dep("org.typelevel", "cats-", "2.6.1")("core", "free")() ++
47-
dep("org.typelevel", "", "2.6.1")("alleycats-core")() ++
48-
dep("org.scodec", "scodec-bits", "1.1.27")("")() ++
49-
dep("org.scalameta", "munit", "0.7.25")()("", "-scalacheck") ++
50-
dep("org.typelevel", "paiges-", "0.4.2")("core", "cats")() ++
51-
Seq("software.amazon.awssdk" % "dynamodb" % "2.17.100")
39+
libraryDependencies ++= List(
40+
"org.typelevel" %%% "cats-core" % "2.6.1",
41+
"org.typelevel" %%% "cats-free" % "2.6.1",
42+
"org.typelevel" %%% "alleycats-core" % "2.6.1",
43+
"org.typelevel" %%% "paiges-core" % "0.4.2",
44+
"org.typelevel" %%% "paiges-cats" % "0.4.2",
45+
"org.scodec" %%% "scodec-bits" % "1.1.34",
46+
"org.scalameta" %%% "munit" % "0.7.29" % Test,
47+
"org.scalameta" %%% "munit-scalacheck" % "0.7.29" % Test
48+
)
49+
)
50+
.jvmSettings(
51+
libraryDependencies ++= Seq(
52+
"software.amazon.awssdk" % "dynamodb" % "2.14.15"
53+
)
54+
)
55+
56+
lazy val coreJS = core.js
57+
lazy val coreJVM = core.jvm
58+
59+
lazy val jsdocs = project
60+
.dependsOn(core.js)
61+
.settings(
62+
githubWorkflowArtifactUpload := false,
63+
libraryDependencies += "org.scala-js" %%% "scalajs-dom" % "2.3.0"
5264
)
65+
.enablePlugins(ScalaJSPlugin)
5366

5467
lazy val docs = project
5568
.in(file("mdoc"))
5669
.settings(
70+
mdocJS := Some(jsdocs),
5771
mdocIn := file("docs"),
5872
mdocOut := file("target/website"),
5973
mdocVariables := Map(
@@ -65,10 +79,10 @@ lazy val docs = project
6579
githubWorkflowArtifactUpload := false,
6680
fatalWarningsInCI := false
6781
)
68-
.dependsOn(core)
82+
.dependsOn(core.jvm)
6983
.enablePlugins(MdocPlugin, NoPublishPlugin)
7084

71-
ThisBuild / githubWorkflowJavaVersions := Seq("[email protected]")
85+
ThisBuild / githubWorkflowJavaVersions := Seq(JavaSpec.temurin("11"))
7286

7387
ThisBuild / githubWorkflowBuildPostamble ++= List(
7488
WorkflowStep.Sbt(
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/*
2+
* Copyright 2020 Fabio Labella
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package dynosaur
18+
19+
import scala.scalajs.js
20+
import scala.scalajs.js.typedarray.Uint8Array
21+
22+
@js.native
23+
trait AttributeValue extends js.Object {
24+
def S: js.UndefOr[String] = js.native
25+
def N: js.UndefOr[String] = js.native
26+
def B: js.UndefOr[Uint8Array] = js.native
27+
def SS: js.UndefOr[js.Array[String]] = js.native
28+
def NS: js.UndefOr[js.Array[String]] = js.native
29+
def BS: js.UndefOr[js.Array[Uint8Array]] = js.native
30+
def M: js.UndefOr[js.Dictionary[AttributeValue]] = js.native
31+
def L: js.UndefOr[js.Array[AttributeValue]] = js.native
32+
def NULL: js.UndefOr[Boolean] = js.native
33+
def BOOL: js.UndefOr[Boolean] = js.native
34+
def $unknown: js.UndefOr[js.Tuple2[String, js.Any]] = js.native
35+
}
36+
37+
object AttributeValue {
38+
val NULL: AttributeValue =
39+
js.Dynamic.literal(NULL = true).asInstanceOf[AttributeValue]
40+
def BOOL(value: Boolean): AttributeValue =
41+
js.Dynamic.literal(BOOL = value).asInstanceOf[AttributeValue]
42+
def S(value: String): AttributeValue =
43+
js.Dynamic.literal(S = value).asInstanceOf[AttributeValue]
44+
def N(value: String): AttributeValue =
45+
js.Dynamic.literal(N = value).asInstanceOf[AttributeValue]
46+
def B(value: Uint8Array): AttributeValue =
47+
js.Dynamic.literal(B = value).asInstanceOf[AttributeValue]
48+
def M(value: js.Dictionary[AttributeValue]): AttributeValue =
49+
js.Dynamic.literal(M = value).asInstanceOf[AttributeValue]
50+
def L(value: js.Array[AttributeValue]): AttributeValue =
51+
js.Dynamic.literal(L = value).asInstanceOf[AttributeValue]
52+
def SS(value: js.Array[String]): AttributeValue =
53+
js.Dynamic.literal(SS = value).asInstanceOf[AttributeValue]
54+
def NS(value: js.Array[String]): AttributeValue =
55+
js.Dynamic.literal(NS = value).asInstanceOf[AttributeValue]
56+
def BS(value: js.Array[Uint8Array]): AttributeValue =
57+
js.Dynamic.literal(BS = value).asInstanceOf[AttributeValue]
58+
}

0 commit comments

Comments
 (0)