Skip to content

Commit

Permalink
Added generator for typescript extension host integration test
Browse files Browse the repository at this point in the history
  • Loading branch information
jimmyaxod committed Nov 27, 2023
1 parent a3ef34c commit f030e56
Show file tree
Hide file tree
Showing 11 changed files with 453 additions and 134 deletions.
54 changes: 13 additions & 41 deletions extension/generator/typescript/generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -197,55 +197,27 @@ func (g *Generator) GenerateInterfaces(extensionSchema *extension.Schema, packag

// GenerateTypesTranspiled takes the typescript source for the generated types and transpiles it to javascript
func (g *Generator) GenerateTypesTranspiled(extensionSchema *extension.Schema, packageName string, sourceName string, typescriptSource string) (*Transpiled, error) {
schema, err := extensionSchema.CloneWithDisabledAccessorsValidatorsAndModifiers()
if err != nil {
return nil, err
}

result := api.Transform(typescriptSource, api.TransformOptions{
Loader: api.LoaderTS,
Format: api.FormatCommonJS,
Sourcemap: api.SourceMapExternal,
SourceRoot: sourceName,
TsconfigRaw: tsConfig,
})

if len(result.Errors) > 0 {
var errString strings.Builder
for _, err := range result.Errors {
errString.WriteString(err.Text)
errString.WriteRune('\n')
}
return nil, errors.New(errString.String())
}
if packageName == "" {
packageName = defaultPackageName
signatureSchema := &signature.Schema{
Version: extensionSchema.Version,
Enums: extensionSchema.Enums,
Models: extensionSchema.Models,
}

headerBuf := new(bytes.Buffer)
err = g.templ.ExecuteTemplate(headerBuf, "header.ts.templ", map[string]any{
"generator_version": strings.Trim(scaleVersion.Version(), "v"),
"package_name": packageName,
})
if err != nil {
return nil, err
}
signatureSchema.SetHasLengthValidator(extensionSchema.HasLengthValidator())
signatureSchema.SetHasCaseModifier(extensionSchema.HasCaseModifier())
signatureSchema.SetHasLimitValidator(extensionSchema.HasLimitValidator())
signatureSchema.SetHasRegexValidator(extensionSchema.HasRegexValidator())

declarationBuf := new(bytes.Buffer)
err = g.templ.ExecuteTemplate(declarationBuf, "declaration.ts.templ", map[string]any{
"extension_schema": schema,
"generator_version": strings.TrimPrefix(scaleVersion.Version(), "v"),
"package_name": packageName,
})
st, err := g.signature.GenerateTypesTranspiled(signatureSchema, packageName, sourceName, typescriptSource)
if err != nil {
return nil, err
}

return &Transpiled{
Typescript: []byte(typescriptSource),
Javascript: append(append([]byte(headerBuf.String()+"\n\n"), result.Code...), []byte(fmt.Sprintf("//# sourceMappingURL=%s.map", sourceName))...),
SourceMap: result.Map,
Declaration: []byte(formatTS(declarationBuf.String())),
Typescript: st.Typescript,
Javascript: st.Javascript,
SourceMap: st.SourceMap,
Declaration: st.Declaration,
}, nil
}

Expand Down
93 changes: 0 additions & 93 deletions extension/generator/typescript/templates/declaration.ts.templ

This file was deleted.

23 changes: 23 additions & 0 deletions integration/typescript_ext_tests/host_extension/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// Code generated by scale-extension 0.4.5, DO NOT EDIT.
// output: local-example-latest-host

import { Extension as ExtensionInterface } from "@loopholelabs/scale-extension-interfaces";

export * from "./types";

export declare function New(impl: Interface): ExtensionInterface;

// Interface to the extension impl. This is what the implementor should create

export declare interface Interface {
New(params: Stringval): Example;

World(params: Stringval): Stringval;

}

export declare interface Example {
Hello(params: Stringval): Stringval;

}

108 changes: 108 additions & 0 deletions integration/typescript_ext_tests/host_extension/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions integration/typescript_ext_tests/host_extension/index.js.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit f030e56

Please sign in to comment.