jsvm

package
v0.0.0-...-47b9678 Latest Latest
Warning

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

Go to latest
Published: Apr 7, 2024 License: MIT Imports: 53 Imported by: 0

Documentation

Overview

Package jsvm implements pluggable utilities for binding a JS goja runtime to the PocketBase instance (loading migrations, attaching to app hooks, etc.).

Example:

jsvm.MustRegister(app, jsvm.Config{
	WatchHooks: true,
})

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func MustRegister

func MustRegister(app core.App, config Config)

MustRegister registers the jsvm plugin in the provided app instance and panics if it fails.

Example usage:

jsvm.MustRegister(app, jsvm.Config{
	OnInit: func(vm *goja.Runtime) {
		// register custom bindings
		vm.Set("myCustomVar", 123)
	}
})

func Register

func Register(app core.App, config Config) error

Register registers the jsvm plugin in the provided app instance.

Types

type Config

type Config struct {
	// OnInit is an optional function that will be called
	// after a JS runtime is initialized, allowing you to
	// attach custom Go variables and functions.
	OnInit func(vm *goja.Runtime)

	// HooksWatch enables auto app restarts when a JS app hook file changes.
	//
	// Note that currently the application cannot be automatically restarted on Windows
	// because the restart process relies on execve.
	HooksWatch bool

	// HooksDir specifies the JS app hooks directory.
	//
	// If not set it fallbacks to a relative "pb_data/../pb_hooks" directory.
	HooksDir string

	// HooksFilesPattern specifies a regular expression pattern that
	// identify which file to load by the hook vm(s).
	//
	// If not set it fallbacks to `^.*(\.pb\.js|\.pb\.ts)$`, aka. any
	// HookdsDir file ending in ".pb.js" or ".pb.ts" (the last one is to enforce IDE linters).
	HooksFilesPattern string

	// HooksPoolSize specifies how many goja.Runtime instances to prewarm
	// and keep for the JS app hooks gorotines execution.
	//
	// Zero or negative value means that it will create a new goja.Runtime
	// on every fired goroutine.
	HooksPoolSize int

	// MigrationsDir specifies the JS migrations directory.
	//
	// If not set it fallbacks to a relative "pb_data/../pb_migrations" directory.
	MigrationsDir string

	// If not set it fallbacks to `^.*(\.js|\.ts)$`, aka. any MigrationDir file
	// ending in ".js" or ".ts" (the last one is to enforce IDE linters).
	MigrationsFilesPattern string

	// TypesDir specifies the directory where to store the embedded
	// TypeScript declarations file.
	//
	// If not set it fallbacks to "pb_data".
	//
	// Note: Avoid using the same directory as the HooksDir when HooksWatch is enabled
	// to prevent unnecessary app restarts when the types file is initially created.
	TypesDir string
}

Config defines the config options of the jsvm plugin.

type FieldMapper

type FieldMapper struct {
}

FieldMapper provides custom mapping between Go and JavaScript property names.

It is similar to the builtin "uncapFieldNameMapper" but also converts all uppercase identifiers to their lowercase equivalent (eg. "GET" -> "get").

func (FieldMapper) FieldName

func (u FieldMapper) FieldName(_ reflect.Type, f reflect.StructField) string

FieldName implements the [FieldNameMapper.FieldName] interface method.

func (FieldMapper) MethodName

func (u FieldMapper) MethodName(_ reflect.Type, m reflect.Method) string

MethodName implements the [FieldNameMapper.MethodName] interface method.

type FormData

type FormData map[string][]any

FormData represents an interface similar to the browser's FormData.

The value of each FormData entry must be a string or *filesystem.File instance.

It is intended to be used together with the JSVM `$http.send` when sending multipart/form-data requests.

func (FormData) Append

func (data FormData) Append(key string, value any)

Append appends a new value onto an existing key inside the current FormData, or adds the key if it does not already exist.

func (FormData) Delete

func (data FormData) Delete(key string)

Delete deletes a key and its value(s) from the current FormData.

func (FormData) Entries

func (data FormData) Entries() [][]any

Entries returns a [key, value] slice pair for each FormData entry.

func (FormData) Get

func (data FormData) Get(key string) any

Get returns the first value associated with a given key from within the current FormData.

If you expect multiple values and want all of them, use the FormData.GetAll method instead.

func (FormData) GetAll

func (data FormData) GetAll(key string) []any

GetAll returns all the values associated with a given key from within the current FormData.

func (FormData) Has

func (data FormData) Has(key string) bool

Has returns whether a FormData object contains a certain key.

func (FormData) Keys

func (data FormData) Keys() []string

Keys returns all keys contained in the current FormData.

func (FormData) Set

func (data FormData) Set(key string, value any)

Set sets a new value for an existing key inside the current FormData, or adds the key/value if it does not already exist.

func (FormData) Values

func (data FormData) Values() []any

Keys returns all values contained in the current FormData.

Directories

Path Synopsis
internal

Jump to

Keyboard shortcuts

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