Skip to content

Commit ccab7c7

Browse files
committed
1. Continued work on the mongodb node module
2. Implemented "escape-html" node module 3. Implemented eval, console, decodeURI, encodeURI and others 4. Added references to applications developed using MEANS.js
1 parent 946f85c commit ccab7c7

File tree

11 files changed

+178
-59
lines changed

11 files changed

+178
-59
lines changed

README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ MEANS.js is a Scala.js Facade for the MEAN Stack (MongoDB ExpressJS AngularJS No
99
* <a href="#Requirements">Build Requirements</a>
1010
* <a href="#Build">Building the SDK</a>
1111
* <a href="#Run_Examples">Building and run examples</a>
12+
* <a href="#Developed_using_MEANS">Developed using MEANS.js</a>
1213
* <a href="#NodeJS">Node.js bindings</a>
1314
* <a href="#NodeJS_Modules">Modules</a>
1415
* <a href="#NodeJS_Integration">Integration Guidance</a>
@@ -34,6 +35,7 @@ The goal of MEANS.js is to be a complete Scala.js facade for the entire MEAN Sta
3435
#### Build Requirements
3536

3637
* [Scala 2.11.8+] (http://scala-lang.org/download/)
38+
* [Scala.js 0.6.8] (http://www.scala-js.org/)
3739
* [SBT 0.13.11+] (http://www.scala-sbt.org/download.html)
3840

3941
<a name="Build"></a>
@@ -51,6 +53,13 @@ The goal of MEANS.js is to be a complete Scala.js facade for the entire MEAN Sta
5153
$ cd examples
5254
$ node ./examples.js FilesExample
5355
```
56+
57+
<a name="Developed_using_MEANS"></a>
58+
### Developed using MEANS.js
59+
60+
The following applications were developed using MEANS.js:
61+
* [Socialized](https://github.com/ldaniels528/socialized)
62+
* [Trifecta](https://github.com/ldaniels528/trifecta)
5463

5564
<a name="NodeJS"></a>
5665
## Node.js
@@ -75,6 +84,7 @@ The following NodeJS modules have been implemented thus far:
7584
| buffer | 6.1.0 | means-node-core | Node.js Core (Global) |
7685
| crypto | 6.1.0 | means-node-core | The crypto module provides cryptographic functionality that includes a set of wrappers for OpenSSL's hash, HMAC, cipher, decipher, sign and verify functions. |
7786
| drama | 0.1.3 | means-node-drama | drama is an Actor model implementation for JavaScript and Node.js |
87+
| escape-html | 1.0.3 | means-node-escape-html| Escape string for use in HTML |
7888
| events | 6.1.0 | means-node-core | Node.js Core |
7989
| express | 4.13.4 | means-node-express | Fast, unopinionated, minimalist web framework for Node.js |
8090
| express-fileupload | 0.0.5 | means-node-express-fileupload | Simple express file upload middleware that wraps around connect-busboy |

build.sbt

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,10 @@ lazy val root = (project in file(".")).
4040
angular_sanitize, angular_toaster, angular_ui_bootstrap, angular_ui_router,
4141
// node
4242
node_core, node_adal, node_amqplib, node_assert, node_async, node_azure, node_bcrypt, node_body_parser,
43-
node_colors, node_crypto, node_drama, node_elgs_splitargs, node_express, node_express_fileupload, node_express_ws,
44-
node_filed, node_fs, node_http, node_https, node_jwt_simple, node_kafka, node_mongodb, node_multer, node_net,
45-
node_oppressor, node_os, node_path, node_readline, node_repl, node_request, node_string_decoder, node_url,
46-
node_util, node_xml2js, node_zlib, node_zookeeper
43+
node_colors, node_crypto, node_drama, node_escape_html, node_elgs_splitargs, node_express,
44+
node_express_fileupload, node_express_ws, node_filed, node_fs, node_http, node_https, node_jwt_simple,
45+
node_kafka, node_mongodb, node_multer, node_net, node_oppressor, node_os, node_path, node_readline,
46+
node_repl, node_request, node_string_decoder, node_url, node_util, node_xml2js, node_zlib, node_zookeeper
4747
)
4848

4949
lazy val core = (project in file("core")).
@@ -273,6 +273,15 @@ lazy val node_elgs_splitargs = (project in file("node/elgs-splitargs")).
273273
description := "NodeJS/elgs-splitargs facade for Scala.js"
274274
)
275275

276+
lazy val node_escape_html = (project in file("node/escape-html")).
277+
dependsOn(node_core).
278+
enablePlugins(ScalaJSPlugin).
279+
settings(commonSettings: _*).
280+
settings(
281+
name := "means-node-escape-html",
282+
description := "NodeJS/escape-html facade for Scala.js"
283+
)
284+
276285
lazy val node_express = (project in file("node/express")).
277286
dependsOn(node_http).
278287
enablePlugins(ScalaJSPlugin).
@@ -501,14 +510,16 @@ lazy val node_zookeeper = (project in file("node/zookeeper-client")).
501510
lazy val examples = (project in file("examples")).
502511
aggregate(
503512
node_core, node_adal, node_amqplib, node_assert, node_async, node_azure, node_bcrypt, node_body_parser, node_colors,
504-
node_crypto, node_drama, node_elgs_splitargs, node_express, node_express_ws, node_filed, node_fs, node_http, node_https,
505-
node_jwt_simple, node_kafka, node_mongodb, node_multer, node_net, node_oppressor, node_os, node_path, node_readline,
506-
node_repl, node_request, node_string_decoder, node_url, node_util, node_xml2js, node_zlib, node_zookeeper).
513+
node_crypto, node_drama, node_elgs_splitargs, node_escape_html, node_express, node_express_ws, node_filed, node_fs,
514+
node_http, node_https, node_jwt_simple, node_kafka, node_mongodb, node_multer, node_net, node_oppressor, node_os,
515+
node_path, node_readline, node_repl, node_request, node_string_decoder, node_url, node_util, node_xml2js, node_zlib,
516+
node_zookeeper).
507517
dependsOn(
508518
node_core, node_adal, node_amqplib, node_assert, node_async, node_azure, node_bcrypt, node_body_parser, node_colors,
509-
node_crypto, node_drama, node_elgs_splitargs, node_express, node_express_ws, node_filed, node_fs, node_http, node_https,
510-
node_jwt_simple, node_kafka, node_mongodb, node_multer, node_net, node_oppressor, node_os, node_path, node_readline,
511-
node_repl, node_request, node_string_decoder, node_url, node_util, node_xml2js, node_zlib, node_zookeeper).
519+
node_crypto, node_drama, node_elgs_splitargs, node_escape_html, node_express, node_express_ws, node_filed, node_fs,
520+
node_http, node_https, node_jwt_simple, node_kafka, node_mongodb, node_multer, node_net, node_oppressor, node_os,
521+
node_path, node_readline, node_repl, node_request, node_string_decoder, node_url, node_util, node_xml2js, node_zlib,
522+
node_zookeeper).
512523
enablePlugins(ScalaJSPlugin).
513524
settings(commonSettings: _*).
514525
settings(
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.github.ldaniels528.meansjs.core
2+
3+
import scala.scalajs.js
4+
5+
/**
6+
* JavaScript eval() Function
7+
8+
*/
9+
trait Eval extends js.Object {
10+
11+
def apply(expression: String): js.Any = js.native
12+
13+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.github.ldaniels528.meansjs.core
2+
3+
import scala.scalajs.js
4+
5+
/**
6+
* JavaScript decodeuri() / encodeuri() Function
7+
* @see [[http://www.w3schools.com/jsref/jsref_unescape.asp]]
8+
*/
9+
@js.native
10+
trait GenericStringFunction extends js.Object {
11+
12+
def apply(text: String): String = js.native
13+
14+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package com.github.ldaniels528.meansjs
2+
3+
import scala.scalajs.js
4+
import scala.scalajs.js.annotation.JSName
5+
6+
/**
7+
* MEANS.js Core Package Object
8+
9+
*/
10+
package object core {
11+
12+
@js.native
13+
@JSName("console")
14+
object console extends org.scalajs.dom.raw.Console
15+
16+
/////////////////////////////////////////////////////////////////////////////////
17+
// Global Functions
18+
/////////////////////////////////////////////////////////////////////////////////
19+
20+
@js.native
21+
@JSName("eval")
22+
object eval extends Eval
23+
24+
@js.native
25+
@JSName("decodeURI")
26+
object decodeURI extends GenericStringFunction
27+
28+
@js.native
29+
@JSName("encodeURI")
30+
object encodeURI extends GenericStringFunction
31+
32+
@js.native
33+
@JSName("decodeURIComponent")
34+
object decodeURIComponent extends GenericStringFunction
35+
36+
@js.native
37+
@JSName("encodeURIComponent")
38+
object encodeURIComponent extends GenericStringFunction
39+
40+
@deprecated("Use encodeURI() or encodeURIComponent() instead", since = "1.5")
41+
@js.native
42+
@JSName("escape")
43+
object escape extends GenericStringFunction
44+
45+
@deprecated("Use decodeURI() or decodeURIComponent() instead", since = "1.5")
46+
@js.native
47+
@JSName("unescape")
48+
object unescape extends GenericStringFunction
49+
50+
}

examples/src/main/scala/examples/Examples.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ object Examples extends js.JSApp {
2828
"ClientRequestExample" -> ((bootstrap: Bootstrap) => new ClientRequestExample(bootstrap)),
2929
"ColorsExample" -> ((bootstrap: Bootstrap) => new ColorsExample(bootstrap)),
3030
"CompressionExample" -> ((bootstrap: Bootstrap) => new CompressionExample(bootstrap)),
31+
"EscapeHtmlExample" -> ((bootstrap: Bootstrap) => new EscapeHtmlExample(bootstrap)),
3132
"EventEmitterExample" -> ((bootstrap: Bootstrap) => new EventEmitterExample(bootstrap)),
3233
"ExpressRoutingExample" -> ((bootstrap: Bootstrap) => new ExpressRoutingExample(bootstrap)),
3334
"ExpressServerExample" -> ((bootstrap: Bootstrap) => new ExpressServerExample(bootstrap)),
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package examples.nodejs.io
2+
3+
import com.github.ldaniels528.meansjs.nodejs.{Bootstrap, console}
4+
import com.github.ldaniels528.meansjs.nodejs.escapehtml.EscapeHtml
5+
6+
/**
7+
* Escape-Html Example
8+
9+
*/
10+
class EscapeHtmlExample(bootstrap: Bootstrap) {
11+
import bootstrap._
12+
13+
var escapeHtml = require[EscapeHtml]("escape-html")
14+
var html = escapeHtml("foo & bar")
15+
16+
console.log("html =>", html)
17+
18+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.github.ldaniels528.meansjs.nodejs.escapehtml
2+
3+
import com.github.ldaniels528.meansjs.nodejs.NodeModule
4+
5+
import scala.scalajs.js
6+
7+
/**
8+
* escape-html - Escape string for use in HTML
9+
10+
* @see https://www.npmjs.com/package/escape-html
11+
* @version 1.0.3
12+
*/
13+
@js.native
14+
trait EscapeHtml extends js.Function1[String, String] with NodeModule

node/express-fileupload/src/main/scala/com/github/ldaniels528/meansjs/nodejs/express/fileupload/UploadFile.scala

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.github.ldaniels528.meansjs.nodejs.express.fileupload
22

33
import com.github.ldaniels528.meansjs.nodejs.buffer.Buffer
4+
import com.github.ldaniels528.meansjs.nodejs.errors
5+
import com.github.ldaniels528.meansjs.util.ScalaJsHelper._
46

57
import scala.scalajs.js
68

@@ -19,6 +21,25 @@ trait UploadFile extends js.Object {
1921

2022
def mimetype: String = js.native
2123

22-
def mv(path: String, callback: js.Function): js.Any = js.native
24+
def mv(path: String, callback: js.Function): Unit = js.native
25+
26+
}
27+
28+
/**
29+
* Upload File Companion
30+
31+
*/
32+
object UploadFile {
33+
34+
/**
35+
* Upload File Extensions
36+
37+
*/
38+
implicit class UploadFileExtensions(val file: UploadFile) extends AnyVal {
39+
40+
@inline
41+
def mvFuture(path: String) = futureCallbackE0[errors.Error](file.mv(path, _))
42+
43+
}
2344

2445
}

node/mongodb/src/main/scala/com/github/ldaniels528/meansjs/nodejs/mongodb/gridfs/GridFSBucket.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.github.ldaniels528.meansjs.nodejs.mongodb.gridfs
22

3-
import com.github.ldaniels528.meansjs.nodejs.stream._
3+
import com.github.ldaniels528.meansjs.nodejs.mongodb.Cursor
44

55
import scala.scalajs.js
66

@@ -41,7 +41,7 @@ trait GridFSBucket extends js.Object {
4141
* Convenience wrapper around find on the files collection
4242
* @example find(filter, options)
4343
*/
44-
def find(filter: js.Any, options: GridFSBucketFindOptions): Unit = js.native
44+
def find(filter: js.Any, options: GridFSBucketFindOptions = null): Cursor = js.native
4545

4646
/**
4747
* Returns a readable stream (GridFSBucketReadStream) for streaming file data from GridFS.
@@ -59,7 +59,7 @@ trait GridFSBucket extends js.Object {
5959
* @param options the [[DownloadStreamByNameOptions download options]]
6060
* @example bucket.openDownloadStreamByName('meistersinger.mp3')
6161
*/
62-
def openDownloadStreamByName(file: String, options: DownloadStreamByNameOptions = null): Readable = js.native
62+
def openDownloadStreamByName(file: String, options: DownloadStreamByNameOptions = null): GridFSBucketReadStream = js.native
6363

6464
/**
6565
* Returns a writable stream (GridFSBucketWriteStream) for writing buffers to GridFS. The stream's 'id' property

node/mongodb/src/main/scala/com/github/ldaniels528/meansjs/nodejs/mongodb/gridfs/GridFSBucketFindOptions.scala

Lines changed: 12 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -5,50 +5,17 @@ import scala.scalajs.js.annotation.ScalaJSDefined
55

66
/**
77
* GridFS Bucket Find Options
8-
8+
* @param batchSize Optional: batch size for cursor
9+
* @param limit Optional: limit for cursor
10+
* @param maxTimeMS Optional: maximum time (milliseconds) for cursor
11+
* @param noCursorTimeout Optional: set cursor's noCursorTimeout flag
12+
* @param skip Optional: skip for cursor
13+
* @param sort Optional: sort for cursor
914
*/
1015
@ScalaJSDefined
11-
class GridFSBucketFindOptions extends js.Object {
12-
// Optional batch size for cursor
13-
var batchSize: js.UndefOr[Int] = _
14-
15-
// Optional limit for cursor
16-
var limit: js.UndefOr[Int] = _
17-
18-
// Optional maxTimeMS for cursor
19-
var maxTimeMS: js.UndefOr[Int] = _
20-
21-
// Optionally set cursor's noCursorTimeout flag
22-
var noCursorTimeout: js.UndefOr[Boolean] = _
23-
24-
// Optional skip for cursor
25-
var skip: js.UndefOr[Int] = _
26-
27-
// Optional sort for cursor
28-
var sort: js.UndefOr[js.Object] = _
29-
30-
}
31-
32-
/**
33-
* GridFS Bucket Find Options Companion
34-
35-
*/
36-
object GridFSBucketFindOptions {
37-
38-
def apply(batchSize: js.UndefOr[Int] = js.undefined,
39-
limit: js.UndefOr[Int] = js.undefined,
40-
maxTimeMS: js.UndefOr[Int] = js.undefined,
41-
noCursorTimeout: js.UndefOr[Boolean] = js.undefined,
42-
skip: js.UndefOr[Int] = js.undefined,
43-
sort: js.UndefOr[js.Object] = js.undefined) = {
44-
val options = new GridFSBucketFindOptions()
45-
options.batchSize = batchSize
46-
options.limit = limit
47-
options.maxTimeMS = maxTimeMS
48-
options.noCursorTimeout = noCursorTimeout
49-
options.skip = skip
50-
options.sort = sort
51-
options
52-
}
53-
54-
}
16+
class GridFSBucketFindOptions(var batchSize: js.UndefOr[Int] = js.undefined,
17+
var limit: js.UndefOr[Int] = js.undefined,
18+
var maxTimeMS: js.UndefOr[Int] = js.undefined,
19+
var noCursorTimeout: js.UndefOr[Boolean] = js.undefined,
20+
var skip: js.UndefOr[Int] = js.undefined,
21+
var sort: js.UndefOr[js.Object] = js.undefined) extends js.Object

0 commit comments

Comments
 (0)