{{$module := .}} {{- $runtime := $module.Runtime}} {{- $models := (fixext $module.ModelsFile)}} {{- $useInterfaces := .UseInterfaces}} {{- $imports := $module.Imports -}} // Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL // This file is automatically generated. DO NOT EDIT {{if not $useInterfaces}} // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import { Create as $Create } from "{{js $runtime}}"; {{end -}} {{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}} {{- range $model := .Models}} {{- $info := modelinfo $model $useInterfaces }} {{- $template := $info.Template }} {{- if or (hasdoc $model.Decl.Doc) (hasdoc $model.Doc)}} /** {{- if hasdoc $model.Decl.Doc}} {{- jsdoc $model.Decl.Doc.Text ""}}{{if hasdoc $model.Doc}} *{{end}} {{- end}} {{- if hasdoc $model.Doc}} {{- jsdoc $model.Doc.Text ""}} {{- end}} */ {{- end}} {{- if $info.IsEnum}} export enum {{jsid $model.Name}} { /** * The Go zero value for the underlying type of the enum. */ $zero = {{$module.JSDefault $model.Type false}}, {{range $i, $decl := $model.Values}}{{range $j, $spec := $decl}}{{range $k, $value := $spec}} {{- if and (ne $i 0) (eq $j 0) (eq $k 0)}} {{end}} {{- if or (and (eq $j 0) (eq $k 0) (hasdoc $value.Decl.Doc)) (and (eq $k 0) (hasdoc $value.Spec.Doc))}} {{- if gt $j 0}} {{end}} /** {{- if and (eq $j 0) (eq $k 0) (hasdoc $value.Decl.Doc)}} {{- jsdoc $value.Decl.Doc.Text " "}}{{if and (eq $k 0) (hasdoc $value.Spec.Doc)}} *{{end}} {{- end}} {{- if and (eq $k 0) (hasdoc $value.Spec.Doc)}} {{- jsdoc $value.Spec.Doc.Text " "}} {{- end}} */ {{- end}} {{jsid $value.Name}} = {{jsvalue $value.Value}}, {{- end}}{{end}}{{end}} }; {{else if $info.IsClassAlias}} export const {{jsid $model.Name}} = {{if istpalias $model.Type -}} {{$module.JSType (unalias $model.Type).Origin}}; {{- else -}} {{$module.JSType $model.Type.Origin}}; {{- end}} {{- if or (hasdoc $model.Decl.Doc) (hasdoc $model.Doc)}} /** {{- if hasdoc $model.Decl.Doc}} {{- jsdoc $model.Decl.Doc.Text ""}}{{if hasdoc $model.Doc}} *{{end}} {{- end}} {{- if hasdoc $model.Doc}} {{- jsdoc $model.Doc.Text ""}} {{- end}} */ {{- end}} export type {{jsid $model.Name}}{{$template.ParamList}} = {{$module.JSType $model.Type}}; {{else if $info.IsTypeAlias}} export type {{jsid $model.Name}}{{$template.ParamList}} = {{$module.JSType $model.Type}}; {{- if $info.HasValues}} /** * Predefined constants for type {{jsid $model.Name}}. * @namespace */ export const {{jsid $model.Name}} = { {{- range $i, $decl := $model.Values}}{{range $j, $spec := $decl}}{{range $k, $value := $spec}} {{- if and (ne $i 0) (eq $j 0) (eq $k 0)}} {{end}} {{- if or (and (eq $j 0) (eq $k 0) (hasdoc $value.Decl.Doc)) (and (eq $k 0) (hasdoc $value.Spec.Doc))}} {{- if gt $j 0}} {{end}} /** {{- if and (eq $j 0) (eq $k 0) (hasdoc $value.Decl.Doc)}} {{- jsdoc $value.Decl.Doc.Text " "}}{{if and (eq $k 0) (hasdoc $value.Spec.Doc)}} *{{end}} {{- end}} {{- if and (eq $k 0) (hasdoc $value.Spec.Doc)}} {{- jsdoc $value.Spec.Doc.Text " "}} {{- end}} */ {{- end}} {{jsid $value.Name}}: {{jsvalue $value.Value}}, {{- end}}{{end}}{{end}} }; {{- end}} {{else if $info.IsClassOrInterface}} export {{if $info.IsInterface}}interface{{else}}class{{end}} {{jsid $model.Name}}{{$template.ParamList}} { {{- range $i, $decl := $model.Fields}}{{range $j, $field := $decl}} {{- if and (eq $j 0) (hasdoc $field.Decl.Doc)}} {{- if gt $i 0}} {{end}} /** {{- jsdoc $field.Decl.Doc.Text " "}} */ {{- end}} "{{js $field.JsonName}}"{{if $field.Optional}}?{{end}}: {{$module.JSFieldType $field.StructField}}; {{- end}}{{end}} {{- if $info.IsClass}} /** Creates a new {{jsid $model.Name}} instance. */ constructor($$source: Partial<{{jsid $model.Name}}{{$template.ParamList}}> = {}) { {{- range $spec := $model.Fields}}{{range $i, $field := $spec}}{{if not $field.Optional}} if (!("{{js $field.JsonName}}" in $$source)) { this["{{js $field.JsonName}}"] = {{$module.JSDefault $field.Type $field.Quoted}}; } {{- end}}{{end}}{{end}} Object.assign(this, $$source); } /** {{- if $template.ParamList}} * Given creation functions for each type parameter, * returns a creation function for a concrete instance * of the generic class {{jsid $model.Name}}. {{- else}} * Creates a new {{jsid $model.Name}} instance from a string or object. {{- end}} */ static createFrom{{if $template.ParamList}}< {{- range $i, $param := $model.TypeParams}} {{- $param = (typeparam $i $param)}} {{- if gt $i 0}}, {{end -}} {{$param}} = any {{- end}}>{{end}}({{if $template.ParamList}} {{- range $i, $param := $model.TypeParams}} {{- $param = (typeparam $i $param)}} {{- if gt $i 0}}, {{end -}} $$createParam{{$param}}: (source: any) => {{$param}}{{end -}} {{else}}$$source: any = {}{{end}}): {{- if $template.ParamList}} ($$source?: any) =>{{end}} {{jsid $model.Name}}{{$template.ParamList}} { {{- range $i, $spec := $model.Fields}}{{range $j, $field := $spec}} {{- $create := ($module.JSCreateWithParams $field.Type $template.CreateList)}} {{- if ne $create "$Create.Any"}} const $$createField{{$i}}_{{$j}} = {{$create}}; {{- end}} {{- end}}{{end}} {{- $indent := ""}} {{- if $template.ParamList}} {{- $indent = " "}} return ($$source: any = {}) => { {{- end}} {{$indent}}let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source; {{- range $i, $spec := $model.Fields}}{{range $j, $field := $spec}} {{- if $module.NeedsCreate $field.Type}} {{$indent}}if ("{{js $field.JsonName}}" in $$parsedSource) { {{$indent}} $$parsedSource["{{js $field.JsonName}}"] = $$createField{{$i}}_{{$j}}($$parsedSource["{{js $field.JsonName}}"]); {{$indent -}} } {{- end}} {{- end}}{{end}} {{$indent}}return new {{jsid $model.Name}}{{$template.ParamList}}($$parsedSource as Partial<{{jsid $model.Name}}{{$template.ParamList}}>); {{- if $template.ParamList}} }; {{- end}} } {{- end}} } {{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 -}}