javascript

package
v0.0.29 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 24, 2025 License: MIT Imports: 7 Imported by: 0

Documentation

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Config

type Config struct {
	EnableModules     bool
	EnableConsoleLog  bool
	EnableNodeModules bool
	CustomModules     map[string]interface{}
}

Config holds configuration for the JavaScript evaluator

func DefaultConfig

func DefaultConfig() Config

DefaultConfig returns a default configuration for JavaScript evaluation

type Evaluator

type Evaluator struct {
	// contains filtered or unexported fields
}

Evaluator implements the REPL evaluator interface for JavaScript

Example
package main

import (
	"context"
	"fmt"
	"log"

	"github.com/go-go-golems/bobatea/pkg/repl/evaluators/javascript"
)

func main() {
	// Create a JavaScript evaluator with default configuration
	evaluator, err := javascript.NewWithDefaults()
	if err != nil {
		log.Fatal(err)
	}

	ctx := context.Background()

	// Basic JavaScript evaluation
	result, err := evaluator.Evaluate(ctx, "2 + 3")
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("Result: %s\n", result)

	// Variable assignment and retrieval
	_, err = evaluator.Evaluate(ctx, "let name = 'World'")
	if err != nil {
		log.Fatal(err)
	}

	result, err = evaluator.Evaluate(ctx, "name")
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("Name: %s\n", result)

	// Function definition and call
	_, err = evaluator.Evaluate(ctx, "function greet(name) { return 'Hello, ' + name + '!'; }")
	if err != nil {
		log.Fatal(err)
	}

	result, err = evaluator.Evaluate(ctx, "greet(name)")
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("Greeting: %s\n", result)

}
Output:

Result: 5
Name: World
Greeting: Hello, World!
Example (CustomConfiguration)
package main

import (
	"context"
	"fmt"
	"log"

	"github.com/go-go-golems/bobatea/pkg/repl/evaluators/javascript"
)

func main() {
	// Create a JavaScript evaluator with custom configuration
	config := javascript.Config{
		EnableModules:     true,
		EnableConsoleLog:  true,
		EnableNodeModules: true,
		CustomModules: map[string]interface{}{
			"math": map[string]interface{}{
				"pi":  3.14159,
				"add": func(a, b float64) float64 { return a + b },
			},
		},
	}

	evaluator, err := javascript.New(config)
	if err != nil {
		log.Fatal(err)
	}

	ctx := context.Background()

	// Use custom module
	result, err := evaluator.Evaluate(ctx, "math.pi")
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("Pi: %s\n", result)

	result, err = evaluator.Evaluate(ctx, "math.add(10, 5)")
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("Addition: %s\n", result)

}
Output:

Pi: 3.14159
Addition: 15
Example (InterfaceProperties)
package main

import (
	"fmt"
	"log"

	"github.com/go-go-golems/bobatea/pkg/repl/evaluators/javascript"
)

func main() {
	evaluator, err := javascript.NewWithDefaults()
	if err != nil {
		log.Fatal(err)
	}

	// Interface properties
	fmt.Printf("Name: %s\n", evaluator.GetName())
	fmt.Printf("Prompt: %s\n", evaluator.GetPrompt())
	fmt.Printf("File Extension: %s\n", evaluator.GetFileExtension())
	fmt.Printf("Supports Multiline: %t\n", evaluator.SupportsMultiline())

}
Output:

Name: JavaScript
Prompt: js>
File Extension: .js
Supports Multiline: true

func New

func New(config Config) (*Evaluator, error)

New creates a new JavaScript evaluator with the given configuration

func NewWithDefaults

func NewWithDefaults() (*Evaluator, error)

NewWithDefaults creates a new JavaScript evaluator with default configuration

func (*Evaluator) Evaluate

func (e *Evaluator) Evaluate(ctx context.Context, code string) (string, error)

Evaluate executes the given JavaScript code and returns the result

func (*Evaluator) EvaluateStream added in v0.0.29

func (e *Evaluator) EvaluateStream(ctx context.Context, code string, emit func(repl.Event)) error

EvaluateStream adapts Evaluate to the streaming interface used by the timeline-based REPL.

func (*Evaluator) GetAvailableModules

func (e *Evaluator) GetAvailableModules() []string

GetAvailableModules returns a list of available modules

func (*Evaluator) GetConfig

func (e *Evaluator) GetConfig() Config

GetConfig returns the current configuration

func (*Evaluator) GetFileExtension

func (e *Evaluator) GetFileExtension() string

GetFileExtension returns the file extension for external editor

func (*Evaluator) GetHelpText

func (e *Evaluator) GetHelpText() string

GetHelpText returns help text for JavaScript evaluation

func (*Evaluator) GetName

func (e *Evaluator) GetName() string

GetName returns the name of this evaluator

func (*Evaluator) GetPrompt

func (e *Evaluator) GetPrompt() string

GetPrompt returns the prompt string for JavaScript evaluation

func (*Evaluator) GetRuntime

func (e *Evaluator) GetRuntime() *goja.Runtime

GetRuntime returns the underlying Goja runtime (for advanced usage)

func (*Evaluator) GetVariable

func (e *Evaluator) GetVariable(name string) (interface{}, error)

GetVariable gets a variable from the JavaScript runtime

func (*Evaluator) IsValidCode

func (e *Evaluator) IsValidCode(code string) bool

IsValidCode checks if the given code is syntactically valid JavaScript

func (*Evaluator) LoadScript

func (e *Evaluator) LoadScript(ctx context.Context, filename string, content string) error

LoadScript loads and executes a JavaScript file

func (*Evaluator) Reset

func (e *Evaluator) Reset() error

Reset resets the JavaScript runtime to a clean state

func (*Evaluator) SetVariable

func (e *Evaluator) SetVariable(name string, value interface{}) error

SetVariable sets a variable in the JavaScript runtime

func (*Evaluator) SupportsMultiline

func (e *Evaluator) SupportsMultiline() bool

SupportsMultiline returns true since JavaScript supports multiline input

func (*Evaluator) UpdateConfig

func (e *Evaluator) UpdateConfig(config Config) error

UpdateConfig updates the evaluator configuration

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL