Skip to content

Commit 1142c7a

Browse files
committed
Fix scalajs
1 parent 0988f76 commit 1142c7a

File tree

9 files changed

+105
-48
lines changed

9 files changed

+105
-48
lines changed

.scalafmt.conf

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
version = "3.5.8"
22
align.preset = none
33
runner.dialect = scala213
4+
45
fileOverride {
5-
"glob:**/src/*/scala-3" {
6+
"glob:**/src/**/scala-3/**" {
67
runner.dialect = scala3
78
}
8-
"glob:**/src/*/scala-2.12" {
9+
"glob:**/src/**/scala-2.12" {
910
runner.dialect = scala212
1011
}
1112
}

build.sbt

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ val scala33 = "3.3.4"
2222
val scala36 = "3.6.2"
2323
ThisBuild / spiewakMainBranches := Seq("main")
2424

25-
ThisBuild / crossScalaVersions := Seq(scala36, scala33, Scala213)
25+
ThisBuild / crossScalaVersions := Seq(Scala213, scala36, scala33)
2626
ThisBuild / versionIntroduced := Map("3.0.0" -> "0.3.0")
2727
ThisBuild / scalaVersion := (ThisBuild / crossScalaVersions).value.head
2828
ThisBuild / initialCommands := """
@@ -34,6 +34,13 @@ lazy val root = project
3434
.in(file("."))
3535
.enablePlugins(NoPublishPlugin, SonatypeCiReleasePlugin)
3636
.aggregate(core.js, core.jvm, benchmark)
37+
.settings(
38+
libraryDependencies --= List(
39+
compilerPlugin(
40+
"org.typelevel" % "kind-projector" % "0.13.2" cross CrossVersion.full
41+
)
42+
)
43+
)
3744

3845
lazy val core = crossProject(JSPlatform, JVMPlatform)
3946
.crossType(CrossType.Full)
@@ -112,6 +119,13 @@ lazy val jsdocs = project
112119
libraryDependencies += "org.scala-js" %%% "scalajs-dom" % "2.3.0"
113120
)
114121
.enablePlugins(ScalaJSPlugin)
122+
.settings(
123+
libraryDependencies --= List(
124+
compilerPlugin(
125+
"org.typelevel" % "kind-projector" % "0.13.2" cross CrossVersion.full
126+
)
127+
)
128+
)
115129

116130
lazy val docs = project
117131
.in(file("mdoc"))
@@ -130,6 +144,13 @@ lazy val docs = project
130144
)
131145
.dependsOn(core.jvm)
132146
.enablePlugins(MdocPlugin, NoPublishPlugin)
147+
.settings(
148+
libraryDependencies --= List(
149+
compilerPlugin(
150+
"org.typelevel" % "kind-projector" % "0.13.2" cross CrossVersion.full
151+
)
152+
)
153+
)
133154

134155
ThisBuild / githubWorkflowJavaVersions := Seq(JavaSpec.temurin("11"))
135156

modules/benchmark/src/main/scala/EncodingBench.scala

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,16 +44,39 @@ class EncodingBench {
4444

4545
@Benchmark
4646
@BenchmarkMode(Array(Mode.Throughput))
47-
def encodeRawAnMAsAv =
48-
val map = new java.util.IdentityHashMap[String, software.amazon.awssdk.services.dynamodb.model.AttributeValue](3)
49-
map.put("name", software.amazon.awssdk.services.dynamodb.model.AttributeValue.builder().s(allosaurus.name).build())
50-
map.put("age", software.amazon.awssdk.services.dynamodb.model.AttributeValue.builder().n(allosaurus.age.toString).build())
51-
map.put("attacks", software.amazon.awssdk.services.dynamodb.model.AttributeValue.builder().n(allosaurus.attacks.toString).build())
52-
DynamoValue(software.amazon.awssdk.services.dynamodb.model.AttributeValue
47+
def encodeRawAnMAsAv = {
48+
val map = new java.util.IdentityHashMap[
49+
String,
50+
software.amazon.awssdk.services.dynamodb.model.AttributeValue
51+
](3)
52+
map.put(
53+
"name",
54+
software.amazon.awssdk.services.dynamodb.model.AttributeValue
55+
.builder()
56+
.s(allosaurus.name)
57+
.build()
58+
)
59+
map.put(
60+
"age",
61+
software.amazon.awssdk.services.dynamodb.model.AttributeValue
62+
.builder()
63+
.n(allosaurus.age.toString)
64+
.build()
65+
)
66+
map.put(
67+
"attacks",
68+
software.amazon.awssdk.services.dynamodb.model.AttributeValue
69+
.builder()
70+
.n(allosaurus.attacks.toString)
71+
.build()
72+
)
73+
DynamoValue(
74+
software.amazon.awssdk.services.dynamodb.model.AttributeValue
5375
.builder()
5476
.m(map)
5577
.build()
5678
)
79+
}
5780

5881
@Benchmark
5982
@BenchmarkMode(Array(Mode.Throughput))

modules/benchmark/src/main/scala/model.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,3 @@ case class Parasaurolophus(name: String, age: Int, songs: Int) extends Dynosaur
2121
case class TyrannosaurusRex(name: String, age: Int, victims: Int)
2222
extends Dynosaur
2323
case class Allosaurus(name: String, age: Int, attacks: Int) extends Dynosaur
24-

modules/core/js/src/main/scala/internal/decoding.scala

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -177,17 +177,30 @@ object decoding {
177177
var error: ReadError = null
178178

179179
while (i < record.fields.length && error == null) {
180-
val field = record.fields(i)
181-
map.get(field.name) match {
182-
case None =>
183-
error = ReadError(
184-
s"required field ${field.name} does not contain a value"
185-
)
186-
case Some(value) =>
187-
field.schema.read(value) match {
188-
case Left(err) => error = err
189-
case Right(v) => decodedValues(i) = v
180+
record.fields(i) match {
181+
case Field.Optional(name, schema, get) =>
182+
map.get(name) match {
183+
case None => decodedValues(i) = None
184+
case Some(value) =>
185+
schema.read(value) match {
186+
case Left(err) => error = err
187+
case Right(v) => decodedValues(i) = Some(v)
188+
}
190189
}
190+
191+
case Field.Required(name, schema, get) =>
192+
map.get(name) match {
193+
case None =>
194+
error = ReadError(
195+
s"required field $name does not contain a value"
196+
)
197+
case Some(value) =>
198+
schema.read(value) match {
199+
case Left(err) => error = err
200+
case Right(v) => decodedValues(i) = v
201+
}
202+
}
203+
191204
}
192205
i += 1
193206
}

modules/core/js/src/main/scala/internal/encoding.scala

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -100,34 +100,35 @@ object encoding {
100100

101101
def encodeRecord[R](
102102
record: Record[R]
103-
): R => Either[WriteError, DynamoValue] = {
104-
val fieldCount = record.fields.length
105-
val fieldNames = record.fieldNames
106-
107-
val writers =
108-
record.fields.map(field => (field.get, field.schema.write(_))).toArray
109-
110-
{ value =>
111-
{
112-
val dict = scalajs.js.Dictionary[AttributeValue]()
113-
var i = 0
114-
var error: WriteError = null
115-
116-
while (i < record.fields.length && error == null) {
117-
val field = record.fields(i)
118-
val fieldValue = field.get(value)
119-
field.schema.write(fieldValue.asInstanceOf[field.A]) match {
103+
): R => Either[WriteError, DynamoValue] = { value =>
104+
var i = 0
105+
var error: WriteError = null
106+
107+
val dict = scalajs.js.Dictionary[AttributeValue]()
108+
109+
while (i < record.fields.length && error == null) {
110+
record.fields(i) match {
111+
case Field.Required(name, schema, get) =>
112+
schema.write(get(value)) match {
120113
case Left(err) => error = err
121-
case Right(v) => dict.addOne(fieldNames(i), v.value)
114+
case Right(v) => dict.addOne(name, v.value)
115+
}
116+
case Field.Optional(name, schema, get) =>
117+
val fieldValue = get(value)
118+
if (fieldValue != None) {
119+
schema.write(fieldValue.get) match {
120+
case Left(err) => error = err
121+
case Right(v) => dict.addOne(name, v.value)
122+
}
122123
}
123-
i += 1
124-
}
125-
126-
if (error != null) Left(error)
127-
else {
128-
DynamoValue(AttributeValue.M(dict)).asRight[WriteError]
129-
}
130124
}
125+
126+
i += 1
131127
}
128+
129+
if (error != null)
130+
Left(error)
131+
else
132+
DynamoValue(AttributeValue.M(dict)).asRight[WriteError]
132133
}
133134
}

modules/core/jvm/src/main/scala/internal/encoding.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,6 @@ object encoding {
102102
record: Record[R]
103103
): R => Either[WriteError, DynamoValue] = {
104104
val fieldCount = record.fields.length
105-
val fieldNames = record.fieldNames
106105

107106
{ value =>
108107
{

modules/core/shared/src/main/scala/Schema.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ object Schema {
218218
)
219219
case f @ Field.Optional(name, schema, get) =>
220220
OptimizedRecord(
221-
List(f),
221+
List(f.asInstanceOf[Field[R, _]]),
222222
values => values.head.asInstanceOf[X]
223223
)
224224
}

modules/core/shared/src/test/scala/SchemaSuite.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -631,7 +631,7 @@ class SchemaSuite extends ScalaCheckSuite {
631631
check(schema, departments, expected)
632632
}
633633

634-
test("recursive products with very wide record".only) {
634+
test("recursive products with very wide record") {
635635
val departments = deepDepartment(1, 100)
636636
val expected = deepDepartmentDynamoValue(1, 100);
637637

0 commit comments

Comments
 (0)