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",