Skip to content

Commit 6f3849e

Browse files
committed
Fix #370 - Scala.js support is broken
Add - `scalajs-java-securerandom` to use `java.security.SecureRandom` for `java.util.UUID` - `scala-java-time` for `java.time` for Scala.js - a custom URL for Scala.js because there's no alternative to `java.net.URL` Also make some necessary changes including removing the code that won't be available in JavaScript. Fix the tests for JavaScript. There are some issues with `Long` and `BigInt` less than -9007199254740991L and greater than 9007199254740991L.
1 parent 48c9b82 commit 6f3849e

File tree

14 files changed

+972
-477
lines changed

14 files changed

+972
-477
lines changed

build.sbt

Lines changed: 85 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import just.semver.SemVer
21
import sbtcrossproject.CrossProject
32

43
ThisBuild / scalaVersion := props.ProjectScalaVersion
@@ -50,11 +49,8 @@ lazy val refined4s = (project in file("."))
5049
circeJvm,
5150
circeJs,
5251
pureconfigJvm,
53-
pureconfigJs,
5452
doobieCe2Jvm,
55-
doobieCe2Js,
5653
doobieCe3Jvm,
57-
doobieCe3Js,
5854
extrasRenderJvm,
5955
extrasRenderJs,
6056
refinedCompatScala2Jvm,
@@ -64,24 +60,33 @@ lazy val refined4s = (project in file("."))
6460
tapirJvm,
6561
tapirJs,
6662
chimneyJvm,
67-
chimneyJs,
63+
// chimneyJs,
6864
)
6965

7066
lazy val core = module("core", crossProject(JVMPlatform, JSPlatform))
7167
.settings(
68+
scalacOptions ++= List("-Xprint-suspension"),
7269
libraryDependencies ++= List(
73-
libs.extrasTypeInfo % Test,
74-
libs.cats % Test,
75-
)
70+
libs.extrasTypeInfo.value % Test,
71+
libs.cats.value % Test,
72+
),
7673
)
7774
lazy val coreJvm = core.jvm
78-
lazy val coreJs = core.js.settings(jsSettingsForFuture)
75+
lazy val coreJs = core
76+
.js
77+
.settings(jsSettingsForFuture)
78+
.settings(
79+
libraryDependencies ++= List(
80+
libs.scalajsJavaSecurerandom.value,
81+
libs.scalaJavaTime.value,
82+
)
83+
)
7984

