From d43e67f678b2ab8dde22f4c8f63790a20198cf47 Mon Sep 17 00:00:00 2001 From: exoego Date: Fri, 4 Oct 2019 08:30:14 +0900 Subject: [PATCH] Deprecate harmful or redundant things. --- .../io/scalajs/nodejs/buffer/Buffer.scala | 7 +- .../io/scalajs/nodejs/buffer/package.scala | 2 +- .../child_process/ExecFileSyncOptions.scala | 10 +-- .../nodejs/child_process/ExecOptions.scala | 10 ++- .../nodejs/child_process/ForkOptions.scala | 6 +- .../child_process/SpawnSyncOptions.scala | 10 +-- .../nodejs/cluster/ClusterSettings.scala | 5 +- .../io/scalajs/nodejs/buffer/BufferTest.scala | 2 +- .../scalajs/nodejs/cluster/ClusterTest.scala | 3 +- core/src/main/scala/io/scalajs/JSON.scala | 5 +- .../io/scalajs/collection/Iterator.scala | 5 ++ .../io/scalajs/collection/JsCollection.scala | 5 ++ core/src/main/scala/io/scalajs/package.scala | 10 ++- .../io/scalajs/util/DurationHelper.scala | 1 + .../scala/io/scalajs/util/JSONHelper.scala | 17 +++-- .../io/scalajs/util/JsUnderOrHelper.scala | 27 ++++++-- .../scala/io/scalajs/util/MacroHelper.scala | 1 + .../scala/io/scalajs/util/OptionHelper.scala | 27 ++++++-- .../scala/io/scalajs/util/PromiseHelper.scala | 17 ++++- .../scala/io/scalajs/util/ScalaJsHelper.scala | 19 ++++-- core/src/test/scala/io/scalajs/JSONTest.scala | 68 ------------------- 21 files changed, 133 insertions(+), 124 deletions(-) delete mode 100644 core/src/test/scala/io/scalajs/JSONTest.scala diff --git a/app/current/src/main/scala/io/scalajs/nodejs/buffer/Buffer.scala b/app/current/src/main/scala/io/scalajs/nodejs/buffer/Buffer.scala index cf35c97f6..860e63466 100644 --- a/app/current/src/main/scala/io/scalajs/nodejs/buffer/Buffer.scala +++ b/app/current/src/main/scala/io/scalajs/nodejs/buffer/Buffer.scala @@ -1,7 +1,6 @@ package io.scalajs.nodejs.buffer import com.thoughtworks.enableIf -import io.scalajs.collection.Iterator import scala.scalajs.js import scala.scalajs.js.annotation.{JSBracketAccess, JSGlobal, JSImport} @@ -148,7 +147,7 @@ class Buffer protected () extends Uint8Array( /* dummy to trick constructor */ - * * @see [[https://nodejs.org/api/buffer.html#buffer_buf_entries]] */ - def entries(): Iterator[js.Array[Int]] = js.native + def entries(): js.Iterator[js.Array[Int]] = js.native /** * Returns true if both buf and otherBuffer have exactly the same bytes, false otherwise. @@ -201,7 +200,7 @@ class Buffer protected () extends Uint8Array( /* dummy to trick constructor */ - * @return an [[Iterator]] * @example buf.keys() */ - def keys(): Iterator[Int] = js.native + def keys(): js.Iterator[Int] = js.native /** * The largest size allowed for a single Buffer instance. @@ -548,7 +547,7 @@ class Buffer protected () extends Uint8Array( /* dummy to trick constructor */ - * @return an iterator for buf values (bytes) * @example buf.values() */ - def values(): Iterator[Int] = js.native + def values(): js.Iterator[Int] = js.native /** * Writes string to buf at offset according to the character encoding in encoding. The length parameter is diff --git a/app/current/src/main/scala/io/scalajs/nodejs/buffer/package.scala b/app/current/src/main/scala/io/scalajs/nodejs/buffer/package.scala index f1b3f2fc2..5372f966f 100644 --- a/app/current/src/main/scala/io/scalajs/nodejs/buffer/package.scala +++ b/app/current/src/main/scala/io/scalajs/nodejs/buffer/package.scala @@ -42,7 +42,7 @@ package object buffer { * @return the hex-formatted string */ @inline - def toHexString: String = buffer.entries().flatMap(_.lastOption).map(n => f"$n%02x").mkString + def toHexString: String = buffer.entries().toIterator.flatMap(_.lastOption).map(n => f"$n%02x").mkString } /** diff --git a/app/current/src/main/scala/io/scalajs/nodejs/child_process/ExecFileSyncOptions.scala b/app/current/src/main/scala/io/scalajs/nodejs/child_process/ExecFileSyncOptions.scala index 4bb96aa6e..a9871efd5 100644 --- a/app/current/src/main/scala/io/scalajs/nodejs/child_process/ExecFileSyncOptions.scala +++ b/app/current/src/main/scala/io/scalajs/nodejs/child_process/ExecFileSyncOptions.scala @@ -1,6 +1,6 @@ package io.scalajs.nodejs.child_process -import io.scalajs.JsNumber +import io.scalajs.nodejs.{GID, UID} import scala.scalajs.js import scala.scalajs.js.| @@ -35,10 +35,10 @@ class ExecFileSyncOptions(val cwd: js.UndefOr[String] = js.undefined, val env: js.UndefOr[js.Object] = js.undefined, val encoding: js.UndefOr[String] = js.undefined, val shell: js.UndefOr[Boolean | String] = js.undefined, - val timeout: js.UndefOr[JsNumber] = js.undefined, - val maxBuffer: js.UndefOr[JsNumber] = js.undefined, + val timeout: js.UndefOr[Int] = js.undefined, + val maxBuffer: js.UndefOr[Int] = js.undefined, val killSignal: js.UndefOr[KillSignal] = js.undefined, - val uid: js.UndefOr[JsNumber] = js.undefined, - val gid: js.UndefOr[JsNumber] = js.undefined, + val uid: js.UndefOr[UID] = js.undefined, + val gid: js.UndefOr[GID] = js.undefined, val windowsHide: js.UndefOr[Boolean] = js.undefined) extends js.Object diff --git a/app/current/src/main/scala/io/scalajs/nodejs/child_process/ExecOptions.scala b/app/current/src/main/scala/io/scalajs/nodejs/child_process/ExecOptions.scala index 12ea3732b..e5362e847 100644 --- a/app/current/src/main/scala/io/scalajs/nodejs/child_process/ExecOptions.scala +++ b/app/current/src/main/scala/io/scalajs/nodejs/child_process/ExecOptions.scala @@ -1,8 +1,6 @@ package io.scalajs.nodejs package child_process -import io.scalajs.JsNumber - import scala.scalajs.js import scala.scalajs.js.| @@ -31,11 +29,11 @@ class ExecOptions(val cwd: js.UndefOr[String] = js.undefined, val env: js.UndefOr[js.Object] = js.undefined, val encoding: js.UndefOr[String] = js.undefined, val shell: js.UndefOr[Boolean | String] = js.undefined, - val timeout: js.UndefOr[JsNumber] = js.undefined, - val maxBuffer: js.UndefOr[JsNumber] = js.undefined, + val timeout: js.UndefOr[Int] = js.undefined, + val maxBuffer: js.UndefOr[Int] = js.undefined, val killSignal: js.UndefOr[KillSignal] = js.undefined, - val uid: js.UndefOr[JsNumber] = js.undefined, - val gid: js.UndefOr[JsNumber] = js.undefined, + val uid: js.UndefOr[UID] = js.undefined, + val gid: js.UndefOr[GID] = js.undefined, val windowsHide: js.UndefOr[Boolean] = js.undefined, val windowsVerbatimArguments: js.UndefOr[Boolean] = js.undefined) extends js.Object diff --git a/app/current/src/main/scala/io/scalajs/nodejs/child_process/ForkOptions.scala b/app/current/src/main/scala/io/scalajs/nodejs/child_process/ForkOptions.scala index 5fdf138a8..6737c2152 100644 --- a/app/current/src/main/scala/io/scalajs/nodejs/child_process/ForkOptions.scala +++ b/app/current/src/main/scala/io/scalajs/nodejs/child_process/ForkOptions.scala @@ -1,8 +1,6 @@ package io.scalajs.nodejs package child_process -import io.scalajs.JsNumber - import scala.scalajs.js import scala.scalajs.js.| @@ -30,6 +28,6 @@ class ForkOptions(val cwd: js.UndefOr[String] = js.undefined, val execArgv: js.UndefOr[Array[String]] = js.undefined, val silent: js.UndefOr[Boolean] = js.undefined, val stdio: js.UndefOr[String | Array[String]] = js.undefined, - val uid: js.UndefOr[JsNumber] = js.undefined, - val gid: js.UndefOr[JsNumber] = js.undefined) + val uid: js.UndefOr[UID] = js.undefined, + val gid: js.UndefOr[GID] = js.undefined) extends js.Object diff --git a/app/current/src/main/scala/io/scalajs/nodejs/child_process/SpawnSyncOptions.scala b/app/current/src/main/scala/io/scalajs/nodejs/child_process/SpawnSyncOptions.scala index ef1e2ae80..c132e9249 100644 --- a/app/current/src/main/scala/io/scalajs/nodejs/child_process/SpawnSyncOptions.scala +++ b/app/current/src/main/scala/io/scalajs/nodejs/child_process/SpawnSyncOptions.scala @@ -1,6 +1,6 @@ package io.scalajs.nodejs.child_process -import io.scalajs.JsNumber +import io.scalajs.nodejs.{GID, UID} import scala.scalajs.js import scala.scalajs.js.| @@ -40,11 +40,11 @@ class SpawnSyncOptions(val cwd: js.UndefOr[String] = js.undefined, val env: js.UndefOr[js.Object] = js.undefined, val encoding: js.UndefOr[String] = js.undefined, val shell: js.UndefOr[Boolean | String] = js.undefined, - val timeout: js.UndefOr[JsNumber] = js.undefined, - val maxBuffer: js.UndefOr[JsNumber] = js.undefined, + val timeout: js.UndefOr[Int] = js.undefined, + val maxBuffer: js.UndefOr[Int] = js.undefined, val killSignal: js.UndefOr[KillSignal] = js.undefined, - val uid: js.UndefOr[JsNumber] = js.undefined, - val gid: js.UndefOr[JsNumber] = js.undefined, + val uid: js.UndefOr[UID] = js.undefined, + val gid: js.UndefOr[GID] = js.undefined, val windowsHide: js.UndefOr[Boolean] = js.undefined, val windowsVerbatimArguments: js.UndefOr[Boolean] = js.undefined) extends js.Object diff --git a/app/current/src/main/scala/io/scalajs/nodejs/cluster/ClusterSettings.scala b/app/current/src/main/scala/io/scalajs/nodejs/cluster/ClusterSettings.scala index 17e005c75..f1ddc5b58 100644 --- a/app/current/src/main/scala/io/scalajs/nodejs/cluster/ClusterSettings.scala +++ b/app/current/src/main/scala/io/scalajs/nodejs/cluster/ClusterSettings.scala @@ -1,7 +1,6 @@ package io.scalajs.nodejs.cluster import com.thoughtworks.enableIf -import io.scalajs.JsNumber import io.scalajs.nodejs.{GID, UID} import scala.scalajs.js @@ -33,7 +32,7 @@ trait ClusterSettings extends js.Object { var stdio: js.Array[js.Any] = js.native - var inspectPort: JsNumber | js.Function = js.native + var inspectPort: Int | js.Function = js.native @enableIf(io.scalajs.nodejs.CompilerSwitches.gteNodeJs10) var cwd: String = js.native @@ -51,7 +50,7 @@ object ClusterSettings { args: js.Array[String] = null, silent: Boolean = false, stdio: js.Array[js.Any] = null, - inspectPort: JsNumber | js.Function = null, + inspectPort: Int | js.Function = null, cwd: String = null, windowsHide: Boolean = false): ClusterSettings = { val settings = js.Dynamic.literal() diff --git a/app/nodejs-v8/src/test/scala/io/scalajs/nodejs/buffer/BufferTest.scala b/app/nodejs-v8/src/test/scala/io/scalajs/nodejs/buffer/BufferTest.scala index 14e16a648..2be1d2110 100644 --- a/app/nodejs-v8/src/test/scala/io/scalajs/nodejs/buffer/BufferTest.scala +++ b/app/nodejs-v8/src/test/scala/io/scalajs/nodejs/buffer/BufferTest.scala @@ -26,7 +26,7 @@ class BufferTest extends FunSpec { val buf = Buffer.from("Hello!") val it = buf.entries() assert( - it.toSeq.map(_.toSeq) === Seq( + it.toIterator.toSeq.map(_.toSeq) === Seq( Seq(0, 72), Seq(1, 101), Seq(2, 108), diff --git a/app/nodejs-v8/src/test/scala/io/scalajs/nodejs/cluster/ClusterTest.scala b/app/nodejs-v8/src/test/scala/io/scalajs/nodejs/cluster/ClusterTest.scala index 244464ea9..1de9355ac 100644 --- a/app/nodejs-v8/src/test/scala/io/scalajs/nodejs/cluster/ClusterTest.scala +++ b/app/nodejs-v8/src/test/scala/io/scalajs/nodejs/cluster/ClusterTest.scala @@ -1,7 +1,6 @@ package io.scalajs.nodejs.cluster import io.scalajs.nodejs.setTimeout -import io.scalajs.util.DurationHelper._ import org.scalatest.FunSpec import scala.concurrent.duration._ @@ -51,7 +50,7 @@ class ClusterTest extends FunSpec { setTimeout(() => { info(s"Shutting down worker ${worker.id}...") worker.disconnect() - }, 0.5.seconds) + }, 0.5.seconds.toMillis.toInt) } Cluster.onExit((worker, code, signal) => info(s"worker ${worker.process.pid} died")) diff --git a/core/src/main/scala/io/scalajs/JSON.scala b/core/src/main/scala/io/scalajs/JSON.scala index fdb28f4d2..7fc7934cb 100644 --- a/core/src/main/scala/io/scalajs/JSON.scala +++ b/core/src/main/scala/io/scalajs/JSON.scala @@ -20,6 +20,7 @@ trait JSON extends js.Object { * before being returned. * @return The Object corresponding to the given JSON text. */ + @deprecated("Use scala.scalajs.js.JSON instead", "0.9.0") def parse(text: String, reviver: js.Function = js.native): js.Any = js.native /** @@ -39,6 +40,7 @@ trait JSON extends js.Object { * (or is null), no white space is used. * @return A JSON string representing the given value. */ + @deprecated("Use scala.scalajs.js.JSON instead", "0.9.0") def stringify(value: js.Any, replacer: js.Function = js.native, space: String | Int = js.native): String = js.native } @@ -46,6 +48,7 @@ trait JSON extends js.Object { /** * JSON Singleton Object */ +@deprecated("Use scala.scalajs.js.JSON instead", "0.9.0") @js.native @JSGlobal("JSON") -object JSON extends JSON +object JSON extends JSON {} diff --git a/core/src/main/scala/io/scalajs/collection/Iterator.scala b/core/src/main/scala/io/scalajs/collection/Iterator.scala index d2249c51a..c1ac1907c 100644 --- a/core/src/main/scala/io/scalajs/collection/Iterator.scala +++ b/core/src/main/scala/io/scalajs/collection/Iterator.scala @@ -8,6 +8,7 @@ import scala.scalajs.js * with a default iteration behavior, such as Array or Map, while other types (such as Object) are not. * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols */ +@deprecated("Use scala.scalajs.js.Iterator", "0.9.0") @js.native trait Iterator[+A] extends js.Object { @@ -26,17 +27,20 @@ trait Iterator[+A] extends js.Object { /** * Iterator Companion */ +@deprecated("Use scala.scalajs.js.Iterator", "0.9.0") object Iterator { /** * Implicit conversion for a js.Iterator to Scala Iterator * @param jsIt the given JavaScript [[Iterator]] */ + @deprecated("Use scala.scalajs.js.Iterator", "0.9.0") implicit def toIterator[T](jsIt: Iterator[T]): scala.Iterator[T] = new IteratorWrapper[T](jsIt) /** * Iterator Entry */ + @deprecated("Use scala.scalajs.js.Iterator", "0.9.0") @js.native trait Entry[+A] extends js.Object { @@ -59,6 +63,7 @@ object Iterator { /** * Iterator Wrapper */ + @deprecated("Use scala.scalajs.js.Iterator", "0.9.0") class IteratorWrapper[T](it: Iterator[T]) extends scala.Iterator[T] { private var result = it.next() diff --git a/core/src/main/scala/io/scalajs/collection/JsCollection.scala b/core/src/main/scala/io/scalajs/collection/JsCollection.scala index cb921b2ce..0ce553a4b 100644 --- a/core/src/main/scala/io/scalajs/collection/JsCollection.scala +++ b/core/src/main/scala/io/scalajs/collection/JsCollection.scala @@ -8,6 +8,7 @@ import scala.scalajs.js.annotation.JSBracketAccess * JavaScript Collection */ @js.native +@deprecated("Use methods in js.Array or other js collections", "0.9.0") trait JsCollection[A] extends js.Object { /** @@ -29,17 +30,20 @@ trait JsCollection[A] extends js.Object { /** * JsCollection Companion */ +@deprecated("Use methods in js.Array or other js collections", "0.9.0") object JsCollection { /** * Implicit conversion for a js.Iterator to Scala Iterator */ + @deprecated("Use promise.future", "0.9.0") implicit def toIterator[T](collection: JsCollection[T]): scala.Iterator[T] = new JsCollectionWrapper[T](collection) /** * JavaScript Collection Enrichment * @param collection the given [[JsCollection collection]] */ + @deprecated("Use methods in js.Array or other js collections", "0.9.0") implicit final class JsCollectionEnrichment[T](val collection: JsCollection[T]) extends AnyVal { @inline @@ -66,6 +70,7 @@ object JsCollection { * JsCollection Iterator Wrapper * @param collection the given [[JsCollection]] */ + @deprecated("Use methods in js.Array or other js collections", "0.9.0") class JsCollectionWrapper[T](collection: JsCollection[T]) extends scala.Iterator[T] { private var pos = 0 diff --git a/core/src/main/scala/io/scalajs/package.scala b/core/src/main/scala/io/scalajs/package.scala index 3043eb5ff..29a21ec4b 100644 --- a/core/src/main/scala/io/scalajs/package.scala +++ b/core/src/main/scala/io/scalajs/package.scala @@ -8,23 +8,29 @@ import scala.scalajs.js.| */ package object scalajs { + @deprecated("Use js.Any", "0.9.0") type JsAnything = js.Any // js.Any | js.Object | JsNumber | String | Boolean + @deprecated("Use Double or specific Number sub type", "0.9.0") type JsNumber = Byte | Double | Float | Int | Long | Short | java.lang.Number + @deprecated("Use specific type", "0.9.0") type RawOptions = js.Dictionary[_] | js.Object /** * JSON Enrichment * @param json the given [[JSON]] object */ + @deprecated("Use scala.scalajs.js.JSON and io.scalajs.util.JSONHelper.", "0.9.0") implicit final class JSONEnrichment(val json: JSON) extends AnyVal { + import io.scalajs.util.JSONHelper._ @inline - def parseAs[T](text: String): T = json.parse(text).asInstanceOf[T] + def parseAs[T](text: String): T = js.JSON.parseAs[T](text) @inline - def parseAs[T](text: String, reviver: js.Function): T = json.parse(text, reviver).asInstanceOf[T] + def parseAs[T](text: String, reviver: js.Function): T = + js.JSON.parseAs[T](text, reviver.asInstanceOf[js.Function2[js.Any, js.Any, js.Any]]) } diff --git a/core/src/main/scala/io/scalajs/util/DurationHelper.scala b/core/src/main/scala/io/scalajs/util/DurationHelper.scala index 3069547c6..5d1db7fe4 100644 --- a/core/src/main/scala/io/scalajs/util/DurationHelper.scala +++ b/core/src/main/scala/io/scalajs/util/DurationHelper.scala @@ -5,6 +5,7 @@ import scala.concurrent.duration._ /** * Duration Helper */ +@deprecated("Use scala.concurrent.duration.DurationConversions._ instead.", "0.9.0") object DurationHelper { ///////////////////////////////////////////////////////////////////////// diff --git a/core/src/main/scala/io/scalajs/util/JSONHelper.scala b/core/src/main/scala/io/scalajs/util/JSONHelper.scala index e951d2ffa..a6887d4b8 100644 --- a/core/src/main/scala/io/scalajs/util/JSONHelper.scala +++ b/core/src/main/scala/io/scalajs/util/JSONHelper.scala @@ -1,7 +1,5 @@ package io.scalajs.util -import io.scalajs.JSON - import scala.scalajs.js /** @@ -16,10 +14,10 @@ object JSONHelper { implicit final class JSONConversionsToJson[T <: js.Any](val value: T) extends AnyVal { @inline - def toJson: String = JSON.stringify(value) + def toJson: String = js.JSON.stringify(value) @inline - def toPrettyJson: String = JSON.stringify(value, null, 4) + def toPrettyJson: String = js.JSON.stringify(value, null.asInstanceOf[js.Array[js.Any]], 4) } @@ -30,8 +28,17 @@ object JSONHelper { implicit final class JSONConversionFromJson(val text: String) extends AnyVal { @inline - def fromJson[T <: js.Any]: T = JSON.parse(text).asInstanceOf[T] + def fromJson[T <: js.Any]: T = js.JSON.parse(text).asInstanceOf[T] } + implicit final class ScalaJsJSONEnrichment(val json: js.JSON.type) extends AnyVal { + @inline + def parseAs[T](text: String): T = + js.JSON.parse(text).asInstanceOf[T] + + @inline + def parseAs[T](text: String, reviver: js.Function2[js.Any, js.Any, js.Any]): T = + js.JSON.parse(text, reviver).asInstanceOf[T] + } } diff --git a/core/src/main/scala/io/scalajs/util/JsUnderOrHelper.scala b/core/src/main/scala/io/scalajs/util/JsUnderOrHelper.scala index 7e803ef5e..48097243c 100644 --- a/core/src/main/scala/io/scalajs/util/JsUnderOrHelper.scala +++ b/core/src/main/scala/io/scalajs/util/JsUnderOrHelper.scala @@ -6,32 +6,41 @@ import scala.scalajs.js.JSConverters._ /** * js.UnderOr Helper */ +@deprecated("All members are deprecated", "0.9.0") object JsUnderOrHelper { /** * UndefOr Extensions * @param valueA the given [[js.UndefOr value]] */ + @deprecated("All methods are deprecated", "0.9.0") implicit final class UndefOrExtensions[T](private val valueA: js.UndefOr[T]) extends AnyVal { + @deprecated("Cryptic operator no longer supported", "0.9.0") @inline def ?==(valueB: js.UndefOr[T]): Boolean = valueA.exists(valueB.contains) + @deprecated("Cryptic operator no longer supported", "0.9.0") @inline def ?==(valueB: Option[T]): Boolean = valueA.exists(valueB.contains) + @deprecated("Cryptic operator no longer supported", "0.9.0") @inline def ?!=(valueB: js.UndefOr[T]): Boolean = !valueA.exists(valueB.contains) + @deprecated("Cryptic operator no longer supported", "0.9.0") @inline def ?!=(valueB: Option[T]): Boolean = !valueA.exists(valueB.contains) + @deprecated("Use oeElse(optB)", "0.9.0") @inline def ??(optB: => js.UndefOr[T]): js.UndefOr[T] = if (valueA.isDefined) valueA else optB - @inline def contains(value: T): Boolean = valueA.exists(_ == value) - + @deprecated("Meaningless operation", "0.9.0") @inline def flat: js.UndefOr[T] = valueA.flatMap(Option(_).orUndefined) - @inline def isAssigned: Boolean = valueA.flat.nonEmpty + @deprecated("Use nonEmpty", "0.9.0") + @inline def isAssigned: Boolean = valueA.nonEmpty + @deprecated("Use isEmpty", "0.9.0") @inline def nonAssigned: Boolean = valueA.flat.isEmpty + @deprecated("Use getOrElse(throw ...)", "0.9.0") @inline def orDie(message: String): T = valueA getOrElse (throw js.JavaScriptException(message)) } @@ -40,10 +49,12 @@ object JsUnderOrHelper { * UndefOr Boolean Extensions * @param value the given [[js.UndefOr value]] */ + @deprecated("All methods are deprecated", "0.9.0") implicit final class UndefOrBoolExtensions(private val value: js.UndefOr[Boolean]) extends AnyVal { + @deprecated("Use contains(true)", "0.9.0") @inline - def isTrue: Boolean = value.flat.contains(true) + def isTrue: Boolean = value.contains(true) } @@ -51,10 +62,12 @@ object JsUnderOrHelper { * UndefOr Double Extensions * @param value the given [[js.UndefOr value]] */ + @deprecated("All methods are deprecated", "0.9.0") implicit final class UndefOrDoubleExtensions(val value: js.UndefOr[Double]) extends AnyVal { + @deprecated("Use getOrElse(0.0)", "0.9.0") @inline - def orZero: Double = value.flat getOrElse 0.0 + def orZero: Double = value getOrElse 0.0 } @@ -62,10 +75,12 @@ object JsUnderOrHelper { * UndefOr Integer Extensions * @param value the given [[js.UndefOr value]] */ + @deprecated("All methods are deprecated", "0.9.0") implicit final class UndefOrIntExtensions(val value: js.UndefOr[Int]) extends AnyVal { + @deprecated("Use getOrElse(0)", "0.9.0") @inline - def orZero: Int = value.flat getOrElse 0 + def orZero: Int = value getOrElse 0 } diff --git a/core/src/main/scala/io/scalajs/util/MacroHelper.scala b/core/src/main/scala/io/scalajs/util/MacroHelper.scala index d8ffdd213..60be2a3f0 100644 --- a/core/src/main/scala/io/scalajs/util/MacroHelper.scala +++ b/core/src/main/scala/io/scalajs/util/MacroHelper.scala @@ -5,6 +5,7 @@ import scala.reflect.macros.blackbox /** * Macro Helper */ +@deprecated("Don't be part of library, should be internal", "0.9.0") object MacroHelper { def showDeclAndParams(c: blackbox.Context)(decl: c.universe.DefDef): Unit = { diff --git a/core/src/main/scala/io/scalajs/util/OptionHelper.scala b/core/src/main/scala/io/scalajs/util/OptionHelper.scala index 9be5b14c5..6fdb9243f 100644 --- a/core/src/main/scala/io/scalajs/util/OptionHelper.scala +++ b/core/src/main/scala/io/scalajs/util/OptionHelper.scala @@ -1,37 +1,48 @@ package io.scalajs.util -import io.scalajs.util.JsUnderOrHelper._ - import scala.scalajs.js /** * Option Helper */ +@deprecated("All members are deprecated", "0.9.0") object OptionHelper { /** * Option Extensions * @param valueA the given [[Option optional value]] */ + @deprecated("All methods are deprecated", "0.9.0") implicit final class OptionExtensions[T](val valueA: Option[T]) extends AnyVal { + @deprecated("Cryptic operator no longer supported", "0.9.0") @inline def ?==(valueB: js.UndefOr[T]): Boolean = valueA.exists(v => valueB.exists(_ == v)) + @deprecated("Cryptic operator no longer supported", "0.9.0") @inline def ?==(valueB: Option[T]): Boolean = valueA.exists(valueB.contains) + @deprecated("Cryptic operator no longer supported", "0.9.0") @inline def ?!=(valueB: js.UndefOr[T]): Boolean = !valueA.exists(valueB.contains) + @deprecated("Cryptic operator no longer supported", "0.9.0") @inline def ?!=(valueB: Option[T]): Boolean = !valueA.exists(valueB.contains) + @deprecated("Use orElse(optB)", "0.9.0") @inline def ??(optB: => Option[T]): Option[T] = if (valueA.isDefined) valueA else optB + @deprecated("Meaningless operation", "0.9.0") @inline def flat: Option[T] = valueA.flatMap(Option(_)) - @inline def isAssigned: Boolean = valueA.flat.nonEmpty + @deprecated("Use nonEmpty", "0.9.0") + @inline def isAssigned: Boolean = valueA.nonEmpty - @inline def nonAssigned: Boolean = valueA.flat.isEmpty + @deprecated("Use isEmpty", "0.9.0") + @inline def nonAssigned: Boolean = valueA.isEmpty - @inline def orDie(message: String): T = valueA getOrElse (throw js.JavaScriptException(message)) + @deprecated("Use getOrElse(throw ...)", "0.9.0") + @inline def orDie(message: String): T = { + valueA getOrElse (throw js.JavaScriptException(message)) + } } @@ -39,8 +50,10 @@ object OptionHelper { * Option Boolean Extensions * @param value the given [[Option value]] */ + @deprecated("All methods are deprecated", "0.9.0") implicit final class OptionBoolExtensions(val value: Option[Boolean]) extends AnyVal { + @deprecated("Use contains(true)", "0.9.0") @inline def isTrue: Boolean = value.contains(true) } @@ -49,8 +62,10 @@ object OptionHelper { * Option Double Extensions * @param value the given [[Option value]] */ + @deprecated("All methods are deprecated", "0.9.0") implicit final class OptionDoubleExtensions(val value: Option[Double]) extends AnyVal { + @deprecated("Use getOrElse(0.0)", "0.9.0") @inline def orZero: Double = value getOrElse 0.0 } @@ -59,8 +74,10 @@ object OptionHelper { * Option Integer Extensions * @param value the given [[Option value]] */ + @deprecated("All methods are deprecated", "0.9.0") implicit final class OptionIntExtensions(val value: Option[Int]) extends AnyVal { + @deprecated("Use getOrElse(0)", "0.9.0") @inline def orZero: Int = value getOrElse 0 } diff --git a/core/src/main/scala/io/scalajs/util/PromiseHelper.scala b/core/src/main/scala/io/scalajs/util/PromiseHelper.scala index 07dd11315..caad0beab 100644 --- a/core/src/main/scala/io/scalajs/util/PromiseHelper.scala +++ b/core/src/main/scala/io/scalajs/util/PromiseHelper.scala @@ -252,6 +252,7 @@ object PromiseHelper { // Monitoring Functions //////////////////////////////////////////////////////////////////////// + @deprecated("Define own helper with Console.time/timeEnd or such.", "0.9.0") def time[T](action: String, task: => Future[T], showHeader: Boolean = false)( implicit ec: ExecutionContext ): Future[T] = { @@ -273,13 +274,23 @@ object PromiseHelper { * @param task the given [[Future task]] * @tparam T the return type of the task */ + @deprecated("Define own helper with Console.time/timeEnd or such.", "0.9.0") implicit final class TimeExtensions[T](val task: Future[T]) extends AnyVal { @inline def withTimer(action: String, showHeader: Boolean = false)(implicit ec: ExecutionContext): Future[T] = { - time(action, task, showHeader) + if (showHeader) println(s"$action...") + val startTime = System.currentTimeMillis() + task onComplete { + case Success(_) => + val elapsedTime = System.currentTimeMillis - startTime + println(f"$action took $elapsedTime msecs") + case Failure(_) => + val elapsedTime = System.currentTimeMillis - startTime + println(f"$action took $elapsedTime msecs") + } + task } - } /** @@ -287,8 +298,10 @@ object PromiseHelper { */ object Implicits { + @deprecated("Use jsPromise.toFuture", "0.9.0") implicit def promise2Future[T](task: js.Promise[T]): Future[T] = task.toFuture + @deprecated("Use promise.future", "0.9.0") implicit def promise2Future[T](task: Promise[T]): Future[T] = task.future } diff --git a/core/src/main/scala/io/scalajs/util/ScalaJsHelper.scala b/core/src/main/scala/io/scalajs/util/ScalaJsHelper.scala index 3e31601bf..e1bee0a51 100644 --- a/core/src/main/scala/io/scalajs/util/ScalaJsHelper.scala +++ b/core/src/main/scala/io/scalajs/util/ScalaJsHelper.scala @@ -1,7 +1,5 @@ package io.scalajs.util -import io.scalajs.util.JsUnderOrHelper._ - import scala.scalajs.js /** @@ -16,6 +14,7 @@ object ScalaJsHelper { @inline def die[T](message: String): T = throw new IllegalStateException(message) + @deprecated("Use js.Array[T]()", "0.9.0") @inline def emptyArray[T]: js.Array[T] = js.Array[T]() @@ -33,14 +32,19 @@ object ScalaJsHelper { implicit final class JsAnyExtensions(val obj: js.Any) extends AnyVal { @inline - def asUndefOr[T]: js.UndefOr[T] = obj.asInstanceOf[js.UndefOr[T]].flat + def asUndefOr[T]: js.UndefOr[T] = obj.asInstanceOf[js.UndefOr[T]] @inline def asOpt[T]: Option[T] = obj.asInstanceOf[js.UndefOr[T]].toOption @inline - def dynamic: js.Dynamic = obj.asInstanceOf[js.Dynamic] + def asDynamic: js.Dynamic = obj.asInstanceOf[js.Dynamic] + + @deprecated("Use asDynamic", "0.9.0") + @inline + def dynamic: js.Dynamic = asDynamic + @deprecated("Use isInstanceOf or pattern matching instead", "0.9.0") @inline def getJSClassName: Option[String] = { val keyword = "function " @@ -51,6 +55,7 @@ object ScalaJsHelper { } } + @deprecated("No longer provided since danger operation", "0.9.0") @inline def New[T <: js.Any](args: js.Any*): T = js.Dynamic.newInstance(obj.asInstanceOf[js.Dynamic])(args: _*).asInstanceOf[T] @@ -61,17 +66,21 @@ object ScalaJsHelper { * js.Array Extensions * @param array the given [[js.Array array]] */ + @deprecated("All methods are deprecated", "0.9.0") implicit final class JsArrayExtensions[A](val array: js.Array[A]) extends AnyVal { + @deprecated("Use indexWhere", "0.9.0") @inline def indexWhereOpt(f: A => Boolean): Option[Int] = array.indexWhere(f) match { case -1 => None case index => Some(index) } + @deprecated("Use clear", "0.9.0") @inline def removeAll(): Unit = array.remove(0, array.length) + @deprecated("Use new instance instead of mutating", "0.9.0") @inline def replaceWith(items: A*): Int = { array.remove(0, array.length) @@ -83,9 +92,11 @@ object ScalaJsHelper { * js.Dictionary Extensions * @param dict the given [[js.Dictionary dictionary]] */ + @deprecated("All methods are deprecated", "0.9.0") implicit final class JsDictionaryExtensions[A](val dict: js.Dictionary[A]) extends AnyVal { @inline + @deprecated("Use new instance instead of mutating", "0.9.0") def replaceWith(items: (String, A)*): Unit = { dict.clear() items foreach { case (key, value) => dict(key) = value } diff --git a/core/src/test/scala/io/scalajs/JSONTest.scala b/core/src/test/scala/io/scalajs/JSONTest.scala deleted file mode 100644 index 2d5864de7..000000000 --- a/core/src/test/scala/io/scalajs/JSONTest.scala +++ /dev/null @@ -1,68 +0,0 @@ -package io.scalajs - -import org.scalatest.FunSpec - -import scala.scalajs.js - -/** - * JSON Test - */ -class JSONTest extends FunSpec { - - describe("JSON") { - - it("""should parse '"true"'""") { - assert(JSON.parseAs[Boolean]("true")) - } - - it("""should parse '"foo"'""") { - assert(JSON.parseAs[String]("\"foo\"") == "foo") - } - - it("should parse '[1, 5, 7]'") { - val values = JSON.parseAs[js.Array[Int]]("""[1, 5, 7]""") - assert(values.sum == js.Array(1, 5, 7).sum) - } - - it("""should parse 'null'""") { - assert(JSON.parse("null") == null) - } - - it("""should parse '{"name":"x", "value":5}'""") { - val result = JSON.parseAs[KeyValuePair]("""{"name":"x", "value":5}""") - assert(result.name == "x" && result.value == 5) - } - - it("""should parse '{"x":5}' using a custom reviver""") { - val result = JSON.parseAs[js.Object]("""{"x":5}""", { (key: js.Any, value: js.Any) => - value - }: js.Function) - assert(JSON.stringify(result) == """{"x":5}""") - } - - it("""should convert value 'true' to a JSON string""") { - assert(JSON.stringify(true) == "true") - } - - it("""should convert array '[1, "false", false]' to a JSON string""") { - assert(JSON.stringify(js.Array(1, "false", false)) == """[1,"false",false]""") - } - - it("""should convert object '{}' to a JSON string""") { - assert(JSON.stringify(new js.Object()) == "{}") - } - - it("""should convert object '{"x":5}' to a JSON string""") { - val result = JSON.stringify(new js.Object { - val x = 5 - - // Workaround for unused warning - override def toString: String = s"$x" - }) - assert(result == """{"x":5}""") - } - - } -} - -class KeyValuePair(val name: String, val value: Int) extends js.Object