diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 98cc0586..ad337884 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,7 +30,7 @@ jobs: os: [ubuntu-latest] scala: [2.12.17, 3.1.3, 2.13.9] java: [corretto@8, corretto@11] - project: [rootJS, rootJVM] + project: [rootJS, rootJVM, rootNative] exclude: - scala: 2.12.17 java: corretto@11 @@ -38,6 +38,8 @@ jobs: java: corretto@11 - project: rootJS java: corretto@11 + - project: rootNative + java: corretto@11 - project: rootJS scala: 2.12.17 runs-on: ${{ matrix.os }} @@ -108,6 +110,10 @@ jobs: if: matrix.project == 'rootJS' run: sbt 'project ${{ matrix.project }}' '++${{ matrix.scala }}' Test/scalaJSLinkerResult + - name: nativeLink + if: matrix.project == 'rootNative' + run: sbt 'project ${{ matrix.project }}' '++${{ matrix.scala }}' Test/nativeLink + - name: Test if: matrix.scala != '2.12.17' run: sbt 'project ${{ matrix.project }}' '++${{ matrix.scala }}' test @@ -126,11 +132,11 @@ jobs: - name: Make target directories if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main') - run: mkdir -p target lambda-cloudformation-custom-resource/.js/target lambda-http4s/.jvm/target unidocs/target .js/target core/.js/target examples/.js/target lambda-http4s/.js/target core/.jvm/target .jvm/target lambda/js/target .native/target examples/.jvm/target lambda/jvm/target sbt-lambda/target lambda-cloudformation-custom-resource/.jvm/target project/target + run: mkdir -p lambda-kernel/.jvm/target target lambda-cloudformation-custom-resource/.js/target lambda-http4s/.jvm/target unidocs/target .js/target core/.js/target examples/.js/target lambda-http4s/.js/target core/.jvm/target .jvm/target lambda/js/target lambda-kernel/.js/target .native/target lambda-kernel/.native/target examples/.jvm/target lambda/jvm/target feral-lambda-runtime/.jvm/target sbt-lambda/target feral-lambda-runtime/.native/target lambda-cloudformation-custom-resource/.jvm/target feral-lambda-runtime/.js/target project/target - name: Compress target directories if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main') - run: tar cf targets.tar target lambda-cloudformation-custom-resource/.js/target lambda-http4s/.jvm/target unidocs/target .js/target core/.js/target examples/.js/target lambda-http4s/.js/target core/.jvm/target .jvm/target lambda/js/target .native/target examples/.jvm/target lambda/jvm/target sbt-lambda/target lambda-cloudformation-custom-resource/.jvm/target project/target + run: tar cf targets.tar lambda-kernel/.jvm/target target lambda-cloudformation-custom-resource/.js/target lambda-http4s/.jvm/target unidocs/target .js/target core/.js/target examples/.js/target lambda-http4s/.js/target core/.jvm/target .jvm/target lambda/js/target lambda-kernel/.js/target .native/target lambda-kernel/.native/target examples/.jvm/target lambda/jvm/target feral-lambda-runtime/.jvm/target sbt-lambda/target feral-lambda-runtime/.native/target lambda-cloudformation-custom-resource/.jvm/target feral-lambda-runtime/.js/target project/target - name: Upload target directories if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main') @@ -209,6 +215,16 @@ jobs: tar xf targets.tar rm targets.tar + - name: Download target directories (2.12.17, rootNative) + uses: actions/download-artifact@v2 + with: + name: target-${{ matrix.os }}-${{ matrix.java }}-2.12.17-rootNative + + - name: Inflate target directories (2.12.17, rootNative) + run: | + tar xf targets.tar + rm targets.tar + - name: Download target directories (3.1.3, rootJS) uses: actions/download-artifact@v2 with: @@ -229,6 +245,16 @@ jobs: tar xf targets.tar rm targets.tar + - name: Download target directories (3.1.3, rootNative) + uses: actions/download-artifact@v2 + with: + name: target-${{ matrix.os }}-${{ matrix.java }}-3.1.3-rootNative + + - name: Inflate target directories (3.1.3, rootNative) + run: | + tar xf targets.tar + rm targets.tar + - name: Download target directories (2.13.9, rootJS) uses: actions/download-artifact@v2 with: @@ -249,6 +275,16 @@ jobs: tar xf targets.tar rm targets.tar + - name: Download target directories (2.13.9, rootNative) + uses: actions/download-artifact@v2 + with: + name: target-${{ matrix.os }}-${{ matrix.java }}-2.13.9-rootNative + + - name: Inflate target directories (2.13.9, rootNative) + run: | + tar xf targets.tar + rm targets.tar + - name: Import signing key if: env.PGP_SECRET != '' && env.PGP_PASSPHRASE == '' run: echo $PGP_SECRET | base64 -di | gpg --import diff --git a/build.sbt b/build.sbt index 2af57b38..9587dd73 100644 --- a/build.sbt +++ b/build.sbt @@ -61,9 +61,11 @@ val circeVersion = "0.14.3" val fs2Version = "3.3.0" val http4sVersion = "0.23.16" val natchezVersion = "0.1.6" -val munitVersion = "0.7.29" -val munitCEVersion = "1.0.7" -val scalacheckEffectVersion = "1.0.4" +val munitVersion = "1.0.0-M6" +val munitCEVersion = "2.0.0-M3" +val scalacheckEffectVersion = "2.0.0-M2" + +ThisBuild / resolvers ++= Resolver.sonatypeOssRepos("snapshots") lazy val commonSettings = Seq( crossScalaVersions := Seq(Scala3, Scala213) @@ -72,6 +74,8 @@ lazy val commonSettings = Seq( lazy val root = tlCrossRootProject.aggregate( core, + lambdaKernel, + lambdaRuntime, lambda, sbtLambda, lambdaHttp4s, @@ -91,25 +95,55 @@ lazy val core = crossProject(JSPlatform, JVMPlatform) ) .settings(commonSettings) -lazy val lambda = crossProject(JSPlatform, JVMPlatform) - .in(file("lambda")) +lazy val lambdaKernel = crossProject(JSPlatform, JVMPlatform, NativePlatform) + .crossType(CrossType.Pure) + .in(file("lambda-kernel")) .settings( - name := "feral-lambda", + name := "feral-lambda-kernel", libraryDependencies ++= Seq( - "org.tpolecat" %%% "natchez-core" % natchezVersion, + "org.typelevel" %%% "cats-effect-kernel" % catsEffectVersion, + "com.armanbilge" %%% "natchez-core" % "0.1.6-SNAPSHOT", "io.circe" %%% "circe-scodec" % circeVersion, "io.circe" %%% "circe-jawn" % circeVersion, "org.scodec" %%% "scodec-bits" % "1.1.34", "org.scalameta" %%% "munit-scalacheck" % munitVersion % Test, - "org.typelevel" %%% "munit-cats-effect-3" % munitCEVersion % Test, + "org.typelevel" %%% "munit-cats-effect" % munitCEVersion % Test, + "io.circe" %%% "circe-literal" % circeVersion % Test + ) + ) + .platformsSettings(JSPlatform, NativePlatform)( + libraryDependencies ++= Seq( + "io.github.cquiroz" %%% "scala-java-time" % "2.4.0" + ) + ) + +lazy val lambdaRuntime = crossProject(JSPlatform, JVMPlatform, NativePlatform) + .crossType(CrossType.Pure) + .in(file("feral-lambda-runtime")) + .settings( + name := "feral-lambda-kernel", + libraryDependencies ++= Seq( + "io.circe" %%% "circe-jawn" % circeVersion, + "org.http4s" %%% "http4s-client" % http4sVersion, + "org.http4s" %%% "http4s-circe" % http4sVersion + ) + ) + .dependsOn(lambdaKernel) + +lazy val lambda = crossProject(JSPlatform, JVMPlatform) + .in(file("lambda")) + .settings( + name := "feral-lambda", + libraryDependencies ++= Seq( + "org.scalameta" %%% "munit-scalacheck" % munitVersion % Test, + "org.typelevel" %%% "munit-cats-effect" % munitCEVersion % Test, "io.circe" %%% "circe-literal" % circeVersion % Test ) ) .settings(commonSettings) .jsSettings( libraryDependencies ++= Seq( - "io.circe" %%% "circe-scalajs" % circeVersion, - "io.github.cquiroz" %%% "scala-java-time" % "2.4.0" + "io.circe" %%% "circe-scalajs" % circeVersion ) ) .jvmSettings( @@ -119,7 +153,7 @@ lazy val lambda = crossProject(JSPlatform, JVMPlatform) "io.circe" %%% "circe-fs2" % "0.14.0" ) ) - .dependsOn(core) + .dependsOn(core, lambdaKernel) lazy val sbtLambda = project .in(file("sbt-lambda")) @@ -147,7 +181,7 @@ lazy val lambdaHttp4s = crossProject(JSPlatform, JVMPlatform) ) ) .settings(commonSettings) - .dependsOn(lambda % "compile->compile;test->test") + .dependsOn(lambda, lambdaKernel % "compile->compile;test->test") lazy val lambdaCloudFormationCustomResource = crossProject(JSPlatform, JVMPlatform) .crossType(CrossType.Pure) @@ -164,7 +198,7 @@ lazy val lambdaCloudFormationCustomResource = crossProject(JSPlatform, JVMPlatfo "org.http4s" %%% "http4s-circe" % http4sVersion, "org.http4s" %%% "http4s-dsl" % http4sVersion % Test, "org.scalameta" %%% "munit-scalacheck" % munitVersion % Test, - "org.typelevel" %%% "munit-cats-effect-3" % munitCEVersion % Test, + "org.typelevel" %%% "munit-cats-effect" % munitCEVersion % Test, "org.typelevel" %%% "scalacheck-effect" % scalacheckEffectVersion % Test, "org.typelevel" %%% "scalacheck-effect-munit" % scalacheckEffectVersion % Test, "com.eed3si9n.expecty" %%% "expecty" % "0.16.0" % Test, diff --git a/feral-lambda-runtime/src/main/scala/feral/lambda/runtime/LambdaRuntime.scala b/feral-lambda-runtime/src/main/scala/feral/lambda/runtime/LambdaRuntime.scala new file mode 100644 index 00000000..2eaa035f --- /dev/null +++ b/feral-lambda-runtime/src/main/scala/feral/lambda/runtime/LambdaRuntime.scala @@ -0,0 +1,35 @@ +/* + * Copyright 2021 Typelevel + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package feral.lambda +package runtime + +import cats.effect.kernel.Concurrent +import cats.effect.kernel.Resource +import io.circe.Json +import org.http4s.client.Client + +object FeralLambdaRuntime { + + def apply[F[_]](client: Client[F])(handler: (Json, Context[F]) => F[Json])( + implicit F: Concurrent[F] + ): Resource[F, Unit] = + // TODO implement a runtime here + // it should retrieve incoming events and handle them with the handler + // it will run on a background fiber, whose lifecycle is controlled by the resource + ??? + +} diff --git a/lambda-http4s/src/test/scala-2/feral/lambda/http4s/ApiGatewayProxyHandlerSuite.scala b/lambda-http4s/src/test/scala/feral/lambda/http4s/ApiGatewayProxyHandlerSuite.scala similarity index 100% rename from lambda-http4s/src/test/scala-2/feral/lambda/http4s/ApiGatewayProxyHandlerSuite.scala rename to lambda-http4s/src/test/scala/feral/lambda/http4s/ApiGatewayProxyHandlerSuite.scala diff --git a/lambda/shared/src/main/scala-2/feral/lambda/package.scala b/lambda-kernel/src/main/scala-2/feral/lambda/package.scala similarity index 100% rename from lambda/shared/src/main/scala-2/feral/lambda/package.scala rename to lambda-kernel/src/main/scala-2/feral/lambda/package.scala diff --git a/lambda/shared/src/main/scala-3/feral/lambda/INothing.scala b/lambda-kernel/src/main/scala-3/feral/lambda/INothing.scala similarity index 100% rename from lambda/shared/src/main/scala-3/feral/lambda/INothing.scala rename to lambda-kernel/src/main/scala-3/feral/lambda/INothing.scala diff --git a/lambda/shared/src/main/scala-3/feral/lambda/envs.scala b/lambda-kernel/src/main/scala-3/feral/lambda/envs.scala similarity index 100% rename from lambda/shared/src/main/scala-3/feral/lambda/envs.scala rename to lambda-kernel/src/main/scala-3/feral/lambda/envs.scala diff --git a/lambda/shared/src/main/scala/feral/lambda/AwsTags.scala b/lambda-kernel/src/main/scala/feral/lambda/AwsTags.scala similarity index 100% rename from lambda/shared/src/main/scala/feral/lambda/AwsTags.scala rename to lambda-kernel/src/main/scala/feral/lambda/AwsTags.scala diff --git a/lambda/shared/src/main/scala/feral/lambda/Context.scala b/lambda-kernel/src/main/scala/feral/lambda/Context.scala similarity index 97% rename from lambda/shared/src/main/scala/feral/lambda/Context.scala rename to lambda-kernel/src/main/scala/feral/lambda/Context.scala index 113b94eb..934aab24 100644 --- a/lambda/shared/src/main/scala/feral/lambda/Context.scala +++ b/lambda-kernel/src/main/scala/feral/lambda/Context.scala @@ -46,7 +46,7 @@ final class Context[F[_]] private[lambda] ( f(remainingTime)) } -object Context extends ContextCompanionPlatform +object Context final class CognitoIdentity( val identityId: String, diff --git a/lambda/shared/src/main/scala/feral/lambda/KernelSource.scala b/lambda-kernel/src/main/scala/feral/lambda/KernelSource.scala similarity index 100% rename from lambda/shared/src/main/scala/feral/lambda/KernelSource.scala rename to lambda-kernel/src/main/scala/feral/lambda/KernelSource.scala diff --git a/lambda/shared/src/main/scala/feral/lambda/LambdaEnv.scala b/lambda-kernel/src/main/scala/feral/lambda/LambdaEnv.scala similarity index 100% rename from lambda/shared/src/main/scala/feral/lambda/LambdaEnv.scala rename to lambda-kernel/src/main/scala/feral/lambda/LambdaEnv.scala diff --git a/lambda/shared/src/main/scala/feral/lambda/TracedHandler.scala b/lambda-kernel/src/main/scala/feral/lambda/TracedHandler.scala similarity index 100% rename from lambda/shared/src/main/scala/feral/lambda/TracedHandler.scala rename to lambda-kernel/src/main/scala/feral/lambda/TracedHandler.scala diff --git a/lambda/shared/src/main/scala/feral/lambda/events/ApiGatewayProxyEventV2.scala b/lambda-kernel/src/main/scala/feral/lambda/events/ApiGatewayProxyEventV2.scala similarity index 100% rename from lambda/shared/src/main/scala/feral/lambda/events/ApiGatewayProxyEventV2.scala rename to lambda-kernel/src/main/scala/feral/lambda/events/ApiGatewayProxyEventV2.scala diff --git a/lambda/shared/src/main/scala/feral/lambda/events/ApiGatewayProxyResultV2.scala b/lambda-kernel/src/main/scala/feral/lambda/events/ApiGatewayProxyResultV2.scala similarity index 100% rename from lambda/shared/src/main/scala/feral/lambda/events/ApiGatewayProxyResultV2.scala rename to lambda-kernel/src/main/scala/feral/lambda/events/ApiGatewayProxyResultV2.scala diff --git a/lambda/shared/src/main/scala/feral/lambda/events/DynamoDbStreamEvent.scala b/lambda-kernel/src/main/scala/feral/lambda/events/DynamoDbStreamEvent.scala similarity index 100% rename from lambda/shared/src/main/scala/feral/lambda/events/DynamoDbStreamEvent.scala rename to lambda-kernel/src/main/scala/feral/lambda/events/DynamoDbStreamEvent.scala diff --git a/lambda/shared/src/main/scala/feral/lambda/events/KinesisStreamEvent.scala b/lambda-kernel/src/main/scala/feral/lambda/events/KinesisStreamEvent.scala similarity index 100% rename from lambda/shared/src/main/scala/feral/lambda/events/KinesisStreamEvent.scala rename to lambda-kernel/src/main/scala/feral/lambda/events/KinesisStreamEvent.scala diff --git a/lambda/shared/src/main/scala/feral/lambda/events/S3BatchEvent.scala b/lambda-kernel/src/main/scala/feral/lambda/events/S3BatchEvent.scala similarity index 100% rename from lambda/shared/src/main/scala/feral/lambda/events/S3BatchEvent.scala rename to lambda-kernel/src/main/scala/feral/lambda/events/S3BatchEvent.scala diff --git a/lambda/shared/src/main/scala/feral/lambda/events/S3BatchResult.scala b/lambda-kernel/src/main/scala/feral/lambda/events/S3BatchResult.scala similarity index 100% rename from lambda/shared/src/main/scala/feral/lambda/events/S3BatchResult.scala rename to lambda-kernel/src/main/scala/feral/lambda/events/S3BatchResult.scala diff --git a/lambda/shared/src/main/scala/feral/lambda/events/SnsEvent.scala b/lambda-kernel/src/main/scala/feral/lambda/events/SnsEvent.scala similarity index 100% rename from lambda/shared/src/main/scala/feral/lambda/events/SnsEvent.scala rename to lambda-kernel/src/main/scala/feral/lambda/events/SnsEvent.scala diff --git a/lambda/shared/src/main/scala/feral/lambda/events/SqsEvent.scala b/lambda-kernel/src/main/scala/feral/lambda/events/SqsEvent.scala similarity index 100% rename from lambda/shared/src/main/scala/feral/lambda/events/SqsEvent.scala rename to lambda-kernel/src/main/scala/feral/lambda/events/SqsEvent.scala diff --git a/lambda/shared/src/main/scala/feral/lambda/events/package.scala b/lambda-kernel/src/main/scala/feral/lambda/events/package.scala similarity index 100% rename from lambda/shared/src/main/scala/feral/lambda/events/package.scala rename to lambda-kernel/src/main/scala/feral/lambda/events/package.scala diff --git a/lambda/shared/src/test/scala/feral/lambda/TracedHandlerSuite.scala b/lambda-kernel/src/test/scala/feral/lambda/TracedHandlerSuite.scala similarity index 100% rename from lambda/shared/src/test/scala/feral/lambda/TracedHandlerSuite.scala rename to lambda-kernel/src/test/scala/feral/lambda/TracedHandlerSuite.scala diff --git a/lambda/shared/src/test/scala/feral/lambda/events/ApiGatewayProxyEventV2Suite.scala b/lambda-kernel/src/test/scala/feral/lambda/events/ApiGatewayProxyEventV2Suite.scala similarity index 100% rename from lambda/shared/src/test/scala/feral/lambda/events/ApiGatewayProxyEventV2Suite.scala rename to lambda-kernel/src/test/scala/feral/lambda/events/ApiGatewayProxyEventV2Suite.scala diff --git a/lambda/shared/src/test/scala/feral/lambda/events/DynamoDbStreamEventSuite.scala b/lambda-kernel/src/test/scala/feral/lambda/events/DynamoDbStreamEventSuite.scala similarity index 100% rename from lambda/shared/src/test/scala/feral/lambda/events/DynamoDbStreamEventSuite.scala rename to lambda-kernel/src/test/scala/feral/lambda/events/DynamoDbStreamEventSuite.scala diff --git a/lambda/shared/src/test/scala/feral/lambda/events/InstantDecoderSuite.scala b/lambda-kernel/src/test/scala/feral/lambda/events/InstantDecoderSuite.scala similarity index 100% rename from lambda/shared/src/test/scala/feral/lambda/events/InstantDecoderSuite.scala rename to lambda-kernel/src/test/scala/feral/lambda/events/InstantDecoderSuite.scala diff --git a/lambda/shared/src/test/scala/feral/lambda/events/KinesisStreamEventSuite.scala b/lambda-kernel/src/test/scala/feral/lambda/events/KinesisStreamEventSuite.scala similarity index 100% rename from lambda/shared/src/test/scala/feral/lambda/events/KinesisStreamEventSuite.scala rename to lambda-kernel/src/test/scala/feral/lambda/events/KinesisStreamEventSuite.scala diff --git a/lambda/shared/src/test/scala/feral/lambda/events/S3BatchEventSuite.scala b/lambda-kernel/src/test/scala/feral/lambda/events/S3BatchEventSuite.scala similarity index 100% rename from lambda/shared/src/test/scala/feral/lambda/events/S3BatchEventSuite.scala rename to lambda-kernel/src/test/scala/feral/lambda/events/S3BatchEventSuite.scala diff --git a/lambda/shared/src/test/scala/feral/lambda/events/SnsEventSuite.scala b/lambda-kernel/src/test/scala/feral/lambda/events/SnsEventSuite.scala similarity index 100% rename from lambda/shared/src/test/scala/feral/lambda/events/SnsEventSuite.scala rename to lambda-kernel/src/test/scala/feral/lambda/events/SnsEventSuite.scala diff --git a/lambda/shared/src/test/scala/feral/lambda/events/SqsEventSuite.scala b/lambda-kernel/src/test/scala/feral/lambda/events/SqsEventSuite.scala similarity index 100% rename from lambda/shared/src/test/scala/feral/lambda/events/SqsEventSuite.scala rename to lambda-kernel/src/test/scala/feral/lambda/events/SqsEventSuite.scala diff --git a/lambda/js/src/main/scala/feral/lambda/ContextPlatform.scala b/lambda/js/src/main/scala/feral/lambda/ContextPlatform.scala index 14221a86..73c96077 100644 --- a/lambda/js/src/main/scala/feral/lambda/ContextPlatform.scala +++ b/lambda/js/src/main/scala/feral/lambda/ContextPlatform.scala @@ -22,7 +22,7 @@ import io.circe.scalajs._ import scala.concurrent.duration._ -private[lambda] trait ContextCompanionPlatform { +private[lambda] object ContextPlatform { private[lambda] def fromJS[F[_]: Sync](context: facade.Context): Context[F] = new Context( diff --git a/lambda/js/src/main/scala/feral/lambda/IOLambdaPlatform.scala b/lambda/js/src/main/scala/feral/lambda/IOLambdaPlatform.scala index 08bf57e8..cba295a6 100644 --- a/lambda/js/src/main/scala/feral/lambda/IOLambdaPlatform.scala +++ b/lambda/js/src/main/scala/feral/lambda/IOLambdaPlatform.scala @@ -37,7 +37,7 @@ private[lambda] trait IOLambdaPlatform[Event, Result] { (for { lambda <- setupMemo event <- IO.fromEither(decodeJs[Event](event)) - result <- lambda(event, Context.fromJS(context)) + result <- lambda(event, ContextPlatform.fromJS(context)) } yield result.map(_.asJsAny).orUndefined).unsafeToPromise()(runtime) } } diff --git a/lambda/jvm/src/main/scala/feral/lambda/ContextPlatform.scala b/lambda/jvm/src/main/scala/feral/lambda/ContextPlatform.scala index ad650a5a..56042ee4 100644 --- a/lambda/jvm/src/main/scala/feral/lambda/ContextPlatform.scala +++ b/lambda/jvm/src/main/scala/feral/lambda/ContextPlatform.scala @@ -24,7 +24,7 @@ import io.circe.jawn.parse import scala.concurrent.duration._ import scala.jdk.CollectionConverters._ -private[lambda] trait ContextCompanionPlatform { +private[lambda] object ContextPlatform { private[lambda] def fromJava[F[_]: Sync](context: runtime.Context): Context[F] = new Context( diff --git a/lambda/jvm/src/main/scala/feral/lambda/IOLambdaPlatform.scala b/lambda/jvm/src/main/scala/feral/lambda/IOLambdaPlatform.scala index 884f36ee..fb2ffda7 100644 --- a/lambda/jvm/src/main/scala/feral/lambda/IOLambdaPlatform.scala +++ b/lambda/jvm/src/main/scala/feral/lambda/IOLambdaPlatform.scala @@ -47,7 +47,7 @@ private[lambda] abstract class IOLambdaPlatform[Event, Result] .head .compile .lastOrError - context <- IO(Context.fromJava[IO](context)) + context <- IO(ContextPlatform.fromJava[IO](context)) _ <- OptionT(lambda(event, context)).foreachF { result => Resource.fromAutoCloseable(IO(new OutputStreamWriter(output))).use { writer => IO.blocking(Printer.noSpaces.unsafePrintToAppendable(result.asJson, writer)) diff --git a/project/plugins.sbt b/project/plugins.sbt index 63eb91d9..45809771 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,3 +1,5 @@ addSbtPlugin("org.typelevel" % "sbt-typelevel" % "0.4.15") addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.10.1") addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.11.0") +addSbtPlugin("org.scala-native" % "sbt-scala-native" % "0.4.7") +addSbtPlugin("org.portable-scala" % "sbt-scala-native-crossproject" % "1.2.0")