diff --git a/.github/workflows/ci-wrap-test-harness.yaml b/.github/workflows/ci-wrap-test-harness.yaml index e86b7c817c..874044d292 100644 --- a/.github/workflows/ci-wrap-test-harness.yaml +++ b/.github/workflows/ci-wrap-test-harness.yaml @@ -53,7 +53,6 @@ jobs: - name: Checkout Repository uses: actions/checkout@v2 with: - ref: ${{ github.event.pull_request.base.ref }} path: toolchain fetch-depth: 0 @@ -104,19 +103,16 @@ jobs: cargo-${{ runner.os }}-${{ github.job }} - name: Set environment variable - run: echo "POLYWRAP_CLI_PATH=${{ github.workspace }}/toolchain/packages/cli" >> $GITHUB_ENV + run: echo POLYWRAP_CLI_PATH=$(pwd)/toolchain/packages/cli >> $GITHUB_ENV - name: Set environment variable - if: ${{ inputs.wasm-path }} - run: echo "POLYWRAP_WASM_PATH=${{ github.workspace }}/toolchain/packages/wasm" >> $GITHUB_ENV + run: echo POLYWRAP_WASM_PATH=$(pwd)/toolchain/packages/wasm >> $GITHUB_ENV - - uses: nick-fields/retry@v2 - name: Run wrappers build - with: - command: cargo run -- -w - max_attempts: 3 - retry_on: error - timeout_minutes: 60 + - name: Run wrappers build + run: cargo run -- -w + env: + POLYWRAP_CLI_PATH: ${{env.POLYWRAP_CLI_PATH}} + POLYWRAP_WASM_PATH: ${{env.POLYWRAP_WASM_PATH}} - uses: actions/upload-artifact@v3 with: diff --git a/WRAP_TEST_HARNESS b/WRAP_TEST_HARNESS index 8b25206ff9..a0ab35abfb 100644 --- a/WRAP_TEST_HARNESS +++ b/WRAP_TEST_HARNESS @@ -1 +1 @@ -master \ No newline at end of file +module-class-wasm-as \ No newline at end of file diff --git a/packages/cli/src/lib/build-strategies/strategies/DockerVMStrategy.ts b/packages/cli/src/lib/build-strategies/strategies/DockerVMStrategy.ts index 26d46c54b3..2b9e07274e 100644 --- a/packages/cli/src/lib/build-strategies/strategies/DockerVMStrategy.ts +++ b/packages/cli/src/lib/build-strategies/strategies/DockerVMStrategy.ts @@ -176,10 +176,12 @@ export class DockerVMBuildStrategy extends BuildStrategy { }); // For rust, we want to also mount the cargo registry's cache directory - const localCargoCache = `${process.env.HOME}/.cargo/registry`; - let cacheVolume = ""; + const localCargoCache = `${process.env.HOME}/.cargo`; + const cacheVolumes: string[] = []; if (language === "wasm/rust" && fse.existsSync(localCargoCache)) { - cacheVolume = `-v ${localCargoCache}:/usr/local/cargo/registry`; + cacheVolumes.push(`-v ${localCargoCache}:/usr/local/cargo`); + // Ignore the bin folder, without this an exception is thrown upon exe exec + cacheVolumes.push(`-v /usr/local/cargo/bin/`); } let buildError: Error | undefined = undefined; @@ -196,7 +198,7 @@ export class DockerVMBuildStrategy extends BuildStrategy { `${path.resolve( this._volumePaths.linkedPackages )}:/linked-packages`, - cacheVolume, + ...cacheVolumes, `${CONFIGS[language].baseImage}:${CONFIGS[language].version}`, "/bin/bash", "--verbose", diff --git a/packages/js/client/src/__tests__/core/error-structure.spec.ts b/packages/js/client/src/__tests__/core/error-structure.spec.ts index c29320cb25..c6f599a812 100644 --- a/packages/js/client/src/__tests__/core/error-structure.spec.ts +++ b/packages/js/client/src/__tests__/core/error-structure.spec.ts @@ -202,11 +202,9 @@ describe("Error structure", () => { ).toBeTruthy(); expect(result.error?.method).toEqual("throwError"); expect(result.error?.args).toEqual('{\n "a": "Hey"\n}'); - expect(result.error?.source).toEqual({ - file: "~lib/@polywrap/wasm-as/containers/Result.ts", - row: 171, - col: 13, - }); + expect(result.error?.source?.file).toEqual( + "~lib/@polywrap/wasm-as/containers/Result.ts" + ); expect(result.error?.innerError instanceof WrapError).toBeTruthy(); const prev = result.error?.innerError as WrapError; @@ -409,11 +407,7 @@ describe("Error structure", () => { ).toBeTruthy(); expect(result.error?.method).toEqual("throwError"); expect(result.error?.args).toEqual('{\n "a": "Hey"\n}'); - expect(result.error?.source).toEqual({ - file: "src/lib.rs", - row: 10, - col: 117, - }); + expect(result.error?.source?.file).toEqual("src/lib.rs"); expect(result.error?.innerError instanceof WrapError).toBeTruthy(); const prev = result.error?.innerError as WrapError; diff --git a/packages/schema/bind/src/bindings/assemblyscript/wasm/templates/entry-ts.mustache b/packages/schema/bind/src/bindings/assemblyscript/wasm/templates/entry-ts.mustache index 0bf55b2b8b..c3a24bd116 100644 --- a/packages/schema/bind/src/bindings/assemblyscript/wasm/templates/entry-ts.mustache +++ b/packages/schema/bind/src/bindings/assemblyscript/wasm/templates/entry-ts.mustache @@ -1,6 +1,7 @@ import { wrap_invoke_args, - wrap_invoke, + wrap_invoke_result, + wrap_invoke_error, wrap_abort, InvokeArgs } from "@polywrap/wasm-as"; @@ -15,22 +16,30 @@ import { {{/methods.length}} {{/moduleType}} +import { Module } from "../index"; + export function _wrap_invoke(method_size: u32, args_size: u32, env_size: u32): bool { + const module = new Module(); const args: InvokeArgs = wrap_invoke_args( method_size, args_size ); - + let result: ArrayBuffer; {{#moduleType}} {{#methods}} {{^first}}else {{/first}}if (args.method == "{{name}}") { - return wrap_invoke(args, env_size, {{name}}Wrapped); + result = {{name}}Wrapped(module, args.args, env_size); } {{/methods}} {{/moduleType}} else { - return wrap_invoke(args, env_size, null); + wrap_invoke_error( + `Could not find invoke function "${args.method}"` + ); + return false; } + wrap_invoke_result(result); + return true; } export function wrapAbort( diff --git a/packages/schema/bind/src/bindings/assemblyscript/wasm/templates/index-ts.mustache b/packages/schema/bind/src/bindings/assemblyscript/wasm/templates/index-ts.mustache index 2f2c2f2941..626b0cda60 100644 --- a/packages/schema/bind/src/bindings/assemblyscript/wasm/templates/index-ts.mustache +++ b/packages/schema/bind/src/bindings/assemblyscript/wasm/templates/index-ts.mustache @@ -16,6 +16,9 @@ export { }; {{/methods.length}} {{/moduleType}} +{{#moduleType}} +export { ModuleBase } from "./Module"; +{{/moduleType}} {{#objectTypes}} export { {{#detectKeyword}}{{type}}{{/detectKeyword}} } from "./{{type}}"; {{/objectTypes}} diff --git a/packages/schema/bind/src/bindings/assemblyscript/wasm/templates/module-type/index-ts.mustache b/packages/schema/bind/src/bindings/assemblyscript/wasm/templates/module-type/index-ts.mustache index cadfcf855f..654a54f746 100644 --- a/packages/schema/bind/src/bindings/assemblyscript/wasm/templates/module-type/index-ts.mustache +++ b/packages/schema/bind/src/bindings/assemblyscript/wasm/templates/module-type/index-ts.mustache @@ -10,4 +10,5 @@ export { Args_{{#detectKeyword}}{{name}}{{/detectKeyword}}{{^last}},{{/last}} {{/methods}} }; +export { ModuleBase } from "./module"; {{/methods.length}} \ No newline at end of file diff --git a/packages/schema/bind/src/bindings/assemblyscript/wasm/templates/module-type/module-ts.mustache b/packages/schema/bind/src/bindings/assemblyscript/wasm/templates/module-type/module-ts.mustache new file mode 100644 index 0000000000..728479210d --- /dev/null +++ b/packages/schema/bind/src/bindings/assemblyscript/wasm/templates/module-type/module-ts.mustache @@ -0,0 +1,20 @@ +import * as Types from ".."; + +import { + BigInt, + BigNumber, + Box, + JSON, +} from "@polywrap/wasm-as"; + +export abstract class ModuleBase { + {{#methods}} + abstract {{#detectKeyword}}{{name}}{{/detectKeyword}}( + args: Types.Args_{{#detectKeyword}}{{name}}{{/detectKeyword}}{{#env}}, + env: {{#required}}Types.Env{{/required}}{{^required}}Types.Env | null{{/required}}{{/env}} + ): {{#return}}{{#toWasm}}{{toGraphQLType}}{{/toWasm}}{{/return}}; + {{^last}} + + {{/last}} + {{/methods}} +} \ No newline at end of file diff --git a/packages/schema/bind/src/bindings/assemblyscript/wasm/templates/module-type/wrapped-ts.mustache b/packages/schema/bind/src/bindings/assemblyscript/wasm/templates/module-type/wrapped-ts.mustache index 239f0cb479..e74bd5b0ae 100644 --- a/packages/schema/bind/src/bindings/assemblyscript/wasm/templates/module-type/wrapped-ts.mustache +++ b/packages/schema/bind/src/bindings/assemblyscript/wasm/templates/module-type/wrapped-ts.mustache @@ -1,10 +1,5 @@ {{#methods.length}} import { wrap_load_env } from "@polywrap/wasm-as"; -import { - {{#methods}} - {{#detectKeyword}}{{name}}{{/detectKeyword}}{{^last}},{{/last}} - {{/methods}} -} from "../../index"; import { {{#methods}} deserialize{{name}}Args, @@ -12,10 +7,11 @@ import { {{/methods}} } from "./serialization"; {{/methods.length}} +import { ModuleBase } from "./module"; import * as Types from ".."; {{#methods}} -export function {{name}}Wrapped(argsBuf: ArrayBuffer, env_size: u32): ArrayBuffer { +export function {{name}}Wrapped(module: ModuleBase, argsBuf: ArrayBuffer, env_size: u32): ArrayBuffer { {{#env}} {{#required}} if (env_size == 0) { @@ -37,7 +33,7 @@ export function {{name}}Wrapped(argsBuf: ArrayBuffer, env_size: u32): ArrayBuffe const args = deserialize{{name}}Args(argsBuf); {{/arguments.length}} - const result = {{#detectKeyword}}{{name}}{{/detectKeyword}}({{#arguments.length}} + const result = module.{{#detectKeyword}}{{name}}{{/detectKeyword}}({{#arguments.length}} { {{#arguments}} {{#detectKeyword}}{{name}}{{/detectKeyword}}: args.{{#detectKeyword}}{{name}}{{/detectKeyword}}{{^last}},{{/last}} @@ -50,4 +46,4 @@ export function {{name}}Wrapped(argsBuf: ArrayBuffer, env_size: u32): ArrayBuffe {{^last}} {{/last}} -{{/methods}} +{{/methods}} \ No newline at end of file diff --git a/packages/schema/parse/src/__tests__/dunder-methods.spec.ts b/packages/schema/parse/src/__tests__/dunder-methods.spec.ts new file mode 100644 index 0000000000..f89870d418 --- /dev/null +++ b/packages/schema/parse/src/__tests__/dunder-methods.spec.ts @@ -0,0 +1,53 @@ +import { parseSchema } from ".."; + +const ErrorSchemas = { + "__new__": ` + type Module { + __new__: String! + } + `, + "__hello__": ` + type Module { + __hello__: String! + } + `, +} + +const ValidSchemas = { + "_new_": ` + type Module { + _new_: String! + } + `, + "__new": ` + type Module { + __new: String! + } + `, + "new__": ` + type Module { + new__: String! + } + `, + "_hello__": ` + type Module { + _hello__: String! + } + ` +} + +describe("Polywrap Schema shouldn't contain dunder method name", () => { + + for (const [key, value] of Object.entries(ErrorSchemas)) { + it(`should throw error for ${key}`, () => { + expect(() => parseSchema(value)).toThrowError(); + }); + } + + for (const [key, value] of Object.entries(ValidSchemas)) { + it(`shouldn't throw error for ${key}`, () => { + expect(() => parseSchema(value)).not.toThrowError(); + }); + } + +}) \ No newline at end of file diff --git a/packages/schema/parse/src/abi/definitions.ts b/packages/schema/parse/src/abi/definitions.ts index 2e5a815b2f..ae40970929 100644 --- a/packages/schema/parse/src/abi/definitions.ts +++ b/packages/schema/parse/src/abi/definitions.ts @@ -305,6 +305,11 @@ export function createObjectPropertyDefinition( export function createMethodDefinition( args: Omit, "type"> ): MethodDefinition { + if (args.name?.startsWith("__") && args.name?.endsWith("__")) { + throw new Error( + "Dunder methods (Methods starting and ending with __) are reserved methods" + ); + } return { ...args, ...createGenericDefinition({ diff --git a/packages/templates/wasm/assemblyscript/src/index.ts b/packages/templates/wasm/assemblyscript/src/index.ts index 31161067e2..135f6e6ba1 100644 --- a/packages/templates/wasm/assemblyscript/src/index.ts +++ b/packages/templates/wasm/assemblyscript/src/index.ts @@ -1,7 +1,9 @@ -import { Args_sampleMethod, SampleResult } from "./wrap"; +import { Args_sampleMethod, SampleResult, ModuleBase } from "./wrap"; -export function sampleMethod(args: Args_sampleMethod): SampleResult { - return { - result: args.arg, - }; +export class Module extends ModuleBase { + sampleMethod(args: Args_sampleMethod): SampleResult { + return { + result: args.arg, + }; + } } diff --git a/packages/test-cases/cases/bind/sanity/output/wasm-as/Module/index.ts b/packages/test-cases/cases/bind/sanity/output/wasm-as/Module/index.ts index aa9ede474c..2cd8b85ef7 100644 --- a/packages/test-cases/cases/bind/sanity/output/wasm-as/Module/index.ts +++ b/packages/test-cases/cases/bind/sanity/output/wasm-as/Module/index.ts @@ -11,3 +11,4 @@ export { Args_optionalEnvMethod, Args__if }; +export { ModuleBase } from "./module"; diff --git a/packages/test-cases/cases/bind/sanity/output/wasm-as/Module/module.ts b/packages/test-cases/cases/bind/sanity/output/wasm-as/Module/module.ts new file mode 100644 index 0000000000..6f307a2e1a --- /dev/null +++ b/packages/test-cases/cases/bind/sanity/output/wasm-as/Module/module.ts @@ -0,0 +1,28 @@ +import * as Types from ".."; + +import { + BigInt, + BigNumber, + Box, + JSON, +} from "@polywrap/wasm-as"; + +export abstract class ModuleBase { + abstract moduleMethod( + args: Types.Args_moduleMethod + ): i32; + + abstract objectMethod( + args: Types.Args_objectMethod, + env: Types.Env + ): Types.AnotherType | null; + + abstract optionalEnvMethod( + args: Types.Args_optionalEnvMethod, + env: Types.Env | null + ): Types.AnotherType | null; + + abstract _if( + args: Types.Args__if + ): Types._else; +} \ No newline at end of file diff --git a/packages/test-cases/cases/bind/sanity/output/wasm-as/Module/wrapped.ts b/packages/test-cases/cases/bind/sanity/output/wasm-as/Module/wrapped.ts index 9de3884c85..cd9ca3ba74 100644 --- a/packages/test-cases/cases/bind/sanity/output/wasm-as/Module/wrapped.ts +++ b/packages/test-cases/cases/bind/sanity/output/wasm-as/Module/wrapped.ts @@ -1,10 +1,4 @@ import { wrap_load_env } from "@polywrap/wasm-as"; -import { - moduleMethod, - objectMethod, - optionalEnvMethod, - _if -} from "../../index"; import { deserializemoduleMethodArgs, serializemoduleMethodResult, @@ -15,12 +9,13 @@ import { deserializeifArgs, serializeifResult } from "./serialization"; +import { ModuleBase } from "./module"; import * as Types from ".."; -export function moduleMethodWrapped(argsBuf: ArrayBuffer, env_size: u32): ArrayBuffer { +export function moduleMethodWrapped(module: ModuleBase, argsBuf: ArrayBuffer, env_size: u32): ArrayBuffer { const args = deserializemoduleMethodArgs(argsBuf); - const result = moduleMethod( + const result = module.moduleMethod( { str: args.str, optStr: args.optStr, @@ -38,7 +33,7 @@ export function moduleMethodWrapped(argsBuf: ArrayBuffer, env_size: u32): ArrayB return serializemoduleMethodResult(result); } -export function objectMethodWrapped(argsBuf: ArrayBuffer, env_size: u32): ArrayBuffer { +export function objectMethodWrapped(module: ModuleBase, argsBuf: ArrayBuffer, env_size: u32): ArrayBuffer { if (env_size == 0) { throw new Error("Environment is not set, and it is required by method 'objectMethod'") } @@ -47,7 +42,7 @@ export function objectMethodWrapped(argsBuf: ArrayBuffer, env_size: u32): ArrayB const env = Types.Env.fromBuffer(envBuf); const args = deserializeobjectMethodArgs(argsBuf); - const result = objectMethod( + const result = module.objectMethod( { object: args.object, optObject: args.optObject, @@ -59,7 +54,7 @@ export function objectMethodWrapped(argsBuf: ArrayBuffer, env_size: u32): ArrayB return serializeobjectMethodResult(result); } -export function optionalEnvMethodWrapped(argsBuf: ArrayBuffer, env_size: u32): ArrayBuffer { +export function optionalEnvMethodWrapped(module: ModuleBase, argsBuf: ArrayBuffer, env_size: u32): ArrayBuffer { let env: Types.Env | null = null; if (env_size > 0) { const envBuf = wrap_load_env(env_size); @@ -67,7 +62,7 @@ export function optionalEnvMethodWrapped(argsBuf: ArrayBuffer, env_size: u32): A } const args = deserializeoptionalEnvMethodArgs(argsBuf); - const result = optionalEnvMethod( + const result = module.optionalEnvMethod( { object: args.object, optObject: args.optObject, @@ -79,10 +74,10 @@ export function optionalEnvMethodWrapped(argsBuf: ArrayBuffer, env_size: u32): A return serializeoptionalEnvMethodResult(result); } -export function ifWrapped(argsBuf: ArrayBuffer, env_size: u32): ArrayBuffer { +export function ifWrapped(module: ModuleBase, argsBuf: ArrayBuffer, env_size: u32): ArrayBuffer { const args = deserializeifArgs(argsBuf); - const result = _if( + const result = module._if( { _if: args._if } diff --git a/packages/test-cases/cases/bind/sanity/output/wasm-as/entry.ts b/packages/test-cases/cases/bind/sanity/output/wasm-as/entry.ts index 2d71fdbf06..b68944d823 100644 --- a/packages/test-cases/cases/bind/sanity/output/wasm-as/entry.ts +++ b/packages/test-cases/cases/bind/sanity/output/wasm-as/entry.ts @@ -1,6 +1,7 @@ import { wrap_invoke_args, - wrap_invoke, + wrap_invoke_result, + wrap_invoke_error, wrap_abort, InvokeArgs } from "@polywrap/wasm-as"; @@ -12,27 +13,35 @@ import { ifWrapped } from "./Module/wrapped"; +import { Module } from "../index"; + export function _wrap_invoke(method_size: u32, args_size: u32, env_size: u32): bool { + const module = new Module(); const args: InvokeArgs = wrap_invoke_args( method_size, args_size ); - + let result: ArrayBuffer; if (args.method == "moduleMethod") { - return wrap_invoke(args, env_size, moduleMethodWrapped); + result = moduleMethodWrapped(module, args.args, env_size); } else if (args.method == "objectMethod") { - return wrap_invoke(args, env_size, objectMethodWrapped); + result = objectMethodWrapped(module, args.args, env_size); } else if (args.method == "optionalEnvMethod") { - return wrap_invoke(args, env_size, optionalEnvMethodWrapped); + result = optionalEnvMethodWrapped(module, args.args, env_size); } else if (args.method == "if") { - return wrap_invoke(args, env_size, ifWrapped); + result = ifWrapped(module, args.args, env_size); } else { - return wrap_invoke(args, env_size, null); + wrap_invoke_error( + `Could not find invoke function "${args.method}"` + ); + return false; } + wrap_invoke_result(result); + return true; } export function wrapAbort( diff --git a/packages/test-cases/cases/bind/sanity/output/wasm-as/index.ts b/packages/test-cases/cases/bind/sanity/output/wasm-as/index.ts index a739449a6f..a398b972b9 100644 --- a/packages/test-cases/cases/bind/sanity/output/wasm-as/index.ts +++ b/packages/test-cases/cases/bind/sanity/output/wasm-as/index.ts @@ -10,6 +10,7 @@ export { Args_optionalEnvMethod, Args__if }; +export { ModuleBase } from "./Module"; export { CustomType } from "./CustomType"; export { AnotherType } from "./AnotherType"; export { CustomMapValue } from "./CustomMapValue"; diff --git a/packages/test-cases/cases/cli/test/run-test-wrapper/src/index.ts b/packages/test-cases/cases/cli/test/run-test-wrapper/src/index.ts index 4269850151..386a63280d 100644 --- a/packages/test-cases/cases/cli/test/run-test-wrapper/src/index.ts +++ b/packages/test-cases/cases/cli/test/run-test-wrapper/src/index.ts @@ -4,21 +4,24 @@ import { Args_addFromEnv, Args_returnMap, Num, - Env + Env, + ModuleBase, } from "./wrap"; -export function add(args: Args_add): i32 { - return args.x + args.y; -} +export class Module extends ModuleBase { + add(args: Args_add): i32 { + return args.x + args.y; + } -export function addInBox(args: Args_addInBox): Num { - return { value: args.x + args.y }; -} + addInBox(args: Args_addInBox): Num { + return { value: args.x + args.y }; + } -export function addFromEnv(args: Args_addFromEnv, env: Env): i32 { - return args.x + env.value; -} + addFromEnv(args: Args_addFromEnv, env: Env): i32 { + return args.x + env.value; + } -export function returnMap(args: Args_returnMap): Map> { - return args.map; + returnMap(args: Args_returnMap): Map> { + return args.map; + } } diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/001-sanity/src/index.ts b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/001-sanity/src/index.ts index 862d4cb226..a1ab56196b 100644 --- a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/001-sanity/src/index.ts +++ b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/001-sanity/src/index.ts @@ -1,5 +1,7 @@ -import { Args_method } from "./wrap"; +import { Args_method, ModuleBase } from "./wrap"; -export function method(args: Args_method): string { - return args.arg; +export class Module extends ModuleBase { + method(args: Args_method): string { + return args.arg; + } } diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/004-default-build/src/index.ts b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/004-default-build/src/index.ts index 862d4cb226..a1ab56196b 100644 --- a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/004-default-build/src/index.ts +++ b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/004-default-build/src/index.ts @@ -1,5 +1,7 @@ -import { Args_method } from "./wrap"; +import { Args_method, ModuleBase } from "./wrap"; -export function method(args: Args_method): string { - return args.arg; +export class Module extends ModuleBase { + method(args: Args_method): string { + return args.arg; + } } diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/005-default-dockerfile/src/index.ts b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/005-default-dockerfile/src/index.ts index 862d4cb226..a1ab56196b 100644 --- a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/005-default-dockerfile/src/index.ts +++ b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/005-default-dockerfile/src/index.ts @@ -1,5 +1,7 @@ -import { Args_method } from "./wrap"; +import { Args_method, ModuleBase } from "./wrap"; -export function method(args: Args_method): string { - return args.arg; +export class Module extends ModuleBase { + method(args: Args_method): string { + return args.arg; + } } diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/006-custom-dockerfile/src/index.ts b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/006-custom-dockerfile/src/index.ts index 862d4cb226..a1ab56196b 100644 --- a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/006-custom-dockerfile/src/index.ts +++ b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/006-custom-dockerfile/src/index.ts @@ -1,5 +1,7 @@ -import { Args_method } from "./wrap"; +import { Args_method, ModuleBase } from "./wrap"; -export function method(args: Args_method): string { - return args.arg; +export class Module extends ModuleBase { + method(args: Args_method): string { + return args.arg; + } } diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/007-linked-packages/src/index.ts b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/007-linked-packages/src/index.ts index 862d4cb226..a1ab56196b 100644 --- a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/007-linked-packages/src/index.ts +++ b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/007-linked-packages/src/index.ts @@ -1,5 +1,7 @@ -import { Args_method } from "./wrap"; +import { Args_method, ModuleBase } from "./wrap"; -export function method(args: Args_method): string { - return args.arg; +export class Module extends ModuleBase { + method(args: Args_method): string { + return args.arg; + } } diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/009-docker-buildx/src/index.ts b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/009-docker-buildx/src/index.ts index 862d4cb226..a1ab56196b 100644 --- a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/009-docker-buildx/src/index.ts +++ b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/009-docker-buildx/src/index.ts @@ -1,5 +1,7 @@ -import { Args_method } from "./wrap"; +import { Args_method, ModuleBase } from "./wrap"; -export function method(args: Args_method): string { - return args.arg; +export class Module extends ModuleBase { + method(args: Args_method): string { + return args.arg; + } } diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/010-custom-config/src/index.ts b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/010-custom-config/src/index.ts index 61e8841104..b9acdc3b6f 100644 --- a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/010-custom-config/src/index.ts +++ b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/010-custom-config/src/index.ts @@ -1,9 +1,11 @@ -import { Args_deployContract, Args_method, Mock_Module } from "./wrap"; +import { Args_deployContract, Args_method, Mock_Module, ModuleBase } from "./wrap"; -export function method(args: Args_method): string { - return args.arg; -} +export class Module extends ModuleBase { + method(args: Args_method): string { + return args.arg; + } -export function deployContract(_: Args_deployContract): string { - return Mock_Module.deployContract({}).unwrap(); -} \ No newline at end of file + deployContract(_: Args_deployContract): string { + return Mock_Module.deployContract({}).unwrap(); + } +} diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/011-custom-config/src/index.ts b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/011-custom-config/src/index.ts index 862d4cb226..a1ab56196b 100644 --- a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/011-custom-config/src/index.ts +++ b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/011-custom-config/src/index.ts @@ -1,5 +1,7 @@ -import { Args_method } from "./wrap"; +import { Args_method, ModuleBase } from "./wrap"; -export function method(args: Args_method): string { - return args.arg; +export class Module extends ModuleBase { + method(args: Args_method): string { + return args.arg; + } } diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/src/index.ts b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/src/index.ts index 61e8841104..b9acdc3b6f 100644 --- a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/src/index.ts +++ b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/src/index.ts @@ -1,9 +1,11 @@ -import { Args_deployContract, Args_method, Mock_Module } from "./wrap"; +import { Args_deployContract, Args_method, Mock_Module, ModuleBase } from "./wrap"; -export function method(args: Args_method): string { - return args.arg; -} +export class Module extends ModuleBase { + method(args: Args_method): string { + return args.arg; + } -export function deployContract(_: Args_deployContract): string { - return Mock_Module.deployContract({}).unwrap(); -} \ No newline at end of file + deployContract(_: Args_deployContract): string { + return Mock_Module.deployContract({}).unwrap(); + } +} diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/015-resource-files/src/index.ts b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/015-resource-files/src/index.ts index 862d4cb226..a1ab56196b 100644 --- a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/015-resource-files/src/index.ts +++ b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/015-resource-files/src/index.ts @@ -1,5 +1,7 @@ -import { Args_method } from "./wrap"; +import { Args_method, ModuleBase } from "./wrap"; -export function method(args: Args_method): string { - return args.arg; +export class Module extends ModuleBase { + method(args: Args_method): string { + return args.arg; + } } diff --git a/packages/wasm/as/assembly/invoke.ts b/packages/wasm/as/assembly/invoke.ts index 06b315b213..1141df8552 100644 --- a/packages/wasm/as/assembly/invoke.ts +++ b/packages/wasm/as/assembly/invoke.ts @@ -12,9 +12,6 @@ export declare function __wrap_invoke_result(ptr: u32, len: u32): void; @external("wrap", "__wrap_invoke_error") export declare function __wrap_invoke_error(ptr: u32, len: u32): void; -// Keep track of all invokable functions -export type InvokeFunction = (argsBuf: ArrayBuffer, env_size: u32) => ArrayBuffer; - export class InvokeArgs { constructor( public method: string, @@ -38,23 +35,20 @@ export function wrap_invoke_args(method_size: u32, args_size: u32): InvokeArgs { ); } -// Helper for handling _wrap_invoke -export function wrap_invoke(args: InvokeArgs, env_size: u32, fn: InvokeFunction | null): bool { - if (fn) { - const result = fn(args.args, env_size); - __wrap_invoke_result( - changetype(result), - result.byteLength - ); - return true; - } else { - const message = String.UTF8.encode( - `Could not find invoke function "${args.method}"` - ); - __wrap_invoke_error( - changetype(message), - message.byteLength - ); - return false; - } +// Helper for handling __wrap_invoke_result +export function wrap_invoke_result(result: ArrayBuffer): void { + __wrap_invoke_result( + changetype(result), + result.byteLength + ); +} + + +// Helper for handling __wrap_invoke_error +export function wrap_invoke_error(message: string): void { + const messageBuf = String.UTF8.encode(message); + __wrap_invoke_error( + changetype(messageBuf), + messageBuf.byteLength + ); } diff --git a/scripts/patch-peer-deps.ts b/scripts/patch-peer-deps.ts index 4e2f58ae10..dd7140fd9a 100644 --- a/scripts/patch-peer-deps.ts +++ b/scripts/patch-peer-deps.ts @@ -22,4 +22,4 @@ function main () { } } -main(); +main(); diff --git a/yarn.lock b/yarn.lock index b056ce84a6..767b7bbd88 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4287,9 +4287,9 @@ electron-fetch@^1.7.2: encoding "^0.1.13" electron-to-chromium@^1.4.284: - version "1.4.320" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.320.tgz#4d83a90ff74f93939c5413c2ac5a16c696600632" - integrity sha512-h70iRscrNluMZPVICXYl5SSB+rBKo22XfuIS1ER0OQxQZpKTnFpuS6coj7wY9M/3trv7OR88rRMOlKmRvDty7Q== + version "1.4.321" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.321.tgz#48b513fbeae39d431826bbafa2acb88309d8be55" + integrity sha512-ERuAqNq7YknVY3+47VbB+Q92kWH7O7sX3mkZINqZtsGJMQFb0dj71d5U3PRTihX03qt2NWIfZic2CCcGXOHJ7A== elliptic@6.5.4: version "6.5.4" @@ -8730,9 +8730,9 @@ q@^1.5.1: integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== qs@^6.9.4: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + version "6.11.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.1.tgz#6c29dff97f0c0060765911ba65cbc9764186109f" + integrity sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ== dependencies: side-channel "^1.0.4" @@ -9474,9 +9474,9 @@ spawn-command@0.0.2-1: integrity sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg== spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0"