nested func example broken

This commit is contained in:
DieMyst
2021-06-04 14:10:34 +03:00
parent 02fa57911e
commit 694c6c65f4
9 changed files with 173 additions and 26 deletions

View File

@ -4,6 +4,7 @@ import "@fluencelabs/aqua-lib/builtin.aqua"
-- functions like `c` are called an 'arrow function' in Aqua -- functions like `c` are called an 'arrow function' in Aqua
-- `c` passed to a function from a client, so, it could be called only on a client -- `c` passed to a function from a client, so, it could be called only on a client
func passFunctionAsArg(node: string, str: string, c: string -> string): func passFunctionAsArg(node: string, str: string, c: string -> string):
Op.identity()
on node: on node:
Peer.identify() Peer.identify()
-- we go here back on a client -- we go here back on a client

View File

@ -1,6 +1,6 @@
import "@fluencelabs/aqua-lib/builtin.aqua" import "@fluencelabs/aqua-lib/builtin.aqua"
service OpH("op"): service OpH("opa"):
identity(s: string) -> string identity(s: string) -> string
func a(b: string) -> string: func a(b: string) -> string:

38
package-lock.json generated
View File

@ -5,9 +5,9 @@
"requires": true, "requires": true,
"dependencies": { "dependencies": {
"@fluencelabs/aqua-cli": { "@fluencelabs/aqua-cli": {
"version": "0.1.2-129", "version": "0.1.4-136",
"resolved": "https://registry.npmjs.org/@fluencelabs/aqua-cli/-/aqua-cli-0.1.2-129.tgz", "resolved": "https://registry.npmjs.org/@fluencelabs/aqua-cli/-/aqua-cli-0.1.4-136.tgz",
"integrity": "sha512-F1+ZjvZe2xqIH6NMI2CZJb7F51ux+eoaN51PKVNF1TXeyGCbEU3hO/lhHWkpf62/bL2BPqUd0acVxKBbyVsRiw==", "integrity": "sha512-hvoS+Mc5xOlyWV2i7tCvnABSuSifoKQehoepaREerUhRvymAFwg7nOSc9HPtLY9Ou0j3H3TWhRgTI27+4wZrlA==",
"dev": true "dev": true
}, },
"@fluencelabs/aqua-lib": { "@fluencelabs/aqua-lib": {
@ -32,9 +32,9 @@
} }
}, },
"@fluencelabs/fluence": { "@fluencelabs/fluence": {
"version": "0.9.47", "version": "0.9.50",
"resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.9.47.tgz", "resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.9.50.tgz",
"integrity": "sha512-NueaISvOvE1dDoeyfDcVmcDteXLyMbhb/hU7Z9O+5rJEvMYo2CzhIGAQo9bTDFLNBoamXFJdpqV3iLBn/kRs9Q==", "integrity": "sha512-BQv3+CXm8fmuMRDcYVRhkm6e8zZiFs8my8TSzwg4bTO0CJC+vdzylinl0KWIDgic4FFohWQc/0v/PKzTf+1KnA==",
"requires": { "requires": {
"@fluencelabs/avm": "0.9.12", "@fluencelabs/avm": "0.9.12",
"async": "3.2.0", "async": "3.2.0",
@ -176,9 +176,9 @@
"integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w=="
}, },
"@types/node": { "@types/node": {
"version": "15.6.1", "version": "15.12.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-15.6.1.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.0.tgz",
"integrity": "sha512-7EIraBEyRHEe7CH+Fm1XvgqU6uwZN8Q7jppJGcqjROMT29qhAuuOxYB1uEY5UMYQKEmA5D+5tBnhdaPXSsLONA==" "integrity": "sha512-+aHJvoCsVhO2ZCuT4o5JtcPrCPyDE3+1nvbDprYes+pPkEsbjH7AGUCNtjMOXS0fqH14t+B7yLzaqSz92FPWyw=="
}, },
"@types/retry": { "@types/retry": {
"version": "0.12.0", "version": "0.12.0",
@ -736,9 +736,9 @@
"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="
}, },
"execa": { "execa": {
"version": "5.0.1", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/execa/-/execa-5.0.1.tgz", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.0.tgz",
"integrity": "sha512-4hFTjFbFzQa3aCLobpbPJR/U+VoL1wdV5ozOWjeet0AWDeYr9UFGM1eUFWHX+VtOWFq4p0xXUXfW1YxUaP4fpw==", "integrity": "sha512-CkdUB7s2y6S+d4y+OM/+ZtQcJCiKUCth4cNImGMqrt2zEVtW2rfHGspQBE1GDo6LjeNIQmTPKXqTCKjqFKyu3A==",
"requires": { "requires": {
"cross-spawn": "^7.0.3", "cross-spawn": "^7.0.3",
"get-stream": "^6.0.0", "get-stream": "^6.0.0",
@ -2102,16 +2102,16 @@
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
}, },
"mime-db": { "mime-db": {
"version": "1.47.0", "version": "1.48.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz",
"integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==" "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ=="
}, },
"mime-types": { "mime-types": {
"version": "2.1.30", "version": "2.1.31",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz",
"integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==",
"requires": { "requires": {
"mime-db": "1.47.0" "mime-db": "1.48.0"
} }
}, },
"mimic-fn": { "mimic-fn": {

View File

@ -24,13 +24,13 @@
"compile-aqua:air": "aqua-cli -i ./aqua/ -o ./compiled-air -a" "compile-aqua:air": "aqua-cli -i ./aqua/ -o ./compiled-air -a"
}, },
"devDependencies": { "devDependencies": {
"@fluencelabs/aqua-cli": "^0.1.4-133", "@fluencelabs/aqua-cli": "^0.1.4-136",
"@fluencelabs/aqua-lib": "^0.1.3", "@fluencelabs/aqua-lib": "^0.1.3",
"ts-node": "^9.1.1", "ts-node": "^9.1.1",
"typescript": "^4.2.4" "typescript": "^4.2.4"
}, },
"dependencies": { "dependencies": {
"@fluencelabs/fluence": "^0.9.47", "@fluencelabs/fluence": "^0.9.50",
"@fluencelabs/fluence-network-environment": "^1.0.9", "@fluencelabs/fluence-network-environment": "^1.0.9",
"deep-equal": "^2.0.5" "deep-equal": "^2.0.5"
}, },

View File

@ -70,10 +70,13 @@ export async function passFunctionAsArg(client: FluenceClient, node: string, str
(seq (seq
(seq (seq
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (seq
(call %init_peer_id% ("getDataSrv" "node") [] node) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(call %init_peer_id% ("getDataSrv" "node") [] node)
)
(call %init_peer_id% ("getDataSrv" "str") [] str)
) )
(call %init_peer_id% ("getDataSrv" "str") [] str) (call %init_peer_id% ("op" "identity") [])
) )
(call -relay- ("op" "identity") []) (call -relay- ("op" "identity") [])
) )

View File

@ -0,0 +1,126 @@
/**
*
* This file is auto-generated. Do not edit manually: changes may be erased.
* Generated by Aqua compiler: https://github.com/fluencelabs/aqua/.
* If you find any bugs, please write an issue on GitHub: https://github.com/fluencelabs/aqua/issues
* Aqua version: 0.1.4-136
*
*/
import { FluenceClient, PeerIdB58 } from '@fluencelabs/fluence';
import { RequestFlowBuilder } from '@fluencelabs/fluence/dist/api.unstable';
import { RequestFlow } from '@fluencelabs/fluence/dist/internal/RequestFlow';
export async function a(client: FluenceClient, b: string): Promise<string> {
let request: RequestFlow;
const promise = new Promise<string>((resolve, reject) => {
request = new RequestFlowBuilder()
.disableInjections()
.withRawScript(
`
(xor
(seq
(seq
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(call %init_peer_id% ("getDataSrv" "b") [] b)
)
(call %init_peer_id% ("opa" "identity") [b] c)
)
(xor
(call %init_peer_id% ("callbackSrv" "response") [c])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
)
)
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return client.relayPeerId!;
});
h.on('getDataSrv', 'b', () => {return b;});
h.onEvent('callbackSrv', 'response', (args) => {
const [res] = args;
resolve(res);
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
// assuming error is the single argument
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for a');
})
.build();
});
await client.initiateFlow(request!);
return promise;
}
export async function d(client: FluenceClient, e: string): Promise<string> {
let request: RequestFlow;
const promise = new Promise<string>((resolve, reject) => {
request = new RequestFlowBuilder()
.disableInjections()
.withRawScript(
`
(xor
(seq
(seq
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(call %init_peer_id% ("getDataSrv" "e") [] e)
)
(call %init_peer_id% ("opa" "identity") [e] c)
)
(xor
(call %init_peer_id% ("callbackSrv" "response") [f])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
)
)
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return client.relayPeerId!;
});
h.on('getDataSrv', 'e', () => {return e;});
h.onEvent('callbackSrv', 'response', (args) => {
const [res] = args;
resolve(res);
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
// assuming error is the single argument
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for d');
})
.build();
});
await client.initiateFlow(request!);
return promise;
}

View File

@ -0,0 +1,12 @@
import {FluenceClient, registerServiceFunction} from "@fluencelabs/fluence";
import {getTwoResults} from "../compiled/examples/foldJoin";
import {useOptional} from "../compiled/examples/option";
import {d} from "../compiled/examples/nestedFuncs";
export async function nestedFuncsCall(client: FluenceClient): Promise<string> {
registerServiceFunction(client, "opa", "identity", (args: any[], _) => {
return args[0]
})
return await d(client, "some-str")
}

View File

@ -1,5 +1,4 @@
import {FluenceClient, registerServiceFunction} from "@fluencelabs/fluence"; import {FluenceClient, registerServiceFunction} from "@fluencelabs/fluence";
import {getTwoResults} from "../compiled/examples/foldJoin";
import {useOptional} from "../compiled/examples/option"; import {useOptional} from "../compiled/examples/option";
export async function useOptionalCall(client: FluenceClient): Promise<string> { export async function useOptionalCall(client: FluenceClient): Promise<string> {

View File

@ -17,6 +17,7 @@ import {topologyCall} from "./examples/topologyCall";
import {foldJoinCall} from "./examples/foldJoinCall"; import {foldJoinCall} from "./examples/foldJoinCall";
import {useOptionalCall} from "./examples/useOptionalCall"; import {useOptionalCall} from "./examples/useOptionalCall";
import {viaCall} from "./examples/viaCall"; import {viaCall} from "./examples/viaCall";
import {nestedFuncsCall} from "./examples/nestedFuncsCall";
let deepEqual = require('deep-equal') let deepEqual = require('deep-equal')
function checkCall(name: string, expected: any, actual: any, callBackOnError: () => void) { function checkCall(name: string, expected: any, actual: any, callBackOnError: () => void) {
@ -100,6 +101,9 @@ const main = async () => {
// via.aqua // via.aqua
let viaResult = await viaCall(client) let viaResult = await viaCall(client)
// nestedFuncs.aqua
let nestedFuncsResult = await nestedFuncsCall(client)
await client.disconnect(); await client.disconnect();
let success = true; let success = true;
@ -135,6 +139,8 @@ const main = async () => {
checkCallBy("via", viaResult, (res) => res.every( (val, i, arr) => deepEqual(val, arr[0]) ), cb) checkCallBy("via", viaResult, (res) => res.every( (val, i, arr) => deepEqual(val, arr[0]) ), cb)
checkCall("nestedFuncsCall", optionResult, "some-str", cb)
if (success) { if (success) {
process.exit(0) process.exit(0)
} else { } else {