mirror of
https://github.com/fluencelabs/aqua.git
synced 2025-04-25 15:02:14 +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 =
|
def generate: String =
|
||||||
s"""${Header}
|
s"""${Header}
|
||||||
|
|
|
||||||
|
|function missingFields(obj, fields) {
|
||||||
|
| return fields.filter(f => !(f in obj))
|
||||||
|
|}
|
||||||
|
|
|
|
||||||
|// Services
|
|// Services
|
||||||
|${res.services.map(JavaScriptService(_)).map(_.generate).toList.mkString("\n\n")}
|
|${res.services.map(JavaScriptService(_)).map(_.generate).toList.mkString("\n\n")}
|
||||||
|
@ -34,8 +34,10 @@ case class JavaScriptService(srv: ServiceRes) {
|
|||||||
|}""".stripMargin
|
|}""".stripMargin
|
||||||
)
|
)
|
||||||
|
|
||||||
|
val membersNames = srv.members.map(_._1)
|
||||||
|
|
||||||
s"""
|
s"""
|
||||||
| export function ${registerName}(...args) {
|
|export function ${registerName}(...args) {
|
||||||
| let peer;
|
| let peer;
|
||||||
| let serviceId;
|
| let serviceId;
|
||||||
| let service;
|
| let service;
|
||||||
@ -64,16 +66,21 @@ case class JavaScriptService(srv: ServiceRes) {
|
|||||||
| service = args[2];
|
| service = args[2];
|
||||||
| }
|
| }
|
||||||
|
|
|
|
||||||
| peer.internals.callServiceHandler.use((req, resp, next) => {
|
| const incorrectServiceDefinitions = missingFields(service, [${membersNames.map { n => s"'$n'"}.mkString(", ")}]);
|
||||||
| if (req.serviceId !== serviceId) {
|
| if (!incorrectServiceDefinitions.length) {
|
||||||
| next();
|
| throw new Error("Error registering service ${srv.name}: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
|
||||||
| return;
|
| }
|
||||||
| }
|
|
||||||
|
|
|
|
||||||
| ${fnHandlers}
|
| peer.internals.callServiceHandler.use((req, resp, next) => {
|
||||||
|
| if (req.serviceId !== serviceId) {
|
||||||
|
| next();
|
||||||
|
| return;
|
||||||
|
| }
|
||||||
|
|
|
|
||||||
| next();
|
|${fnHandlers}
|
||||||
| });
|
|
|
||||||
|
| next();
|
||||||
|
| });
|
||||||
| }
|
| }
|
||||||
""".stripMargin
|
""".stripMargin
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,10 @@ case class TypeScriptFile(res: AquaRes) {
|
|||||||
|
|
||||||
def generate: String =
|
def generate: String =
|
||||||
s"""${Header}
|
s"""${Header}
|
||||||
|
|
|
||||||
|
|function missingFields(obj: any, fields: string[]): string[] {
|
||||||
|
| return fields.filter(f => !(f in obj))
|
||||||
|
|}
|
||||||
|
|
|
|
||||||
|// Services
|
|// Services
|
||||||
|${res.services.map(TypeScriptService(_)).map(_.generate).toList.mkString("\n\n")}
|
|${res.services.map(TypeScriptService(_)).map(_.generate).toList.mkString("\n\n")}
|
||||||
|
@ -76,6 +76,8 @@ case class TypeScriptService(srv: ServiceRes) {
|
|||||||
| }""".stripMargin
|
| }""".stripMargin
|
||||||
)
|
)
|
||||||
|
|
||||||
|
val membersNames = srv.members.map(_._1)
|
||||||
|
|
||||||
s"""
|
s"""
|
||||||
|export interface ${serviceTypeName} {
|
|export interface ${serviceTypeName} {
|
||||||
| ${fnDefs}
|
| ${fnDefs}
|
||||||
@ -111,6 +113,11 @@ case class TypeScriptService(srv: ServiceRes) {
|
|||||||
| service = args[2];
|
| 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) => {
|
| peer.internals.callServiceHandler.use((req, resp, next) => {
|
||||||
| if (req.serviceId !== serviceId) {
|
| if (req.serviceId !== serviceId) {
|
||||||
| next();
|
| next();
|
||||||
|
@ -128,7 +128,9 @@ class SourcesSpec extends AsyncFlatSpec with Matchers {
|
|||||||
content = "some random content"
|
content = "some random content"
|
||||||
compiled = AquaCompiled[FileModuleId](
|
compiled = AquaCompiled[FileModuleId](
|
||||||
FileModuleId(filePath),
|
FileModuleId(filePath),
|
||||||
Seq(Generated("_hey.custom", content))
|
Seq(Generated("_hey.custom", content)),
|
||||||
|
1,
|
||||||
|
1
|
||||||
)
|
)
|
||||||
resolved <- sourceGen.write(targetPath)(compiled)
|
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
|
// 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
|
filesIO
|
||||||
.writeFile(
|
.writeFile(
|
||||||
target,
|
target,
|
||||||
content
|
content
|
||||||
)
|
)
|
||||||
.as(s"Result $target: compilation OK ($size functions)")
|
.as(s"Result $target: compilation OK ($funcsCount functions, $servicesCount services)")
|
||||||
.value
|
.value
|
||||||
.map(Validated.fromEither)
|
.map(Validated.fromEither)
|
||||||
}
|
}
|
||||||
@ -138,7 +138,7 @@ class AquaFileSources[F[_]: AquaIO: Monad: Files: Functor](
|
|||||||
result
|
result
|
||||||
.leftMap(FileSystemError.apply)
|
.leftMap(FileSystemError.apply)
|
||||||
.map { target =>
|
.map { target =>
|
||||||
writeWithResult(target, compiled.content, ac.compiled.size)
|
writeWithResult(target, compiled.content, ac.funcsCount, ac.servicesCount)
|
||||||
}
|
}
|
||||||
.traverse(identity)
|
.traverse(identity)
|
||||||
}
|
}
|
||||||
|
@ -2,4 +2,4 @@ package aqua.compiler
|
|||||||
|
|
||||||
import aqua.backend.Generated
|
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(
|
||||||
_.map { ap =>
|
_.map { ap =>
|
||||||
val compiled = backend.generate(AquaRes.fromContext(ap.context, config))
|
val res = AquaRes.fromContext(ap.context, config)
|
||||||
AquaCompiled(ap.id, compiled)
|
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