(sort func(nodes map[string]bindings.Node) []bindings.Node)
| 476 | } |
| 477 | |
| 478 | func (ts *Typescript) SerializeInOrder(sort func(nodes map[string]bindings.Node) []bindings.Node) (string, error) { |
| 479 | if ts.serialized { |
| 480 | return "", fmt.Errorf("already serialized, create a new TS object to serialize again") |
| 481 | } |
| 482 | // Even if it fails, do not allow calling this function again. |
| 483 | ts.serialized = true |
| 484 | |
| 485 | vm, err := bindings.New() |
| 486 | if err != nil { |
| 487 | return "", fmt.Errorf("failed to create typescript bindings: %w", err) |
| 488 | } |
| 489 | |
| 490 | nodes := make(map[string]bindings.Node) |
| 491 | for k, v := range ts.typescriptNodes { |
| 492 | nodes[k] = v.Node |
| 493 | } |
| 494 | order := sort(nodes) |
| 495 | |
| 496 | var str strings.Builder |
| 497 | str.WriteString("// Code generated by 'guts'. DO NOT EDIT.\n\n") |
| 498 | |
| 499 | ts.sortImports() |
| 500 | for _, imp := range ts.imports { |
| 501 | obj, err := vm.ToTypescriptNode(imp) |
| 502 | if err != nil { |
| 503 | return "", fmt.Errorf("convert import %q: %w", imp.Module, err) |
| 504 | } |
| 505 | |
| 506 | text, err := vm.SerializeToTypescript(obj) |
| 507 | if err != nil { |
| 508 | return "", fmt.Errorf("serialize import %q: %w", imp.Module, err) |
| 509 | } |
| 510 | str.WriteString(text + "\n") |
| 511 | } |
| 512 | if len(ts.imports) > 0 { |
| 513 | str.WriteString("\n") |
| 514 | } |
| 515 | |
| 516 | for k, v := range order { |
| 517 | obj, err := vm.ToTypescriptNode(v) |
| 518 | if err != nil { |
| 519 | return "", fmt.Errorf("convert node %q: %w", k, err) |
| 520 | } |
| 521 | |
| 522 | text, err := vm.SerializeToTypescript(obj) |
| 523 | if err != nil { |
| 524 | return "", fmt.Errorf("serialize to typescript: %w", err) |
| 525 | } |
| 526 | str.WriteString(text + "\n\n") |
| 527 | } |
| 528 | return str.String(), nil |
| 529 | |
| 530 | } |
| 531 | |
| 532 | func (ts *Typescript) parse(obj types.Object) error { |
| 533 | objectIdentifier := ts.parsed.Identifier(obj) |
no test coverage detected