exoego / aws-sdk-scalajs-facade

A complete set of Scala.js type facade for aws-sdk-js

GitHub

aws-sdk-scalajs-facade

A complete set of Scala.js type facade for aws/aws-sdk-js.

All 222 AWS are available as of 2020-01-02, and keep updating.

You may find the below peer facades useful when developing app with AWS.

Getting Started

libraryDependencies += "net.exoego" %%% "aws-sdk-scalajs-facade" % "0.29.0-v2.624.0"

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.32 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.

License

Apache-2.0

See LICENSE.txt.