diff --git a/README.md b/README.md
index 8e50d113e..ff035602e 100644
--- a/README.md
+++ b/README.md
@@ -76,9 +76,9 @@ The following applications were developed using ScalaJs.io:
| Application | Frontend | Backend | Scalajs.io version | Description |
|------------------------------------------------------------------------|-----------------------|--------------------|--------------------|------------------------------------------|
| [Phaser-Invaders](https://github.com/scalajs-io/phaser-invaders-demo) | Scala.js + DOM | Scala + NodeJS | 0.3.0.1 | Port of Phaser Invaders. |
-| [Socialize](https://github.com/ldaniels528/scalajs-nodejs-socialized) | Scala.js + AngularJS | Scala.js + NodeJS | 0.3.0.3 | A Facebook-inspired Social networking web application. |
-| [Todo MVC](https://github.com/ldaniels528/scalajs-nodejs-todomvc) | Scala.js + AngularJS | Scala.js + NodeJS | 0.2.3.1 | A simple Todo example application. |
-| [Trifecta](https://github.com/ldaniels528/trifecta) | Scala.js + AngularJS | Scala + Play 2.4.x | 0.3.0.0 | Trifecta is a web-based and CLI tool that simplifies inspecting Kafka messages and Zookeeper data. |
+| [Socialize](https://github.com/scalajs-io/scalajs-nodejs-socialized) | Scala.js + AngularJS | Scala.js + NodeJS | 0.3.0.3 | A Facebook-inspired Social networking web application. |
+| [Todo MVC](https://github.com/scalajs-io/scalajs-nodejs-todomvc) | Scala.js + AngularJS | Scala.js + NodeJS | 0.2.3.1 | A simple Todo example application. |
+| [Trifecta](https://github.com/scalajs-io/trifecta) | Scala.js + AngularJS | Scala + Play 2.4.x | 0.3.0.0 | Trifecta is a web-based and CLI tool that simplifies inspecting Kafka messages and Zookeeper data. |
### The MEAN Stack — AngularJS, MongoDB, Mongoose, Express and more
@@ -101,7 +101,7 @@ The following applications were developed using ScalaJs.io:
| [mongoose](https://github.com/scalajs-io/mongoose) | 4.8.1 | Mongoose is a MongoDB object modeling tool designed to work in an asynchronous environment. |
| [mpromise](https://github.com/scalajs-io/mpromise) | 0.5.5 | A promises/A+ conformant implementation, written for mongoose. |
-Looking for a complete list of available bindings? Go [here](https://github.com/scalajs-io/scalajs.io-platform)
+Looking for a complete list of available bindings? Go [here](https://github.com/scalajs-io/scalajs-io-platform)
### Discussions
@@ -231,7 +231,7 @@ The following core Node.js modules (v7.7.1) have been implemented:
| vm | The vm module provides APIs for compiling and running code within V8 Virtual Machine contexts.|
| zlib | This provides bindings to Gzip/Gunzip, Deflate/Inflate, and DeflateRaw/InflateRaw classes. |
-*NOTE*: The SBT artifact for the complete Node.js platform is: "io.scalajs.npm" %%% "nodejs" % "0.4.0-pre2"
+*NOTE*: The SBT artifact for the complete Node.js platform is: "io.scalajs.npm" %%% "nodejs" % "0.4.0-pre4"
#### Third-party Modules
@@ -298,7 +298,7 @@ The following Third Party/OSS Node.js (npm) modules have been implemented:
| [winston-daily-rotate-file](https://github.com/scalajs-io/winston-daily-rotate-file) | 1.4.4 | A multi-transport async logging library for Node.js. |
| [xml2js](https://github.com/scalajs-io/xml2js) | 0.4.16 | Simple XML to JavaScript object converter. |
-*NOTE*: The full SBT artifact expression is: "io.scalajs.npm" %%% "xxxx" % version (e.g. "io.scalajs.npm" %%% "express" % "0.4.0-pre2")
+*NOTE*: The full SBT artifact expression is: "io.scalajs.npm" %%% "xxxx" % version (e.g. "io.scalajs.npm" %%% "express" % "0.4.0-pre4")
I've provided an example to demonstrate how similar the Scala.js code is to the JavaScript
that it replaces.
diff --git a/build.sbt b/build.sbt
index f9990cb60..f717fe9e3 100644
--- a/build.sbt
+++ b/build.sbt
@@ -5,7 +5,7 @@ import sbt._
import scala.language.postfixOps
-val scalaJsIOVersion = "0.4.0-pre2"
+val scalaJsIOVersion = "0.4.0-pre4"
val apiVersion = scalaJsIOVersion
val scalaJsVersion = "2.12.1"
diff --git a/package.json b/package.json
index 5ace53cce..cd6a8bf29 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "nodejs-sfs",
- "version": "0.4.0-pre2",
+ "version": "0.4.0-pre4",
"private": true,
"dependencies": {
"source-map": "^0.5.6"
diff --git a/src/main/scala/io/scalajs/nodejs/Process.scala b/src/main/scala/io/scalajs/nodejs/Process.scala
index 346c0634c..c1e185fe6 100644
--- a/src/main/scala/io/scalajs/nodejs/Process.scala
+++ b/src/main/scala/io/scalajs/nodejs/Process.scala
@@ -245,9 +245,9 @@ trait Process extends IEventEmitter {
* Returns the current high-resolution real time in a [seconds, nanoseconds] tuple Array. It is relative to an
* arbitrary time in the past. It is not related to the time of day and therefore not subject to clock drift.
* The primary use is for measuring performance between intervals.
- * @example process.hrtime()
+ * @example process.hrtime([time])
*/
- def hrtime(): js.Array[Int] = js.native
+ def hrtime(time: js.Array[Int] = js.native): js.Array[Int] = js.native
/**
* Reads /etc/group and initializes the group access list, using all groups of which the user is a member.
diff --git a/src/main/scala/io/scalajs/nodejs/fs/Fs.scala b/src/main/scala/io/scalajs/nodejs/fs/Fs.scala
index eb3e1b178..51f67db83 100644
--- a/src/main/scala/io/scalajs/nodejs/fs/Fs.scala
+++ b/src/main/scala/io/scalajs/nodejs/fs/Fs.scala
@@ -674,7 +674,7 @@ trait Fs extends IEventEmitter {
* data will be read from the current file position.
* @return the number of bytesRead.
*/
- def readSync(fd: FileDescriptor, buffer: Buffer, offset: Int, length: Int, position: Int): Buffer = js.native
+ def readSync(fd: FileDescriptor, buffer: Buffer, offset: Int, length: Int, position: Int): Int = js.native
/**
* Asynchronous readdir(3). Reads the contents of a directory.
diff --git a/src/main/scala/io/scalajs/nodejs/os/CPUInfo.scala b/src/main/scala/io/scalajs/nodejs/os/CPUInfo.scala
index fdc83edfb..b147f317d 100644
--- a/src/main/scala/io/scalajs/nodejs/os/CPUInfo.scala
+++ b/src/main/scala/io/scalajs/nodejs/os/CPUInfo.scala
@@ -8,7 +8,7 @@ import scala.scalajs.js
*/
@js.native
trait CPUInfo extends js.Object {
- var model: String = js.native
- var speed: Double = js.native
- var times: js.Array[CPUTime] = js.native
+ var model: String = js.native
+ var speed: Double = js.native
+ var times: js.Dictionary[Double] = js.native
}
diff --git a/src/main/scala/io/scalajs/nodejs/os/OS.scala b/src/main/scala/io/scalajs/nodejs/os/OS.scala
index c1851a657..c1468645f 100644
--- a/src/main/scala/io/scalajs/nodejs/os/OS.scala
+++ b/src/main/scala/io/scalajs/nodejs/os/OS.scala
@@ -50,7 +50,7 @@ trait OS extends js.Object {
* spent in: user, nice, sys, idle, and irq).
* @example os.cpus()
*/
- def cpus(): js.Array[js.Any] = js.native
+ def cpus(): js.Array[CPUInfo] = js.native
/**
* Returns the endianness of the CPU. Possible values are 'BE' for big endian or 'LE' for little endian.
diff --git a/src/main/scala/io/scalajs/nodejs/os/package.scala b/src/main/scala/io/scalajs/nodejs/os/package.scala
new file mode 100644
index 000000000..3ee8b907c
--- /dev/null
+++ b/src/main/scala/io/scalajs/nodejs/os/package.scala
@@ -0,0 +1,22 @@
+package io.scalajs.nodejs
+
+import scala.scalajs.js
+
+/**
+ * os package object
+ * @author lawrence.daniels@gmail.com
+ */
+package object os {
+
+ /**
+ * CPU Info Enrichment
+ * @param cpuInfo the given [[CPUInfo CPU Info]]
+ */
+ final implicit class CPUInfoEnrichment(val cpuInfo: CPUInfo) extends AnyVal {
+
+ @inline
+ def timesObject: js.Array[CPUTime] = cpuInfo.times.asInstanceOf[js.Array[CPUTime]]
+
+ }
+
+}
diff --git a/src/main/scala/io/scalajs/nodejs/punycode/Punycode.scala b/src/main/scala/io/scalajs/nodejs/punycode/Punycode.scala
new file mode 100644
index 000000000..f1c30a048
--- /dev/null
+++ b/src/main/scala/io/scalajs/nodejs/punycode/Punycode.scala
@@ -0,0 +1,87 @@
+package io.scalajs.nodejs.punycode
+
+import scala.scalajs.js
+import scala.scalajs.js.annotation.JSImport
+
+/**
+ * The version of the punycode module bundled in Node.js is being deprecated. In a future major version of Node.js
+ * this module will be removed. Users currently depending on the punycode module should switch to using the
+ * userland-provided Punycode.js module instead.
+ * @see https://nodejs.org/dist/latest-v7.x/docs/api/punycode.html
+ */
+@js.native
+trait Punycode extends js.Object {
+
+ /**
+ * The punycode.decode() method converts a Punycode string of ASCII-only characters to the equivalent
+ * string of Unicode codepoints.
+ * @param string a Punycode string of ASCII-only characters
+ * @return the equivalent string of Unicode codepoints.
+ */
+ def decode(string: String): String = js.native
+
+ /**
+ * The punycode.encode() method converts a string of Unicode codepoints to a Punycode string of ASCII-only characters.
+ * @param codePoints a string of Unicode codepoints
+ * @return a Punycode string of ASCII-only characters.
+ */
+ def encode(codePoints: String): String = js.native
+
+ /**
+ * The punycode.toASCII() method converts a Unicode string representing an Internationalized Domain Name to Punycode.
+ * Only the non-ASCII parts of the domain name will be converted. Calling punycode.toASCII() on a string that already
+ * only contains ASCII characters will have no effect.
+ * @param domain the domain name
+ * @return a Unicode string representing an Internationalized Domain Name as Punycode
+ */
+ def toASCII(domain: String): String = js.native
+
+ /**
+ * The punycode.toUnicode() method converts a string representing a domain name containing Punycode encoded
+ * characters into Unicode. Only the Punycode encoded parts of the domain name are be converted.
+ * @param domain a string representing a domain name containing Punycode encoded characters
+ * @return the Unicode string
+ */
+ def toUnicode(domain: String): String = js.native
+
+ /**
+ * The UCS2 object
+ * @return The [[UCS2 UCS2]] object
+ */
+ def ucs2: UCS2 = js.native
+
+ /**
+ * Returns a string identifying the current Punycode.js version number.
+ * @return a string identifying the current Punycode.js version number.
+ */
+ def version: String = js.native
+
+}
+
+/**
+ * Punycode.UCS2
+ * @see https://nodejs.org/dist/latest-v7.x/docs/api/punycode.html
+ */
+@js.native
+trait UCS2 extends js.Object {
+
+ /**
+ * The punycode.ucs2.decode() method returns an array containing the numeric codepoint values of each Unicode
+ * symbol in the string.
+ * @param string the string containing Unicode symbols
+ * @return an array containing the numeric codepoint values of each Unicode symbol
+ */
+ def decode(string: String): js.Array[Int] = js.native
+
+ /**
+ * The punycode.ucs2.encode() method returns a string based on an array of numeric code point values.
+ * @param codePoints an array of numeric code point values
+ * @return a string based on an array of numeric code point values
+ */
+ def encode(codePoints: js.Array[Int]): String = js.native
+
+}
+
+@js.native
+@JSImport("punycode", JSImport.Namespace)
+object Punycode extends Punycode
diff --git a/src/main/scala/io/scalajs/nodejs/stream/Writable.scala b/src/main/scala/io/scalajs/nodejs/stream/Writable.scala
index bd625c506..567d6fe16 100644
--- a/src/main/scala/io/scalajs/nodejs/stream/Writable.scala
+++ b/src/main/scala/io/scalajs/nodejs/stream/Writable.scala
@@ -138,29 +138,32 @@ trait Writable extends IEventEmitter {
/**
* Flush all data, buffered since stream.cork() call.
* @param chunk The data to write ( | )
- * @param encoding The encoding, if chunk is a String
* @param callback the Callback for when this chunk of data is flushed
* @return true, if the data was handled completely
* @example writable.write(chunk[, encoding][, callback])
*/
- def write(chunk: String, encoding: String, callback: js.Function1[Error, Any]): Boolean = js.native
+ def write(chunk: Buffer | String, callback: js.Function1[Error, Any] = js.native): Boolean = js.native
/**
* Flush all data, buffered since stream.cork() call.
* @param chunk The data to write ( | )
- * @param callback the Callback for when this chunk of data is flushed
+ * @param encoding The encoding, if chunk is a String
* @return true, if the data was handled completely
* @example writable.write(chunk[, encoding][, callback])
*/
- def write(chunk: String, callback: js.Function1[Error, Any]): Boolean = js.native
+ def write(chunk: Buffer | String, encoding: String): Boolean = js.native
/**
* Flush all data, buffered since stream.cork() call.
- * @param chunk The data to write ( | )
+ * @param chunk The data to write ( | )
+ * @param encoding The encoding, if chunk is a String
+ * @param callback the Callback for when this chunk of data is flushed
* @return true, if the data was handled completely
* @example writable.write(chunk[, encoding][, callback])
*/
- def write(chunk: Buffer, callback: js.Function1[Error, Any]): Boolean = js.native
+ def write(chunk: Buffer | String,
+ encoding: String,
+ callback: js.Function1[Error, Any]): Boolean = js.native
}
@@ -174,7 +177,7 @@ object Writable {
* Writable Events
* @author lawrence.daniels@gmail.com
*/
- implicit class WritableEvents(val writable: Writable) extends AnyVal {
+ implicit class WritableEvents[T <: Writable](val writable: T) extends AnyVal {
/**
* Emitted when the stream and any of its underlying resources (a file descriptor, for example) have been closed.
@@ -223,7 +226,7 @@ object Writable {
* Writable Extensions
* @author lawrence.daniels@gmail.com
*/
- implicit class WritableExtensions(val writable: Writable) extends AnyVal {
+ implicit class WritableExtensions[T <: Writable](val writable: T) extends AnyVal {
@inline
def endAsync(chunk: Buffer): Promise[Unit] = promiseWithError0[Error](writable.end(chunk, _))
@@ -237,10 +240,7 @@ object Writable {
def endAsync(): Promise[Unit] = promiseWithError0[Error](writable.end)
@inline
- def writeAsync(chunk: Buffer): Promise[Unit] = promiseWithError0[Error](writable.write(chunk, _))
-
- @inline
- def writeAsync(chunk: String, encoding: String = null): Promise[Unit] = {
+ def writeAsync(chunk: Buffer | String, encoding: String = null): Promise[Unit] = {
promiseWithError0[Error](writable.write(chunk, encoding, _))
}
@@ -254,5 +254,6 @@ object Writable {
* @param encoding the data's optional encoding
*/
@ScalaJSDefined
-class Chunk(val chunk: Buffer | String, val encoding: js.UndefOr[String] = js.undefined)
+class Chunk(val chunk: Buffer | String,
+ val encoding: js.UndefOr[String] = js.undefined)
extends js.Object
\ No newline at end of file
diff --git a/src/main/scala/io/scalajs/nodejs/timers/ClearImmediate.scala b/src/main/scala/io/scalajs/nodejs/timers/ClearImmediate.scala
index 461459fbe..97ed517d0 100644
--- a/src/main/scala/io/scalajs/nodejs/timers/ClearImmediate.scala
+++ b/src/main/scala/io/scalajs/nodejs/timers/ClearImmediate.scala
@@ -10,9 +10,10 @@ import scala.scalajs.js
trait ClearImmediate extends js.Object {
/**
- * Stops an immediateObject, as created by setImmediate, from triggering.
+ * Stops an immediate, as created by setImmediate, from triggering.
+ * @param handle the immediate handle
* @example clearImmediate(immediateObject)
*/
- def apply(immediateObject: Immediate): Unit = js.native
+ def apply(handle: Immediate): Unit = js.native
}
diff --git a/src/main/scala/io/scalajs/nodejs/timers/ClearInterval.scala b/src/main/scala/io/scalajs/nodejs/timers/ClearInterval.scala
index b5289e3de..0725847b9 100644
--- a/src/main/scala/io/scalajs/nodejs/timers/ClearInterval.scala
+++ b/src/main/scala/io/scalajs/nodejs/timers/ClearInterval.scala
@@ -10,9 +10,9 @@ import scala.scalajs.js
trait ClearInterval extends js.Object {
/**
- * Stops an intervalObject, as created by setInterval, from triggering.
+ * Stops an interval, as created by setInterval, from triggering.
* @example clearInterval(intervalObject)
*/
- def apply(intervalObject: Interval): Unit = js.native
+ def apply(handle: Timeout): Unit = js.native
}
diff --git a/src/main/scala/io/scalajs/nodejs/timers/ClearTimeout.scala b/src/main/scala/io/scalajs/nodejs/timers/ClearTimeout.scala
index 5bf853408..4dc92f456 100644
--- a/src/main/scala/io/scalajs/nodejs/timers/ClearTimeout.scala
+++ b/src/main/scala/io/scalajs/nodejs/timers/ClearTimeout.scala
@@ -10,9 +10,9 @@ import scala.scalajs.js
trait ClearTimeout extends js.Object {
/**
- * Prevents a timeoutObject, as created by setTimeout, from triggering.
+ * Prevents a timeout, as created by setTimeout, from triggering.
* @example clearTimeout(timeoutObject)
*/
- def apply(timeoutObject: Timeout): Unit = js.native
+ def apply(handle: Timeout): Unit = js.native
}
diff --git a/src/main/scala/io/scalajs/nodejs/timers/Interval.scala b/src/main/scala/io/scalajs/nodejs/timers/Interval.scala
deleted file mode 100644
index 1198ff49f..000000000
--- a/src/main/scala/io/scalajs/nodejs/timers/Interval.scala
+++ /dev/null
@@ -1,50 +0,0 @@
-package io.scalajs.nodejs.timers
-
-import io.scalajs.nodejs.clearInterval
-
-import scala.scalajs.js
-
-/**
- * Interval Handle
- * @author lawrence.daniels@gmail.com
- */
-@js.native
-trait Interval extends Timeout {
-
- def _idleStart: js.UndefOr[Int] = js.native
-
- def _idleTimeout: js.UndefOr[Int] = js.native
-
- def _idlePrev: Interval.TimerList = js.native
-
-}
-
-/**
- * Interval Companion
- * @author lawrence.daniels@gmail.com
- */
-object Interval {
-
- @js.native
- trait TimerList extends js.Object {
-
- def _timer: SetTimeout = js.native
-
- def _unrefed: js.UndefOr[Boolean] = js.native
-
- def msecs: js.UndefOr[Int] = js.native
-
- }
-
- /**
- * Interval Enrichment
- * @param interval the given [[Interval interval]] handle
- */
- implicit class IntervalEnrichment(val interval: Interval) extends AnyVal {
-
- @inline
- def clear(): Unit = clearInterval(interval)
-
- }
-
-}
diff --git a/src/main/scala/io/scalajs/nodejs/timers/SetInterval.scala b/src/main/scala/io/scalajs/nodejs/timers/SetInterval.scala
index ee51d7b2d..2f7d5958c 100644
--- a/src/main/scala/io/scalajs/nodejs/timers/SetInterval.scala
+++ b/src/main/scala/io/scalajs/nodejs/timers/SetInterval.scala
@@ -18,6 +18,6 @@ trait SetInterval extends js.Object {
* or less than 1, Node.js will use 1 as the delay.
* @example setInterval(callback, delay[, arg][, ...])
*/
- def apply(callback: js.Function, delay: Int, args: js.Any*): Interval = js.native
+ def apply(callback: js.Function, delay: Int, args: js.Any*): Timeout = js.native
}
diff --git a/src/main/scala/io/scalajs/nodejs/timers/Timeout.scala b/src/main/scala/io/scalajs/nodejs/timers/Timeout.scala
index dd9fa7a22..c5f18b4f2 100644
--- a/src/main/scala/io/scalajs/nodejs/timers/Timeout.scala
+++ b/src/main/scala/io/scalajs/nodejs/timers/Timeout.scala
@@ -27,12 +27,12 @@ object Timeout {
/**
* Timeout Enrichment
- * @param Timeout the given [[Timeout Timeout]] handle
+ * @param handle the given [[Timeout timeout]] handle
*/
- implicit class TimeoutEnrichment(val Timeout: Timeout) extends AnyVal {
+ implicit class TimeoutEnrichment(val handle: Timeout) extends AnyVal {
@inline
- def clear(): Unit = clearTimeout(Timeout)
+ def clear(): Unit = clearTimeout(handle)
}
diff --git a/src/test/resources/watchfile.json b/src/test/resources/watchfile.json
index 4021e01a8..a74559b4e 100644
--- a/src/test/resources/watchfile.json
+++ b/src/test/resources/watchfile.json
@@ -1,6 +1,6 @@
{
"name": "scalajs-io",
- "version": "0.4.0-pre2",
+ "version": "0.4.0-pre4",
"private": true,
"dependencies": {
"async": "^2.0.1",