5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-08 13:02:24 +08:00
wails/v3/internal/generator/render/templates/service.ts.tmpl
Fabio Massaioli 37673eb24d
[v3] Fix binding generator bugs and prepare for Go 1.24 (#4045)
* Rename predicates source file

* Overhaul and document type predicates

* Fix model collection logic for named types

* Fix map key type rendering

* Fix map creation code

* Fix rendering of structs that implement marshaler interfaces

* Fix type cycle detection to take type args into account

* Fix enum and typeparam field initialisation

* Improve unsupported type warnings

* Remove internal models file

* Deduplicate template code

* Accept generic aliases in static analyser

* Support new `encoding/json` flag `omitzero`

* Handle special cases when rendering generic aliases

* Update npm test dependencies

* Test class aliases and implicit private dependencies

* Test marshaler combinations

* Test map key types

* Remove bad map keys from unrelated tests

* Test service discovery through generic aliases

* Test generic aliases

* Test warning messages

* Disable go1.24 tests

* Update changelog

* Restore rendering of injected lines in index file

* Test directives

* Add wails:ignore directive

* Fix typo

* Move injections to the bottom of service files

* Handle errors from closing files

* Do not emit messages when services define only lifecycle methods

* Add internal directive for services and models

* Update changelog

* Fix error in service templates

* Test internal directive on services/models

* Fix error in index template

* Base testdata updates

* Testdata for class aliases and implicit private dependencies

* Testdata for marshaler combinations

* Testdata for map key types

* Testdata for bad map key fixes

* Add weakly typed enums aka alias constants

* Testdata for enum and typeparam field fixes

* Testdata for generic aliases

* Testdata for warning messages

* Testdata for directives

* Testdata for weakly typed enums

* Update binding example

* Update services example

* Remove go1.24 testdata

* Update cli doc

* Fix analyser tests

* Fix windows tests... hopefully

* go mod tidy on examples

* Update bindings guide

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-02-09 09:44:34 +11:00

100 lines
3.2 KiB
Cheetah

{{$module := .}}
{{- $runtime := $module.Runtime}}
{{- $models := (fixext $module.ModelsFile)}}
{{- $useNames := $module.UseNames}}
{{- $useInterfaces := $module.UseInterfaces}}
{{- $imports := $module.Imports}}
{{- with .Service -}}
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
// This file is automatically generated. DO NOT EDIT
{{if or (hasdoc .Decl.Doc) (hasdoc .Doc)}}
/**
{{- if hasdoc .Decl.Doc}}
{{- jsdoc .Decl.Doc.Text ""}}{{if hasdoc .Doc}}
*{{end}}
{{- end}}
{{- if hasdoc .Doc}}
{{- jsdoc .Doc.Text ""}}
{{- end}}
* @module
*/
{{end}}
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore: Unused imports
import {Call as $Call{{if not $useInterfaces}}, Create as $Create{{end -}} } from "{{js $runtime}}";
{{range $imports.External}}
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore: Unused imports
import * as {{jsimport .}} from "{{js .RelPath}}/{{js $models}}";
{{- end}}{{if $imports.External}}
{{end}}
{{- if $imports.ImportModels}}
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore: Unused imports
import * as $models from "./{{js $models}}";
{{end}}
{{- range .Methods}}
{{- if or (hasdoc .Decl.Doc) (hasdoc .Doc)}}
/**
{{- if hasdoc .Decl.Doc}}
{{- jsdoc .Decl.Doc.Text ""}}{{if hasdoc .Doc}}
*{{end}}
{{- end}}
{{- if .Doc}}
{{- jsdoc .Doc.Text ""}}
{{- end}}
*/
{{- end}}
{{if not .Internal}}export {{end}}function {{.Name}}({{range $i, $param := .Params -}}
{{- if gt $i 0}}, {{end}}
{{- if .Variadic}}...{{end}}
{{- jsparam $i .}}: {{$module.JSType .Type}}{{if .Variadic}}[]{{end}}
{{- end}}): Promise<
{{- if eq 0 (len .Results) -}}
void
{{- else if eq 1 (len .Results)}}
{{- $module.JSType (index .Results 0)}}
{{- else -}}
[{{range $i, $result := .Results}}
{{- if gt $i 0}}, {{end}}
{{- $module.JSType $result}}
{{- end}}]
{{- end}}> & { cancel(): void } {
{{- if $useNames}}
let $resultPromise = $Call.ByName("{{js .FQN}}"
{{- else}}
let $resultPromise = $Call.ByID({{.ID}}
{{- end}}{{range $i, $param := .Params}}, {{jsparam $i .}}{{end}}) as any;
{{- if or $useInterfaces (not .Results) ($module.SkipCreate .Results)}}
return $resultPromise;
{{- else}}
let $typingPromise = $resultPromise.then(($result: any) => {
{{- if eq 1 (len .Results)}}
return {{$module.JSCreate (index .Results 0)}}($result);
{{- else}}
{{- range $i, $type := .Results}}
{{- $create := ($module.JSCreate $type)}}
{{- if ne $create "$Create.Any"}}
$result[{{$i}}] = {{$create}}($result[{{$i}}]);
{{- end}}{{end}}
return $result;
{{- end}}
}) as any;
$typingPromise.cancel = $resultPromise.cancel.bind($resultPromise);
return $typingPromise;
{{- end}}
}
{{end}}
{{- $postponed := $module.PostponedCreates}}
{{- if $postponed}}
// Private type creation functions
{{- range $i, $create := $postponed}}
{{if and (ge (len $create) 16) (eq (slice $create 1 16) "function $$init")}}var {{else}}const {{end -}}
$$createType{{$i}} = {{$create}};
{{- end}}
{{end}}
{{- range .Injections}}
{{.}}
{{- end}}{{if .Injections}}
{{end}}{{end -}}