8085
lazy val cats = module("cats", crossProject(JVMPlatform, JSPlatform))
8186
.settings(
8287
libraryDependencies ++= List(
83-
libs.cats,
84-
libs.extrasTypeInfo % Test,
88+
libs.cats.value,
89+
libs.extrasTypeInfo.value % Test,
8590
)
8691
)
8792
.dependsOn(core % props.IncludeTest)
@@ -91,11 +96,11 @@ lazy val catsJs = cats.js.settings(jsSettingsForFuture)
9196
lazy val circe = module("circe", crossProject(JVMPlatform, JSPlatform))
9297
.settings(
9398
libraryDependencies ++= List(
94-
libs.circeCore,
95-
libs.circeParser % Test,
96-
libs.circeLiteral % Test,
97-
libs.extrasTypeInfo % Test,
98-
libs.extrasHedgehogCirce % Test,
99+
libs.circeCore.value,
100+
libs.circeParser.value % Test,
101+
libs.circeLiteral.value % Test,
102+
libs.extrasTypeInfo.value % Test,
103+
libs.extrasHedgehogCirce.value % Test,
99104
)
100105
)
101106
.dependsOn(
@@ -105,25 +110,24 @@ lazy val circe = module("circe", crossProject(JVMPlatform, JSPlatform))
105110
lazy val circeJvm = circe.jvm
106111
lazy val circeJs = circe.js.settings(jsSettingsForFuture)
107112

108-
lazy val pureconfig = module("pureconfig", crossProject(JVMPlatform, JSPlatform))
113+
lazy val pureconfig = module("pureconfig", crossProject(JVMPlatform))
109114
.settings(
110115
libraryDependencies ++= List(
111116
libs.pureconfigCore,
112-
libs.extrasTypeInfo % Test,
117+
libs.extrasTypeInfo.value % Test,
113118
)
114119
)
115120
.dependsOn(core % props.IncludeTest)
116121
lazy val pureconfigJvm = pureconfig.jvm
117-
lazy val pureconfigJs = pureconfig.js.settings(jsSettingsForFuture)
118122

119-
lazy val doobieCe2 = module("doobie-ce2", crossProject(JVMPlatform, JSPlatform))
123+
lazy val doobieCe2 = module("doobie-ce2", crossProject(JVMPlatform))
120124
.settings(
121125
libraryDependencies ++= List(
122126
libs.doobieCoreCe2,
123-
libs.embeddedPostgres % Test,
124-
libs.effectieCe2 % Test,
125-
libs.extrasDoobieToolsCe2 % Test,
126-
libs.logback % Test,
127+
libs.embeddedPostgres % Test,
128+
libs.effectieCe2.value % Test,
129+
libs.extrasDoobieToolsCe2.value % Test,
130+
libs.logback % Test,
127131
// libs.kittens % Test,
128132
)
129133
)
@@ -132,16 +136,15 @@ lazy val doobieCe2 = module("doobie-ce2", crossProject(JVMPlatform, JSPlatfor
132136
cats,
133137
)
134138
lazy val doobieCe2Jvm = doobieCe2.jvm
135-
lazy val doobieCe2Js = doobieCe2.js.settings(jsSettingsForFuture)
136139

137-
lazy val doobieCe3 = module("doobie-ce3", crossProject(JVMPlatform, JSPlatform))
140+
lazy val doobieCe3 = module("doobie-ce3", crossProject(JVMPlatform))
138141
.settings(
139142
libraryDependencies ++= List(
140143
libs.doobieCoreCe3,
141-
libs.embeddedPostgres % Test,
142-
libs.effectieCe3 % Test,
143-
libs.extrasDoobieToolsCe3 % Test,
144-
libs.logback % Test,
144+
libs.embeddedPostgres % Test,
145+
libs.effectieCe3.value % Test,
146+
libs.extrasDoobieToolsCe3.value % Test,
147+
libs.logback % Test,
145148
// libs.kittens % Test,
146149
)
147150
)
@@ -150,12 +153,11 @@ lazy val doobieCe3 = module("doobie-ce3", crossProject(JVMPlatform, JSPlatfor
150153
cats,
151154
)
152155
lazy val doobieCe3Jvm = doobieCe3.jvm
153-
lazy val doobieCe3Js = doobieCe3.js.settings(jsSettingsForFuture)
154156

155157
lazy val extrasRender = module("extras-render", crossProject(JVMPlatform, JSPlatform))
156158
.settings(
157159
libraryDependencies ++= List(
158-
libs.extrasRender
160+
libs.extrasRender.value
159161
)
160162
)
161163
.dependsOn(
@@ -164,18 +166,20 @@ lazy val extrasRender = module("extras-render", crossProject(JVMPlatform, JSP
164166
lazy val extrasRenderJvm = extrasRender.jvm
165167
lazy val extrasRenderJs = extrasRender.js.settings(jsSettingsForFuture)
166168

167-
lazy val chimney = module("chimney", crossProject(JVMPlatform, JSPlatform))
169+
//lazy val chimney = module("chimney", crossProject(JVMPlatform, JSPlatform))
170+
lazy val chimney = module("chimney", crossProject(JVMPlatform))
168171
.settings(
169172
libraryDependencies ++= List(
170-
libs.chimney,
173+
libs.chimney.value,
174+
libs.tests.hedgehogExtraCore.value,
171175
libs.tests.hedgehogExtraRefined4s,
172176
)
173177
)
174178
.dependsOn(
175179
core % props.IncludeTest
176180
)
177181
lazy val chimneyJvm = chimney.jvm
178-
lazy val chimneyJs = chimney.js.settings(jsSettingsForFuture)
182+
//lazy val chimneyJs = chimney.js.settings(jsSettingsForFuture)
179183

180184
lazy val refinedCompatScala2 = module("refined-compat-scala2", crossProject(JVMPlatform, JSPlatform))
181185
.settings(
@@ -185,7 +189,7 @@ lazy val refinedCompatScala2 = module("refined-compat-scala2", crossProject(J
185189
if (isScala3(scalaVersion.value))
186190
List.empty
187191
else
188-
List("eu.timepit" %% "refined" % "0.9.29")
192+
List("eu.timepit" %%% "refined" % "0.9.29")
189193
),
190194
)
191195
lazy val refinedCompatScala2Jvm = refinedCompatScala2.jvm
@@ -201,7 +205,7 @@ lazy val refinedCompatScala3Js = refinedCompatScala3.js.settings(jsSettingsForF
201205
lazy val tapir = module("tapir", crossProject(JVMPlatform, JSPlatform))
202206
.settings(
203207
libraryDependencies ++= List(
204-
libs.tapirCore
208+
libs.tapirCore.value
205209
)
206210
)
207211
.dependsOn(
@@ -226,17 +230,17 @@ lazy val docs = (project in file("docs-gen-tmp/docs"))
226230
val latestVersion = s"git describe --tags $tag".!!.trim.stripPrefix("v")
227231

228232
List(
229-
"io.kevinlee" %% "refined4s-core" % latestVersion,
230-
"io.kevinlee" %% "refined4s-cats" % latestVersion,
231-
"io.kevinlee" %% "refined4s-chimney" % latestVersion,
232-
"io.kevinlee" %% "refined4s-circe" % latestVersion,
233-
"io.kevinlee" %% "refined4s-pureconfig" % latestVersion,
234-
"io.kevinlee" %% "refined4s-doobie-ce2" % latestVersion,
235-
"io.kevinlee" %% "refined4s-extras-render" % latestVersion,
236-
"io.kevinlee" %% "refined4s-tapir" % latestVersion,
237-
libs.circeCore,
238-
libs.circeLiteral,
239-
libs.circeParser,
233+
"io.kevinlee" %%% "refined4s-core" % latestVersion,
234+
"io.kevinlee" %%% "refined4s-cats" % latestVersion,
235+
"io.kevinlee" %%% "refined4s-chimney" % latestVersion,
236+
"io.kevinlee" %%% "refined4s-circe" % latestVersion,
237+
"io.kevinlee" %%% "refined4s-pureconfig" % latestVersion,
238+
"io.kevinlee" %%% "refined4s-doobie-ce2" % latestVersion,
239+
"io.kevinlee" %%% "refined4s-extras-render" % latestVersion,
240+
"io.kevinlee" %%% "refined4s-tapir" % latestVersion,
241+
libs.circeCore.value,
242+
libs.circeLiteral.value,
243+
libs.circeParser.value,
240244
)
241245
},
242246
mdocVariables := Map(
@@ -283,7 +287,7 @@ lazy val props =
283287
val IncludeTest = "compile->compile;test->test"
284288

285289
val HedgehogVersion = "0.10.1"
286-
val HedgehogExtraVersion = "0.9.0"
290+
val HedgehogExtraVersion = "0.10.0"
287291

288292
val ExtrasVersion = "0.44.0"
289293

@@ -307,23 +311,27 @@ lazy val props =
307311
val TapirVersion = "1.0.6"
308312

309313
val ChimneyVersion = "1.3.0"
314+
315+
val ScalajsJavaSecurerandomVersion = "1.0.0"
316+
317+
val ScalaJavaTimeVersion = "2.6.0"
310318
}
311319

312320
lazy val libs = new {
313321

314-
lazy val extrasTypeInfo = "io.kevinlee" %% "extras-type-info" % props.ExtrasVersion
315-
lazy val extrasHedgehogCirce = "io.kevinlee" %% "extras-hedgehog-circe" % props.ExtrasVersion
316-
lazy val extrasDoobieToolsCe2 = "io.kevinlee" %% "extras-doobie-tools-ce2" % props.ExtrasVersion
317-
lazy val extrasDoobieToolsCe3 = "io.kevinlee" %% "extras-doobie-tools-ce3" % props.ExtrasVersion
318-
lazy val extrasRender = "io.kevinlee" %% "extras-render" % props.ExtrasVersion
322+
lazy val extrasTypeInfo = Def.setting("io.kevinlee" %%% "extras-type-info" % props.ExtrasVersion)
323+
lazy val extrasHedgehogCirce = Def.setting("io.kevinlee" %%% "extras-hedgehog-circe" % props.ExtrasVersion)
324+
lazy val extrasDoobieToolsCe2 = Def.setting("io.kevinlee" %%% "extras-doobie-tools-ce2" % props.ExtrasVersion)
325+
lazy val extrasDoobieToolsCe3 = Def.setting("io.kevinlee" %%% "extras-doobie-tools-ce3" % props.ExtrasVersion)
326+
lazy val extrasRender = Def.setting("io.kevinlee" %%% "extras-render" % props.ExtrasVersion)
319327

320-
lazy val cats = "org.typelevel" %% "cats-core" % props.CatsVersion
328+
lazy val cats = Def.setting("org.typelevel" %%% "cats-core" % props.CatsVersion)
321329

322-
lazy val kittens = "org.typelevel" %% "kittens" % props.KittensVersion
330+
lazy val kittens = Def.setting("org.typelevel" %%% "kittens" % props.KittensVersion)
323331

324-
lazy val circeCore = "io.circe" %% "circe-core" % props.CirceVersion
325-
lazy val circeParser = "io.circe" %% "circe-parser" % props.CirceVersion
326-
lazy val circeLiteral = "io.circe" %% "circe-literal" % props.CirceVersion
332+
lazy val circeCore = Def.setting("io.circe" %%% "circe-core" % props.CirceVersion)
333+
lazy val circeParser = Def.setting("io.circe" %%% "circe-parser" % props.CirceVersion)
334+
lazy val circeLiteral = Def.setting("io.circe" %%% "circe-literal" % props.CirceVersion)
327335

328336
lazy val pureconfigCore = "com.github.pureconfig" %% "pureconfig-core" % props.PureconfigVersion
329337
lazy val pureconfigGeneric = "com.github.pureconfig" %% "pureconfig-generic" % props.PureconfigVersion
@@ -333,31 +341,33 @@ lazy val libs = new {
333341

334342
lazy val embeddedPostgres = "io.zonky.test" % "embedded-postgres" % props.EmbeddedPostgresVersion
335343

336-
lazy val effectieCore = "io.kevinlee" %% "effectie-core" % props.EffectieVersion
337-
lazy val effectieSyntax = "io.kevinlee" %% "effectie-syntax" % props.EffectieVersion
338-
lazy val effectieCe2 = "io.kevinlee" %% "effectie-cats-effect2" % props.EffectieVersion
339-
lazy val effectieCe3 = "io.kevinlee" %% "effectie-cats-effect3" % props.EffectieVersion
344+
lazy val effectieCore = Def.setting("io.kevinlee" %%% "effectie-core" % props.EffectieVersion)
345+
lazy val effectieSyntax = Def.setting("io.kevinlee" %%% "effectie-syntax" % props.EffectieVersion)
346+
lazy val effectieCe2 = Def.setting("io.kevinlee" %%% "effectie-cats-effect2" % props.EffectieVersion)
347+
lazy val effectieCe3 = Def.setting("io.kevinlee" %%% "effectie-cats-effect3" % props.EffectieVersion)
340348

341349
lazy val logback = "ch.qos.logback" % "logback-classic" % props.LogbackVersion
342350

343-
lazy val hedgehogCore = "qa.hedgehog" %% "hedgehog-core" % props.HedgehogVersion
344-
lazy val hedgehogRunner = "qa.hedgehog" %% "hedgehog-runner" % props.HedgehogVersion
345-
lazy val hedgehogSbt = "qa.hedgehog" %% "hedgehog-sbt" % props.HedgehogVersion
351+
lazy val tapirCore = Def.setting("com.softwaremill.sttp.tapir" %%% "tapir-core" % props.TapirVersion)
352+
353+
lazy val chimney = Def.setting("io.scalaland" %%% "chimney" % props.ChimneyVersion)
346354

347-
lazy val tapirCore = "com.softwaremill.sttp.tapir" %% "tapir-core" % props.TapirVersion
355+
lazy val scalajsJavaSecurerandom =
356+
Def.setting(("org.scala-js" %%% "scalajs-java-securerandom" % props.ScalajsJavaSecurerandomVersion).cross(CrossVersion.for3Use2_13))
348357

349-
lazy val chimney = "io.scalaland" %% "chimney" % props.ChimneyVersion
358+
lazy val scalaJavaTime = Def.setting("io.github.cquiroz" %%% "scala-java-time" % props.ScalaJavaTimeVersion)
350359

351360
lazy val tests = new {
352361

353-
lazy val hedgehog: List[ModuleID] =
362+
lazy val hedgehog = Def.setting {
354363
List(
355-
hedgehogCore,
356-
hedgehogRunner,
357-
hedgehogSbt,
364+
"qa.hedgehog" %%% "hedgehog-core" % props.HedgehogVersion,
365+
"qa.hedgehog" %%% "hedgehog-runner" % props.HedgehogVersion,
366+
"qa.hedgehog" %%% "hedgehog-sbt" % props.HedgehogVersion,
358367
).map(_ % Test)
368+
}
359369

360-
lazy val hedgehogExtraCore = "io.kevinlee" %% "hedgehog-extra-core" % props.HedgehogExtraVersion % Test
370+
lazy val hedgehogExtraCore = Def.setting("io.kevinlee" %%% "hedgehog-extra-core" % props.HedgehogExtraVersion % Test)
361371

362372
lazy val hedgehogExtraRefined4s = "io.kevinlee" %% "hedgehog-extra-refined4s" % props.HedgehogExtraVersion % Test
363373
}
@@ -393,7 +403,7 @@ def module(projectName: String, crossProject: CrossProject.Builder): CrossProjec
393403
),
394404
scalacOptions ++= (if (isScala3(scalaVersion.value)) List("-no-indent") else List("-Xsource:3")),
395405
// scalacOptions ~= (ops => ops.filter(_ != "UTF-8")),
396-
libraryDependencies ++= libs.tests.hedgehog ++ List(libs.tests.hedgehogExtraCore),
406+
libraryDependencies ++= libs.tests.hedgehog.value ++ List(libs.tests.hedgehogExtraCore.value),
397407
wartremoverErrors ++= Warts.allBut(Wart.Any, Wart.Nothing, Wart.ImplicitConversion, Wart.ImplicitParameter),
398408
Compile / console / scalacOptions :=
399409
(console / scalacOptions)
@@ -433,4 +443,5 @@ lazy val jsSettingsForFuture: SettingsDefinition = List(
433443
else List("-P:scalajs:nowarnGlobalExecutionContext")),
434444
Test / compile / scalacOptions ++= (if (scalaVersion.value.startsWith("3")) List.empty
435445
else List("-P:scalajs:nowarnGlobalExecutionContext")),
446+
coverageEnabled := false,
436447
)
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package refined4s.modules.circe.derivation.types
2+
3+
/** @author Kevin Lee
4+
* @since 2024-10-28
5+
*/
6+
trait NumericTestValues {
7+
8+
/** From JavaScript's Number.MIN_SAFE_INTEGER
9+
*/
10+
val MinLongValue: Long = -9007199254740991L
11+
12+
/** From JavaScript's Number.MAX_SAFE_INTEGER
13+
*/
14+
val MaxLongValue: Long = 9007199254740991L
15+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package refined4s.modules.circe.derivation.types
2+
3+
/** @author Kevin Lee
4+
* @since 2024-10-28
5+
*/
6+
trait NumericTestValues {
7+
val MinLongValue: Long = Long.MinValue
8+
val MaxLongValue: Long = Long.MaxValue
9+
}

0 commit comments

Comments
 (0)