wip
This commit is contained in:
68
plans/BUILTIN.md
Normal file
68
plans/BUILTIN.md
Normal file
@@ -0,0 +1,68 @@
|
||||
# JS Framework
|
||||
|
||||
## Core Interfaces
|
||||
|
||||
### JSValue
|
||||
|
||||
Base interface for any JavaScript value. Provides type-safe access to underlying values.
|
||||
|
||||
```go
|
||||
package jsframe
|
||||
|
||||
import "reflect"
|
||||
|
||||
type JSValue interface {
|
||||
GoType() reflect.Type
|
||||
GoValue() reflect.Value
|
||||
|
||||
SliceValues() ([]JSValue, bool)
|
||||
MapValues() (map[string]JSValue, bool)
|
||||
}
|
||||
```
|
||||
|
||||
**Methods:**
|
||||
|
||||
- `GoType()` - Returns the Go `reflect.Type` of the underlying value
|
||||
- `GoValue()` - Returns the underlying Go value
|
||||
- `SliceValues()` - Returns `(values, true)` if the value is a slice/array, `(nil, false)` otherwise
|
||||
- `MapValues()` - Returns `(values, true)` if the value is an object/map, `(nil, false)` otherwise
|
||||
|
||||
---
|
||||
|
||||
### JSCallable
|
||||
|
||||
Interface for callable values (functions). Extends `JSValue` by adding call semantics and type information.
|
||||
|
||||
```go
|
||||
type JSCallable interface {
|
||||
JSValue
|
||||
|
||||
ArgumentTypes() []TypeInfo
|
||||
ReturnType() TypeInfo
|
||||
|
||||
Call(ctx Context, args ...JSValue) (JSValue, error)
|
||||
}
|
||||
```
|
||||
|
||||
**Methods:**
|
||||
|
||||
- `Call(ctx, args)` - Executes the function with provided arguments. Returns a JSValue and an error. The framework converts errors to JavaScript exceptions.
|
||||
- `ArgumentTypes()` - Returns type information for each argument
|
||||
- `ReturnType()` - Returns type information for the return value
|
||||
|
||||
## Callable / Builtin Registrar
|
||||
|
||||
```go
|
||||
type BuiltinFunc[T any, R any] func(args T) (R, error)
|
||||
|
||||
type BuiltinArgs[T any] interface {
|
||||
T
|
||||
Defaults() T
|
||||
}
|
||||
|
||||
func RegisterBuiltin[T any, R any](name string, fn BuiltinFunc[T, R]) JSCallable
|
||||
```
|
||||
|
||||
## Goja Types <-> Go Types Converstion
|
||||
|
||||
Implement bidirectional conversion between goja values and go values.
|
||||
Reference in New Issue
Block a user