mirror of
https://github.com/fluencelabs/aqua.git
synced 2025-04-24 22:42:13 +00:00
Check service definition fields in TS and JS, fix functions and services count in output (#305)
This commit is contained in:
parent
b0c193a42c
commit
93dec7846c
@ -9,6 +9,10 @@ case class JavaScriptFile(res: AquaRes) {
|
||||
|
||||
def generate: String =
|
||||
s"""${Header}
|
||||
|
|
||||
|function missingFields(obj, fields) {
|
||||
| return fields.filter(f => !(f in obj))
|
||||
|}
|
||||
|
|
||||
|// Services
|
||||
|${res.services.map(JavaScriptService(_)).map(_.generate).toList.mkString("\n\n")}
|
||||
|
@ -34,6 +34,8 @@ case class JavaScriptService(srv: ServiceRes) {
|
||||
|}""".stripMargin
|
||||
)
|
||||
|
||||
val membersNames = srv.members.map(_._1)
|
||||
|
||||
s"""
|
||||
|export function ${registerName}(...args) {
|
||||
| let peer;
|
||||
@ -64,6 +66,11 @@ case class JavaScriptService(srv: ServiceRes) {
|
||||
| service = args[2];
|
||||
| }
|
||||
|
|
||||
| const incorrectServiceDefinitions = missingFields(service, [${membersNames.map { n => s"'$n'"}.mkString(", ")}]);
|
||||
| if (!incorrectServiceDefinitions.length) {
|
||||
| throw new Error("Error registering service ${srv.name}: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
|
||||
| }
|
||||
|
|
||||
| peer.internals.callServiceHandler.use((req, resp, next) => {
|
||||
| if (req.serviceId !== serviceId) {
|
||||
| next();
|
||||
|
@ -9,6 +9,10 @@ case class TypeScriptFile(res: AquaRes) {
|
||||
|
||||
def generate: String =
|
||||
s"""${Header}
|
||||
|
|
||||
|function missingFields(obj: any, fields: string[]): string[] {
|
||||
| return fields.filter(f => !(f in obj))
|
||||
|}
|
||||
|
|
||||
|// Services
|
||||
|${res.services.map(TypeScriptService(_)).map(_.generate).toList.mkString("\n\n")}
|
||||
|
@ -76,6 +76,8 @@ case class TypeScriptService(srv: ServiceRes) {
|
||||
| }""".stripMargin
|
||||
)
|
||||
|
||||
val membersNames = srv.members.map(_._1)
|
||||
|
||||
s"""
|
||||
|export interface ${serviceTypeName} {
|
||||
| ${fnDefs}
|
||||
@ -111,6 +113,11 @@ case class TypeScriptService(srv: ServiceRes) {
|
||||
| service = args[2];
|
||||
| }
|
||||
|
|
||||
| const incorrectServiceDefinitions = missingFields(service, [${membersNames.map { n => s"'$n'" }.mkString(", ")}]);
|
||||
| if (!!incorrectServiceDefinitions.length) {
|
||||
| throw new Error("Error registering service ${srv.name}: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
|
||||
| }
|
||||
|
|
||||
| peer.internals.callServiceHandler.use((req, resp, next) => {
|
||||
| if (req.serviceId !== serviceId) {
|
||||
| next();
|
||||
|
@ -128,7 +128,9 @@ class SourcesSpec extends AsyncFlatSpec with Matchers {
|
||||
content = "some random content"
|
||||
compiled = AquaCompiled[FileModuleId](
|
||||
FileModuleId(filePath),
|
||||
Seq(Generated("_hey.custom", content))
|
||||
Seq(Generated("_hey.custom", content)),
|
||||
1,
|
||||
1
|
||||
)
|
||||
resolved <- sourceGen.write(targetPath)(compiled)
|
||||
_ = {
|
||||
|
@ -108,13 +108,13 @@ class AquaFileSources[F[_]: AquaIO: Monad: Files: Functor](
|
||||
}
|
||||
|
||||
// Write content to a file and return a success message
|
||||
private def writeWithResult(target: Path, content: String, size: Int) = {
|
||||
private def writeWithResult(target: Path, content: String, funcsCount: Int, servicesCount: Int) = {
|
||||
filesIO
|
||||
.writeFile(
|
||||
target,
|
||||
content
|
||||
)
|
||||
.as(s"Result $target: compilation OK ($size functions)")
|
||||
.as(s"Result $target: compilation OK ($funcsCount functions, $servicesCount services)")
|
||||
.value
|
||||
.map(Validated.fromEither)
|
||||
}
|
||||
@ -138,7 +138,7 @@ class AquaFileSources[F[_]: AquaIO: Monad: Files: Functor](
|
||||
result
|
||||
.leftMap(FileSystemError.apply)
|
||||
.map { target =>
|
||||
writeWithResult(target, compiled.content, ac.compiled.size)
|
||||
writeWithResult(target, compiled.content, ac.funcsCount, ac.servicesCount)
|
||||
}
|
||||
.traverse(identity)
|
||||
}
|
||||
|
@ -2,4 +2,4 @@ package aqua.compiler
|
||||
|
||||
import aqua.backend.Generated
|
||||
|
||||
case class AquaCompiled[I](sourceId: I, compiled: Seq[Generated])
|
||||
case class AquaCompiled[I](sourceId: I, compiled: Seq[Generated], funcsCount: Int, servicesCount: Int)
|
||||
|
@ -86,8 +86,9 @@ object AquaCompiler extends Logging {
|
||||
}
|
||||
.map(
|
||||
_.map { ap =>
|
||||
val compiled = backend.generate(AquaRes.fromContext(ap.context, config))
|
||||
AquaCompiled(ap.id, compiled)
|
||||
val res = AquaRes.fromContext(ap.context, config)
|
||||
val compiled = backend.generate(res)
|
||||
AquaCompiled(ap.id, compiled, res.funcs.length.toInt, res.services.length.toInt)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user