Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ EXTRA_EXPORTS=$(
if [ -z "$EXTRA_EXPORTS" ]
then
echo "No extra exports to remove"
cp ./build-staging/module.wasm ./build-staging/module_exports.wasm
else
echo "Removing extra exports: $EXTRA_EXPORTS"
# Remove these extra exports from the wasm module via wasm-snip
Expand All @@ -43,6 +44,7 @@ EXTRA_IMPORTS=$(
if [ -z "$EXTRA_IMPORTS" ]
then
echo "No extra imports to remove"
cp ./build-staging/module_exports.wasm ./build-staging/module_exports_imports.wasm
else
echo "Removing extra imports: $EXTRA_IMPORTS"
# Remove these extra imports from the wasm module via wasm-snip
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
export * from "./moduleNeedsTypes";
export * from "./moduleNeedsImportedTypes";
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
/* eslint-disable @typescript-eslint/naming-convention */
import {
Abi,
ImportedEnumDefinition,
ImportedEnvDefinition,
ImportedModuleDefinition,
ImportedObjectDefinition,
MethodDefinition,
ModuleDefinition,
} from "@polywrap/wrap-manifest-types-js";
import { AbiTransforms } from "@polywrap/schema-parse";

interface ImportedTypesState {
importedTypes: Map<string, string>;
}

interface ModuleNeedsImportedTypesState extends ImportedTypesState {
needsImportedNamespaces: Set<string>;
}

export function extractImportedTypes(): AbiTransforms {
const state: ImportedTypesState = {
importedTypes: new Map(),
};

return {
enter: {
ImportedEnumDefinition: (def: ImportedEnumDefinition) => {
state.importedTypes = state.importedTypes.set(def.type, def.namespace);
return def;
},
ImportedEnvDefinition: (def: ImportedEnvDefinition) => {
state.importedTypes = state.importedTypes.set(def.type, def.namespace);
return def;
},
ImportedModuleDefinition: (def: ImportedModuleDefinition) => {
state.importedTypes = state.importedTypes.set(def.type, def.namespace);
return def;
},
ImportedObjectDefinition: (def: ImportedObjectDefinition) => {
state.importedTypes = state.importedTypes.set(def.type, def.namespace);
return def;
},
},
leave: {
Abi(abi: Abi) {
return {
...abi,
_importedTypes: state.importedTypes,
};
},
},
};
}

export function extractNeededImportedNamespaces(): AbiTransforms {
const state: ModuleNeedsImportedTypesState = {
importedTypes: new Map(),
needsImportedNamespaces: new Set(),
};

return {
enter: {
Abi: (abi: Abi) => {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
state.importedTypes = abi._importedTypes;
return abi;
},
MethodDefinition: (def: MethodDefinition) => {
if (def.arguments && def.arguments.length > 0) {
for (const arg of def.arguments) {
const argType = arg.type;
const importNamespace = state.importedTypes?.get(argType);
if (importNamespace) {
state.needsImportedNamespaces?.add(importNamespace);
}
}
}

if (def.return) {
const returnType = def.return.type;
const importNamespace = state.importedTypes?.get(returnType);
if (importNamespace) {
state.needsImportedNamespaces?.add(importNamespace);
}
}
return def;
},
},
leave: {
Abi: (abi: Abi) => {
return {
...abi,
_needsImportedNamespaces: state.needsImportedNamespaces,
};
},
},
};
}

export function needsImportedNamespaces(): AbiTransforms {
const state: ModuleNeedsImportedTypesState = {
importedTypes: new Map(),
needsImportedNamespaces: new Set(),
};

return {
enter: {
Abi: (abi: Abi) => {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
state.needsImportedNamespaces = abi._needsImportedNamespaces;
return abi;
},
},
leave: {
ModuleDefinition: (def: ModuleDefinition) => {
const needsImportedNamespaces = Array.from(
state.needsImportedNamespaces
);
return {
...def,
needsImportedNamespaces,
};
},
},
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,20 @@ import { AbiTransforms } from "@polywrap/schema-parse";
interface ModuleNeedsTypesState {
moduleDefinition?: ModuleDefinition;
needsTypes?: boolean;
importedTypes?: Map<string, string>;
}

export function moduleNeedsTypes(): AbiTransforms {
const state: ModuleNeedsTypesState = {};

return {
enter: {
Abi: (abi) => {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
state.importedTypes = abi._importedTypes;
return abi;
},
ModuleDefinition: (def: ModuleDefinition) => {
state.moduleDefinition = def;
state.needsTypes = false;
Expand All @@ -29,7 +36,11 @@ export function moduleNeedsTypes(): AbiTransforms {

if (def.return) {
const returnType = def.return.type;
if (!isBaseType(returnType) && !isBuiltInType(returnType)) {
if (
!isBaseType(returnType) &&
!isBuiltInType(returnType) &&
!state.importedTypes?.has(returnType)
) {
state.needsTypes = true;
}
}
Expand Down
3 changes: 3 additions & 0 deletions packages/schema/bind/src/bindings/golang/wasm/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,9 @@ function applyTransforms(abi: Abi): Abi {
extendType(Functions),
addFirstLast,
toPrefixedGraphQLType,
Transforms.extractImportedTypes(),
Transforms.extractNeededImportedNamespaces(),
Transforms.needsImportedNamespaces(),
Transforms.moduleNeedsTypes(),
];

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ func serialize{{#toUpper}}{{type}}{{/toUpper}}(value *{{#toUpper}}{{type}}{{/toU
func write{{#toUpper}}{{type}}{{/toUpper}}(writer msgpack.Write, value *{{#toUpper}}{{type}}{{/toUpper}}) {
writer.WriteMapLength({{properties.length}})
{{#properties}}
writer.Context().Push("{{#toUpper}}{{#handleKeywords}}{{name}}{{/handleKeywords}}{{/toUpper}}", "{{#toWasm}}{{toGraphQLType}}{{/toWasm}}", "writing property")
writer.WriteString("{{#toUpper}}{{#handleKeywords}}{{name}}{{/handleKeywords}}{{/toUpper}}")
writer.Context().Push("{{#handleKeywords}}{{name}}{{/handleKeywords}}", "{{#toWasm}}{{toGraphQLType}}{{/toWasm}}", "writing property")
writer.WriteString("{{#handleKeywords}}{{name}}{{/handleKeywords}}")
{{#scalar}}
{{> serialize_scalar}}
{{/scalar}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ func serialize{{#toUpper}}{{type}}{{/toUpper}}(value *{{#toUpper}}{{type}}{{/toU
func write{{#toUpper}}{{type}}{{/toUpper}}(writer msgpack.Write, value *{{#toUpper}}{{type}}{{/toUpper}}) {
writer.WriteMapLength({{properties.length}})
{{#properties}}
writer.Context().Push("{{#toUpper}}{{#handleKeywords}}{{name}}{{/handleKeywords}}{{/toUpper}}", "{{#toWasm}}{{toGraphQLType}}{{/toWasm}}", "writing property")
writer.WriteString("{{#toUpper}}{{#handleKeywords}}{{name}}{{/handleKeywords}}{{/toUpper}}")
writer.Context().Push("{{#handleKeywords}}{{name}}{{/handleKeywords}}", "{{#toWasm}}{{toGraphQLType}}{{/toWasm}}", "writing property")
writer.WriteString("{{#handleKeywords}}{{name}}{{/handleKeywords}}")
{{#scalar}}
{{> serialize_scalar}}
{{/scalar}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,22 @@ package {{#pkgName}}{{#toSnakeCase}}{{namespace}}{{/toSnakeCase}}{{/pkgName}}
{{/arguments}}
{{/makeImports}}
{{#methods}}
type Args{{#toUpper}}{{name}}{{/toUpper}} struct {
type {{#toUpper}}{{namespace}}{{/toUpper}}_Args{{#toUpper}}{{name}}{{/toUpper}} struct {
{{#stuctProps}}
{{#arguments}}
{{#toUpper}}{{#handleKeywords}}{{name}}{{/handleKeywords}}{{/toUpper}} {{#toWasm}}{{toGraphQLType}}{{/toWasm}} `json:"{{name}}"`
{{/arguments}}
{{/stuctProps}}
}

func Serialize{{#toUpper}}{{name}}{{/toUpper}}Args(value *Args{{#toUpper}}{{name}}{{/toUpper}}) []byte {
func Serialize{{#toUpper}}{{namespace}}{{/toUpper}}_{{#toUpper}}{{name}}{{/toUpper}}Args(value *{{#toUpper}}{{namespace}}{{/toUpper}}_Args{{#toUpper}}{{name}}{{/toUpper}}) []byte {
ctx := msgpack.NewContext("Serializing module-type: {{#toUpper}}{{name}}{{/toUpper}}")
encoder := msgpack.NewWriteEncoder(ctx)
Write{{#toUpper}}{{name}}{{/toUpper}}Args(encoder, value)
Write{{#toUpper}}{{namespace}}{{/toUpper}}_{{#toUpper}}{{name}}{{/toUpper}}Args(encoder, value)
return encoder.Buffer()
}

func Write{{#toUpper}}{{name}}{{/toUpper}}Args(writer msgpack.Write, value *Args{{#toUpper}}{{name}}{{/toUpper}}) {
func Write{{#toUpper}}{{namespace}}{{/toUpper}}_{{#toUpper}}{{name}}{{/toUpper}}Args(writer msgpack.Write, value *{{#toUpper}}{{namespace}}{{/toUpper}}_Args{{#toUpper}}{{name}}{{/toUpper}}) {
{{#arguments.length}}
writer.WriteMapLength({{arguments.length}})
{{/arguments.length}}
Expand Down Expand Up @@ -54,7 +54,7 @@ func Write{{#toUpper}}{{name}}{{/toUpper}}Args(writer msgpack.Write, value *Args
{{/arguments}}
}

func Deserialize{{#toUpper}}{{name}}{{/toUpper}}Result(argsBuf []byte) {{#return}}{{#toWasm}}{{toGraphQLType}}{{/toWasm}}{{/return}} {
func Deserialize{{#toUpper}}{{namespace}}{{/toUpper}}_{{#toUpper}}{{name}}{{/toUpper}}Result(argsBuf []byte) {{#return}}{{#toWasm}}{{toGraphQLType}}{{/toWasm}}{{/return}} {
ctx := msgpack.NewContext("Deserializing module-type: {{#toUpper}}{{name}}{{/toUpper}}")
reader := msgpack.NewReadDecoder(ctx, argsBuf)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,16 @@ import (

{{^isInterface}}
{{#methods}}
func {{#toUpper}}{{name}}{{/toUpper}}(args *Args{{#toUpper}}{{name}}{{/toUpper}}) ({{#return}}{{#toWasm}}{{toGraphQLType}}{{/toWasm}}{{/return}}, error) {
argsBuf := Serialize{{#toUpper}}{{name}}{{/toUpper}}Args(args)
func {{#toUpper}}{{namespace}}{{/toUpper}}_{{#toUpper}}{{name}}{{/toUpper}}(args *{{#toUpper}}{{namespace}}{{/toUpper}}_Args{{#toUpper}}{{name}}{{/toUpper}}) ({{#return}}{{#toWasm}}{{toGraphQLType}}{{/toWasm}}{{/return}}, error) {
argsBuf := Serialize{{#toUpper}}{{namespace}}{{/toUpper}}_{{#toUpper}}{{name}}{{/toUpper}}Args(args)
var (
err error
raw []byte
data {{#return}}{{#toWasm}}{{toGraphQLType}}{{/toWasm}}{{/return}}
)
raw, err = wrap.WrapSubinvoke("{{uri}}", "{{name}}", argsBuf)
if err == nil {
data = Deserialize{{#toUpper}}{{name}}{{/toUpper}}Result(raw)
data = Deserialize{{#toUpper}}{{namespace}}{{/toUpper}}_{{#toUpper}}{{name}}{{/toUpper}}Result(raw)
}
return data, err
}
Expand All @@ -28,16 +28,16 @@ func {{#toUpper}}{{name}}{{/toUpper}}(args *Args{{#toUpper}}{{name}}{{/toUpper}}
{{/isInterface}}
{{#isInterface}}
{{#methods}}
func {{#toUpper}}{{name}}{{/toUpper}}(uri string, args *Args{{#toUpper}}{{name}}{{/toUpper}}) ({{#return}}{{#toWasm}}{{toGraphQLType}}{{/toWasm}}{{/return}}, error) {
argsBuf := Serialize{{#toUpper}}{{name}}{{/toUpper}}Args(args)
func {{#toUpper}}{{namespace}}{{/toUpper}}_{{#toUpper}}{{name}}{{/toUpper}}(uri string, args *{{#toUpper}}{{namespace}}{{/toUpper}}_Args{{#toUpper}}{{name}}{{/toUpper}}) ({{#return}}{{#toWasm}}{{toGraphQLType}}{{/toWasm}}{{/return}}, error) {
argsBuf := Serialize{{#toUpper}}{{namespace}}{{/toUpper}}_{{#toUpper}}{{name}}{{/toUpper}}Args(args)
var (
err error
raw []byte
data {{#return}}{{#toWasm}}{{toGraphQLType}}{{/toWasm}}{{/return}}
)
raw, err = wrap.WrapSubinvokeImplementation("{{uri}}", uri, "{{name}}", argsBuf)
if err == nil {
data = Deserialize{{#toUpper}}{{name}}{{/toUpper}}Result(raw)
data = Deserialize{{#toUpper}}{{namespace}}{{/toUpper}}_{{#toUpper}}{{name}}{{/toUpper}}Result(raw)
}
return data, err
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ func serialize{{#toUpper}}{{type}}{{/toUpper}}(value *{{#toUpper}}{{type}}{{/toU
func write{{#toUpper}}{{type}}{{/toUpper}}(writer msgpack.Write, value *{{#toUpper}}{{type}}{{/toUpper}}) {
writer.WriteMapLength({{properties.length}})
{{#properties}}
writer.Context().Push("{{#toUpper}}{{#handleKeywords}}{{name}}{{/handleKeywords}}{{/toUpper}}", "{{#toWasm}}{{toGraphQLType}}{{/toWasm}}", "writing property")
writer.WriteString("{{#toUpper}}{{#handleKeywords}}{{name}}{{/handleKeywords}}{{/toUpper}}")
writer.Context().Push("{{#handleKeywords}}{{name}}{{/handleKeywords}}", "{{#toWasm}}{{toGraphQLType}}{{/toWasm}}", "writing property")
writer.WriteString("{{#handleKeywords}}{{name}}{{/handleKeywords}}")
{{#scalar}}
{{> serialize_scalar}}
{{/scalar}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import "github.com/polywrap/go-wrap/wrap"
{{#capabilities}}
{{#getImplementations}}
{{#enabled}}
func {{#toUpper}}{{namespace}}{{/toUpper}}Implementations() []string {
func {{#toUpper}}{{namespace}}{{/toUpper}}_GetImplementations() []string {
return wrap.WrapGetImplementations("{{uri}}")
}
{{/enabled}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ package module_wrapped
{{#needsTypes}}
. {{goImport}}/module/wrap/types,
{{/needsTypes}}
{{#importedTypes}}
. {{goImport}}/module/wrap/imported/{{#pkgName}}{{#toSnakeCase}}{{namespace}}{{/toSnakeCase}}{{/pkgName}},
{{/importedTypes}}
{{#needsImportedNamespaces}}
. {{goImport}}/module/wrap/imported/{{#pkgName}}{{#toSnakeCase}}{{.}}{{/toSnakeCase}}{{/pkgName}},
{{/needsImportedNamespaces}}
{{#methods}}
{{#return}}{{#toWasm}}{{toGraphQLType}}{{/toWasm}}{{/return}},
{{/methods}}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package module_wrapped
{{#makeImports}}
{{#methods}}{{#env}}github.com/polywrap/go-wrap/wrap,{{#needsTypes}}. {{goImport}}/module/wrap/types,{{/needsTypes}}{{/env}}{{/methods}}
{{#methods}}{{#env}}github.com/polywrap/go-wrap/wrap,. {{goImport}}/module/wrap/types,{{/env}}{{/methods}}
{{goImport}}/module as methods,
{{/makeImports}}
{{#methods}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ func serialize{{#toUpper}}{{type}}{{/toUpper}}(value *{{#toUpper}}{{type}}{{/toU
func write{{#toUpper}}{{type}}{{/toUpper}}(writer msgpack.Write, value *{{#toUpper}}{{type}}{{/toUpper}}) {
writer.WriteMapLength({{properties.length}})
{{#properties}}
writer.Context().Push("{{#toUpper}}{{#handleKeywords}}{{name}}{{/handleKeywords}}{{/toUpper}}", "{{#toWasm}}{{toGraphQLType}}{{/toWasm}}", "writing property")
writer.WriteString("{{#toUpper}}{{#handleKeywords}}{{name}}{{/handleKeywords}}{{/toUpper}}")
writer.Context().Push("{{#handleKeywords}}{{name}}{{/handleKeywords}}", "{{#toWasm}}{{toGraphQLType}}{{/toWasm}}", "writing property")
writer.WriteString("{{#handleKeywords}}{{name}}{{/handleKeywords}}")
{{#scalar}}
{{> serialize_scalar}}
{{/scalar}}
Expand Down
4 changes: 4 additions & 0 deletions packages/templates/polywrap.wasm-golang-linked.build.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
format: 0.3.0
strategies:
image:
name: template-wasm-go
9 changes: 9 additions & 0 deletions packages/templates/polywrap.wasm-golang-linked.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
format: 0.3.0
project:
name: template-wasm-go
type: wasm/golang
source:
module: ./go.mod
schema: ./polywrap.graphql
extensions:
build: ./polywrap.wasm-golang-linked.build.yaml
Binary file not shown.
2 changes: 1 addition & 1 deletion packages/templates/wasm/golang/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ module example.com/template-wasm-go

go 1.18

require github.com/polywrap/go-wrap wrap-0.1
require github.com/polywrap/go-wrap wrap-0.1

require github.com/valyala/fastjson v1.6.3 // indirect
4 changes: 4 additions & 0 deletions packages/templates/wasm/golang/go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
github.com/polywrap/go-wrap v0.0.0-20230712212127-6895977d63c2 h1:+O3G/996rX4SMlJNFA9AIjPSyrInzOEVb7PFOT96G9A=
github.com/polywrap/go-wrap v0.0.0-20230712212127-6895977d63c2/go.mod h1:rxqhIFKUzn/M46+zjnA1RHlCzLGQn2BiLWalezhLj/k=
github.com/valyala/fastjson v1.6.3 h1:tAKFnnwmeMGPbwJ7IwxcTPCNr3uIzoIj3/Fh90ra4xc=
github.com/valyala/fastjson v1.6.3/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY=
Loading