aws-sdk-scalajs-facade
A complete set of Scala.js type facade for aws/aws-sdk-js.
All AWS are available and keep updating.
You may find the below peer facades useful when developing app with AWS.
- exoego/aws-lambda-scalajs-facade offers type definition and utilities for AWS Lambda events.
- exoego/scala-js-nodejs offers type definition and utilities for Node.js API.
Getting Started
libraryDependencies += "net.exoego" %%% "aws-sdk-scalajs-facade" % "0.33.0-v2.892.0"
scalaJSLinkerConfig ~= (_.withModuleKind(ModuleKind.CommonJSModule))
// Below are optional. Required when bundling aws-sdk for testing in sbt or
// for running the app (the generated JS) on environment without aws-sdk provided.
enablePlugins(ScalaJSBundlerPlugin)
npmDependencies += "aws-sdk" -> "2.892.0"
Check scalajs-bundler regarding how to use ScalajsBundlerPlugin
.
Note) The all-in-one artifact aws-sdk-scalajs-facade
includes all AWS facade and quite huge. If you depend only minimum facades, you will gain build performance boost (short fastOptJS
/fullOptJS
time). See the list of separate artifacts.
Using constructor
Every AWS services and their-related types are defined in facade.amazonaws.services.<service_name>
package in "net.exoego" %%% "aws-sdk-scalajs-facade-<service_name>" % VERSION
. See the list of separate artifacts.
Service class can be instantiated with their constructor.
import facade.amazonaws.services.s3._
for {
image <- new S3().getObjectFuture(GetObjectRequest(
Bucket = "foo-bar",
Key = "123.json"
))
} yield {
println(image.Body)
}
Using AWS Object
AWS
object is defined in core
project. "aws-sdk-scalajs-facade-<service_name>"
depends on core
project so your project do not need to explicitly depend on core
.
By default, AWS
object expose only config
field to be used for configuring aws-sdk globally.
import facade.amazonaws.AWS
AWS.config.region = "..."
AWS.config.s3 = ???
By adding the artifact "net.exoego" %%% "aws-sdk-scalajs-facade" % VERSION
to libraryDependencies
, AWS
object aggregates all service classes so you can instantiate service class as same as in aws-sdk-js, like below:
import facade.amazonaws.AWS
import facade.amazonaws.services.dynamodb._
import scala.scalajs.js.Dictionary
for {
record <- new AWS.DynamoDB().getItemFuture(GetItemInput(
Key = Dictionary("product-id" -> AttributeValue.S("ABC-123")),
TableName = "product-table"
))
} yield {
println(record.Item)
}
Or using apply
method, you can skip new
keyword.
import facade.amazonaws.AWS
import facade.amazonaws.services.dynamodb._
import scala.scalajs.js.Dictionary
for {
record <- AWS.DynamoDB().getItemFuture(GetItemInput(
Key = Dictionary("product-id" -> AttributeValue.S("ABC-123")),
TableName = "product-table"
))
} yield {
println(record.Item)
}
Support matrix
ScalaJS 0.6.x | ScalaJS 1.0 | |
---|---|---|
Scala 2.13 | |
|
Scala 2.12 | |
|
Scala 2.11 | N/A | N/A |
Scala 2.10 | N/A | N/A |
-
✔️ Supported -
🚧 Not supported but planned
Origin
Auto-generated from aws-sdk-scalajs-facade-generator.
This project started as a fork of awesome balshor/aws-sdk-scalajs-facade.
Intention of fork is to
- Re-design based on my team's preference since my projects are blessed with this facade.
- Continue updating with eco-system (Scala.JS and aws-sdk) timely.
- Make it more type-safe and easier to use.
- Add some convenient bridges between Node.js and Scala.js.
Development
npm install
sbt ~compile
- Edit source code
License
See LICENSE.txt.